As I have done for the past 5 years, I will again this year create a list of my favorite books on software development. In recent years I have started reading more about software architecture than programming, therefore you will find some of these books as well. As seen before you will see some books that are new and others that have been on the list for years - some even from the beginning.
These are not books that necessarily have been published in 2021, but they are books which keep their value, which is also the reason why my list has not changed that much, when compared to previous years. I have read all of the books on this list and enjoyed every single one of them.
Disclosure: Bear in mind that some of the links in this post are affiliate links and if you go through them to make a purchase I will earn a commission. Keep in mind that I link these companies and their products because of their quality. The decision is yours, and whether or not you decide to buy something is completely up to you.
Here is my list for 2021.
1 - The Pragmatic Programmer: From Journeyman to Master
Author: Andy Hunt (Sometimes Andrew)
This year I decided to return this book as number one on my list. This is likely the first book I read on programming. I remember I was about a year into my professional career when I read it. 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 from this book. 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 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. Amazon has the following summary of its contents:
- Fight software rot
- Learn continuously
- Avoid the trap of duplicating knowledge
- Write flexible, dynamic, and adaptable code
- Harness the power of basic tools
- Avoid programming by coincidence
- Learn real requirements
- Solve the underlying problems of concurrent code
- Guard against security vulnerabilities
- Build teams of Pragmatic Programmers
- Take responsibility for your work and career
- Test ruthlessly and effectively, including property-based testing
- Implement the Pragmatic Starter Kit
- Delight your users
Since last year a new version of this book has been made:
You can find the original version here:
2 - Release it!
Authors: Michael T. Nygard
This book is also on my list of great architecture books. 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 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.
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 is. 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 continuously 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 of this book has to offer and you may not learn a lot from it, but I read it long after I had started to practice TDD and still enjoyed it. Sometimes we like to read books that confirm what we are doing is right. However if you are new to TDD, this book is a must-read. It is very short and easy to understand. The code snippets are in Java, but they 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. This includes continuously refactoring and improving your code - which also makes it more maintainable.
Not long ago (November 2018) Martin Fowler released a new version of the book. 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 instead of the old 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 one of the things to look out for is the ability to scale: 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 and organisations 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 have used 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.
9 - Don't make me think
Author: Steve Krug
Quite a few developers who end up on this page are web developers or work with user interfaces. I used to do this a lot myself, 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 and it is also a great entry level book for User experience. Even though the book focuses on web development, it can still be used for general 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 short, fun 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 or Peopleware this is a good read even if you are not a project manager, as these books are about being productive without getting burned out. I believe people working in the field of science or any other knowledge work will also benefit from reading this book as well.
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.
11 - Working Effectively with Legacy Code
Author: Michael C. Feathers
Ah.. Legacy code. There are a lot of definitions of legacy code out there. This book is mostly about how to get in control of old untested code where the original creators are long gone. My favorite chapters are on how to handle applications that do not have any structure at all and get in control of those.
Amazon describes its contents as the following:
- Understanding the mechanics of software change: adding features, fixing bugs, improving design, optimizing performance
- Getting legacy code into a test harness
- Writing tests that protect you against introducing new problems
- Techniques that can be used with any language or platform―with examples in Java, C++, C, and C#
- Accurately identifying where code changes need to be made
- Coping with legacy systems that aren't object-oriented
- Handling applications that don't seem to have any structure
- This book also includes a catalog of twenty-four dependency-breaking techniques that help you work with program elements in isolation and make safer changes.
That is my list for 2021
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 books on these lists as well. You can also take a look at my list for 2016, 2017, 2018, 2019 and 2020 for further inspiration.
That was my list of great books to read in 2021. If I missed any books or if you disagree with my picks, please let me know in the comments down below!