Cameron Watters Software Engineer

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.

  1. Managing Oneself πŸ“–
  2. The Unwritten Laws of Engineering πŸ“–
  3. The Pragmatic Programmer: From Journeyman to Master πŸ“–
  4. The Mythical Man-Month: Essays on Software Engineering πŸ“–
  5. Web Operations: Keeping the Data on Time πŸ“–
  6. Head First Design Patterns πŸ“–
  7. Lean Enterprise: How High Performance Organizations Innovate at Scale πŸ“–
  8. Building Microservices πŸ“–
  9. Release It!: Design and Deploy Production-Ready Software πŸ“–
  10. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation πŸ“–
  11. Patterns of Enterprise Application Architecture πŸ“–

Articles, Blog Posts, etc

  1. Be Kind
  2. Thou Shalt Not Commit Logical Fallacies
  3. Anscombe's quartet
  4. The Emperor's New Clothes (and the associated Wikipedia article)
  5. Falsehoods Programmers Believe About Time, Names, Addresses, Networks, etc
  6. Choose Boring Technology
  7. OWASP Top 10
  8. Steve Yegge's Google Platforms Rant
  9. HTTP Protocol: HTTP/1.1, HTTP/2
  10. Latency Exists, Cope!
  11. Fallacies of Distributed Computing
  12. You Can't Sacrifice Partition Tolerance
  13. Notes on Distributed Systems for Young Bloods
  14. Jepsen: On the Perils of Network Partitions [VIDEO]
  15. Six Myths of Product Development
  16. Amazon is a Technology Company; They Just Happen To Do Retail
  17. How Complex Systems Fail
  18. Harmful GOTOs, Premature Optimizations, and Programming Myths Are the Root of All Evil
  19. 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.

  1. I focus on reading because it is my preferred medium for information acquisition and there is a plethora of good material. If you're into audio or video, and you're able to find enough good, relevant content, excellent.Β 

  2. The primary target audience is software engineers in their first year on the job. In many cases, this isn't just their first year working on a given team, it is also their first full-time software job.Β 

  3. The proper capitalization of "internet" is not universally agreed upon. More info here, here, and here. I choose not to capitalize it.Β 

posted on

About the Author

Photo of Cameron Watters

I'm currently working on object storage at Joyent

My work has primarily involved internet-facing SaaS software, with an emphasis on e-commerce, communication software, and IaaS.

I live in Northwest Washington with my wife Betsy and our dog, Oliver. We have raised two now-grown sons–Sean & Caleb