As a student, I discovered Jeff Atwood’s Coding Horror blog. His and other popular blogs helped form my understanding of software engineering. I started looking up to these experienced developers, who were sharing their knowledge and insight on the web.
Jeff’s Recommended Reading for Developers (originally published in 2004) became my to-read list. There were quite a few university classes where I progressed through a book instead of listening to the professor. The recommended books (and what Jeff and other experienced engineers were writing) seemed like a better time investment for me. I didn’t go through all the books on his list, but I completed most of them. These books greatly affected how I approached my craft and career. If even one person will find the recommendations in this blog post as helpful as I once found Jeff’s recommendations, it’s a win.
(to be clear, I’m not recommending ignoring professors)
I’ve consciously tried to limit myself when crafting the list of recommendations. My initial target was twelve. I ended up with fifteen. Almost.
This list contains no books about specific technologies. Those are useful, but my goal was to provide a list that would be relevant for most people in the field of software engineering. I also think that general software engineering skills are more important to hone than knowledge of specific technologies, especially early in the career.
I’ve divided my recommendations into five sections: start, level-up, systems, manager, and manager of managers. While those sections relate to a specific phase of the engineering career, I believe everyone can benefit from reading these books at any stage. For example, I read “Peopleware” for the first time in one of those university classes when I should’ve been listening to a professor. Even if some of it flew over my head, I found it highly enlightening.
Start - to those at the beginning of their software engineering journey
- The Effective Engineer: infuses the high leverage mindset into thinking about creating software: impact produced / time invested.
- The Missing Readme: of the newest books in this list - contains practical advice about the day-to-day of the modern software engineer.
- The Pragmatic Programmer: a collection of wisdom to improve software development. As this book is over 20 years old, some examples might feel dated, but the insight remains relevant.
Level-up - to those taking the next step in their software engineering journey
- Peopleware: some of the biggest challenges in creating software are sociological. Leveling up has a lot to do with understanding this and acting accordingly.
- Code Complete: a massive tome of a book about how to craft code very well. In addition to teaching various practical skills (e.g., how to name variables), it also highlights the importance of humility, curiosity, and intellectual honesty.
- The Elements of Style: working in a software engineering team requires good written communication. This short book contains a solid list of practical tips.
Systems - to those wanting to see the bigger picture of software systems
- Thinking in Systems: improves the ability to reason about any systems, giving a new lens through which to view the world.
- Fundamentals of Software Architecture: a handbook on picking a software architecture, what to measure, and various trade-offs. The part about a software architect’s job can easily be skipped.
- Learning Domain-Driven Design: practical, easy-to-read, and well-structured guide about domain-driven design (DDD). And even if you don’t intend to use DDD, the ideas and patterns are useful.
Manager - to those leading and wanting to lead teams
- The Manager’s Path: a great book on navigating the career path from an Individual Contributor to a Manager. It doesn’t go into depth on any topic but provides a good overview.
- High Output Management: a compact and classic guide to being a manager. Some content might seem better suited for a floor manager at a manufacturing company, and that’s why everyone should combine the knowledge in this book with other books about leading people.
- The Five Dysfunctions of a Team: a fable that provides an excellent framework on how to think about team dynamics.
Manager of managers - to those growing beyond leading a single team
- Scaling Teams: a perfect overview of organizational challenges for companies going from 10 to a couple of hundred employees.
- Team Topologies: explains the principles and patterns for successful team structures and efficient interactions between software engineering teams.
- Lean Enterprise: presents Lean and Agile principles and patterns to help a company move fast at scale.
As a final thing, for the visual world of today, here’s this list as a single image:
I hope that someone will find these recommendations helpful. If you have any recommendations of your own, don’t hesitate to reach out to me.