Through time I have created several other posts on software development books that I like. Such as the books I recommended this year. This list has a focus on software architecture and how to design systems.
As always the books are not in any order. They each teach different aspects and some target specific architecture designs, such as Message Queues or Microservices, other books are general best practices. I hope you like my list, if not let me know in the comments!
Authors: Michael T. Nygard
I read this book recently which may be why it is the first one on my list. Overall this is a very pragmatic and straight forward book. It also contains many war stories from Michael's career - which are all great reads. What I liked most about this book was his stability patterns and stability antipatterns. These give a good idea of what works in software and what does not. Michael has a lot of knowledge and has learned from the field. I have created a more in-depth review of this book here.
The art of scalability
Authors: Martin L. Abbott and Michael T. Fisher
This book focuses on scalability of software and how to approach this. It is one of the longest book on this list at 500+ pages. It contains a lot of theory, but it gives a good basis to understand the implications of scaling software. It has some great chapters on horizontal and vertical scaling. But also on sharding and other scalability tactics.
Enterprise Integration Patterns
Authors: Gregor Hohpe and Bobby Woolf
I read this book many years ago during a class on software integration. 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 also great if you are working with microservices and communicating through a broker (Messagequeue system). Many of the patterns described in the book are targeted messaging systems. I use this book mostly as a reference as it can be hard to just read through. I would suggest this book if you work with message systems.
Head first design patterns
Authors: Eric Freeman and Bert Bates
Different patterns solve different problems. It is a good idea to know about the patterns out there. This way you can easily relate to a solution (pattern) with your coworkers. Just remember not to use patterns for the sake of using patterns. This book has some great examples. There is also a lot of humour in it which makes it easy to get through. The examples are in Java but you should easily be able to relate to the examples if you use another programming language.
An alternative to head first design patterns could be the older book "Design patterns". Which is often referred to as a must read. I prefer "Design patterns" for lookup but I would not be able to read it from one end to the other. That I think is doable with head first design patterns.
This book is written by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides:
Authors: Sam Newman
Even though you are not working with microservices or think it is a buzzword, this book is good. 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 and testing.
You may also learn what microservices are about - or get this refreshed.
Authors: Martin Fowler, Kent Beck, John Brant, William Opdyke and Don Roberts
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.
Looking at this book again I found out that there is a new version coming late 2019, the current edition is from 1999. If you wish to wait this may also be an option.
Domain Driven Design (unread!)
Authors: Eric Evans
This is the only book on this list that I have not read. However it is one of the books that I am always told that I should read. It is a book on domain driven design which focuses on creating a model of the domain (business logic). It also puts weight on the collaboration between business and developers.
That is it!
I hope you liked my list, feel free to leave a comment below. If you know a book that belongs on this list please let me know, I would like to take a look at it :)