Structure and Interpretation of Computer Programs
Programs must be written for people to read, and only incidentally for machines to execute.
A book about ideas, wearing the clothes of a language
SICP uses Scheme, but it is not a book about Scheme. The language is small on purpose, a few rules of evaluation, so that nothing stands between the reader and the ideas. What the book is about is the management of complexity, and it offers three weapons against it.
The three tools
- Procedural abstraction. Name a process, and you may forget how it works and remember only what it does. The black box is not a limitation; it is the point.
- Data abstraction. Build conceptual barriers between how data is used and how it is represented, so that the two may change independently.
- Conventional interfaces. Streams, signals, and generic operations let small parts combine in ways their authors never anticipated.
The acid test of an abstraction is whether you can build on it without looking inside.
The metacircular evaluator
The book's hinge is the moment it writes an interpreter for Scheme in Scheme. Suddenly the distinction between programs and data dissolves: an evaluator is just a program whose data happens to be other programs. To understand a language is to understand the process that gives its symbols meaning, and that process is itself something you can write.
This is where many readers feel the floor shift. The machine stops being a given and becomes a thing you construct.
Why read it now
In an era of enormous frameworks, SICP is a counterweight. It insists that power comes from a few orthogonal ideas combined without ceremony, not from memorizing a library surface. Read it slowly, with a pencil. The exercises are the book.