on July 7, 2004
Barry Mazur (talking about mathematics, not programming) once characterised the encounter with a genuinely new concept in terms of Gabriel Garcia Marquez's experience on reading the first lines of Kalfka's Metamorphosis, when he literally fell off the sofa in shock, thinking 'I didn't know you were allowed to do that'.
I still remember the same shock, even if I didn't literally fall of my chair, when, as an undergraduate, I encountered the first edition of this on the new acquisitions rack in my departmental library: I must have been the first person in the University, in Northern Ireland even, to read it, which I did, from cover to cover, over several days sitting in the library, even before it was released into the stacks.
The reason why Structure and Interpretation is the best there is, is that it manages, not just once, but several times, to deliver that fall-off-a-chair intellectual jolt. People who complain that you can only do such things in Scheme, and therefore that the ideas are pointless, are missing the point.
on May 6, 2004
However gave this book low ratings just doesn't get it
on January 23, 2004
I never heard so many interesting and different views expressed for any book.some call it a waste of time and others a classic.Some refer it as an apptitude test for comp sc and others a book that has nothing to do with modern software engineering.
I think everyone is right at its own place. It all depends on how you look at things.Their is a set of inquistive ppl in the world who wants to know why and how of every thing .. why this apple is falling towards the ground and not the otherway .. isn't this a stupid question, a lil crazy for Newton to think this way so is this book.
The author starts by exploring what a program is. what is data,procedure,abstraction,modularity what we can do with it .how to model systems and why ? well all these are trivial questions and why do we care..we are living in a world of MFC's,API's,Integrated Environments..True thats why this book is a waste of time and has got nothing to do with modern software engineering.
But if you care why the apple is falling towards the ground and if you have the faculty to wonder you are going to like this book. It will give u insight in to the programing will make u think in terms of programming and not languages.. may be will add to ur creativity..This book is not easy to read.I think this book is equally difficult for a fresher and a 10 yrs exp guy.It all depends on how gifted u are. if u have it, it doesn't matter how many years u have put in to comp sc.
If you want to make an apple pie from scratch, you must first create the universe.SICP is all about this.
on November 7, 2003
I have very mixed emotions about this book. On the one hand, it is perhaps the best introductory work on the philosophical and theorectical issues of computation, dealing with many concepts that normally are either taken for granted by most programmers, or else are completely unknown to them. If you get past the dry, analytical tone (and the rather flat punnery), it actually becomes quite engaging. It is a book that demands careful thought on the part of the reader, and can reward dilligent and thoughtful study. It scrutinizes even such seeming obvious concepts as recursion and assignment, and often reveals a great deal of hidden complexity to them.
However, by itself it is not a very good primer to progamming, either in theory or in practice. The examples given are often unnecessarily tortuous, especially given the imperative to teach strict functional design in the first several chapters. Too much effort has been given to keeping it at 'pure' and 'general', and there is little attempt to connect the important ideas with how they appear in actual use.
Among the flaws is too great a concern with language independence, and specifically, an obsession with presenting the fewest possible language constructs needed to achieve a given purpose. It makes no attempt to present the Scheme language itself except where it is absolutely necessary in order to give an example; while this is done to keep the discussion as general as possible, it often has the effect of confusing the student. Many example programs which would be crystal clear with the use of certain language facilities are made hopelessly incoherent because the authors wanted to enforce 'language independence'.
Also, because many aspects of the language are ignored as irrelevant, the students learn only a small part of the language itself, and are left with the impression that Scheme is a hamstrung, pedantic language lacking in many obvious features. From reading SICP, few would ever imagine that it supported strings, characters and vectors, or had an iterative construct (do), an escape mechanism (call/cc), a macro facility (let-syntax and syntax-rules), or even basic stream I/O (read and write). Scheme is a simple enough language as it is; it need not be pared down any further no matter how noble the purpose.
More importantly, much of the presentation so abstracted as to be completely divorced from real practice, especially in the sections on imperative and OO programming. While this is a good thing in many ways, as it shows the conceptual underpinnings which are so often lost in day-to-day programming, no attempt is made to draw a connection between the theoretical abstractions and the concrete practices. The ideas are left floating aimlessly, and the student is left with no clue as to their relevance or value - which is a pity, because they truly are important, and understanding them can make the difference between a true programmer and a mere coder.
The section on logic databases is an excellent example of this. While it presents all the elements of keys, querying, unification, etc. in a lucid, detailed fashion, the databases are represented solely as list structures. No mention of files is made at all, in this section or anywhere else in the book - the word 'file' does not even appear in the index. Nor does it reveal that most database work today is based on the relational calculus, not predicate logic.
Similarly, the discussion of streams concentrates solely on their use as a way of representing change in state over time; not only are ports (Scheme's stream I/O mechanism) ignored, at no point is the student given any hint at all that the primary use of streams is for input and output. This is like discussing driving without ever admitting the existence of roads; it is abstraction run rampant. While the discussions are wondefully insightful, the student isn't given any way to apply them, even within the context of study.
In the end, I would strongly recommend this book as a supplement to an introductory course based around another Scheme text, such as Simply Scheme. While I think that every serious student of computer science (as independent from software engineering) should study it, really requires the work of a gifted teacher to make it clear, and it should never be used as the sole text. It is a brillant piece of work, and a wonderful source of key insights into programming, but it does not stand alone.
on September 21, 2003
I bought Structure and Interpretation of Computer Programs and the Instructor's Manual hoping that the answers would be in at least one of them. No answers. I'm not enrolled in any school so don't have access via that route. Could someone please let me know where I can get them. Would greatly appreciate it.
on July 8, 2003
Note that his book has 657 pages, not the alleged 556 pages mentioned in the "product details".
In my humble opinion, the best book ever written on the subject.
on July 2, 2003
As has already been noted in other reviews, any discussion of programming languages is as prone to generating pointed, excited intercourse as a discussion of religion is. Those who think of a college education as preparation for a job have got it all wrong. It is preparation for life.
Your success in life will depend on your ability to learn for you will need to learn far more after college than you did during college. Those who think that computer science should be taught in "marketable" languages should note that computer languages come and go. Ask a COBOL programmer. Knowing how to construct software is more important than the language of implementation. My brother is a software architect for Microsoft and most of the people that are lucky enough to get an interview are hard pressed to write code to manipulate linked lists or trees let alone discuss these most fundamental data structures!
Computer scientists in academia do all of us out here in the real world a great disservice by foisting upon us this confusing melange of mathematics and software engineering. I find the two years devoted to learning calculus and differential equations more pertinent to mechanical and electrical engineering when logic, discrete mathematics, algorithm analysis, and automata theory, which are more appropriate to software engineering, get short shrift.
SICP is an excellent step in this direction and scheme is an excellent vehicle for discussing these concepts and more. Furthermore, these concepts can be developed with a lab-oriented, engineering approach. Contrary to the beliefs of some, any algorithm can be implemented in scheme. What sets scheme apart from other languages is that a scheme program can then be devised to analyze that algorithm giving a rigorous and concrete development of the analysis of algorithms!
When it comes to software engineering learning a computer language should be the most trivial of tasks. If you can't implement a software design in the language chosen, you will be without a job. This book is by far the best for learning scheme and the fundamentals of programming and it is already considered a classic. There are, however, less challenging ones such How To Design Programs and Simply Scheme. If you find learning scheme to be difficult then you should expect learning any computer language to be difficult. For those that think the language of the day is a route to a job you might find a shorter program at a community college more suitable. Community colleges are geared towards supplying people that meet the needs of the market today.
on January 13, 2003
This book is an excellent companion to The Little Schemer. TLS is a profound and witty tour of recursion theory, but does not touch on the practical considerations of creating efficient programs (and does not claim to do so). SICP provides the assiduous reader with the distinction between a procedure's definition (which may well be recursive) and the process it generates (which may be iterative). It provides the means to make informed choices about program design. In particular, the book centers on writing language interpreters, which is an excellent strategy for understanding all of the problems faced in real-world programming.
Because the book evolved from an MIT undergraduate course, the exercises tend to be thematically related to engineering concerns (math, physics, etc.), whereas TLS uses food. Do not be put off by this emphasis on math applications; the book is broadly applicable to all domains of program design, and is not *about* mathematics or engineering. Then again, you might consider the book to be an engineer's approach to program design, in that its emphasis is on correctness and efficiency, and not on abstract beauty or brevity.
It should go without saying that you will not get anything out of the book if you do not do as many of the exercises as you are able.
on August 12, 2002
SICP is an excellent, perhaps the best, advanced introduction to computer science and programming. It covers topics such as functional abstraction, data abstraction, OOP, program design, constraint programming and logic programming, always from a language design point of view. You will need a decent mathematical background to follow it.
If it's such a great textbook, then why half of the reviewers hate it? Elementary: SICP is not just a textbook, it's also a Computer Science aptitude and vocational test. If you read it and like it, then Congratulations! You are a real programmer and computer scientist, with hair on your chest. If you don't like it, then you should be studying something else. Law, mortuary science, whatever, but not CS.
on July 19, 2002
I would have to agree that this book has very little to do with modern software engineering. While some experience with meta-languages is certainly beneficial, spending an entire semester writing scheme progs is a solid waste of time. C++ and Java have been on a market for a Number of years (c was founded in 81), and all of the potential employers "appreciate" ur knowledge of them. Another point I want to bring is in regard to some previous reviews oversimplifying the transition from meta language to C++. Not only it is not easy, but it is also quite confusing. May be reading C++ in 24 hours gives you the idea that you are a big guy, but believe me, C++ is much more powerful than that. Take a look at The C++ Programming Language by Bjarne Stroustrup is you feel you are ready to face the challenge, but please don't stop your quest at the page X.