- 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: 9.1 x 6.2 x 1.4 inches
- Shipping Weight: 2.3 pounds
- Average Customer Review: 4.5 out of 5 stars See all reviews (229 customer reviews)
- Amazon Best Sellers Rank: #355,038 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.
O'Reilly Learning Series
Featured 'Learning' Series from O'Reilly Media. See more
Customers who bought this item also bought
What other items do customers buy after viewing this item?
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.
Gerald Jay Sussman is the Matsushita Professor of Electrical Engineering in the Department of Electrical Engineering and Computer Science, Massachusetts Institute of Technology. He is also the coauthor of Structure and Interpretation of Computer Programs (MIT Press, second edition, 1996).
Browse award-winning titles. See more
If you are a seller for this product, would you like to suggest updates through seller support?
Top Customer Reviews
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.
Lisp is not a functional programming language. It was never designed to be a "functional programming" language. But because it was the first to use some functional programming capabilities many decades before they became available in other languages (eg functions as first-class objects) it has always been given that association. Lisp most certainly doesn't fit just that category - it is decidedly imperative in many (most) ways, with the difference being that the language gives nearly unrestricted power to the programmer to decide how to use it. The macro capabilities of Lisp are untouched by anything else, and Lisp's primitives are more accurately described as meta-primitives. Perhaps more than any other language, it is truly multi-paradigm. So to my mind, talking about Lisp as primarily a functional programming language betrays a lack of subject understanding.
I have learned to be agnostic about OOP as a design paradigm. For those who have drunk that particular kool-aid, the CLOS provides a capable way to deploy software. But most Lisp programmers don't take long to realize that the ideas of encapsulation and scope are realized in Lisp as closures, a much more general and powerful abstraction. OOP is but one implementation of this abstraction. See Doug Hoyte's wonderfully opinionated book "Let Over Lambda" for the most advanced treatment of Lisp closures and how they can be used to build other languages (or even, trivially, implement most OO techniques). You should have read Paul Graham's "On Lisp" to fully understand the Hoyte book.
Lisp wasn't designed to be easy to use. It wasn't designed to coddle a programmer. It's a powerful collection of primitives and design features (eg homoiconicity) that provide a platform upon which intelligent people can use reasoning and mathematics to construct powerful software. This book, dated and pedantic as it seems, provides most of the basic CS tools needed to tackle problems using a "wholemeal" approach. If you approach this book as if it were a how-to cookbook, you will be disappointed - it's a lot of work for that. If you approach it in a way that allows it to open you to ways of programming that you most likely have not thought about before, then there are some amazing things to learn from this book. It helps if you have an innate fundamental curiousity about Computer Science rather than just a simple urge to "learn a new language".
The dialect of Lisp used by this book is Scheme, which has traditionally seen most use in academic settings because illustrating some concepts is simpler than with today's mainstream dialect, Common Lisp. For purposes of this book though, it doesn't matter - you're reading this to learn a way of programming that is fundamentally different than what you've done before. The minor language differences are not material here.
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.
There are numerous reviews here that discuss the merits of this book. Rather than repeat what's already been said numerous times, I'm going to tell you something new that you should know before purchasing this (expensive) book. For $50, MIT Press could have done MUCH better.
1. The paper is cheap. Highlighting will show through on the opposite side. Terribly annoying.
2. The binding is cheap. For a book of this caliber and price point, it should have a "lay flat" binding.
3. The covers are cheap. I've only been reading the book for 1 week, and the clear plastic coating is already peeling up from the edges of both front and back covers.
This is easily a 5-star book with regards with its content. Unfortunately, MIT Press gets 3 for making extremely poor printing decisions. Maybe greedy is a better description. Books of this caliber should last a lifetime. This one won't come close.
Regards ~ Jason Perry (purchased by Geri Perry)