had lile or no prior formal training in computation, although many have played with computers a bit and a few have had extensive pro- gramming or hardware-design experience. Our design of this introductory computer-science subject reflects two major concerns. First, we want to establish the idea that a com- puter language is not just a way of geing a computer to perform oper- ations but rather that it is a novel formal medium for expressing ideas about methodology. us, programs must be wrien for people to read, and only incidentally for machines to execute. Second, we believe that the essential material to be addressed by a subject at this level is not the syntax of particular programming-language constructs, nor clever algorithms for computing particular functions efficiently, nor even the mathematical analysis of algorithms and the foundations of computing, but rather the techniques used to control the intellectual complexity of large soware systems. Our goal is that students who complete this subject should have a good feel for the elements of style and the aesthetics of programming. ey should have command of the major techniques for controlling complexity in a large system. ey should be capable of reading a 50- page-long program, if it is wrien in an exemplary style. ey should know what not to read, and what they need not understand at any mo- ment. ey should feel secure about modifying a program, retaining the spirit and style of the original author. ese skills are by no means unique to computer programming. e techniques we teach and draw upon are common to all of engineering design. We control complexity by building abstractions that hide details when appropriate. We control complexity by establishing conventional interfaces that enable us to construct systems by combining standard, well-understood pieces in a “mix and match” way. We control complex- xxii
Purchased by unknown, nofirst nolast From: Scampersandbox (scampersandbox.tizrapublisher.com)