SICP: The only computer science book worth reading twice? (2010)

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).