Nearly a decade ago when I first started college as a wide eyed computer science student, this book instilled a deep passion for programming into me.Nearly a decade ago when I first started college as a wide eyed computer science student, this book instilled a deep passion for programming into me. To this day, I can pick up and reread any section of this book and that passion is reinvigorated. There have been volumes written about the brilliance and beauty of this book by people smarter than me. Every bit of this praise is deserved, and I do not need to add to that chorus. I would instead like to mention a different facet of what makes this book so great. This book is fun, this book makes the art of programming fun.

My favorite fiction books are by far and away the Harry Potter books. I do not find the prose of these books all that great, the action isn't entirely amazing, and the neither the characters nor the plot are particularly special. So what makes the Harry Potter books so great? I think it is the way J.K. Rowling's describes magic, and the world that is built up around magic. She puts you in the shoes of these characters, and captures how awesome it would be to be able to do magic.

Abelson and Sussman do the same thing with SICP, but the magic is real. Anyone can pick up this book and a Scheme interpreter and do great and magical things. This book made the University of Minnesota my Hogwarts, and I cherish it for that.

I must now lay one heavy critism upon this book, though really not on the book itself, but rather the context in which it is generally used. This book is not appropriate for introductory computer science courses. I was a teaching assistant for eight semesters for the introductory computer science course at the University of Minnesota that uses this book. Over that time, I went from thinking this book was perfect for this course, to strongly thinking this book was perfect, to a gradual realization that this book is not very good at all for the course.

I spent a not insignificant amount time studing is cognative learning theory while in graduate school. What I learned from literature in that field paired with my own observations are what lead me to eventually realize this book is not appropriate for an introductory course. A certain segment of people are motivated by the abstract, and learn from general prinicples. I think this book is perfect for these people. Professors tend to disproportionately be motivated in this fashion, and I think this accounts for popularity of this book.

This is not a majority of people however, this is not even a majority of students who graduate with Computer Science degrees. A python or ruby book focused on practical, real world examples and examples that have a graphical or tactile component in some way would do a vastly better job motivating computer science for the typical student.

I think a lot of professors do not realize this. More distributingly though, there are many professors who realize this but continue to advocate this book because they feel it weeds out the people that cannot cut it in computer science. This is a profoundly wrong and chases a lot of people away from the field who would have a lot to add once they left the confines of acedamia and it self selecting focus on the abstractly motivated. If acemdemia did not filter and select in this manner, I think you would see more diverse population of top tier programmers. I think you would see more programmers with social skills, programmers with less arrogance. This in turn would help the whole community. Asking for help would be less stigmatized, "not developed here" would be less of a problem. Standards bodies developing specifications would likely have more individuals who focus on the practical implicaitons.

I have however strayed wildly into the arena of complete speculation. What I am trying to say ultimately is that I think this is a must read book for computer science students, but I think it would be more appropriate for half of a junior level course on programming paradigms than the whole of an introductory course on programming more generally....more

This book is a little long winded and a bit dry, so based just on the writing of the book I would have given it two stars. However the book shines inThis book is a little long winded and a bit dry, so based just on the writing of the book I would have given it two stars. However the book shines in that it has an unconventional perspective and it stands by this perspective. It is written as guide to attacking applications, not securing them. I thought that would be a gimmick and each chapter would be 1/5 how to hack and 4/5 how to defend, but no quite the opposite is true. I am not sure it is the greatest approach to learning the material, but it is unique and executed faithfully and I respect that....more

This is an entirely adequate book. I think it would be a good guide for the exam (though I did not take the exam), but also a nice practical introductThis is an entirely adequate book. I think it would be a good guide for the exam (though I did not take the exam), but also a nice practical introduction to SQL. ...more

This book is terrible. This book is poorly written, confusing, and perhaps worst of all entirely ambiguous at times. A certification exam guide needsThis book is terrible. This book is poorly written, confusing, and perhaps worst of all entirely ambiguous at times. A certification exam guide needs to be filled with concrete statements "This won't be on the exam...", "This may be on the exam...", "The exact syntax is as follows...", etc.... This book is entirely wishy washy. I would say don't buy it, but unfortunately what other book covers the material? Oh well....more

I think this book is wildly overrated, so much so that I am thinking about giving it another chance sometime despite my deep dislike of it. I startedI think this book is wildly overrated, so much so that I am thinking about giving it another chance sometime despite my deep dislike of it. I started reading it and I barely got through three chapters before giving up. Paragraph to paragraph there is no narrative, no connection. It is entirely disjointed. There are chapter titles, but they seem to be a gimmick that have very little to do with the content in the chapters....more

