- "There are two ways to write error-free programs; only the third one works."
- —Alan J. Perlis
The Origin of Software Bugs
The origin of software bugs begins with the very origin of software development itself. It's clearly not the case that we started out with perfect software and invented ways to screw it up.1 Indeed, the term bug has been in common use within software development from the inception of the discipline2 and is a nomenclature that is used today in every office, garage, dorm room, data center, laboratory, bedroom, cafe, and every other place where software is developed. The first software had bugs, the latest software has bugs, and so have all the bits and bytes in between. Software is not, and likely never will be, bug free.
It's interesting to note that Hopper's moth (see the second footnote) was not a bug actually created by a programmer. Instead, it was an operational hazard that the developers didn't consider in their design. As we shall see in later chapters, a developer's failure to understand, predict, and test potential operational environments continues to be a main source of software failure. Unfortunately, the answer is more complex than closing the windows to keep out the moths. But let's not get ahead of ourselves. We'll talk about programmer-created bugs and bugs that creep in through the operational environment throughout this book.