My 3 Apprenticeship Patterns for 2023
Tags: beginners, career
Published: 2023-01-25 14:18:33

Apprenticeship Patterns are from the popular book by David Hoover which provides a cookbook of 'patterns' to help someone navigate the complex field of Software Engineering and eventually achieve Mastery. They are especially suited to those at the beginning of their career.

Each pattern has countless applications depending on the context, but it's up to each person to decide when is best to use each pattern. As someone towards the beginning of their career, I have chosen 3 patterns which I will be applying over the course of 2023 to accelerate my progress. I have detailed them here, why I have chosen these, and how I will use them. 

Which patterns do you think would work for you? What of these wouldn't? Do you have any others which you'd like to see?


#### 1. Create Feedback Loops

> Success or failure tends to come as a surprise, and what little feedback you receive is an abrupt shock to your self-assessment instead of a support mechanism to help you improve - David Hoover, Apprenticeship Patterns

This pattern is all about creating mechanisms to regularly gather external data about your performance, as well as chances to self-reflect on what you have been doing that has been moving you towards your goal and what hasn't. Exams provide very concrete metrics for your ability to others. Reflecting on your approach to work and learning is a more incorporeal. The goal is to work out how to identify the mistakes you make and adapt to them. 

For this, I will regularly be requesting feedback from my manager, having code I've been working on for problems reviewed by peers, and unfortunately for my ego, asking for feedback on these posts. I will review in my journal to see what I've done well, what I could improve on, and what is or isn't working each week.

#### 2. Practice, Practice, Practice (Deliberately)

Deliberate practice is a very common approach and one of the key components to mastery in just about any area. One should practice frequently in the area you feel weakest, or will provide the most benefit to you, which is at the edge of your skillset and enables you to grow. 

Practicing data structures and algorithms, as well as general problem-solving skills, is never a bad investment for a programmer. This is something that I will start doing, and regularly review, to ensure I am keeping the knowledge I am learning. Databases and SQL is another area I will be looking into this month, and this will change from month to month as I identify new areas that need improvement.

The soft skills that lie at the heart of a software engineer's job, and any job really, such as communication, public speaking, and leadership tend to be the most difficult to actively improve, yet also the one with the most payoff. Improvements in this area require going outside of my comfort zone regularly, and accepting the failure that comes with those steps. 

#### 3. Reading Constantly

> If you read even one good programming book every two months, [...], you'll soon have a firm grasp on the industry and distinguish yourself from nearly everyone around you - Steve McConnell, Code Complete

Immersing yourself in some of the classic books on Computer Science, Software Engineering, your field of expertise, will provide a wealth of information not accessible in other more short-form mediums, such as blog posts (including this one!) and improve your fundamentals. For the past few months, I have been making my way through a compendium of resources I have collated on my GitHub (https://github.com/11CConnolly/software-engineer-assets) whenever I have free time.

---

This is far from an exhaustive list of patterns, and certainly not an exhaustive list of use cases. There are some patterns which I am already implementing, which are:

#### Recording What You Learn

Every day I write down a short list of all the things I've learned throughout the day. During my short time at my current role, I've already filled 3 notebooks with new thoughts, lessons learned from retrospectives, specific knowledge gained. The important thing is for these notebooks to become a breeding ground for new ideas, reviewed regularly to form new ideas, and not a graveyard where ideas go to die.

#### Sharing What You Learn

> When one person teaches, two people learn - ~~Einstein~~ Robert Heinlein

Sharing knowledge you acquire is one of the best ways to make something more concrete in your head, and gives you the ability to be questioned on the subject. Here, you have the opportunity to examine what you have learned and find any gaps to fill. I have mentored some more junior programmers professionally, which provides a great chance to discover how little I really know. Outside of work, infrequent blog posts are my medium of choice for wider communication.

There are countless patterns and combinations of these patterns. 
Hopefully the list of patterns I have talked about will provide a framework for you and be useful for you to develop your career.