This article was originally posted on my brand new blog The Developer's Dungeon
Last week I wrote an article analyzing my first 5 years in development and giving some recommendations, one of my suggestions was Always Read Technical Books!. A lot of people showed interest in the subject so I decided to write the following article about the books I think are the most useful for developers.
If you are interested in the first article you can read it here!.
I always preferred tutorials and online courses but unfortunately, they won’t cover the fundamental knowledge that will take your development skills to a whole new level. For the last 2 years, I have been eating technical books, one after the other, trying to implement what I read at my daily job. I have seen the quality of my code get a lot better, and also noticed many mistakes I was making, which made me create better standards for myself and pursue the mastering of my craft. I now think about how much time I 'lost' before starting to read these type of books and just wished I started earlier, hopefully, this article will give you a head start in the path to be the best developer you can be.
Just to be straight with you, some of the links are amazon affiliate links, others are not and some books are even free. You don't have to buy them from these links, but if you do I will appreciate it.
1. Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin)
This book is an amazing start, I would definitely consider it the first one. It takes on various topics like dependencies, naming of methods and classes, comments, testing. In my case when I read this book I immediately felt like an idiot, I felt like I was doing everything wrong, it basically shook everything I thought I knew about building software.
I do believe that after reading this, my code is more maintainable, testable and self-explanatory.
The book is also written very well which makes it incredibly easy to read multiple times.
2. The Pragmatic Programmer, your journey to mastery (Dave Thomas and Andrew Hunt)
The new 20 anniversary of this classic is out, I read the original version 2 years ago. It was my first technical book and it was a good one, right up there with Clean Code.
This book is filled with amazing simple tips you can do to make your software better, from how to handle tests and refactorings, to creating automated tools, to avoid duplication. It has one good tip after the other. The book is also written using studies and stories as examples which makes those tips easy to understand and interiorize.
3. The Clean Coder: A Code of Conduct for Professional Programmers (Robert C. Martin)
Yes, another one from Robert C. Martin A.K.A Uncle Bob. He is a guy with strong opinions and a contagious passion for software. This book is all about that passion, is about how we should handle all steps of creating and maintaining software and tries to create a set of principles that all developers should apply. I truly believe this is also a must for every developer, in my case it made me question my own professionalism and inspired me to start driving my day to day actions at work differently.
4. Working Effectively With Legacy Code (Michael Feathers)
The book's title seems to be everything you might need, right? At least that is what I thought when I saw it. Don't we always work with legacy code? You are on a greenfield project without tests so this doesn't concern you?
After reading this book you will look at legacy code in a very different way, you will notice that most of our work is dealing with it and this book will add tons of tools to your belt on how to bring that legacy code to an era of glory. It is also one of those books that makes you think you were doing everything wrong, to the point you feel shame about the software you are making. It is at that point that big improvements will happen.
5. Test Driven Development By Example (Kent Beck)
This might be a little controversial, there will be two kinds of arguments here. The first one: "Do I really need tests?" You would be surprised how many developers do not test their code in 2019. They fail to realize that part of developing is to provide a repeatable way of showing the correctness(or the NOT Failure) of your programs.
The second argument is if you really need Test Driven Development. You might be doing tests after you build the software and think it is the same, but it is not. There are a few features that TDD gives you, that you will not get if you do the tests after the code, particularly a complete trust in your test suite which enables you to do refactorings with ease, automatically helping your code become better.
After reading this book you will understand the differences. What you will not understand is how were you producing software without it.
That is my top 5, I do have more, a lot more, but I think those are a must. I generally don't read technical books on a specific technology, tech moves so fast that those kind of books are most of the times outdated at the moment they come out, I found out that it is better to get the knowledge that can be agnostic to the technology used to implement it.
Just in case you already read those I am going to leave here some quick links to others I read and really enjoyed.
Refactoring: Improving the Design of Existing Code (Martin Fowler)
Adaptive Code: Agile coding with design patterns and SOLID principles (Gary McLean Hall)
Clean Architecture: A Craftsman's Guide to Software Structure and Design
(Robert C. Martin)
Structure and Interpretation of Computer Programs (Harold Abelson and
Gerald Jay Sussman
with Julie Sussman)
Design Patterns: Elements of Reusable Object-Oriented Software (Gang of Four)
Head First Design Patterns: A Brain-Friendly Guide (Eric Freeman and Elisabeth Robson)
If you need a book recommendation just let me know, there is always something new in my library 😃.
Thank you very much for taking the time to read this article, have you already read any of these books? I would love to read your opinion in the comments.
Do you have a book recommendation for me? Don't doubt to let me know.
Top comments (7)
Excellent recommendations! Another book that I see suggested a lot Code Complete. It's a bit long and dry, but filled with useful information.
For me, active engagement works best when reading technical books -- practice while you're reading, and things are more likely to stick. (Maybe that's obvious to most, but it took a while for me to figure out.)
Usually I would say you right, though some of this books are more theoretical so I did not do this. Others like TDD yes. Indeed code complete is also a great book, though on my experience is a little outdated and a lot of the same stuff is covered by clean code, which is a lot easier to read. That's why I did not include it ahah
You're probably right about Code Complete being outdated, it's been a while since I read it. One section stuck with me though -- how the aim is to remove complexity from any system. So true. As for the rest ... yeah, Clean Code just about covers it, and in a more enjoyable way.
Designing Data-Intensive Applications is a really good overview/introduction to understand how large distributed systems work.
Hey, thanks for the recommendation. I have a colleague reading that one right now so I might steal the book after he finishes with it ahah
great suggestions! I also like the extreme programming books.
Glad you like them!, do you have any as a suggestion?