There are many posts on medium that are recommending must-read books for developers, but I find that most of the lists are biased towards specific technologies or specific languages, like Fluent Python or Microservices Patterns.
I don’t deny that these books are really good, but not everyone needs to learn a specific language or a specific technology. In the case of microservices, many seminars in the past few years have talked about how to manage, how to deploy, how to develop, but more recently, more and more seminars are talking about
Complexity is killing software developers.
by Scott Carey.
Therefore, building the right background knowledge is far more important than studying a particular technology.
In the next section, I will recommend books for the two stages of a developer’s career, first from junior developer to senior developer, and then from senior developer to the next milestone, perhaps architect or principle engineer.
Junior Developer to Senior Developer
In the junior phase, developers need to write code well and build a proper understanding of the system. So there are several types of books that you can try to read.
For example, to improve the ability to write programs.
Refactoring: Improving the Design of Existing Code
by Martin Fowler
Or, to improve knowledge of the architecture and to design applications that can be easily modified and extended.
Clean Architecture: A Craftsman’s Guide to Software Structure and Design
by Robert C. Martin
Even, in order to speed up software development, you need to know what background knowledge is available, such as telemetries, CI/CD pipelines, feature toggles, etc.
The DevOps Handbook： How to Create World-Class Agility, Reliability, and Security in Technology Organizations
by Gene Kim
Senior Developer to Architect
Then, when you have become proficient in development and understand the entire development process and background knowledge of the application, you are ready to be promoted to senior developer.
What you need at this stage is to be able to design the system architecture correctly, understand the strengths and weaknesses behind each design, and make the right trade-offs.
This requires an understanding of the different architectural paradigms and the risks behind distributed systems.
Fundamentals of Software Architecture: An Engineering Approach
by Mark Richards
Software Architecture: The Hard Parts: Modern Trade-Off Analyses for Distributed Architectures
by Neal Ford
Once you have a proper understanding of distributed systems, it’s time to understand the details of distributed storage.
Designing Data-Intensive Applications
by Martin Kleppmann
At this point, you should already have good technical skills and the ability to make the right decision, but also to evolve the system.
In addition, an engineer who specializes in development needs to have not only technical skills, but also a lot of soft skills.
The Pragmatic Programmer
by Andrew Hunt
The Effective Engineer: How to Leverage Your Efforts In Software Engineering to Make a Disproportionate and Meaningful Impact
by Edmond Lau
Of course, there are many other good books that should be read. But everyone has different career goals, so I’ll just list the soft/hard skills needed to move from a novice developer to a significant position.
My normal articles are a compilation of materials I’ve accumulated through leading teams. But this week I’m at Worldwide Software Architecture Summit 22, and I don’t have much time with the team. So I take this opportunity to compile a list of books that I’ve been asked to read in order to become an architect.
If anyone would like to hear about a specific topic or discuss a design problem you’ve encountered, please feel free to DM me on twitter, @LazyProMedium.