Findmypast Tech

Pursuing mastery as a software engineer - part 2

Reading time: 5 min

Welcome to part 2, in part 1 I covered the great work of Anders Ericsson, Angela Duckworth, Carol Dweck and Charles Duhigg. Their work helps us understand how we, as human beings, learn and master new skills. They also teach us the growth mindset we must adopt in order to do so. I will now work backwards through the stages of the mastery loop as I’ve applied it to myself in learning to be a better JavaScript engineer.

Mastery loop diagram

Mental representations

These are what we seek.

One could define a mental representation as a conceptual structure designed to sidestep the usual restrictions that short-term memory places on mental processing. — Anders Ericsson

As you train, whether physically or mentally, you are sharpening your mental representations. For instance, when building a complex computer program it will probably be assembled with multiple techniques, patterns and libraries. If you deliberately practice increasing your skill in each technique, pattern and library, you will build finer mental representations. With continued practice those mental representations will continue to improve and become second nature to you.

You might compare this to a musician practicing scales. When they see a grouping of notes on the page they can instinctively perform the actions to reproduce those notes. This ability allows them to focus on the subtlety of the sound they wish to create, not the mechanics of playing the notes in the right order.

Having quick access to mental representations like programming techniques, programming patterns and in-depth knowledge of common libraries enables you to work on a higher level. What once was hard becomes easy allowing you to battle more complex problems with your ever growing arsenal of mental representations.

Deliberate practice, practice, practice

This is what you need to do.

I know quite certainly that I myself have no special talent. Curiosity, obsession and dogged endurance, combined with self-criticism, have brought me to my ideas. — Albert Einstein

Let’s focus on dogged endurance. Deliberate practice is hard work. Sitting down and focusing on one small thing, really working towards deep knowledge, is a challenge.

The 5 Elements of Effective Thinking is a great book by two mathematics professors on how to gain much deeper understanding of a particular subject. Their arguments and techniques align well with deliberate practice. The authors create a mental model of the elements (earth, fire, water, air and quintessence) to help you in your learning and practice. To quote one of the authors.

Deep work on simple, basic ideas helps to build true virtuosity—not just in music but in everything. — Edward B. Burger

An example could be functions in JavaScript. Do you have a deep enough understanding to teach it to someone else? Could you sit down and write a good summary of that feature of JavaScript? If not spend an hour researching it deeply until you understand it from first principles. Building a bedrock of mental representations will help you with the more complex techniques as you start to stack your representations on top of each other building towards mastery.

This is where our daily learning hour at Findmypast comes in. We need to support all our engineers in refining their mental representations. I’m a big believer in the phrase “Every Damn Day” and developing a habit of learning every day. This quarter I’ve been working through the exercism track on ECMAScript as my daily deliberate practice.

A training program and making a scoreboard

Stay the course.

This is a fundamental truth about any sort of practice: If you never push yourself beyond your comfort zone, you will never improve. — Anders Ericsson

Lets be honest, it’s difficult to go outside your comfort zone. It is easy to give up when things get hard. Training plans help you stay the course. You might decide to do a certain number of exercises in a week. You might decide to read a certain number of chapters of a book the following week. Keeping a scoreboard of your work towards your goal can shine a light on the progress you’re making.

A common trick of athletes is to publically state their intentions. At the beginning of the season they’ll state their goals to achieve. If they fail to do their training they’ve not only let down themselves but everyone else that they have told. This makes them work towards their goals with added focus and vigor.

You might not tell everyone in the office but you might tell your team that this quarter you want to improve a particular aspect of your skillbase. You could publically show your scoreboard that shows your progress towards your goals. Finally having a coach that holds you accountable for your weekly commitments towards your goal is solid step to keeping your focus. These are useful techniques to help you form a habit of practicing every day.

JavaScript scoreboard

This is the scoreboard that I created for my JavaScript learning this quarter. I set myself a goal of reading 3 textbooks and completing 30 exercises. I’ve been seeking feedback on each completed exercise from colleagues that I trust. This has helped me refine my solutions to be more readable and useful. I can already feel my skill in JavaScript growing even after only a couple of months of deliberate practice. However I’ve not been doing my prescribed reading and I’m working to find ways that I can reliably hit my weekly goal of 3 chapters a week.

Setting goals and finding a coach

Pick a goal.

Clarity about what matters provides clarity about what does not. — Cal Newport

I find identifying an area where I want to train my mind an incredibly daunting task. There’s so much that I could turn my hand to that quite often I get paralysed. As a result I end up casually dipping my toe in lots of different areas. I usually read enough to be able to talk about the concepts but never gain the depth of understanding that I crave. I want the depth of knowledge that allows me to be confident in teaching it to others. I find it difficult to stay focused and lack the mental fortitude not to get distracted and chase the shiny new thing.

I find the hardest aspect is saying no to so many interesting things and picking one thing to say yes to. For this quarter I’ve said yes to JavaScript and I’m actively trying to say no to everything else. To begin with I felt like I was missing out but now I feel the benefit of my focused deliberate practice it far outweighs any initial angst.

The best way to get past any barrier is to come at it from a different direction, which is one reason it is useful to work with a teacher or coach. — Anders Ericsson

If you find setting personal goals a challenge then a great first step could be to get a coach. Pick someone you respect and trust who’s seen your work. Hopefully they will be able to help you identify your weaknesses.

My mentor Andy (our CTO) helped me create a mind-map of the things that matter most to me. Once that was in place he helped my set my immediate goals and plans for the quarter. I liked the model proposed by Angela Duckworth in her book Grit. Below is a diagram I made to help me in prioritising what I should work on in my personal learning time.

JavaScript goals

Self criticism and expert critique

Seek feedback.

As soon as possible, experts hungrily seek feedback on how they did. Necessarily, much of that feedback is negative. This means that experts are more interested in what they did wrong—so they can fix it—than what they did right. The active processing of this feedback is as essential as its immediacy. — Angela Duckworth

Reflecting back on your deliberate practice is essential. Identifying mistakes in your thinking is core to improving. A trusted coach is a great way gain critique on your work. Having someone to explain a different approach to what you’ve implemented, or point out an optimisation you’ve missed greatly helps shortcut you to deeper mental representations.

Exercism helps me generate fast critical feedback as it lets others comment on my solutions to exercises. This creates a short feedback loop to the practice I do each day.

That’s it, that’s all

So there you have it. Currently that’s everything I’ve learned about learning. Figure out what’s important to you. Find a coach. Build a plan of improvement. Track your progress. Deliberately practice. Actively seek critique. Make a habit. Walk firmly on the path towards mastery.

If you like the sound of what we’re doing here, we build websites with React, Relay, Webpack, and Babel. Elixir and Phoenix are the core of our platform. If you love learning then we’ve got a lot in common. We look for hard working developers. Have a look at our jobs and drop us a line.

I’d love to hear your comments on your learning strategies and experiences.