This book really should't be good, but it was. I bought it long before I knew what a computer science major was, let alone was one. At the time it didThis book really should't be good, but it was. I bought it long before I knew what a computer science major was, let alone was one. At the time it didn't capture my imagination, it didn't convince me that I would one day be able to program the things I wanted to program. Ultimately though to whatever extent that was a problem, it was a problem with C. Throughout my college career this book served as a great C reference, it has nice examples and clear descriptions. Every time I returned to this book I appreciated it more, I will one day hopefully read "The C Programming Language", but in the meantime its distantly related hick cousin "Teach Yourself C in 24 Hours" is a good enough C reference....more

If you are going to read one book on Lisps or functional programming, it should be Structure and Interpretation of Computer Programs. If you are goingIf you are going to read one book on Lisps or functional programming, it should be Structure and Interpretation of Computer Programs. If you are going to read a second book, you should reread SICP. When you are ready for a third book, this is a pretty good option. This is a better book than Programming Clojure or any of the various scheme books I have read, but it is perhaps too focused on the particulars of Common LISP and not about functional programming more broadly, so there might not be as much in this book for you if you are not programming Common LISP. I could not recommend Common LISP over Scheme or Clojure, so despite the fact this is a better book I would have to recommend The Seasoned Schemer, How to Design Programs, or Programming Clojure over this book for the typical developer....more

If you program Java, you must read this book. You won't learn any new syntax, language feature, library, or framework, but you will be a much better pIf you program Java, you must read this book. You won't learn any new syntax, language feature, library, or framework, but you will be a much better programmer as a result of reading this book. Its the best anything on Java I have read. I don't agree with 100% of the material in this book, but Joshua Bloch has a strong, clear opinions and he argues them well. This book is so good, I think you should read it even if you aren't a Java programmer but program C#, C++, or something else along those lines. Even Ruby and Python programmers will probably get a lot out of this book....more

This book is a classic, you should read through it and it should sit on your bookshelf. But you should also read something newer and more accessible oThis book is a classic, you should read through it and it should sit on your bookshelf. But you should also read something newer and more accessible on design patterns as well, I recommend Head First Design Patterns....more

I am going to give this book a review even though I am only part of the way through, in part because I think it belongs on my highly-recommend list. TI am going to give this book a review even though I am only part of the way through, in part because I think it belongs on my highly-recommend list. The original GOF patterns book is good, is a classic, and should probably be on your bookshelf. This however is much better book on patterns for the typical developer, the content is more accessible and is more up-to-date. Moreover this book has a great attitude and is a lot of fun to read....more

I have only read seven chapters or so of this book, but I really like what I have read so far. This book isn't just about how to write applications inI have only read seven chapters or so of this book, but I really like what I have read so far. This book isn't just about how to write applications in Rails, it is about the process of writing software. ...more

This book succeeds in some places and gets fairly bogged down in others. I cannot hold that against it too much though, I read it straight through, buThis book succeeds in some places and gets fairly bogged down in others. I cannot hold that against it too much though, I read it straight through, but it probably is much better as a reference. Despite some flaws, this book has some real strengths. Unlike a lot of technical book, this book is rooted deeply in the practical. It mentions JavaScript solutions where they are useful. It has lots of links to blog posts and websites with additional information. Some books are written by people paid to write books, other books are written by practitioners who have learned from experience and have something to say. This book definitely strikes me as the latter. I think used as an actual cookbook, this book definitely deserves a spot on your bookshelf....more

Surprisingly good. This book did a good job explaining grails and even more important making be excited to program in it. I highly recommend this bookSurprisingly good. This book did a good job explaining grails and even more important making be excited to program in it. I highly recommend this book....more

Context matters a lot. I am an avid functional programmer, and I read straight through this book without problem and found it to be at an entirely appContext matters a lot. I am an avid functional programmer, and I read straight through this book without problem and found it to be at an entirely appropriate level. This makes me worried that this book might be too terse if this is your first book about a functional programming language. I would not call that a criticism so much as a fear, it is something to consider if you are thinking about buying this book. That aside, from my context, this is a pretty good book. This book focuses on a lot of high level ideas and syntax without getting bogged down in overly complicated examples or specific APIs. All of the writing is very clear and the examples generally seem well chosen. The high points are really nice coverage of macros and concurrency constructs. Those are two things that could have easily difficult to understand, but were not do the quality writing found in this book. I do have some criticisms of the book however. Way too much time in this book is spent covering Lancet, which seems to be an entirely dated topic just one year later. The chapter discussing sequences have some really great examples and explanations, but I am afraid I did not develop a very complete cognitive model of how everything is working, especially in terms of the ISeq interface versus specific implementations, next versus rest, etc.... One final criticism I have of the book is that the author does not discuss any of the potential drawbacks or pitfalls of using Clojure on a project. I think every book focused exclusively on one technology should have such a discussion, and I believe this especially holds for a technology as bleeding edge as Clojure. Overall this book is a pleasure to read and I would strongly recommend it....more