Disclosure: I was not compensated for writing this post nor was my review solicited. All opinions are 100% my own.
Quick Take: mostly worth your time and can be a good review for professional programmers. This book may offer the most value for people entering the field.
The Pragmatic Programmer book was recommended by a mentor when I was starting my technology career. I found it full of helpful advice for making the transition from computer science student to professional programmer. I recently read the updated 20th anniversary/second edition that was released in 2019 for a technical book club. This new edition has been updated to make it more relevant to the current industry landscape: the authors removed some outdated topics and updated the text to use more current terminology. It’s probably not a must-read however, if you already have the first edition and have been staying current. If you’re part of a technical book club that has members from varying backgrounds, for example a mix of software engineers, data scientists etc., then this book can be the basis for useful discussions about good programming practices.
The Pragmatic Programmer is divided into 9 chapters, each containing a collection of related topics ranging from practical career advice to the craft of writing software and how to approach working on projects. The book has a running theme: good code that’s not too difficult to modify is decoupled. The design by contract, shared state, testing and refactoring topics reinforce this theme.
Beyond the discussion about good code design, I found the following topics particularly interesting. Tracer bullets compared to prototypes was a good reminder about when we should build a prototype, and has a useful perspective on how to experiment when working on a project. Breaking temporal coupling sparked an interesting book club discussion about diagnosing and debugging this type of coupling. The programming by coincidence topic had good advice for understanding unfamiliar code. I’m also glad that they included property based testing and called out the Hypothesis tool because it’s very useful for generating synthetic data.
The content on concurrency is a good summary of the subject, but it is somewhat shallow. It would be a good starting point if not familiar with concurrency and parallelism concepts. If you’re new to concurrency and parallelism, then Rob Pike’s Concurrency Is Not Parallelism talk is also worth watching.
Other topics such as testing and refactoring are also short summaries of complex software concepts that can serve as a good introduction for the uninitiated. I found that the domain languages topic was kind of esoteric and less practical than other topics. Experienced software engineers should already be proficient in using version control and code testing. Students who haven’t yet done an internship or people breaking into industry may find the overview of version control and testing to be a useful introduction.
Given that we have to deal with increasingly complex and nasty cybersecurity issues, the second edition of the Pragmatic Programmer has a better perspective on security than in first edition. The authors added some basics about security everyone working in software should be aware of.
The authors encourage an artisan/master/craftsperson mindset; meaning a highly skilled, delivery oriented professional approach to software development focused primarily on delivering value. Being able to articulate the value you bring to a project or organization as a software engineer is a career superpower!
Course Review: Effective Pandas – Standard