I agree that the style of the typical errors differs, although there are definitely cases decided by some stupid mistake made when collecting evidence.
But even when I try and test I don't hit 1 bug per 2000 lines of code. For example, I wrote a collapsing futures library for obj-c [1]. It only has about 1000 lines of non-test non-header code. The code is tested, I've used it in projects, and I re-read it now and then trying to come up with ways to break it. Is it reasonable for me to lay 50:50 odds on a bug being present? I don't think so.
(Are you the owner of the github repo statsd.net [2]? `someGraphiteLine.Equals(null)` returns false but `someGraphiteLine.Equals((GraphiteLine)null)` throws an exception.)
But even when I try and test I don't hit 1 bug per 2000 lines of code. For example, I wrote a collapsing futures library for obj-c [1]. It only has about 1000 lines of non-test non-header code. The code is tested, I've used it in projects, and I re-read it now and then trying to come up with ways to break it. Is it reasonable for me to lay 50:50 odds on a bug being present? I don't think so.
(Are you the owner of the github repo statsd.net [2]? `someGraphiteLine.Equals(null)` returns false but `someGraphiteLine.Equals((GraphiteLine)null)` throws an exception.)
1: https://github.com/Strilanc/ObjC-CollapsingFutures 2: https://github.com/lukevenediger/statsd.net