Logo for the raulrpearson.com site

Deliberate coding practice

You've been told that in order to get good at something, you need to practice. Which leads you to conclude that, as long as you keep practicing, you'll eventually master your craft.

Well, it turns out that's not entirely true. It not only matters that you put in the hours, it matters what you do in those hours, it matters what and how you practice.

Deliberate practice is the term used to refer to these ideas. As far as I'm aware, K. Anders Ericsson is the one that pioneered work on this theory of practice:

One of Ericsson's core findings is that how expert one becomes at a skill has more to do with how one practices than with merely performing a skill a large number of times. An expert breaks down the skills that are required to be expert and focuses on improving those skill chunks during practice or day-to-day activities, often paired with immediate coaching feedback. Another important feature of deliberate practice lies in continually practicing a skill at more challenging levels with the intention of mastering it.

Applying it to coding

This deliberate practice idea makes sense, right? So, how do we apply it to coding?

  1. List the skills and topics you want to master. Make this list aligned with your higher level goals. Do you want to get a job as a frontend developer, a backend developer, do you want to become a freelance contractor or be able to create your own software products from start to finish?

    Your skill stack will be different depending on what you're trying to achieve. To figure out what to learn, search and ask people that are already where you'd like to be.

  2. Break down those skills into smaller chunks.

  3. Design exercises for each of those skill chunks. Make the exercises small so that you have a tight feedback loop and you can reach the required frequency and volume of practice for the skill to sink in.

    My intuition is that deliberate practice is closely related to how human memory works and the lessons from spaced repetition apply - at the beginning you need to practice with high frequency to avoid forgetting. As you accrue practice, you stop forgetting as fast, so you don't need to practice as frequently.

I haven't completely managed to wrap my head around this concept of deliberate practice and how to apply it yet. I'm still learning, but I think it could unlock faster learning and mastery for anyone wanting to become a better developer.