The Pragmatic Programmer: From Journeyman to Master

Mihai Chelaru-Centea

Book by Andrew Hunt and David Thomas

Resource last updated: Jan. 10, 1999


Overview

This book is a classic, showing up second if you Google "top ten programming books." With a focus on professional development, the book provides keen insights on many of the things required to level up as a software developer and quickly get to where you need to be in terms of producing robust, readable code and solid, well-crafted software products that will win over your bosses and clients.

Format

The Pragmatic Programmer is divided up into eight main chapters, each with five to seven subchapters that go into detail about a particular topic. Each chapter also has a section at the end containing some challenges and exercises that allow you to test your understanding of the material and leave you with some food for thought. They present the answers to these questions in the Appendix at the end of the book.

Each chapter is relatively short, usually no more than five or ten pages, and the text is further subdivided into smaller chunks by subheadings that introduce the different aspects of a particular topic, which is very friendly to readers who like to take notes or read bite-sized chunks of text and digest the contents before moving on.

Content

The variety of the knowledge contained in this book is vast, starting with a basic philosophy of taking ownership and responsibility for one's contributions to a project, then moving on to more technical aspects like pragmatic approaches to development to make debugging easier down the road, and finally goes full circle at the end in Pride and Prejudice (What's with these chapter titles?), where the authors encourage signing one's work and building a personal brand associated with the work one produces.

Difficulty

Although this book is geared towards any coder or software developer regardless of skill level, I found myself sometimes struggling to understand some of the examples presented due to lack of experience with many of the technologies they reference. Any code they show is typically in Java or C, both languages that a large number of beginners are presumably exposed to.

The chapter titles are sometimes very intuitive, like The Evils of Duplication and Orthogonality, although at other times they have slightly more obscure names like Stone Soup and Boiled Frogs. These analogies can either make it easier to remember the content, as I would say is the case with Tracer Bullets, or harder, as with the Law of Demeter, which is a name that really tells one nothing about the subject matter.

I would say this book has some content that is accessible to total beginners, but it is mostly for those who already have work experience in software development and who want to learn from the mistakes of those who came before them to get ahead.

The Bottom Line


You'd be hard pressed to find a book that more thoroughly explores the foundations and nuances of programming, while also touching on the professional skills that go along with it. Even if you might not agree with everything they say, and even if some of what they talk about might be obsolete nowadays where automation is the norm and more and more tools come out each year, some of the concepts discussed in this book are timeless, which is why this book has stood the test of time and is still relevant today.