Structure and Interpretation of Computer Programs - 2nd Edition by Abelson and Sussman
Publisher: The MIT Press
Structure and Interpretation of Computer Programs (SICP) is one of the true programming classics. It's a well-deserved position; SICP is simply the best programming book I've ever read. I made my first pass through it a year ago but deliberately postponed my review; reading SICP completely changed the way I approach programming. Thus, I wanted to get some distance to my reading experience and a chance to judge how much influence SICP would have on my everyday programming. I found that SICP does two things for you: it improves your coding no matter what languages you use at the moment. SICP also serves as a platform for learning new languages and techniques by building a foundation and context for your future learning.
The style and philosophy of SICP is quite unique. As the authors explain, "computer science" is not really a science. It doesn't even have much to do with computers either. Rather, programming is compared to magic. And this mindset permeates the book. Along the way, one of the most powerful design strategies are introduced - wishful thinking; defer the decision about how to represent your data and simply imagine you have the functions you wish you had in order to solve your problem in the simplest possible way. It's all about abstraction and encapsulation. It's also precisely the way I approach design in Test-Driven Development. And this is my main point: in our rapidly evolving technological landscape, SICP is as relevant today as ever. A quarter century old, it's still the best example of truly great code I've come along; it's lessons and principles are timeless and applicable way beyond any contemporary technological fad.
A common critique of SICP is that its techniques aren't applicable to other languages than Scheme. I partly agree; if my problem is better expressed using logical programming constructs, it's not a natural solution to extend, say, Java with a Prolog interpreter. However, I believe such statements are more of an unintended testimony to the power of Lisp than a valid critique of SICP. The gist of SICP is really how to think and reason about programs and computational processes. It's about organizing and abstracting programs, always with an eye towards style and aesthetics, explained in well-written prose. Another strength of SICP is that it presents large and real no-nonsense programs. As we work through the chapters, we get to develop some interesting software like a Scheme interpreter, a compiler and a simulator for digital circuits.
If you think I'm in favour of SICP, you're absolutely right; it's such an excellent work and I highly recommend it. SICP is one of the most important books in our field. The book is freely available online . You'll even find recorded videos of the lectures here . Prepare for some hard work and check it out - you owe it to your programs.
Reviewed July 2009