The scientific method’s central motivation is the ubiquity of error—the awareness that mistakes and self-delusion can creep in absolutely anywhere and that the scientist’s effort is primarily expended in recognizing and rooting out error.
In the very early days of computing, Admiral Grace Hopper and her team on the Mark II computer encountered errors in the performance of the computer. Ultimately, a moth was discovered in one of the relays. Admiral Hopper reportedly remarked that they were “debugging” the system. Though the term had been used before in engineering, this event popularized the terms bug and debugging for the causes and solutions, respectively, of errors in computer code and performance.
Bugs are errors in code, and they are ubiquitous reminders of our humanity. That is, computers, by their very nature, do exactly what we tell them to do. Therefore, bugs are typically imperfections in syntax and logic introduced by humans. However careful we are, bugs will be introduced while we are developing code. They begin to be introduced as soon as we start writing a piece of code. For this reason, we must be vigilant, and we must be prepared to fix them when they arise. This chapter will prepare you to recognize, diagnose, and fix bugs using various tools and methods for “debugging” your code. It will do so by introducing:
When, how, and by whom bugs are encountered
Methods of diagnosing bugs
Interactive debugging, for diagnosing bugs ...