I've been collecting quotes about programming from all over the internet. Here are a few of my favorites about software bugs.
There has never been an unexpectedly short debugging period in the history of computers.
Any sufficiently advanced bug is indistinguishable from a feature.
If debugging is the process of removing software bugs, then programming must be the process of putting them in.
As soon as we started programming, we found to our surprise that it wasn't as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs.
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?
Beware of bugs in the above code; I have only proved it correct, not tried it.
The major difference between a thing that might go wrong and a thing that cannot possibly go wrong is that when a thing that cannot possibly go wrong goes wrong it usually turns out to be impossible to get at and repair.
In a software project team of 10, there are probably 3 people who produce enough defects to make them net negative producers.
These quotes just underscore the fact that programming is error prone and debugging software is hard. Since this is the case, it always amazes me that more people aren't using unit testing as a part of their daily development cycle.
I'm not saying that every developer should religiously follow every tenet laid out in Kent Beck's Test Driven Development, just that a good set of unit tests is a nice safety net to have. It can give you the confidence you need to change your code, knowing that you can always run the tests to make sure you didn't break anything. If you're not making unit tests a part of your daily routine, then why not?