This is a selection of books that I strongly recommend for improving yourself and your career. I have read all of them and tested their advice and learnings. Before digging into the list, an important disclosure:
Some of the links below are affiliate links, which means that if you choose to make a purchase, I will earn a commission. This commission comes at no additional cost to you. Please do not spend any money on these books unless you feel you need them or that they will help you achieve your goals.
This book is a perfect place to start for anyone interested in software development, and in my opinion, a must read for all developers. It teaches what means good code, clean code, sharing simple guidelines like naming variables or methods, structuring classes and function, writing proper comments, etc. In the latter part of the book, you can also find useful design principles, showing on what you must focus at the architecture level. If you have less than two years since you started to write down code professionally, than the captors of the book will guide you to the next level.
In your career of software developer, you will encounter two different types of projects: green-field and brown-field. This book helps you tackle the later ones, legacy projects, with massive codebases and with many direct or indirect dependencies. It gives you techniques on how to do unit testings in this kind of projects and how to increase your and your team confidence dealing with typical problems and anti-patterns that come with systems that lack proper design and architecture. If you moved to a new project that has a codebase that proves to be difficult to maintain or work with, this book would be the supportive hand that you might need.
Robert Martin created the perfect accompaniment to Clean Code, going deeper into what makes good architecture good. The book presents and explains the SOLID principles in great details, describing what are the consequences when these principles are ignored or violated. Furthermore, it shows the concept of layers and boundaries, and it creates a good foundation for anyone who is designing a new component or system. If you have been writing code for a couple of years already and you want to develop your design and architecture skills, this is the book for you.
We all heard of the “single responsibility principle,” but how do you know where to assign the responsibility? This book introduces the GRASP principles (General responsibility assignment software patterns) where the author presents multiple strategies for adequately allocating responsibility and designing your systems. He takes the reader through two different scenarios (building a board game and building a POS service) and shows how to apply the design principles at each phase of the implementation. I consider this book one of the best architecture books, due to the number of questions that we learn to ask when faced with building complex apps and the useful options that the author gives us.
Have you heard of Flyweight or Prototype design pattern? Do you have an idea how they can be applied in the context of a game? Design patterns can sometimes be hard to grasp, but this book presents them using really helpful visuals and clear explanation when to use them and when not to. I think the examples are excellent, providing an exciting perspective on game development, on what kind of problems need to be solved and what are the typical solutions.