Sum up: A true gem if you are learning to program, but a bit too slow-paced if you already are a proficient programmer.
I had been programming for seve...moreSum up: A true gem if you are learning to program, but a bit too slow-paced if you already are a proficient programmer.
I had been programming for several years when I wanted to get more into the functional way of solving programming problems which had begun to receive more attention towards the end of the noughties with the success of new programming languages such as F#, Clojure and Scala. After researching a whole lot I found that this book had received a lot of positive critique, as a sort of more noob-friendly alternative to Structure and Interpretation of Computer Programs (by Abelson and Sussman). To me, SICP seemed to have a certain shroud of high-brow elitism to it that scared me away from reading it, so this seemed like what I was after.
And it kind of was. This text seemed perfect for an academic learner like myself, building knowledge stepwise, with a lot of emphasis on how to solve things, thinking before you type, and to my great enjoyment; a kind of test driven development attitude. Really a wonderful way to teach (functional) programming and program design to a newcomer.
The problem was only that I am no newcomer to programming, and as such, the pace of the text was a bit too slow. I intended to finish the text before starting a functional programming class, but never got past chapter six. The content was great, the pedagogical angle was superb, but it simply went too slow for me and I did not finish it.
My functional programming class actually used SICP, which turned out to be the best technical book I have read. It was simply an enjoyable read, once you got into it. If you already know your way around branch structures and the basics of programming, just delve into Structure and Interpretation of Computer Programs. It has the same content, but progresses at a much higher pace and demands a whole lot more of the reader. But if you are new to programming and is not the type of person that just likes to learn from examples, this text is great and truly recommended.(less)
Good points on becoming a software craftsman. Some parts might look a bit dated, but the content is mostly valid today. You do not need to read all to...moreGood points on becoming a software craftsman. Some parts might look a bit dated, but the content is mostly valid today. You do not need to read all to benefit ;)(less)
After reading the first few chapters, skimming some more I realised "The Definitive Guide" was exactly the kind of book I hate: the bible kind (as in "The Java Bible", etc). I have since never opened it once.
If you are a competent programmer just do yourself a favor; get a goood, terse 200 page-ish book like Johansen's or Crockford, and the net for anything else. The trees will thank you for it.(less)
One of the best technical books I have read, albeit on a hard topic. It's quite readable and a lot better than my AI lectures ever were. Must admit to...moreOne of the best technical books I have read, albeit on a hard topic. It's quite readable and a lot better than my AI lectures ever were. Must admit to only reading the first 12 chapters though.
Its main weakness lies in the lacking coverage of "new AI" topics, such as evolutionary algorithms. (less)
I have three Deitel books. They are all comprehensive, full of examples and quite simply boring. They teach you what you need, but in a way reminiscen...moreI have three Deitel books. They are all comprehensive, full of examples and quite simply boring. They teach you what you need, but in a way reminiscent of a lifeless professor that has lost all passion. There are better books for learning and there are better books to serve as reference.(less)
First a bit on the Kindle version: One star is subtracted for the electronic conversion. I fully understand that they needed a fixed layout and font-si...moreFirst a bit on the Kindle version: One star is subtracted for the electronic conversion. I fully understand that they needed a fixed layout and font-size in order to keep the original two-column layout work with the code examples without overflowing, but this comes at the cost of losing all the benefits of the layout that Kindle provides. The font also looks a bit weird - possibly a pdf->mobi conversion with OCR. Reading on my regular Kindle is taxing, but it is ok. The screen size of the Kindle DX is probably a far better match, as is my computer screen, but I cannot stand to read using that for long. I managed to read it on my Kindle, but it was annoying. Just a word of warning.
As to the actual content of the book, I found myself enjoying it (after a while). I have to admit that there were some frustrations/questions that were nagging me for most of the book, but they were dealt with when just a tenth of the book remained. This was due to the author's wish to gradually build up a sense of how one ends up with the final version of the Visitor pattern, but I am unsure of the real value in showing so many less desirable versions of it first.
The style is very reminiscent of The Little Schemer (TLS), a book I have on my shelf, but one I never finished - mostly due to not knowing how to run the code. This book actually starts with a section on how one can test the code, so that is not a problem here. The other difference from TLS is that I read this book with a good working knowledge of Java. Thus I never felt the need to actually test any of the code.
One problem I have with the book is its class hierarchy and the names given to classes. The examples often use food classes and one of them is the shish kebab and its ingredients. There we have a class Shish and several ingredients like Onion, Lamb, etc that subclasses Shish. I find that very weird. I would think that a Shish HAS-A ingredent, not that an ingredient IS-A Shish. If the author had just somewhat refactored the classes to use composition I would be OK with the whole thing. The other examples have the same problem. Other than the issues with how the class hierarchy was composed, the code is quite nice and what you end up with in the end is very elegant code. I believe that the reviewers that most violently object to the code have not been exposes to much advanced OO design before and anything else than getters and setters probably freaks them out. It is not a shining jewel in my book collection, but it is interesting and absolutely worth reading. The last 20% percent of the book makes the initial frustration quite worth it.
In short, I recommend reading it, if just for the experience of the different teaching format. (less)
Not a book to read cover to cover, but very useful when you are wondering how to achieve something. Might have been groundbreaking in its day, but whe...moreNot a book to read cover to cover, but very useful when you are wondering how to achieve something. Might have been groundbreaking in its day, but when reading it a lot of the tips/how-to's seemed not to have passed the test of time. Not because they are not correct, but because a lot of them are now integrated into the tools (IDEs) we use every day. Might make more sense if you are hardcore a Vi/Emacs user without refactoring support.
A lot of the harder refactorings are not in any IDE, and then this book is a true jewel.
Did not bother finishing it, as I found I was doing most of it already - just automated through the tools of the trade (IntelliJ)(less)
What I liked: - great for existing programmers that don't want to waste time reading about how to do a for loop - terseness: goes straight to the core -...moreWhat I liked: - great for existing programmers that don't want to waste time reading about how to do a for loop - terseness: goes straight to the core - he expresses his opinion, although one might not agree (JSLINT, anyone?)
This makes it a modern replacement for Crockford and one I keep picking up from time to learn or refresh a thing or two. Very much recommended!
The tools mentioned in the book for testing are somewhat antique by 2014, so one improvement could be a minor update where it included a more modern testing framework, such as Mocha or BusterJS.(less)