First-Year Reading List for Software Engineers
The software industry is constantly evolving, and you must actively pursue skill
and knowledge growth in order to stay relevant. Some small amount of growth
will occur as a a natural side effect of your daily work, but that isn't enough.
The best engineers I have worked with over the past 20 years are constantly
reading1 and aggressively developing their skills.
In recent years, I increasingly encounter engineers who are unfamiliar with some
subject that comes up in a discussion, or, more commonly (and tragically), their
knowledge of the subject is very narrow or, at times,
cargo cultish.
In response, I've created a reading list for software engineers2 that covers
a number of concepts that I increasingly consider fundamental. The list, of
course, reflects my biases. I work primarily with web technologies in enterprise
or enterprise-like contexts. Most of the list should be applicable to any
moderately complex system, particularly those that involve communication between
applications over the internet3.
Books
One book a month seems more than reasonable and I expect that many people
could finish this list in half that time or faster. The recommended books are
listed in the order I recommend reading them.
- Managing Oneself 📖
- The Unwritten Laws of Engineering 📖
- The Pragmatic Programmer: From Journeyman to Master 📖
- The Mythical Man-Month: Essays on Software Engineering 📖
- Web Operations: Keeping the Data on Time 📖
- Head First Design Patterns 📖
- Lean Enterprise: How High Performance Organizations Innovate at Scale 📖
- Building Microservices 📖
- Release It!: Design and Deploy Production-Ready Software 📖
- Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation 📖
- Patterns of Enterprise Application Architecture 📖
Articles, Blog Posts, etc
- Be Kind
- Thou Shalt Not Commit Logical Fallacies
- Anscombe's quartet
- The Emperor's New Clothes (and the associated Wikipedia article)
- Falsehoods Programmers Believe About
Time,
Names,
Addresses,
Networks,
etc
- Choose Boring Technology
- OWASP Top 10
- Steve Yegge's Google Platforms Rant
- HTTP Protocol: HTTP/1.1, HTTP/2
- Latency Exists, Cope!
- Fallacies of Distributed Computing
- You Can't Sacrifice Partition Tolerance
- Notes on Distributed Systems for Young Bloods
- Jepsen: On the Perils of Network Partitions [VIDEO]
- Six Myths of Product Development
- Amazon is a Technology Company; They Just Happen To Do Retail
- How Complex Systems Fail
- Harmful GOTOs, Premature Optimizations, and Programming Myths Are the Root of All Evil
- The Wrong Abstraction
This seems like a reasonable minimum set of reading for the first year in
addition to whatever language or platform-specific stuff you have to learn to
actually perform your job.