As I have done for the past 4 years, I will again this year create a list of my favorite books on software development. As seen before you will see some books that are new and others that have been on the list for years.
These are not books that necessarily have been published in 2020, but they are books which keep their value. Which is also the reason why my list has not changed that much, if compared to last year. I have read all of the books on this list and enjoyed every single one of them. Here is my list for 2020:
1 - Release it!
Authors: Michael T. Nygard
This book is also on my list of great architecture books. For the past many years the book The Pragmatic Programmer has resided as number one on my list. This changed this year due to me reading "Release it!" This is a great hands on book, which takes you through all the things that can go wrong with software and systems. Michal Nygard mentions a long range of war stories of different software failures that make systems crash horribly. My most favorite part of the book is on stability patterns and stability antipatterns. These are patterns found around connections/endpoints which improve or decrease stability. This book is more relevant than ever in these days with the amount of connections our software has. It is especially relevant if you are working with micro services or distributed systems in general.
I have created a thorough review of this book here.
2 - The Pragmatic Programmer: From Journeyman to Master
Author: Andy Hunt (Sometimes Andrew)
This is likely the first book I read on programming. I remember I was about a year into my professional career. Many of the things mentioned in this book are very basic and easy to understand. If you are new to programming you may learn a great deal. If you have years of experience it will likely confirm what you are doing is right (or wrong). Therefore I believe this book is great for developers of all levels of skill.
Something that you will definitely learn is how to approach development pragmatically. This book will guide you through the obstacles and technical decisions in the daily work of a programmer.
3 - Head first Design patterns
Authors: Eric Freeman, Bert Bates, Kathy Sierra and Elisabeth Robson
Do you want to learn about design patterns? look no further! I got this book in my hands while I was studying for my AP in computer science. I did not at the time, understand how great this book was. But I read it again after I had worked a couple of years. I found it to be such a great dictionary and lookup for design patterns.
Even though this book is very technical with a lot of code to grasp. It is still relatively easy to read. It has some great examples and humor. The examples in this book are in Java, but they are applicable for most programming languages. If you already have this book and is looking for an alternative. You could try an older book I also have enjoyed: Design Patterns: Elements of Reusable Object-Oriented Software
4 - Building microservices
Authors: Sam Newman
You may associate the word "microservice" with "buzz" and I will not judge you for that. You may replace the word "microservice" with "service" and carry on reading. Even though you are not working with microservices, this book is a great help for defining systems/services and their responsibilities. This book takes you through the setup you need to make, in order to succeed in creating continuous delivered software and be able to easily make changes to your system. It goes through some of the aspects such as log aggregation, how to decouple software, versioning, testing and deployment. Overall when you are done with this book you should be able to make better architectural decisions when designing your services.
Sam Newman also has a presentation of the topics in his book here.
You may also learn more in-depth what microservices are about - or get this refreshed.
5 - Test Driven Development
Author: Kent Beck
Test driven development (TDD) - by now I believe all software developers have heard about TDD. It is a practice where your writing of tests drives your software development. If you have practiced TDD you will already know most this book has to offer. I read it long after I had started to practice TDD and still enjoyed it, even though there was little to learn for me. However if you are new to TDD, this book is a must-read. It is very short and easy to comprehend. The code snippets are in java. But are so simple that you can read them with any programming language background. I would say this is the best book for entering the world of test driven development. Kent Beck also included some humor in this book which makes it fun to read. The book is relatively short - it can easily be read in a couple of days (perhaps even one).
Even if TDD is not you, you will still learn how to structure your code better and make it more SOLID.
6 - Refactoring (2018 version)
Authors: Martin Fowler
A list without refactoring? well not this time. Among lists on software development the book refactoring or clean code always show up. I have never read clean code so I will include refactoring in this list. As you may already know refactoring is a book on how to create great code. Continuously refactoring and improving your code - which also makes it more maintainable.
Martin Fowler has just released a new version of the book in November 2018. I have not yet read this one, but I have read the old one. Seeing as the new book is already a bestseller I have included the new one here:
7 - The art of Scalability
Authors: Martin L. Abbott and Michael T. Fisher
By now you can see from my list that I am into software architecture and professionally I am working with large systems. In large systems or systems with big throughput there is always one thing to look out for: scalability. When it comes to scalability, this is the go-to book. It takes you through everything you need to know about scaling large systems. It is based a lot on theory. But theory that can easily be applied to the systems you are developing. This book is not only interesting for software architects. It is also great for software developers or operation engineers. The only negative thing I have to say about this book is that it is a long read (500+ pages).
8 - Enterprise Integration Patterns
Authors: Gregor Hohpe and Bobby Woolf
I read this book many years ago during a class on how to integrate systems. At first I did not like it much as I thought many of the patterns were too simple. However through the years it has been a good reference when working with developers who have also read the book. This book is especially good if you are working with microservices and communicating through a broker (Message queue system).I use this book mostly as a reference as it can be hard to just read through.
If you truly are into Microservices, I would suggest Sam Newman's book named "Building microservices" to go with this book. Which is also on this list.
9 - Don't make me think
Author: Steve Krug
Some developers who end up on this page are web developers or work with user interfaces. I used to do this a lot my self, and during my time working with web development I read the book "Don't make me think". This is a fantastic and comprehensive book on usability. Steve Krug takes you through many annoying and irritating situations while dealing with the web. He illustrates the user's frustration in a way which makes you feel compassion. There is a lot to learn from this book. It is also a great entry level book for User experience. Even though the book focuses on web, it can still be used for general purpose User experience.
His overall mantra "Don't make me think" is the theme throughout the book. If you have to think in order to use an interface - then it is not that good.
This book is excellent to bring on a vacation, as it is also short and inspiring.
10 - The Mythical Man-Month
Author: Frederick P. Brooks Jr
A book on project management? - well yes! You may not be a project manager, but you are likely working in a corporation with smaller or larger projects. For some reason I have always liked to read about project management even though I have never aspired to be one. Just like slack this is a good read even if you are a programmer. I believe people working in the field of science or any other knowledge work will also benefit from reading this book.
Some of the things you will learn in this book: developers are optimists, development tools makes a great difference, time to (deliver) market is of great importance and adding manpower to a late software project makes it later. Sounds familiar?
This book is originally from 1975 and the software that it describes is from the 1960's and 1970's. This makes it the oldest book on the list, however the lessons from this book are still of value today.
That's my list for 2020
Did you not find what you were looking for? Please take a look at my lists of Great Asp.net core books or Great books for software architects - there are some great must-read books on these lists. You can also take a look at my list for 2016, 2017, 2018 and 2019 for further inspiration.
That was my list of great books to read in 2020. If I missed any books or if you disagree with my picks, please let me know in the comments down below!