The power of using abstractions is the essence of intellect, and with every increase in abstraction the intellectual triumphs are enhanced.
This chapter views finding defects from the perspective of computer science. The first section explains the worldview of the computer scientist.
The first section of this chapter describes how programming errors can be classified by linguistic formalisms. It presents the classic definition of the Chomsky hierarchy. It defines each of the levels of the hierarchy and explains the phase of a compiler that might employ techniques from that level.
The second section of this chapter describes how programming errors can be detected by linguistic formalisms. It explains that the front end of a compiler performs lexical, syntactic, and semantic analysis, and not all compilers find the same defects. It considers each of these forms of analysis in turn, noting defects that they can identify.
The third section of this chapter introduces a number of tools that can be used in the process of debugging. This section motivates those who have access to such tools and encourages their use; it motivates those who don’t have access to such tools to get them. In each case, examples are provided for the relevant tools. The common thread that runs through this section is examining the kinds of information required for the tool to work. This section extends the information presented in Chapter 8 on debugging tactics by showing how debugging tools can enhance a programmer’s effectiveness.