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 going...moreIf 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.(less)
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. T...moreI 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.(less)
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 p...moreIf 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.(less)
This book is a bit wordy to read straight through, but it makes an adequate reference. You would think there would be a website that would be a better...moreThis book is a bit wordy to read straight through, but it makes an adequate reference. You would think there would be a website that would be a better reference given this material, but this book seems more complete then any website I have found.(less)
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....moreNearly 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.(less)