Book Recommendations
Introduction
Even though I have specific articles posted for my book reviews (see part one here) I decided it'd be helpful for me to keep a more succinct list of book recommendations in a separate article.
Software Design
- Designing Data-Intensive Applications [⭐⭐⭐⭐⭐]: the absolute gold standard on designing applications that scale.
- Fundamentals of Software Architecture [⭐⭐⭐⭐⭐]: this books serves as a great introduction to architectural patterns and good engineering practices.
- Building Microservices [⭐⭐⭐⭐⭐]: should be mandatory reading for developers working with a microservices architecture or to those who are considering building microservices.
- Understanding Distributed Systems [⭐⭐⭐⭐]: basically "Designing Data-Intensive Applications"-lite, but less dense. Still a very good read.
- System Design Interview - An Insider's guide (Vol 1 and 2) [⭐⭐⭐⭐]: while this book is mainly aimed at people preparing for interviews, volumes 1 and 2 are both excellent references on how specific scalable systems are built at big tech companies.
Leadership
- Become an Effective Software Engineering Manager [⭐⭐⭐⭐⭐]: my absolute favourite book on tech leadership. Recommended reading even for people not on the engineering management track.
- The Manager's Path [⭐⭐⭐⭐]: a very good primer for developers getting into management.
Career
- The Tech Resume Inside Out [⭐⭐⭐⭐⭐]: having read through countless resumes I have to say this book should be mandatory reading for developers, period.
- An Elegant Puzzle [⭐⭐⭐⭐]: a very good read for engineers eyeing the engineering management track.
- Staff Engineer [⭐⭐⭐⭐⭐]: the staff engineer counterpart of "The Elegant Puzzle", although I did find this book to be a slightly better one overall.
Best practices
- Domain Modeling Made Functional [⭐⭐⭐⭐⭐]: an excellent book that tackles both domain-driven design and functional programming at the same time.
- Clean Code [⭐⭐]: I know it's in vogue to hate on Uncle Bob and Clean Code, but I still have to put this here because I see and hear this book being recommended far too frequently. Please, please don't read this book and then treat is as the Holy Bible. For every decent advice this book has it offers a dozen terrible ones. If you're a junior, there's plenty of books even on this page that'll serve you better. If you're a senior, you should already know most of the useful stuff that's in this book.
Programming Languages
- Programming Rust [⭐⭐⭐⭐⭐]: a very good book on Rust (that I'm still working through).
- Haskell Programming - from first principles [⭐⭐⭐]: I have written about this book here. It's OK as an intro to both FP and Haskell especially to complete beginners, but I personally wasn't a big fan.
C# and .NET
- C# in Depth [⭐⭐⭐⭐⭐]: a wonderful overview of C#'s history and a deep dive into some of its features. Probably the best intermediate level C# book out there. Note that the latest, fourth edition only up until C# 8.
- C# in a Nutshell [⭐⭐⭐⭐⭐]: the latest edition of C# in a "nutshell" is probably the definitive reference book on C# out there, coming in at merely 1058 pages! While the whole book is great, the section on threading is probably the best intro one can get into C# threading -- no wonder, considering the book was written by Joseph Albahari.
- CLR via C# [⭐⭐⭐⭐]: even though this book is somewhat old at this point, it's still the best advanced book on .NET and CLR internals.
- Book of the Runtime [⭐⭐⭐]: while this is not necessarily a book as much as it is a collection of documents, BOTR is the definitive deep dive into the CLR and the BCL. The target audience is clearly the maintainers of the .NET runtime, but it can be an interesting read for C#/.NET developers looking to get a better understanding of the runtime.
- Pro .NET Memory Management [⭐⭐⭐]: a very thourough treatise on the .NET memory model and the GC. Very similar in style and depth to CLR via C#, but covers more modern topics as the book came out in 2019. While the content of the book itself is great, due to the subject matter the author goes into excrutiating detail on memory, very frequently dipping into the IL/JITted code level.
Misc
- Refactoring UI [⭐⭐⭐⭐⭐]: a book full of amazing, actionable UX/UI advice for the average developer.
- Operating Systems: Three Easy Pieces [⭐⭐⭐⭐⭐]: probably the best text on operating systems out there. I wish the operating systems course I took was this good.
- Grokking Algorithms [⭐⭐⭐⭐]: a neat little book that covers a significant portion of an Algo101 class for those who have not taken one, or those who have already forgotten.