97 Things Every Programmer Should Know is a collection of short essays by experienced programmers. And by short, I mean short: 1-3 fairly tiny pages a piece. If you're on a journey to become a software engineer then this book will give you a crash course in terminology you should be familiar with. Even as a practicing software engineer there is wisdom to be found in this book, but a novice will undoubtedly get more out of reading it.
97 Things Every Programmer Should Know by Kevlin Henney Released February 2010 Publisher(s): O'Reilly Media, Inc. ISBN: 9780596809485
The book in a nutshell
As I mentioned in the introduction, 97 Things Every Programmer Should Know is a collection of very short essays by practicing professionals. The essays treat a wide variety of themes that are relevant to a practicing software engineer, ranging from hard technical skills such as the Don't Repeat Yourself principle and Single Responsibility Principle, to softer skills such as interacting with managers and fostering good relationships with your colleagues. Most of the essays are focused on the technical side of things, however, and there is good variety in the technical topics. While a lot of the essays are about how to write good code, there is also a healthy amount of recommendations for tooling to use, such as static code analysers, automated test suites, version control systems and more.
There really isn't much more to say regarding what the book is about. It's like a collection of very well-written blog posts on programming-related topics. So if you're reading this blog, chances are good you're going to enjoy this book.
What I liked
In some ways, 97 Things has a lot in common with Apprenticeship Patterns that I reviewed last week. They're both about how you improve as a software engineer. The difference is that 97 Things is a lot more to the point and more concrete. For the most part, it presents tips and tricks that you can apply immediately and see benefits from just as fast. For the budding software engineer, it's an excellent pool of topics to diversify your skill set. That's with an emphasis on topics, though. This book presents a brief introduction to a wide variety of topics, but it dives deeply into none of them. I think this is a great strength of the book, as it means you will never get stuck on some "boring" topic that doesn't interest you.
While you can absolutely draw connections between the essays, they are written as standalone pieces of work. This makes 97 Things a perfect book to read on the go, when you might just have a few minutes or so to read.
Out of all 97 things, I recall only a handful that I didn't find genuinely helpful or insightful. Some essays even contradict each other, which actually gives a nice perspective on the fact that a lot of best practices are, to a large degree, opinions. A notable example I recall is about automatic code formatting, where one essay discourages its use and a few others encourage it. I think this is a great benefit of having so many different authors. You don't just get one person's opinion.
What I didn't like
As with many other books on how to be a good software engineer, there is a slight tint of workaholism over some of the essays. I especially found an essay by Robert C. Martin on what it means to be a professional programmer to send this message. It's the same theme I found a little bit disturbing with Apprenticeship Patterns. I can't say I disagree with the message; I truly believe in the craftsmanship approach to software engineering, the path of lifelong learning. But at the same time I don't think it is for everyone, and I think it should be possible to treat programming as "just a job".
A minor inconvenience is that the essays are ordered alphabetically, where I would have preferred them to be ordered by theme. Finding a particular essay of which you recall the theme but not the title is needlessly difficult. I just now suffered through it trying to find the aforementioned essay by Robert C. Martin.
But as a package, I find little to dislike about the book. Even the workaholism part is effectively counteracted by an entire essay dedicated to sending the message "work smarter not harder".
This is another book that I wish I'd read years ago. I strongly recommend it as a read for any software engineer at the beginning of their career or student (self-taught or at a seat of learning) who is preparing for their career. Being such a light and quick read, I find no good reason not to spend the few hours it takes to read through the book and be exposed to a whole lot of different ideas.