What books have been most useful in advancing my career? These books.
These are the books that have taught me the most about how to be a better software developer.
I hope that distilling this down to a short list is useful for people that like to read and want to put some quality material under their belts.
- The Pragmatic Programmer by David Thomas and Andrew Hunt - This book is definitely the most influential in improving my thinking about software development. The Pragmatic Programmer gave me new ways to think about how to build software and provided a mental model for building sofware, uh, pragmatically.
- Crafting Interpreters by Robert Nystrom - This book improved my knowledge of how programming languages work more than any other. There is so much depth and content packed into Crafting Interpreters. You would learn a ton by reading this book.
- Working Effectively With Legacy Code by Michael Feathers - What is legacy code? Feathers describes legacy code as untested code. From that level, this book teaches all sorts of interesting techniques for improving code without tests and how to make a system more adaptable.
- Code: The Hidden Language of Computer Hardware and Software by Charles Petzold - My undergraduate degree was in Computer Engineering. As someone with that degree, I can say that if you want to skip four years of education to learn how computer actually work, this is a great substitute for that.
- Release It!: Design and Deploy Production-Ready Software by Michael Nygard - Nygard explains how to make robust systems and covers a bunch of ideas to help ensure that your complex software systems stay running and running well.
- Refactoring: Improving the Design of Existing Code by Martin Fowler - This book was really helpful early in my career as I learned out to navigate all the big pre-existing software systems that I was working in. The patterns in this book are still useful to understand today.
- Learn You Some Erlang for Great Good! by Fred Hebert - Erlang was my first attempt to learn about functional programming languages. Not only did I learn about how functional languages work with this book, but I also learned about powerful techniques for building very fault-tolerant systems.
- The Architecture of Open Source Applications edited by Amy Brown and Greg Wilson - This collection of chapters written by many open source authors (and the subsequent volume and the companion books like 500 Lines or Less) is a great way to learn about interesting solutions to problems from all over the software spectrum. Seeing these examples expanded my thinking about what is possible.
- Practical Vim by Drew Neil - As a long time Vim user, this book was a great way to advance my Vim skills. The book helped me move from an intermediate Vim user to an advanced Vim user.
- ZeroMQ by Pieter Hintjens - While ZeroMQ may not be as popular of a technology as it once was, Hintjens covers material and concepts that go far beyond the library. This was the first time I was exposed to the powerful idea of effectively using code generation as part of a software project.
There are books that I plan to add to this list, but I thought it would be better to get some of them listed before I can complete my list.