4 lessons from Apprenticeship Patterns

November 14, 2023

I recently read Apprenticeship Patterns after seeing it recommended several times on Twitter, and wow, I wish I had read it much earlier. This is the best book I've read on career development as a software engineer.

The book is about software craft and the journey from apprentice to journeyperson. Each chapter covers a pattern like "Share What You Learn", "Kindred Spirits", and "Craft Over Art".

I'm mainly writing this post to spend more time reflecting on the book and the patterns that I want to incorporate into how I work. That said, here are 4 of the patterns that stood out to me.

1. White belt

Think back to when you were first learning programming and how it felt.

I remember having a strong sense of wonder and excitement. Every new concept, language, or tool opened up so many possibilities. For example, it blew my mind how you could play audio on a website. I used that skill to build a Stranger Things inspired sound board.

But along the way, that wonder can fade.

It's often seen as 'cool' to be cynical and unamused by everything, but I want to lean into that beginner's mindset and nurture my sense of wonder. Even Paul Graham agrees.

To do something well you have to love it. So to the extent you can preserve hacking as something you love, you're likely to do it well. Try to keep the sense of wonder you had about programming at age 14.

I'm trying to keep that wonder alive by learning new things and shipping toy projects, even if they aren't 'useful'.

2. Construct your curriculum

Being purposeful about your learning as a developer is super underrated.

I maintain a list of topics I want to learn about, and for each of those topics, I create a personal syllabus which includes:

  • Outcomes: What I want to be able to do by learning the topic
  • Concepts: A map of key concepts and their interdependencies
  • Resources: Highly recommended books, courses, blog posts, videos, etc. on the topic
  • Plan: How I'm going to study and practice

The personal syllabus gives me a high-level overview of the topic and a good study plan to follow. Depending on the topic, the syllabus will be more or less detailed, but in general I follow this structure.

I've used this format to learn concepts like database modeling, programming languages like Elixir, and even guitar.

3. Breakable toys

I firmly believe in the value of building side projects, or breakable toys as discussed in the book.

One of the reasons being that side projects help you learn new skills you might not normally at work. This goes hand in hand with creating personal syllabuses. I usually include building a toy project in the Plan section of each syllabus.

Building projects like SwipeWell has accelerated my career and helped me land freelance projects and new jobs.

Everyone's circumstances are different, but I think every developer should consider ways to incorporate building toy projects into their career.

4. Reflect as you work

I recently changed jobs and during that transition, I was able to really reflect on my career. I realize now I had been on auto-pilot in many ways. I'm course correcting and adding more opportunities for reflection into how I work which is why this pattern struck a chord with me.

I'm trying to incorporate this pattern by reflecting:

  • nightly on what I accomplished that day and things I can do better
  • monthly on general trends in my work and other areas of life I care about (family, health, etc.)

I think over the long run this will be the most important pattern because it'll help me identify areas I'm falling short in and help me course correct.

Conclusion

Apprenticeship Patterns is an amazing book for aspiring or early-career developers wanting to improve their craft. I wish I'd read it early and will be recommending it as much as possible going forward.