Thursday, April 26, 2007

We understand complex things by systematically breaking them into successively simpler parts and understanding how these parts fit together locally. Thus, we have different levels of understanding, and each of these levels corresponds to an abstraction of the detail at the level it is composed from. For example, at one level of abstraction, we deal with an integer without considering wehterh it is represented in binary notation or two’s complement, etc., while at deeper levels this representation may be important. At more abstract levels the precise value of the integer is not important except as it related to other data.

--- Donald E Knuth, “Structured Programming with go to Statements,” Computing Surveys, Vol. 6, No. 4, December 1974, p. 291

Knuth goes on to provide an excerpt of Charles L. Baker’s 1957 review of McCracken’s first book on programming:

Break the problem into small, self-contained subroutines, trying at all times to isolate the various sections of coding as much as possible . . . [then] the problem is reduced to many much smaller ones. The truth of this seems very obvious to the experienced coder, yet it is hard to put across to the newcomer.

[Knuth’s citation: Baker, Charles L, “Review of D. D. McCracken, Digital Computer Programming,” Math. Comput. 11 (1957), 298-305]