As I have done for the past many years, I will again this year create a list of my favourite books on software development. In recent years I have started reading more about software architecture, therefore you will find some of these books as well. A lot of the books are the same as last year as many are timeless classics as the fundamental principles of software development do not change much over the years. Therefore these are not books that have been published in 2023. I have read most of the books on this list, a few are recommendations I have yet to read
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 2023.
The Pragmatic Programmer: Your Journey To Mastery
Authors: David Thomas and Andrew Hunt
Again this year, this book is the first book on my list. It is because it was one of the first books I read on general software development skills. I remember when I first read it I was about a year into my professional career - which I think is the perfect time to read it. Many of the things mentioned in this book are very basic and easy to understand and ff you are relatively 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 for that matter. I therefore believe this book is great for developers of all levels of skill.
The book covers a wide range of topics including debugging, testing, and refactoring, as well as more general programming concepts such as design and communication. It is known for its practical, hands-on approach and its emphasis on the importance of the development process, rather than just the end result
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
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 - and still is. But I read it again after I had worked a couple of years and then I found it to be such a great dictionary and lookup for design patterns. It is also great for mentoring others or getting the same point of reference in a team.
Design patterns are a set of common solutions to recurring problems in software development. The book uses a unique approach to teaching design patterns, which is designed to engage the reader and make the material more accessible. It uses a visual and interactive style to present the material, which is intended to make it more memorable and easier to understand.
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 a lot of humor. The examples in this book are in Java, but they are applicable for most programming languages. The examples are easy to follow and gives you hands on experience. 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
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 practised TDD you will already know most of this book has to offer and you may not learn a lot from it. I personally read it long after I had started to practice TDD and still enjoyed it - if nothing else it is entertaining and confirms you are doing things right!
TDD is a software development methodology that emphasises the importance of writing automated tests before writing any production code. The main idea behind TDD is that by writing tests first, developers can ensure that their code is correct, and that any changes they make to the codebase does not break existing functionality.
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 most concise book for entering the world of test driven development. 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. Which is something another book "Refactoring" on this list focuses on, however that is a lot longer and without the primary focus on TDD.
Soft Skills: The software developer's life manual
Author: John Sonmez
This book aspires to make you the best software developer you can be. That is no small feat and it does not disappoint. It goes above just learning to code and how to solve programming issues. It focuses on the software developer as a whole - a holistic view, that includes the life outside of work. It goes into a long range of topics, it even goes into how to keep yourself in shape as that will improve your overall life quality. That might turn some people off, like "I just want to focus on coding for now" and that is all fine.
I believe for this book to make sense you have to be quite a few years into your career and have the basics in place. It makes more sense if you know about the workplace and already have some working experience. From there you can build your "soft skills'' around what you already know. By this, this book will not just impact your life at work, but your life as a whole.
Topics this book goes into:
- Career and the corporate ladder
- Productivity - how to get more done
- Finance - how to handle your paycheck and negotiating for a better one
- Marketing yourself
- Fitness and spirit
- and much more!
Cracking the Coding Interview: 189 Programming Questions and Solutions
Author: Gayle Laakmann McDowell
So.. I skipped this book a couple of times because I rarely look for a new job. I do not go to an occasional job interview once in a while like some developers do. But, the questions in this book are quite profound and are actual topics you will be interested in as a developer. You will also enjoy this book if you are on the other side of the table and interviewing someone - you may also notice if someone has read the book.
This is a guide for software engineers and developers preparing for job interviews, specifically for the positions of software developer, software engineer, and the like.
The book includes a wide range of coding questions and solutions that are similar to those asked during real interviews. The questions are divided into different sections, including data structures, algorithms, and common interview questions. Each question includes a detailed explanation of the solution and the thought process behind it.
The book also includes tips and strategies for how to approach coding interviews, how to prepare for them, and how to communicate effectively with interviewers. It also includes advice on how to handle common interview scenarios, such as whiteboarding and pair programming.
Head First Python
Author: Paul Barry
The book is designed to be easy on those new to programming and use an approach to teaching programming that is intended to make the material more engaging and memorable.
The book covers the basics of Python programming, including data types, control structures, functions, modules, and classes. It also covers somewhat advanced topics such as file handling, exception handling, and working with databases. The book is written in a clear and concise style, and it includes a lot of examples and exercises that help the reader to practice and reinforce the concepts covered in the book. The book includes many tips and tricks for writing better Python code, and it provides a great introduction to the Python programming language and the basics of programming. It also covers some more advanced topics, such as working with databases, web services, and graphical user interfaces.
"Head First Python" is widely recognized as one of the best resources for learning Python programming language and it is often recommended as a must-read for anyone who wants to learn Python. The book provides a great introduction to the subject and is a valuable resource for anyone interested in learning more about Python and how to use it in their own projects.
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 operations of it. Michal Nygard has included a long range of entertaining war stories of different software failures that make systems crash horribly. My most favourite 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.
The book covers system architecture, deployment, performance, scalability, security, and monitoring. Everything needed to create "production-ready" software systems.
I have created a thorough review of this book here from 2018.
Authors: Sam Newman
You may associate the word "microservice" with "buzzword" and I will not judge you for that. If then you may replace the word "microservice" with "service" and carry on reading. Microservices are an architectural design pattern and approach to make a system as a set of services with the following properties:
- Highly maintainable and testable
- Loosely coupled
- Independently deployable
- Organised around business capabilities
- Owned by a (small) team
The book starts by introducing the concepts of microservices, and how they differ from traditional monolithic architecture. It then covers the key principles of microservices architecture such as loose coupling, service autonomy, and resilience. It also covers the practical aspects of building and deploying microservices, including service discovery, load balancing, and monitoring.
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.
The book also includes case studies and examples from companies that have successfully adopted microservices, such as Netflix, and provides a wealth of practical advice and tips for dealing with the challenges that arise when building microservices-based systems.
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.
Author: 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 probably already know, refactoring is a book on how to write great code. This includes continuously refactoring and improving your code - which also makes it more maintainable - cleaning up your code makes it easier to comprehend and reason with, which makes making changes easier over time.
The book covers a wide range of refactoring techniques, such as Extract Method, Rename Method, and Replace Conditional with Polymorphism, and provides detailed examples of how to apply these techniques to improve the design of existing code. The book also covers the importance of automated testing and how it can be used to support refactoring, as well as the potential pitfalls and challenges that can arise when refactoring code.
Overall it encompasses the best practices on how to do refactoring.
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 and well received, I have included the new one instead of the old one here:
Domain-Driven Design: Tackling Complexity in the Heart of Software
Author: Eric Evans
Years ago Domain-Driven Design (DDD) was all the rage, I hear less about these days but that does not mean it has no value! The Domain-Driven Design methodology, which is an approach to software development that focuses on the domain or problem space of the software being developed. The book covers the concepts, patterns, and best practices for DDD, as well as the tools and techniques needed to implement DDD effectively.
The book covers the basic concepts of DDD:
- Modelling the Domain: DDD emphasises the importance of understanding the problem space or domain of the software being developed. This includes understanding the business requirements, the users, and the processes involved.
- Ubiquitous Language: DDD emphasises the need for a common language between domain experts and software developers to ensure that the software is accurately reflecting the problem space.
- Bounded Contexts: DDD divides the problem space into smaller, manageable parts called bounded contexts. Each bounded context has its own model and its own ubiquitous language.
- Strategic Design: DDD focuses on the big picture of the software system, with an emphasis on the overall architecture and the relationships between the different parts of the system.
- Tactical Design: DDD provides patterns and techniques for implementing the design of the system, such as entities, value objects, services, and repositories.
- Communication and Collaboration: DDD emphasises the importance of communication and collaboration between domain experts and software developers to ensure that the software accurately reflects the problem space.
- Evolution: DDD encourages an evolutionary approach to software development, where the design of the system is continually refined based on the changing needs of the business and the users.
It emphasises the importance of the interaction between domain experts and developers and bridging the gap between them!
Enterprise Integration Patterns
Authors: Gregor Hohpe and Bobby Woolf
I read this book many years ago during a class on how to integrate systems and 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 as well. This book is especially good if you are working with messaging in large distributed systems (such as microservice architectures). I have used this book mostly as a reference as it can be hard to just read through.
The book provides a set of patterns for designing, implementing, and deploying messaging solutions in an enterprise environment. It describes 65 patterns that can be used to solve common problems that arise when integrating systems and applications within an organisation. The patterns are organised into categories such as routing, transformation, and messaging channels
Be warned this book has a massive 736 pages! I would use it mostly as a reference and not something you read from the beginning to the end in one go. However, that might just be my preference.
Database Design Solutions
Author: Rod Stephens
It is quite hard to find good books on database design and development, but I thought I would include one on this list for these into database design. Most books on databases teach you how to create a table, an index or make a query. This book teaches you how to design your database so that it matches your needs (and in the end your customers needs). Even better, it tells you what mistakes to avoid! The book iterates through different types of "databases" such as XML, flat file databases, spreadsheets, and of course relational databases.
The book is intended for programmers and developers who are new to database design, and provides a step-by-step guide to creating efficient and effective databases. It covers topics such as data modelling, normalisation, indexing, and query optimization. The book also includes examples and case studies that use the VB.NET and C# programming languages and the Microsoft SQL Server database management system (DBMS)
Author: Jon Duckett
... and both of these books are visually beautiful!
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 (on LEGO.com) 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. It covers topics such as navigation, layout, and accessibility, and includes numerous examples and case studies to show the concepts. 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. Whenever a user interface is not meaningful or frustrates me, I think of this book.
This book is excellent for travelling or to bring on a vacation, as it is short, fun and inspiring.
Learning C# by Developing Games with Unity
Author: Harrison Ferrone
OK, I have something for games, C# and short books! If want to get into game development and would like to work with C# and Unity you should give "Learning C# by Developing Games with Unity" a try. It is a 161 page book on the basics of C# and guiding you to create your own simple game:
If you believe 161 pages is too little for you, I would recommend "The C# Player's Guide" by RB Whitaker:
That is my list for 2023!
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, 2020, 2021 and 2022 for further inspiration.
That was my list of great books to read in 2023. If I missed any books or if you disagree with my picks, please let me know in the comments down below! If you have any suggestions for me to read in 2023, please write a comment down below as well.
I hope you found it useful :)