SICP: The only computer science book worth reading twice? (2010)
SICP, the classic MIT textbook *Structure and Interpretation of Computer Programs*, is praised by many as a uniquely durable way to learn computer science fundamentals, from abstraction and interpreters to virtual machines. Commenters share practical advice on how to study it today—favoring Scheme via Racket over aging MIT Scheme, and criticizing JavaScript and some “Python versions” as missing key concepts like the metacircular evaluator. Others question its relevance for modern industry work focused on distributed systems, frameworks, and tooling, arguing over whether deep foundational texts like SICP meaningfully improve everyday software engineering or function more as intellectual enrichment.
Access to SICP and implementations
- Free official PDF, original HTML, and a modern HTML5 version are linked.
- Scheme environments: MIT Scheme (works but poorly maintained, native compiler broken on recent macOS) and DrRacket.
- DrRacket has an SICP “teaching language” plus a package that supports the chapter 2 picture language; MIT Scheme no longer does.
- Some posters suggest Racket over MIT Scheme due to maintenance issues; package managers often ship MIT Scheme but it’s effectively unmaintained.
- There are JavaScript and Python “adaptations”; commenters stress these are inspired-by, not true ports, missing key SICP elements like the picture language, metacircular evaluator, and register machine.
What SICP is trying to teach
- Many emphasize SICP as a computer science / abstraction course, not a language or “how to program” course.
- Core ideas highlighted: primitive operations, means of combination, means of abstraction; layers of abstraction up to interpreters, compilers, and virtual machines.
- The book is praised for teaching “procedural epistemology” and making students comfortable with interpreters, VMs, objects, and compilers early.
Debates on relevance and difficulty
- Supporters say mastering SICP puts one conceptually ahead of most engineers and shapes long-term thinking about abstraction, specification, and formal models.
- Several report that a second reading, after industry experience, is far more illuminating than the first.
- Others find it too broad or shallow, or feel they’ve already seen derivative material elsewhere.
- Some are put off by Lisp/Scheme syntax; others argue Scheme is simpler than Haskell/ML and that tools like structured editing reduce the friction.
- One view: it’s a fine beginner book but overrated; another: it’s not neutral, it pushes a particular (OO-flavored functional) style that may not generalize well.
Practicality vs. modern needs
- Multiple comments note that modern work is more about system design, distributed systems, and library integration than standalone program design.
- Some see SICP and similar classics as intellectually valuable but not directly helpful for daily tasks involving databases, queues, cloud infrastructure, etc.
- Others counter that strong foundations in abstraction and first principles are still crucial, even if big-O or VM building is rarely used directly.
Related and successor texts
- Mentioned as complementary or alternative: Concrete Abstractions, How to Design Programs, books on distributed systems, Designing Data-Intensive Applications, modern software design texts, and the later “Software Design for Flexibility,” which receives mixed reviews (ambitious but dense and, to some, overengineered).