Book review: “Structure and Interpretation of Computer Programs” by Harold Abelson, Gerald Jay Sussman

May 28th, 2008 at 7:38 am

I have the habit of writing reviews for the books I’ve read, and recently I noticed that something is missing. SICP. I’ve definitely read it, so I should probably write a review, eh ?

The real reason for my writing this review is, however, its Amazon entry. Although the first page shines with glimmering reviews by, no less, Peter Norvig and Paul Graham, the book has a 3.5 star average, which is really inexplicable. Many far inferior books have higher grades ! So I want to make my small contribution by writing SICP the review it deserves, give it the grade it deserves (5 !!!!), and post it to Amazon as well. Lets get started, then.

My first encounter with SICP was in the second year of university, where I took a course named “SICP 1″. I already had working programming experience by that time, so the course wasn’t hard, but I was struck by the beauty of the subjects it taught, by the Scheme language it used and by the long and interesting homework assignments it had. This course woke my curiosity about functional programming, and the Lisp family of languages in particular.

A few years later, with much more experience behind my back, I’ve decided to tackle SICP seriously and read the whole book, solving the vast majority of the exercises. This endeavor took about 10 months, and I enjoyed it immensely. I think SICP is a wonderful book, a seminal work in the field of programming. It is one of those rare books every programmer should read. In this review I’ll try to explain why.

In contrast with most introductory books about programming that just teach you a language, SICP takes a far better approach. The main goal of the authors is not to teach Scheme, it is to teach programming. From the beginning, the book takes an integrative path, where the basic axioms of programming are presented, and later are fortified with examples and exercises. SICP teaches about computational processes – iterative and recursive. How to use them best in each situation, and how to implement them. It also explains abstraction by functional composition. These are topics rarely presented in programming books, but SICP puts them rightly in the first chapter, because they are the real stuff programming is based on.

The example programs developed in the book are real, large, and exciting. You’ll get to develop a powerful picture language, a generic object-oriented arithmetic package including complex and polynomial arithmetic, a simulator for digital circuits, a symbolic differentiation package, an interpreter for Scheme written in Scheme, an interpreter for a logic programming language similar to Prolog, a virtual machine for a simplified pseudo-assembly DSL, an interpreter for Scheme written in this pseudo-assembly, and finally a compiler from Scheme to the assembly language. All these examples are real, well-thought out exercises for skill, taken from beginning to a very complete end. In no other book such a wealth of topics is addressed in an accessible manner.

A word about exercises in SICP. They are numerous, some of them are hard, but the exercises are the best way to really understand what the book tries to teach. In a manner, they’re as integral part of the book as the text itself. The exercises are very well prepared and lead the reader through the examples coded by the authors into greater understanding of the topics taught. At times, it feels like the exercises are specifically designed to force you to think about the essence of the topics, and not just grasp them superficially.

SICP commonly suffers from the criticism that it’s too hard for beginners. Maybe this criticism is rightful, and universities should give a simpler introductory course to programming before SICP. But this is an aspect of the educational systems, not pertaining to the book itself. I wouldn’t know, I never read SICP as a beginner. However it is being taught, SICP is an amazing book. It is by far the best programming book I have ever laid by hands on, and I seriously doubt that it will be surpassed any time soon. Reading SICP will enlighten you as a programmer, and make you a better one. I can’t imagine one programmer who won’t gain something important by reading SICP.

Related posts:

  1. SICP – conclusion
  2. Book review: “Countdown to Spanish” by Gail Stein
  3. SICP – a midway recap
  4. Book review: “The Ruby way” by Hal Fulton
  5. “TPJ’s Computer Science & Perl Programming” ed. Jon Orwant

14 Responses to “Book review: “Structure and Interpretation of Computer Programs” by Harold Abelson, Gerald Jay Sussman”

  1. TransliterationNo Gravatar Says:

    Hello Eli! Nice review I liked it.The book has now at average 3.5. I think too that it deserves more. I just started to read it and it a please to read. I’ll comment once again when I’m done with reading.

  2. moNo Gravatar Says:

    Hi. I will be starting my CS course in uni soon, however i have no backaround numerous message boards trying to get a good head start before my term begins in uni. Based on my case, would you recommend this book to a adsolute beginner?

  3. elibenNo Gravatar Says:

    mo,

    If you have absolutely no programming experience, this book can be a tad difficult for you.

  4. SameerNo Gravatar Says:

    mo,
    Start sicp after 1st year of university by which time you should be comfortable with basic programming constructs. For now, it will be good if you read “How to solve it?” by G.Polya. You’ll gain good understanding about problem solving which a programmer does all the time.

  5. DavidNo Gravatar Says:

    The book is very interesting, recommend to all

  6. vmware trainingNo Gravatar Says:

    Excellent review, ive never heard of it but i think i may have to pick up the book.

    after all its good to evolve ones own opinion.

    many thanks

  7. free domain registrationNo Gravatar Says:

    excellent book review. did you know that amazon.com has a new website that sells books? Its call windowshop.com check it out if you have time.

  8. dino delellisNo Gravatar Says:

    Nice review , thanks , your right there are a lot of programming books that can be a bit difficult to follow , Especially with those who are in the beginner to intermediate level.

    At least if they use universal or common terms it will be a lot easier for those who are new to SICP to begin their leaning with this.

  9. LioNo Gravatar Says:

    I´ve read that book, and I can really recommend it. It´s really easy to read and follow.

  10. Geeks of HogwartsNo Gravatar Says:

    i bought this after wanting to brush up on theory, algorithms, programming concepts and all the other computer science stuff but didn’t want to go back to school.

    this book really helps brush up on what you need to know and I would recommend that anyone taking comp science today get this book and work thru it in conjunction with your regular classes.

    those of you who didn’t go to comp sci should get this book too.
    You will learn a lot..but not exactly how to spell.

  11. Basement dehumidifierNo Gravatar Says:

    While working my way through the book, I went through the MIT 6.001 course materials on the MIT OCW website, as well as the Berkeley SICP course which are both based on this book. Both courses are, no doubt, excellent, but in the end I found the best approach for me was to simply stick with the Abelson and Sussman and do the exercises.

  12. Manitowoc ice machineNo Gravatar Says:

    A truly wonderful book. What else can I say?

    I discovered it about 10 years into my career in software, on a recommendation from a friend from MIT where it is used for the introductory CompSci course (6.001). Originally, I didn’t think a book used in a first course of computer science can contain anything I didn’t know already. In the end, I ended up getting Scheme (the LISP variant used for exercises in the book) and spent almost two months working through the exercises in the book. Why? Because it challenged and changed the way I think about software.

  13. highest cd ratesNo Gravatar Says:

    I agree with you, universities should give a simpler introductory course to programming before SICP. However, overall impression of book sounds good.

  14. grow tallerNo Gravatar Says:

    Your right there are a lot of programming books that can be a bit difficult to follow , Especially with those who are in the beginner to intermediate level.