Pursuing mastery as a software engineer - part 2
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
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.
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.
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.
Self criticism and expert critique
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.