Amazon.com 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.
Book Description Structure and Interpretation of Computer Programs has had a dramatic impact on computer science curricula over the past decade. This long-awaited revision contains changes throughout the text. There are new implementations of most of the major programming systems in the book, including the interpreters and compilers, and the authors have incorporated many small changes that reflect their experience teaching the course at MIT since the first edition was published. A new theme has been introduced... read more
About the Author Harold Abelson is Class of 1992 Professor and MacVicar Teaching Fellow, and Gerald Jay Sussman is Matsushita Professor of Electrical Engineering, both in the Department of Electrical Engineering and Computer Science at the Massachusetts Institute of Technology. They have each received major computer science education awards: Abelson the IEEE Computer Society Booth Award and Sussman the ACM Karlstrom Award. Julie Sussman is a writer and editor, in both natural and computer languages.
The negative reviewers entirely missed the point of this book. The issues are not c++ versus scheme, nor the gap between the book's examples and real-world programs, nor that recursion is less intuitive than looping.
The real point is to teach some very core foundations of computer science that show up everywhere. For example, supposedly revolutionary XML looks a heck of a lot like a nested scheme list, first described in 1960. And processing an active server page (or Java server page) is very much like the textbook's specialized language evaluator. Finally, c++ polymorphism through vtables and part of Microsoft's COM mechanics are the exact same thing as the book's data-directed programming section.
This is very deep material for a programming newbie to learn outside a course, but for an experienced nerd who's looking for a systematic framework, it's absolutely terrific. I had done lots of lisp and compiler work before reading the book, so many of the concepts were not new. But it's with this framework in mind that I learn new technologies, and this approach greatly speeds up how long it takes to understand each week's "new" hot product/language/tool/mindset. Put another way: why do so many popular computer books take 1000 pages to describe a few trivial concepts?
6 of 9 people found the following review helpful:
Extraordinarily good as an intro to CS text
October 27, 1999
Reviewer:
A reader
from Orange County, CA
...not an intro to programming, mind you, but an intro to computer *science*. Rather than giving a few tips, tricks, and pointers, this book teaches the *fundamentals* of computer science. Beginners looking for a quick and dirty way to learn programming should look elsewhere. If all you care about is the quickest path from zero to mediocre skill in programming, skip this book. However, if you actually want to be any good at programming and be able to *fully* understand what's going on, this book is an EXCELLENT investment, not only in terms of cash, but in terms of the time you spend reading it. My first introduction to this book was as an EECS major at U.C. Berkeley in '91. I can't stress enough the incredible advantage you will have after reading this book over someone who took the path of least resistance and learned programming from a Teach Yourself In 21 Days book. Anybody can learn how to program, but it's literally impossible to be a truly *good* programmer without a rock-solid understanding of the fundamentals, and that's precisely what this book is good for.
First of all I will emphasise what is good about this book - this is a CS text that has an immaculate grasp of the fundamental concepts and 'soul' of computer programming. I am sure that, years after first reading this book, there are still many concepts for most computer scientists to learn from this rigorous text.
However, as a year 1 semester 1 introduction to programming as a whole, I found this to be a seriously misguided book. Not that I think all the topics are not within the grasp of the average student, but more so the way this book has been written. On that assumption the whole approach of the book to presenting its topics is wrong, and above all the writing was quite poor, too lyrical and cryptic and majorly fails to take into account the needs of the student through the dense examples and convoluted text. What a valuable book this would be considered to be after an appropriate introductory course - yes, that includes any course on C.
--This text refers to the Hardcover edition.
I have read a lot of reviews here which lament the use of Scheme for teaching the fundamental concepts in this book. People have stated that while the book pretends to be language-independent it relies solely on Scheme, which invalidates the point.
I disagree strongly!
I think part of the problem is that it takes a bit of time to really "grok" Scheme. If you've never been exposed to it before (as I haven't), Scheme may seem strange and unnecessarily arcane to you at first. However, after doing it for a bit you will realize (as I have) that Scheme is amazingly flexible, succinct, powerful and unbelievably elegant. It incorporates all the features that other languages such as C++ take for granted and skip over, and exposes the real machinery behind them, without introducing a whole host of obscure syntactical details. This clarity and elegance of Scheme has helped me understand all other languages I have to deal with so much better!
Thus, in presenting the topics of this book in Scheme, the authors are actually succeding in making their discussions language-independent! Truly, the difference here lies in what your goals are: if you want to program in some specific language and just memorize it, this is not a book for you. However, if you actually want to understand how that language works, this will be akin to an epiphany for you. A very good book!
--This text refers to the Hardcover edition.