Book Review: The Productive Programmer
Now, the name Neal Ford wasn't really familiar to me. Which is not surprising, as he is not at all someone from the PHP community. Ford is mostly active in Java, .NET and Ruby (as I gather from his book) as he works for ThoughtWorks (where he works with people like Martin Fowler!). This is pretty clear from the book, which does not even a single time mention PHP at all (even when talking about dynamic languages). This is not at all a problem though, since the book is pretty much language-independent. Though examples are sometimes given, the examples are usually pretty clear and easy to apply to PHP with a bit of thought.
So what is the book about? Basically, it is a programmer efficiency guide. It goes through several tools, pieces of software but also development approaches that will make your developer life easier and more efficient. There are two main parts, 'Mechanics' and 'Practice'. The Mechanics part goes into such topics as accelerating your computer usage, focussing on the task at hand, automating common tasks. The Practice part goes more into approaches for development, such as Test-Driven Design, Static Analysis, some lessons from ancient philosophers that can be applied to modern software development, meta programming and much more. In this review, I want to highlight a few things I've picked up from the book. Be aware though that there are many more useful lessons to be learned from this book!
It has been a long while since I've really used Windows, and this book gives lots of examples for all operating systems. Now, I've been used to the commandline for instance in linux and OSX for quite some time, and was convinced that there was no serious commandline option for Windows (or any other really useful tools for power users). Though I don't use them since I don't use Windows at the moment, I was quite impressed by the amount of power user tools, both from Microsoft and from third parties, there are for Windows these days. This was truely an eye-opener for me.
I've been using several automation tasks myself for tasks that are either boring or prone to errors (this is one of the reasons why I've liked symfony ever since I came by it). Ford takes this even a step further. He basically advocates that for any task that can be automated, you try to write a simple script that automates that task. It is not required to have the most beautiful code, but a lot of the tasks that you do once have the chance of having to be repeated. Once you've written a simple script to do the task, you can actually repeat it quite easily. If it turns out that you need to do the task quite regularly, it usually pays off to refactor your script to become better/more powerful.
It is nice to see Ford mention some nice lessons from ancient philosophers that can still be applied to software development, such as Aristotle's Essential and Accidental Properties and Occam's Razor. When reading this, it definitely rings quite a few bells. These are things any serious developer has come by.
The chapter named 'Question Authority' is one of these things that makes perfect sense, but you usually don't consider it. Basically, Ford tells us to don't do things "just because it has always been done that way". He tells us to think out of the box, and question the default approach if another approach makes more sense. I could easily recognize the "angry monkey" behaviour Ford was describing from projects I've been involved in and people I've met over the years.
A great book!
As with a lot of great books, there's quite a bit of information in this book that you'd consider common sense, until you think of how you do it yourself. Apparently, even though it is common sense, we don't really do it ourselves that often. This book is a good reminder of common sense and how it can and should be applied. Aside from that there's discussion on quite a few tools and approaches for software development that were at least new to me and will probably be new to a lot of people in the PHP community. I highly recommend this book to anyone in the PHP community.