I’m sharing a list of recommendations to help software developers learn the practice of software development as a combination of craft and career. I use this for recommendations for new junior engineers.
The items are generally language-agnostic. They cover topics including:
- Professional behaviors and human interactions
- Software design principles and heuristics
- Testing best practices
- Development practices and patterns to reduce errors
- War stories about projects gone wrong
Highly recommended for entry-level developers:
- The Unwritten Laws of Engineering by W.J. King – Written for engineers before the information age, this is nevertheless an amazing guide to the non-technical dimension of personal success as a professional in a technical organization.
- The Art of Readable Code: Simple and Practical Techniques for Writing Better Code by Dustin Boswell et al. – This is an extraordinary guide that every coder should read. It’s short and has very clear examples. Your colleagues will thank you for reading this book.
General guides to the software development process:
- The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt et al. – One of the best all-around guides to software development practices.
- A Philosophy of Software Design by John Ousterhout - A masterwork of design principles for better software. Highly recommended!
- Code Complete (Developer Best Practices) by Steve McConnell – One of the first books of this type; very comprehensive across both high level design and specific coding practices.
- The Clean Coder: A Code of Conduct for Professional Programmers by Robert C. Martin – Very opinionated, more about the human side of engineering, but also with technical practices.
Bigger-picture insights into software engineering pitfalls and philosophies
- The Mythical Man-Month, Anniversary Edition: Essays On Software Engineering by Frederick P. Brooks Jr. – Classic text on why software engineering is complex and often goes awry.
- Coders at Work: Reflections on the Craft of Programming by Peter Seibel – Interviews with historically famous programmers and how they think about the craft.
- The ‘Worse is Better’ essays by Richard P. Gabriel – Note that Richard writes essays arguing both sides!
- The Cathedral and The Bazaar by Eric S. Raymond – origin of well-known open source aphorisms like ‘release early, release often’.
Specific topics or methodologies:
- Agile!: The Good, the Hype and the Ugly by Bertrand Meyer – Opinionated but fairly balanced look at agile practices.
- Test Driven Development: By Example by Kent Beck – The book that really started the movement.
- Programming Pearls (2nd Edition) by Jon Bentley – While dated, this is a classic for thinking like a programmer, with a particular focus on efficient design.
Books and essays on career development and skills matrixes
- Career Coding Handbook by swyx – chock full of nuggets for aspiring senior engineers and beyond. I wrote an extensive review if you want more details.
- On Being a Senior Engineer by John Allspaw – comprehensive thinking on what engineering maturity is about, from both technical and social perspectives.
- How to Become a Senior Developer by Andrei Neagoie – tl;dr: it’s not about being technical, it’s about adding value.
- The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change by Camille Fournier – Anyone aspiring towards tech management should read this; it’s also good for individual contributors understanding how good/bad managers operate.
- Sharing our Engineering Ladder also by Camille Fournier – her view of ‘levels’ of evolution of software developers; see in particular the text career ladder document.
- Kickstarter Engineering Ladder – from junior engineer to CTO.
- Debugging Titles, Part 1, Part 2, and Part 3 by Riot Games – titles are too one-dimensional; they use a half-dozen attributes that vary up and down over someone’s career.
- Tech Leadership Principles by Buzzfeed – principles to guide interactions and decision-making.
Other books recommended to me that I haven’t read:
- Refactoring: Improving the Design of Existing Code by Martin Fowler et al.
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma et al.
- Beautiful Code: Leading Programmers Explain How They Think by Andy Oram et al. [Started it, liked it, but never got around to finishing it.]
- The Practice of Programming by Brian W. Kernighan et al. [I might have read this long ago]
- Patterns of Enterprise Application Architecture by Martin Fowler
- Working Effectively with Legacy Code by Michael Feathers
- The Architecture of Open Source Applications – A web collection of books full of essays about open source software.
- Team Geek: A Software Developer’s Guide to Working Well with Others – Covers professional behaviors and human interactions.
Do you have suggestions for the list? Please email or tweet!