When Programming Collective Intelligence first popped up on radar, I had the impression that it was about massively multi-player games, something about which I’m only vaguely interested. On learning that it was about recommendation systems and related machine learning techniques, it went to the head of the reading queue. Programming Collective Intelligence is turning out to be very, very good. Good enough to demonstrate several simple, working recommendation systems (by page 28!), with complete code (in Python). I’m in the middle of the chapter on clustering techniques, and am making notes on how to apply them to a pile of data I’ve been sitting on.
Programming Collective Intelligence may not be a “game changing” book, but I think it’s going show people that some very interesting techniques are actually within their reach.
For the current “scratch an itch” project, I’ve been using Django, the web application framework for Python that seems to have the most mindshare at present. (Yes, yes, I know there are others, but I only have time for one, and Django is it.) Until The Definitive Guide to Django: Web Development Done Right appeared in print, working with Django meant reading documentation on the project website. Which leads to the first problem I ran into: The book is written against Django version 0.96 (the most recent “stable” release), while the documentation on the website reflects the latest code in the project’s subversion repository. And post 0.96, there’s some really good, compelling stuff, such as unicode support, functional testing support, and auto-escaping in templates, some of which isn’t backwards-compatible. (Fortunately, the Django team keeps a running list of incompatible changes on the project website.)
The other issue I have with the book is that (developer-level) testing gets mentioned only in passing, which seems to me to be a bizarre omission given the attention that’s given to testing by other frameworks and the general level of awareness of TDD and unit testing in the developer community. Fortunately, there’s a good testing chapter on the Django website.
That said, The Definitive Guide to Django is a well written, easy read. Any other issues I have with the book are really issues with Django itself, and how it compares (or doesn’t) to Rails.
On learning that Kent Beck was writing a book titled Implementation Patterns, I guessed that it would be about high-level construction patterns and pre-ordered it from Amazon. The book is actually a quite thoughtful discourse on how low-level implementation choices, such as choice of variable names and levels of abstraction in data types, communicate your intentions to later readers of your code, thus helping keep code bases viable. It’s also an excellent model for how to think and reflect about how you approach your work. I took away some better ways of explaining concerns I already had about coding, but lacked the words to articulate quite as clearly as Beck manages to.
Though primarily Java-centric, much of what Beck has to say about day-to-day coding maps to other languages (and the dynamic language side of me loved seeing Java referred to as “pessimistically typed”). There’s some material about Java collection performance at the end of the book that seems like filler, but if you’re working it Java it might be worthwhile.
This is a good book for mentors to hand out to “coders” who are making the transition to developer.