Reading Recommendations for Software Developers
Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. — Antoine de Saint-Exupéry
There’s an endless ocean of articles, blog posts, books, and videos offering advice about how to program and do software development well. I’ve collected a handful of my favorite resources here, which range from invaluable advice for program design to discussions about niche design decisions to post-mortems and technical overviews to random facts and statistics that I think are important to keep in mind. There are other huge repositories like Hacker Laws that are worth reading through carefully, but I wanted a smaller, more focused list rather than an exhaustive repository of everything that could possibly be useful to anybody.
Also, careful reading of some of the advice here will reveal that there are many caveats and a lot of conflict on the finer details. Unfortunately, there is no free lunch when it comes to software development. The purpose here, as with everything in life, is to get a broad sampling of all the arguments and information and learn to draw your own conclusions. The only universal rule is that there are no universal rules: think critically, don’t be dogmatic, and always keep learning. You can’t just play sheet; you need to be able to hear the music.
Anyways, in rough order of importance, here are my picks:
Programming Well
Design Patterns and Architecture
- Effective Java by Joshua Bloch
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (AKA “The Gang of Four”)
- Game Programming Patterns by Robert Nystrom (important for more than just game design!)
- Designing Data-Intensive Applications by Martin Kleppmann
Avoiding Mistakes
- Things You Should Never Do, Part I by Joel Spolsky (There does not appear to be a part II.)
- Reading Code Is a Skill by Trisha Gee
- Write code that’s easy to delete, and easy to debug too
- Make Illegal States Unrepresentable
- Making Wrong Code Look Wrong by Joel Spolsky
- Parse, Don’t Validate by Alexis King
- The Law of Leaky Abstractions by Joel Spolsky
Style and Best Practices
- The Joel Test: 12 Steps to Better Code by Joel Spolsky
- It’s probably time to stop recommending Clean Code
- New grad vs senior dev by Eric Lippert
- The Perils of Java Schools by Joel Spolsky
Error Handling
- Null References: The Billion Dollar Mistake by Tony Hoare
- Cleaner, more elegant, and harder to recognize by Raymond Chen
- I Finally Get Rust by me
Opinionated
- Linus Torvalds on C++
- “No way to prevent this” say users of only language where this regularly happens
Ethics and Culture of Software Development
- The code I’m still ashamed of by Bill Sourour
- How to mentor software engineers
- Bug squash: An underrated interview question
- The Iceberg Secret, Revealed by Joel Spolsky
Facts and Statistics
A recent study found that 60-70% of vulnerabilities in iOS and macOS are memory safety vulnerabilities. Microsoft estimates that 70% of all vulnerabilities in their products over the last decade have been memory safety issues. Google estimated that 90% of Android vulnerabilities are memory safety issues. An analysis of 0-days that were discovered being exploited in the wild found that more than 80% of the exploited vulnerabilities were memory safety issues [1].