Last month, one my book clubs finished reading Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Adewale Oshineye and Dave Hoover. We started this book at the beginning of our co-op and met regularly to discuss each chapter.
Published in 2009, this book describes a set of patterns to how to grow professionally as an apprentice on the journey to software mastery. These patterns largely apply to being a programmer, but some patterns can apply more broadly - for example, patterns about assessing yourself accurately and perpetual learning apply to many technical fields. The book was more about how to be an apprentice, with specific advice in a field like software which is relatively new and constantly evolving. There were only a few pieces of outdated advice, but only on specific implementations of the pattern - for instances, it references Google Reader, which has been since long retired (RIP).
What was particularly interesting is how these patterns could map to modern software development using AI. For example, an AI tutor can be a substitute for "Find Mentors" - the book doesn't say mentors have to be alive and in person. They explicitly say a dedicated mentor is rare, and you can find a series of mentors by reaching out to the broader community and reading from books and blogs. Another pattern AI could be applied to is "Create Feedback Loops" - in my co-op, Codex code reviews have been very handy to review PRs. (My thoughts on AI's impact on learning on a junior developer is worth a whole other blog post!)
Overall, I think this was an excellent book to start as a junior developer, even today. I foresee these patterns being timeless and universal - particularly the patterns about creating a reading list and following it, which resonated with me as someone who primarily enjoys reading as a way of consuming information.
In a recent podcast with Matt Pocock, Uncle Bob mentions the importance of knowing software fundamentals and recommends reading books - specifically, old books. Young developers don't know the "struggle" of coding that AI agents hide from them, but is fundamental to using agents effectively. He recommends reading old books, like works by Tom DeMarco, Ed Yordan, and The Pragmatic Programmer to get a higher-level feel for strategic programming.
Similarly, in the "Construct Your Curriculum" chapter in Apprenticeship Patterns, they also recommend the classics:
When you pick up a book and the first thing you wonder is how out of date it is, you’re reading the wrong kind of books. Successful apprentices tend to focus on “long-lived books” and use the Web or experimentation to learn how the information has evolved. ... The wisdom captured in such classics is vital information to keep you heading in the right direction on The Long Road.
With that, I figured I would be remiss not to share my personal reading list - although I expect my target audience to be in the single digits. This is a mix of more "modern" books and classics. Currently, I keep my reading list as a simple Markdown file in my Obsidian vault, but I'm currently working on a Laravel app to track and share reading lists as a side project.
Vanesa's Reading List (September 2026)
Finished
- Programming as Theory Building (Naur)
- Debugging (David J. Agans)
Current Books
- The Missing README (Chris Riccomini and Dmitriy Ryaboy) - chapter 7
- Head First Design Patterns (Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra)- chapter 6
- Clean Architecture - chapter 14
- Your Code as a Crime Scene - chapter 1
- Architectural Styles and the Design of Network-based Software Architectures (Roy Fielding)
- Not a book, but recommended by Apprenticeship Patterns.
- Mindset: The New Psychology of Success (Carol Dweck) - chapter 2
- Not a software development book specifically, but recommended to me by a mentor
Next Books
- Test-Driven Development (Kent Beck)
- Don't Make Me Think (Steve Krug)
Someday
- Mythical Man-Month (Frederick Brooks Jr)
- Code Complete (Steve McConnell)
- Clean Code (Robert Martin)
- Designing Data Intense Applications (Martin Kleppmann)
- The Art of Computer Programming (Donald Knuth)
- Refactoring (Martin Fowler)
- Working Effectively with Legacy Code (Michael Feathers)
- The Pragmatic Programmer (Andrew Hunt & David Thomas)
- A Philosophy of Software Design (John Ousterhout)
- Code: The Hidden Language of Computer Hardware and Software (Charles Petzold)