Anyone who develops software for a living needs a proven way to produce it better, faster, and cheaper. The Productive Programmer offers critical timesaving and productivity tools that you can adopt right away, no matter what platform you use. Master developer Neal Ford not only offers advice on the mechanics of productivity-how to work smarter, spurn interruptions, get the most out your computer, and avoid repetition-he also details valuable practices that will help you elude common traps, improve your code, and become more valuable to your team.
This isn't theory, but the fruits of Ford's real-world experience as an Application Architect at the global IT consultancy ThoughtWorks. Whether you're a beginner or a pro with years of experience, you'll improve your work and your career with the simple and straightforward principles in The Productive Programmer.
Review By: Ann Drinkwater 06/22/2009Just as the title specifies, The Productive Programmer is a resource for those of the technical nature. This book has two main focuses: methods and practices. There are numerous keyboard, coding samples, and overall suggestions for improving developer efficiency from both a Windows and Mac environment.
I reviewed this book not as a developer but a project manager who oversees development resources. Outside of the very technical coding samples it was easy to read and follow. There are a few areas I could directly apply in my role:
Reducing/automating tasks that are repetitive and simple, as they squander your concentration and energy. Repetition is the single most diminishing force in software development.
The thinking that finding innovative solutions to problems makes it easier to solve similar
problems in the future.
Never keep two copies of the same thing.
Things that are difficult to test should either be refactored into simpler things. If you can't simplify, they should be rigorously tested.
Always choose using the keyboard over the mouse.
The premise of accidental complexity and need to reduce items in this category, focusing on
A number of the principles in the material are common themes within the agile world and are being emphasized more and more in software development. There is a section on developer focus, which is important to productivity. It would have been nice to see more specific examples on how to achieve flow and studies and statistics relating to software complexity.
The notion of accidental complexity was interesting to me. There are likely unnecessary and overly burdened processes, policies, and other factors outside of the activities needed for delivery that impacts a developer. Removing these obstacles and accidental complexity is essential to improving developer throughput.
I would recommend this material to both developers and project managers. There are numerous examples in the book that serve as common-sense refreshers, tools for improving efficiency and automation and technical applications.
Review By: L. John Ribar 06/22/2009This is one of those books you wish you saw a long time ago. In fact, in the introduction, David Bock writes, "I wish I had this book in hand ten years ago; I'm sure it will have a profound influence on those who read it." After reading it, I am quick to agree.
When I first got this book, I was expecting to read about activities that would make me more productive in my programming. To my delight and surprise, Ford goes into so much more that the book became a living experiment as I continued through. Not only does he cover some of the things you would expect of a programmer (writing tests to save you time later on, building things as they are needed and not "just in case"), but he gets into the down-to-earth types of activities that can make your overall programming experience more enjoyable.
The book is broken up into two main sections, Mechanics and Practice. The Mechanics section is the one that provides immediate assistance. Ford covers things like using and learning accelerators (Stay away from the mouse!), ways to keep yourself focused, and how to keep your team out of your hair. He also describes a large group of automation tools to let the computer do the simple work and allow yourself more time to invent the new things. He ends this section with a good discussion of canonicality, or the elimination of duplication. This centers around the DRY principle (Don't Repeat Yourself), which is becoming more prevalent, especially in Ruby circles.
The Practice section delves into tools and techniques that will assist your programming flow. He discusses using test-driven development, static analysis, meta-programming, and even citizenship and the influence of ancient philosophers.
Several factors make this book a keeper for me. First, while the coverage of some of the topics is not overly deep, it is very pragmatic and extremely easy to read. For many of the actual tools he describes, he provides Windows, Mac, and Linux versions, so wherever I am working I have guidance to get started. In addition, before he talks about any tool, he clearly defines the purpose of the tool, why it is important, and what makes it effective. Because of this, the book will be of interest both to beginning programmers as well as to more seasoned professionals who are looking for that extra five percent! Not only will I be recommending The Productive Programmer to fellow developers, I think I'll even give a few copies to other professionals in my office.