|
One of the best ways to stifle the growth of an idea is to enshrine it in an educational curriculum. The textbook publishers, certification panels, professional organizations, the folks who write the college entrance exams—once they've settled on an approach, they become frozen in a straitjacket of interlocking constraints that thwarts the ability to evolve. So it is common that students learn the "modern" geography of countries that no longer exist and practice using logarithm tables when calculators have made tables obsolete. And in computer science, beginning courses are trapped in an approach that was already ten years out of date by the time it was canonized in the mid-1980s, when the College Entrance Examination Board adopted an advanced placement exam based on Pascal.[1]
This book points the way out of the trap. It emphasizes programming as a way to express ideas, rather than just a way to get computers to perform tasks.
Julie and Gerry Sussman and I are flattered that Harvey and Wright characterize their revolutionary introduction to computer science as a "prequel" to our text Structure and Interpretation of Computer Programs. When we were writing SICP, we often drew upon the words of the great American computer scientist Alan Perlis (1922-1990). Perlis was one of the designers of the Algol programming language, which, beginning in 1958, established the tradition of formalism and precision that Pascal embodies. Here's what Perlis had to say about this tradition in 1975, nine years before the start of the AP exam:
Algol is a blight. You can't have fun with Algol. Algol is a code that now belongs in a plumber's union. It helps you design correct structures that don't collapse, but it doesn't have any fun in it. There are no pleasures in writing Algol programs. It's a labor of necessity, a preoccupation with the details of tedium.
Harvey and Wright's introduction to computing emerges from a different intellectual heritage, one rooted in research in artificial intelligence and the programming language Lisp. In approaching computing through this book, you'll focus on two essential techniques.
First is the notion of symbolic programming. This means that you deal not only with numbers and letters, but with structured collections of data—a word is a list of characters, a sentence is a list of words, a paragraph is a list of sentences, a story is a list of paragraphs, and so on. You assemble things in terms of natural parts, rather than always viewing data in terms of its tiniest pieces. It's the difference between saying "find the fifth character of the third word in the sentence" and "scan the sentence until you pass two spaces, then scan past four more characters, and return the next character."
The second technique is to work with higher-order functions. That means that you don't only write programs, but rather you write programs that write programs, so you can bootstrap your methods into more powerful methods.
These two techniques belong at center stage in any beginning programming course, which is exactly where Harvey and Wright put them. The underlying principle in both cases is that you work with general parts that you extend and combine in flexible ways, rather than tiny fragments that you fit together into rigid structures.
You should come to this introduction to computing ready to think about ideas rather than details of syntax, ready to design your own languages rather than to memorize the rules of languages other people have designed. This kind of activity changes your outlook not only on programming, but on any area where design plays an important role, because you learn to appreciate the relations among parts rather than always fixating on the individual pieces. To quote Alan Perlis again,
You begin to think in terms of patterns and idioms and phrases, and no longer pick up a trowel and some cement and lay things down brick by brick. The Great Wall, standing for centuries, is a monument. But building it must have been a bore.
Hal Abelson
Cambridge, MA
[1] Since Hal wrote this Foreword, they've switched the AP exam to use Java, but the principle is the same.
[no back] chapter thread NEXT
Brian Harvey,
bh@cs.berkeley.edu