Structure and Interpretation of Computer Programs

Founder's Bookshelf / Book

Structure and Interpretation of Computer Programs

Book by Harold Abelson & Gerald Jay Sussman

Known simply as SICP or "the wizard book" (for the wizard on its cover), this MIT textbook taught a generation of programmers to think about computation as a way of expressing ideas. It uses Scheme, a dialect of Lisp, and it is less interested in teaching a language than in reshaping how you think about problems.

*post may include affiliate links, view our Disclaimer for more info.

About Structure and Interpretation of Computer Programs

For decades, this was the introductory computer science textbook at MIT. Students who survived it came out thinking differently about what programming actually is. Those who did not survive it switched majors.

Harold Abelson and Gerald Jay Sussman, both MIT professors, wrote SICP in 1985. The book uses Scheme, a minimalist dialect of Lisp, as its teaching language. Scheme was chosen not because it is popular (it is not) or because students would use it in industry (they would not) but because it strips away syntactic noise and lets the ideas show through. When your language has almost no syntax, you spend your time thinking about concepts rather than memorizing rules.

The concepts are what make the book unusual. Most introductory CS courses teach you to write programs. SICP teaches you to think about computation. What does it mean to abstract a pattern? What happens when a function takes another function as input? What is the relationship between data and procedure? How do you build an interpreter inside a language? By the end of the book, students have built a Scheme interpreter in Scheme, which is the kind of recursive exercise that either excites you or makes your head hurt.

The progression is steep. Chapter one covers procedures and substitution. By chapter four, you are building a metacircular evaluator. By chapter five, you are designing a register machine and compiling code. The difficulty curve is the point. Abelson and Sussman are not trying to produce working programmers. They are trying to produce people who understand computation at a level deep enough to invent new languages and paradigms when existing ones fall short.

MIT eventually replaced SICP with a Python-based course, a decision that generated strong feelings in the CS community. The argument for the change: most students needed practical skills more than they needed theoretical depth. The argument against: the theoretical depth is what made MIT graduates different from everyone else.

The full text is available for free on MIT’s website. The book has been translated into multiple languages and has influenced curricula at universities worldwide. It remains the book that serious programmers recommend when someone asks how to go from writing code to understanding computation.

The wizard on the cover is not explained anywhere in the book. Nobody seems to know why it is there.