If you’ve been into software engineering for some time and enjoy reading books, you’ve probably come across some classics such as Code Complete, Refactoring, The Mythical Man-Month or Peopleware. While they are still great, for this article I’ve put together a list of more recent books that I consider my current personal top 5. There’s some recency bias, of course, so regard the list as snapshot for the time from 2017 to 2018.
The books cover a mix of areas such as software design and management or “people topics”. Each brief review contains sub-sections on Why you should read it and Older or similar books.
2018, by Adam Tornhill
Following Your Code as a Crime Scene, Adam Tornhill’s new book is about the fascinating topic of code analysis and “code health”. It’s one of the most substantial books I’ve ever read about software engineering. The author demonstrates a number of techniques (mostly based on data from version control systems) for identifying hotspots, complexity trends, coupling, or refactoring opportunities. All material is properly backed up with examples, references and a couple of intriguing visualizations. After reading the book you might ask yourself: How do you best apply and integrate your new knowledge into your engineering process and how do you convince co-workers of the value of the approaches? Luckily, there’s tooling support, so start small and keep improving…
You’ll learn how to analyse code bases, how to keep your code healthy, and how to organize teams to ultimately create more sustainable work. Definite must-read if you’re accountable for quality in your role as software engineer, architect, or engineering manager.
Your Code as a Crime Scene. Parts of the book somehow related to: Working Effectively with Legacy Code, Refactoring, Clean Architecture
2018, by John Ousterhout
The book presents the insights from John Ousterhout’s own experience working on a variety of large systems and his Stanford class where his students iteratively design a program through a code reviews process. It’s the book I’d recommend to somebody asking me about how to improve coding and design skills. You’ll learn a number of heuristics and “red flags” aimed at keeping your code simple and comprehensible.
Interestingly, topics such as unit testing, test-driven development, or agile development are only briefly discussed in a chapter on “Software Trends”, which reads like the rest of the book: well argued and to the point but always acknowledging that this is certainly not the last word on good design.
The core topic of A Philosophy of Software Design is simplicity — consequently, the book itself is simple to understand. The chapter about deep and shallow modules alone is worth the price of the book. It also challenges popular practices such as some of the tactics promoted by Clean Code (small methods and classes, etc.) or certain OO design patterns.
Code Complete, The Art of Readable Code, Clean Code
2017, by Martin Kleppmann
Through various trends such as cloud-native applications, microservice architectures, or NoSQL datastores, reasoning about the characteristics of distributed systems and data has become almost inevitable. This book by researcher and software engineer Martin Kleppmann explains both the theory and practice of data-driven applications in a way that immediately conveys the impression that the author has deep knowledge of the area (after all, only if you have deep knowledge about a topic, you can teach it well).
Distributed systems is an area where significant amount of research exists and discussing the topic can quickly become academic (think consistency, consensus, etc.). Martin Kleppmann, however, writes in a very clear and approachable way without sacrificing depth. Similar to Software Design X-Rays, this book gets the balance between pragmatic and academic just right.
Somehow related: Designing Distributed Systems, Designing Microservices, Patterns of Enterprise Application Architecture
2017, by Erik Dietrich
This book is probably the most unique in the list and unlike everything else I’ve read so far. I’d not recommend it to software engineers early in their career since there’s a good amount of cynicism about the politics and dynamics in corporate and startup software development. It’s one of the books that I couldn’t put down since it’s written so well and explains the driving forces behind our corporate structures, management styles, and career ladders. If you decide to read it, you’ve taken the red pill…
If you enjoy being employed in a pyramid-like company structure, it shows you how to play the game. If you’ve been into software engineering for a while, you’re likely to recognize a lot of the mentioned behaviours in your co-workers, bosses, and company politics. While the book might disenchant you, it also unveils how to change things to your advantage without manipulating people (no spoiler…)
Probably none, maybe The Mythical Man-Month, Peopleware, and Adrenaline Junkies and Template Zombies to some degrees
2017, by Camille Fournier
The more experienced you get as software engineer, chances are the more you need to take on additional responsibilities in management and leadership. The Manager’s Path covers the entire journey from being an engineering lead of a single team to managing multiple teams and representing the technical leader of a company. It’s a pragmatic and authentic book about technical leadership, management, and people topics in tech companies — without much of the dramatizing and shallow advice that you often find in other “people” books.
Although mostly addressing engineering management, the book is certainly valuable for software engineers staying on the technical path. You’ll learn about team dysfunctions, project management, and solutions to common issues in software development processes. Maybe not groundbreaking but if you intend to only read one book about engineering management, I’d recommend this one since it contains lots of honest and actionable advice.
High Output Management, Debugging Teams, Peopleware, The Mythical Man-Month