- Series: MIT Electrical Engineering and Computer Science
- Hardcover: 657 pages
- Publisher: The MIT Press; 2 edition (July 25, 1996)
- Language: English
- ISBN-10: 0262011530
- ISBN-13: 978-0262011532
- Product Dimensions: 6.2 x 1.5 x 9.2 inches
- Shipping Weight: 2.3 pounds
- Average Customer Review: 182 customer reviews
- Amazon Best Sellers Rank: #340,670 in Books (See Top 100 in Books)
Enter your mobile number or email address below and we'll send you a link to download the free Kindle App. Then you can start reading Kindle books on your smartphone, tablet, or computer - no Kindle device required.
To get the free app, enter your mobile phone number.
Structure and Interpretation of Computer Programs - 2nd Edition (MIT Electrical Engineering and Computer Science) 2nd Edition
Use the Amazon App to scan ISBNs and compare prices.
The Amazon Book Review
Author interviews, book reviews, editors picks, and more. Read it now
Abelson and Sussman's classic Structure and Interpretation of Computer Programs teaches readers how to program by employing the tools of abstraction and modularity. The authors' central philosophy is that programming is the task of breaking large problems into small ones. The book spends a great deal of time considering both this decomposition and the process of knitting the smaller pieces back together.
The authors employ this philosophy in their writing technique. The text asks the broad question "What is programming?" Having come to the conclusion that programming consists of procedures and data, the authors set off to explore the related questions of "What is data?" and "What is a procedure?"
The authors build up the simple notion of a procedure to dizzying complexity. The discussion culminates in the description of the code behind the programming language Scheme. The authors finish with examples of how to implement some of the book's concepts on a register machine. Through this journey, the reader not only learns how to program, but also how to think about programming.
About the Author
Hal Abelson is Class of 1922 Professor of Computer Science and Engineering at Massachusetts Institute of Technology and a fellow of the IEEE. He is a founding director of Creative Commons, Public Knowledge, and the Free Software Foundation. Additionally, he serves as co-chair for the MIT Council on Educational Technology.
Top customer reviews
There was a problem filtering reviews right now. Please try again later.
It had a massive impact on me. It consumed me, to the point where I had difficulty finishing assignments for my classes (I did not study CS as an undergrad). What the book does is give you a vocabulary and knowledge about programming that is hard to find anywhere else.
The text, the examples and exercises, have a mathematical flavor, and that may turn off many potential readers, who would rather gadget around than find elegant solutions for the 8-queens puzzle or efficient algorithms to compute Fibonacci numbers.
I've lent this book to several friends who were interested in learning to program, and in all cases they have returned it to me, saying it went over their heads.
There seem to be two camps in computer programming:
- the gadgeteers, who want to hook devices together and make them do fun things
- the scientists, who appreciate computing as a medium in itself
This book is for the second type.
But it's worth the effort: By the time you are done you will know about imperative programming, functional programming, meta programming, lazy data structures and everything in between.
This is one book that should be on every programmer's list.
The discussion in the reviews usually concludes that this is the book that separates the computer scientists from the mere programmers. There is a definite logic to this. If you want a book that will have you churning out code that does something helpful in half an hour(because you don't think the several ways to calculate the Fibonacci Sequence are helpful), by all means, pick up Learning Perl or just read the Python documentation. They are great tools. If, however, you want to tool up on problem-solving technique a whole level or three higher up, SICP is for you. The Wizard Book is about learning to think better.
Here is where I diverge from the idea that this book is for only computer scientists, though. I am an artist, graduated from college with a BA in art, going to graduate school for an MFA. SICP is one of the books that changed how I work and think. It will make you a better programmer if you read (and reread (and reread)) it in the same way that learning Latin will make you understand language itself in a whole new way. I use ideas from SICP constantly, to design software, but also to design staircases. The book is slow-going, no doubt about it, but you'll have a whole new mental toolset at the end.
One caveat- this book is freely distributed in its entirety on MIT's website. I still bought a copy, though: who knows how long this internet thing will last, but SICP is going to be relevant forever.
To start with, I'll mention that the choice of typesetting used in this book makes it a bit cluttered on the eyes. Although I readily admit things like this *shouldn't* matter, they invariably do. This really is the responsibility of the publisher and not the author but the end product is a book that can be a bit numbing to read for long periods (at least in my opinion).
Second and more seriously, the book is not a "stand-alone" item. For instance, to implement the "Picture Language" examples, one would need add-ons to the standard MIT-Scheme package that the authors refer to. In the problems on Data-Directed Programming focusing on association tables, the reader really is at a disadvantage in not having an implementation of the tables incorporated in the standard-issue MIT-scheme. They are constructed in Chapter 3 and this kind of "wait-and-see" makes the problems, in my opinion, harder than they really need to be. Also, the Object-Oriented Programming avoids (for understandable reasons) many of the technical features that highlight its robustness. It's not an ideal book for OOP.
SICP gives the reader (or I should say, it gave THIS reader) the impression that this is also not a book for people learning programming, it is a book for people comfortable enough with programming to deal with a lot of these issues quickly. If used in a class setting this is probably easily overcome in labs.
On to the strengths.
The problems in the book range from fairly trivial to quite difficult. One of the strengths of the book is that they introduce a lot of topics and do not shy away from interesting and challenging exercises. The bar is set probably quite high for the undergrads learning this material but for self-study some of the problems can be somewhat daunting.
Another strength, in my opinion, is what some reviewers cite as a weakness; the use of Scheme. Aside from the implementation issues above, Scheme is really well-suited (having few primitive control structures) to isolating the concepts of programming (in contradistinction to the emphasis on syntax that plagues most introductory books). The argument that Scheme is "useless" depends highly on your definition of "use", since solid understanding of program organization is a valuable language-free skill.
Overall, as I mentioned, the book is quite good. Just don't expect that because it is touted as an introductory text that it will be an easy read. There is something in it for everyone.
Most recent customer reviews
*Structure and Interpretation of Computer Programs* – the second edition of which...Read more