Adam Petersen - Software Development Pages, Book Reviews Section
Start News Articles Book Reviews

Book Review

The Pragmatic Programmer: From Journeyman to Master
by Andrew Hunt, David Thomas

ISBN-13: 978-0201616224
Publisher: Addison-Wesley Professional
Pages: 352


This book is a modern classic. For me the sign of a really good book is that it makes me wish I’d read it as I started to develop software. The Pragmatic Programmer is such a book and easily one of the top-five programming books I’ve ever read.

The Pragmatic Programmer consists of 46 independent sections, each covering a certain topic. These topics range widely in both complexity and scope. There are fundamental design concepts like orthogonality and decoupling, practical advices on the development environment (source control, the need for scripting languages, fully customizable text editors, etc), to potentially more advanced topics like domain-specific languages and metaprogramming. Depending on your background, you’ll inevitably find some topics more interesting than others. Yet everything included in this book matters and makes a difference, which is the reason I wish I had it 10 years ago. The sections are filled with practical advices and are right on the point. Let me give you some examples.

Program Close to the Problem Domain” is fundamental to good design. Not only does it raise the abstraction level, it also makes the intent of the code clear; if there’s an important concept in the problem domain, that concept should be clearly represented in the resulting solution too (far too often this is not the case and many programs seems to be about reading XML, getting-setting data, or any other low-level implementation detail that leaks through). Programming close to the problem domain is often realized with a domain-specific language, possibly embedded in the host language itself. Some good examples of domain-specific languages are boost.Spirit and Peter Seibel’s library for parsing binary files. The latter also serves as an example of another advice, namely “Write Code That Writes Code”; an important advice that is easier to implement in some languages than others.

Not all topics are positive advices. “Evil Wizards” tell us to “Don’t Use Wizard Code You Don’t Understand” and uses Microsoft Visual C++ as an example. I couldn’t agree more. If some code shares so much commonality across a wide range of applications that it can be autogenerated by a wizard specifying just a few parameters, then it’s a sure sign of a fundamentally flawed framework. Please note that code re-use through libraries is a completely different thing; “Evil Wizards” are nothing else than cut ‘n paste code duplicators that introduce a lot of accidental complexity. As the Pragmatic Programmers put it, the problem is that the generated code becomes an integral part of the application.

I’m a big fan of the writing style of the Pragmatic Programmers; clear analyzes, interesting anecdotes to illustrate the points, passion about software, and much humor.

I would recommend The Pragmatic Programmer to everyone developing software, independent of experience level. Even if you find that you know most topics, the thoughtful analysis may give you a new angle to some aspect of software development, perhaps spawn some new ideas, or help you sharpen your arguments for or against a certain technique.

Reviewed July 2007


©2005 Adam Petersen adam@adamtornhill.com