Sunday, November 18, 2012
Retro Book Review: The Pragmatic Programmer
Pragmatic Publishing books over the past few years, I always wondered if it made sense to go to the source of where this "Empire" grew from.
Before Pragmatic Publishing, Andy Hunt and Dave Thomas wrote "The Pragmatic Programmer: From Journeyman to Master". Published in 1999, it is definitely a product steeped in its time, its languages and its practices. Having worked at a company that went from mini to mega over the course of ten years in the 90's, I recognized most of the practices described when I'd skimmed the book at bookstores or in company libraries over the years. I wondered, would it be worth it to read now? I mean really, it's 13 years old. The programming and testing world has changed dramatically since then... or has it?
Picking up the book was made very easy a while back when it was offered on Amazon for Kindle for $1.99. Heck, for $1.99, I'm totally willing to do an anthropology experiment. My big question, though... as a software tester and not a traditional programmer, what insights would this offer me?
Having gone through this book from the perspective of a software tester, I would honestly say I think it acts better as an anthropological read than it might as a programming guide. Heresy? Maybe, but hear me out.
My guess is that, for many programmers, much of this advice is already well ingrained It certainly seems to be in the Agile teams and adherents that I have met (remember, this book was written in 1999, which means Dave and Andy, as well as many others, have proven to be quite prescient with their advice, as many programmers have taken it to heart). For a software tester like me, though, this was a wonderful chance to "see how the other half lives", or at least aspires to live.
Many of the tips that are presented seem obvious, almost comically so. Yet when I've gone back and reviewed a number of projects I've been on and interacted with the programmers that worked on those projects, I realized that much of this "common sense" definitely was missed by quite a few programmers I've interacted with. The list of tips that they offer and their explanations are actually a terrific cheat sheet for software testers. By understanding these pragmatic lessons, we can understand what programmers strive to do well, and if they fall short, we can respond with where they are falling short, in ways that they might actually appreciate and understand.
The book has a lot of Java, C and C++, which makes sense since that was the predominant group of languages at the time, but they also make the point to mix in several other less familiar languages and approaches, because they wanted to make the book as code agnostic as possible, yet allow real code to be showcased to make the points necessary.
For me, the true landmark of this book is not the advice that they espouse here, but what Dave, Andy and many other authors since then have done in the wake of The Pragmatic Programmer being published.
One complaint I would level, and perhaps it's a holdover from the times and how I view things today, is that "testing" as a topic is at the very back of the book. Everything is presented in a clean and orderly manner, but frequently, it would reference testing, and say look to [topic about testing] for further details. I chuckle at this now because this is definitely counter to the way that Pragmatic Publishing puts out titles today. In many cases, testing is in chapter one or two! Evolution or necessity, I don't really care, I'm just happy to see that evolution take place.
If you are a beginning programmer looking to become a great programmer, and you want to approach the topic from an attitudinal and discipline approach, I think this book is still very relevant. If you want to approach programming from a nuts and bolts perspective, I'd suggest getting knee deep into a language first and then come back to this (Zed Shaw's "Learn [Code] The Hard Way" lessons seem to be very much kindred spirit to the ideas and ideals of "The Pragmatic Programmer", and learning there first and coming back to this would not feel jarring or out of place). If you would like to have a treatise for the standard that programmers should hold themselves to, and a way to "get inside their skin and understand them better", then I think The Pragmatic Programmer can be and should be a must read. It's also an early glimpse into the dynamics and philosophies that would one day develop into one of my favorite publishing entities. From that perspective, this book is pure gold.
Easily the best $1.99 I've spent all year :).