Like most of the developers, at the beginning of my career I started with watching video tutorials, which is completely fine. What I realized later is that only when you start reading books you can gain a certain type of depth in your knowledge base, which becomes stronger with every good book under your belt.
The idea of this post is to give my suggestion for people wanting to read books but do not know where to start or what to read. I will mention some mistakes that I made with previous choices and give my advice and opinion on books I read until now.
This will be regularly updated with every new book I read.
Where to start
My first book was Refactoring and I can’t explain how good this book was. Book explains how to refactor your code and make it cleaner and readable. This is one of the books that changed the way I write my code completely and I think that everyone should read it at one point in their career.
Clean Code is also a must read, you will find some stuff from the Refactoring book in here along with a lot of advice on how to take care of your code, and again, make it cleaner and readable.
Clean Coder, one more book from Uncle Bob and his “Clean series”. This book is very easy to read and different from the other two because you mostly won’t see any code here (I am not 100% sure, I read it a long time ago). This book will teach you about estimations, how to manage your time, when to say “no” and how to behave as a software developer.
I made a mistake with design patterns. I read a book too early in my career and it basically gave me no value. In my case the problem was I didn’t have much experience, and I couldn’t connect or understand a lot of stuff. About half a year ago I tried again but with a different book and it was totally different story. A lot of stuff was clear and most of the things in the book I already encountered without even knowing it was a design pattern. It helped that I could connect my previous coding to a pattern and that I understand where I could’ve used it if I knew about the pattern, that is what was missing for me the first time.
Refactoring to Patterns should for sure be your first book about patterns. I really enjoyed the approach in this book, it is very well explained. Joshua Kerievsky first shows the problem and then refactors the code step by step into a pattern. Why did I enjoy the approach? Because giving you a pattern catalog and just going over patterns isn’t enough. You need to understand when to use patterns and not to use it prematurely, maybe you won’t even need it. When you see the “bad” code and you take steps to refactor it into pattern you start appreciating that pattern more.
Design Patterns: Elements of Reusable Object-Oriented Software (also known as GOF) a legendary book about design patterns, anyone who heard about design patterns also heard about GOF. This should be your second book about patterns. A lot of times I heard how this book is boring and really hard to read, so I was delaying picking it up. Don’t listen to others, this book was great and I will probably read it again at one point. For me, it wasn’t boring at all, the question is how much you are interested in design patterns. The only “obstacle”, if I can say it like that, was that the code was in C++ and Smalltalk and I didn’t work with those languages, but I still understood almost everything.
The Agile Principles, Patterns, and Practices is not a must read. I basically run through the design patterns examples just to confirm my knowledge from the 2 books before. Besides design pattern, here you will also learn about package designs, different types of UML diagrams, testing and much more. If you have time give it a read, it is worth it.
The Patterns of Enterprise Application Architecture is another great book from Martin Fowler. This book is in my eyes basically a continuation of GOF. The first part of this book is a short tutorial on developing enterprise applications. The second part is about patterns used in the first part. You will learn a lot about ORM patterns. Book also talks about Distribution patterns, Web Presentation Patterns, Concurrency Patterns, Approaches to organizing Business logic.
Domain Driven Design
If you never heard about Bounded Contexts, Ubiquitous Language, Strategic Design, Subdomains, Context Mapping, Aggregates and Domain Events, then start with Domain-Driven Design Distilled. Short book that will explain all the basics you need to know and get you up to speed and into the DDD world.
Next on your list should be Tackling Complexity in the Heart of Software. This book will explain everything you need to know about DDD. Unfortunately for me half way in it started to get pretty boring and very hard to read, it took double the time that I thought it will. I was probably expecting too much from this book since I already knew a lot of stuff.
If your language of choice is PHP, I can recommend DDD in PHP. This book is very good. There are a lot of code examples that will quickly get you into DDD with a lot of familiar code that makes it even easier to understand it. This was my second DDD book only because I mainly work with PHP.
Clean Architecture, I am biased here. I really enjoy Uncle Bobs books, talks, blog posts and his stories about programming decades ago. Another great book, explains why architecture goes wrong and how to prevent it, what software architects need to achieve, what’s critically important and what’s merely a “detail” and much more. Book will tech you a lot of stuff you need to know with great examples around architecture.