In this post, I describe my thoughts on the book Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Adewale Oshineye and Dave Hoover.
The book starts with a description of what Software Craftsmanship is about and describes the apprenticeship process, and how apprentices transition from journey-person to master.
The book is broken up by type of pattern, into several categories.
- Emptying the cup - Be like an empty vessel into which knowledge can be poured. Be ready to learn from others. Don’t let your existing knowledge impair new learning.
- Walking the long road - Focus on the craft and delivering value to customers. It’s not about being rich or a lofty position. Don’t burn out and find ways to stoke the fires of your passion. Come up with a plan for what you want to do. Keep programming.
- Accurate self-assessment - Find, talk, and work with people better than you.
- Perpetual learning - This is self-explanatory, but the book gives some tips for learning. Autodidacts may know some of these including practice, reading source, feedback loops, self-reflection, journaling, and teaching.
- Construct your curriculum - This category is tied with Perpetual learning but focuses more on the sources of learning such as books (and what kind of books).
The book concludes with a discussion about the nature of skill and mastery of skill. The authors mention that to determine a master, you should look not only at the changes the master brings to an industry, but the effects his apprentices have.
This book is primarily for those in the initial part of their career, and the authors state as much. Although people in the journey-person phase of their careers will probably glean some useful information as well, apprentices (or those seeking to become a crafts person) will find the most use from this book. People who have already sought out the path to craft will have figured a lot of this stuff out already.
Many of the lessons in this book can be applied to non-programmer apprentices. The key to making the transition from apprentice to master lies in learning about and advancing the craft, by whatever means is available. This includes learning from others in the craft, especially masters.
To me, passion is the most important component to move past the apprentice level of software development. Although it is possible to lose your passion, passion can also be self sustaining.
To advance my own craft, I try to use many different inlets of learning. I have technical books on my phone to read when I am out and have a minute. I also subscribe to several technical podcasts that I listen to on my phone when I am driving such as Software Engineering Daily. While I am making dinner or doing other chores, I’ll watch videos on Youtube including recordings of university lectures, from conferences, or general tutorials. I try to read for at least a couple minutes every day.
When I am feeling bored of a particular topic, I will switch topics. I have a wide area of interest, so I might watch AWS ReInvent 3 videos one week, and then watch a couple lectures on a more abstract topic like category theory 1 or linear algebra 2, then some conference videos from a Scala 4 or Ruby 5 conference. I do get bored of technical topics too, in which case I will watch videos on other topics like games, writing, or art. When I’m tired of reading about technical stuff, I’ll mostly read sci-fi and fantasy. When I’m tired of listening to technical podcasts, I’ll listen to audiobooks. In this way, I try to continuously learn and avoid getting burned out.
About feedback, which is important in learning anything, I don’t get much, other than what I get from coworkers about work-related code. That’s something I need to improve in the future. As the book discusses, I could do that either by finding mentors or kindred spirits. In the past, I’ve also gotten small bits of feedback from online communities in the form of code reviews about open source code.
Apprenticeship patterns is a good book for people who want to improve in the craft. It offers patterns, structure ways of approaching things, that apprentices can adopt to move forward in their craft. Not only are these patterns applicable to software developers, but also apprentices in other fields.