Simply Scheme: Introducing Computer Science
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 80s, when the College Entrance Examination Board adopted an advanced placement exam based on Pascal.
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.
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.