Developers: Supercharge your Learning in 2021


I've been reading and researching learning a lot recently. It has become apparent to me that there is a clear scientific consensus on the best way to learn. Below are a number of principles that I will be applying in 2021, along with an explanation of how I will be applying them. By following the principles listed below, we can supercharge our learning and avoid wasting time with ineffective strategies.

Learning Principles

Deliberate practice

It's easy to assume you're getting better just because you're putting in the hours. Time spent learning is not the whole picture, however.

I've been writing JavaScript code for a while and am confident in the basics. I can build simple websites easily. But building a basic website is not going to take my JavaScript to the next level. Even though I'm building things, it feels like I'm spinning my wheels at times.

I'm not the only one who has experienced this. In Geoff Colvin’s book 'Talent Is Overrated' he writes: "In field after field, when it comes to centrally important skills—stockbrokers recommending stocks, parole officers predicting recidivism, college admissions officials judging applicants—people with lots of experience were no better at their jobs than those with less experience".

Most of what we believe is practice is just using the skills that are well within our own comfort zones. These are normally the fundamentals.

A strong knowledge of the fundamentals is good. After all, they're probably what you will rely on most often. However, I want to venture outside of my comfort zone and partake in practice that is designed to improve my level of performance with the JavaScript language. How can this be done? Deliberate practice.

Deliberate practice is purposeful and systematic. The idea is to avoid shallow and easy practice, instead focus on practicing things you're weak at so you can constantly be pushing the boundaries of your knowledge and skills.

I'll be putting maximum focus on the parts of JavaScript that I'm uncomfortable with, and minimum focus on the parts that I'm comfortable with.

Scoping the subject

An effective technique I've learned from Ali Abdaal is scoping the subject. You build up a 'map' of the entire subject, including all of the sub-headings that exist within that subject. You've then got a skeleton to 'hang' your knowledge from as you go along. You understand where each part of the subject fits within the overall structure.

This is similar to how Charlie Munger thinks of his latticework of mental models. When new information can be 'docked' to an existing framework of knowledge, you can understand and retain the information better because you can relate it to what you already know and understand.

My scoping of JavaScript and React is done in Notion using nested lists, but you can use a mind map instead if you prefer. For my scoping of JavaScript, I am using the index of 'JavaScript: The Definitive Guide' by David Flanagan. For React, I used the React Developer Roadmap and official React docs. These scopes are fluid and will likely change as I get deeper into JavaScript and React.

Feynman technique

How many times have you read something but failed to understand it fully?

Learning a technical subject is difficult. It's easy to move onto something new instead of persisting with something difficult, but you're never going to get better at your craft if you shy away from the difficult parts. Giving yourself permission to cover a smaller surface area, but going deeper with your learning, will be massively beneficial for your learning practice.

Richard Feynman was a nobel prize winning physicist who was well known for making complex subjects accessible for the layman. The Feynman technique is how he achieved this.

Employ the Feynman technique by asking yourself the below questions at every step of the learning process:

  • Does this make sense? Could I explain this to a 5 year old?
    • If you understand a topic at a deep level, you should be able to explain it concisely in simple language. If you understand something extremely well, you may even be able to explain the concept to a child. A complex explanation of a subject could indicate that you don't understand it well enough to distill it.
  • Are all of the unexplained questions I have about this topic answered?
    • Being able to break a concept down in simple terms requires a strong understanding. You need to navigate the complexity and unanswered questions you have about a topic. Once you've done that, you should have the knowledge to compress it all down into an easy explanation.

If you're still not at the stage where you can distill something to make it simple enough for the layman to understand, keep reviewing and learning. It's tempting to skip this step and move onto the next subject, but by doing so your understanding will be half-baked.


If the Feynman technique didn't identify holes in your knowledge, elaboration (in public) will.

This article is a perfect example. Many of the ideas I have discussed in this article were distilled within my Zettelkasten. Knowing that I'm going to publish this article has made me more self-critical of my writing. At several points throughout the writing process, I've identified where my understanding for each idea has been lacking and looked up supplementary materials to help further clarify the ideas I am putting forward.

I'll implement elaboration in public by publishing blog posts, tweets and twitter threads explaining what I'm learning (follow me @davidfoxio).

Active recall questions

Re-reading information intuitively feels like a productive method of learning, but it's not. The superior approach is testing ourselves. Practice testing (active recall) and distributed practice (spaced repetition) have been found to be highly effective learning techniques. Summarisation, highlighting and rereading have been found to be relatively ineffective (Dunlosky, 2013).

When we retrieve information to apply it in the real world, we pull the information out of our brain. We do the same when we test ourselves. Putting information into our brain by re-reading is different in nature and is therefore not an effective technique to prepare ourselves for information retrieval in the real world.

You can't understand and learn how to play the guitar by reading and re-reading books about how to play guitar. You must test yourself and course correct by actually playing guitar.

I'm implementing active recall in my own learning practice by writing an active recall question any time I learn something I don't know. This is done using the 'toggle' block in Notion, underneath the relevant header in my scoped subject, so I can see the question and hide/unhide the answer. Below is an example of an active recall question and answer I wrote down the other day:

What number systems can you represent integer literals in?

  • base-10
  • hexadecimal using the prefix 0x or 0X
  • From ES6 onwards you can use binary or octal using the prefixes 0b and 0o (or 0B and 0O)

Spaced repetition

As mentioned above, space repetition has been found to be a highly effective learning technique.

The 'forgetting curve' was found by Ebbinghaus in the 1800s when he made himself memorise random made up words. When he tested himself, he found that his retention decayed exponentially over time. This is because of the forgetting curve, and we must do everything we can to interrupt it.

In addition to Dunlosky's study mentioned above, there are further studies supporting the effectiveness of spaced repetition in interrupting the forgetting curve. A study mentioned in 'Make it Stick' demonstrated that taking a single test a week after reading (28% recall) is inferior to one immediately (53% recall) then one a week later (39% recall). Three immediate tests are even better than 1 (53% recall after a week) - this effectively immunised forgetting.

It's clear that spaced repetition is helpful, but how can you implement it when learning JavaScript? Anki is a popular app for building a spaced repetition practice. I'll be experimenting with this app, as well as the more casual approach of running through all of my active recall questions in Notion on a regular basis.


Focus is often overlooked, but probably one of the more important principles of effective learning. If your attention is shallow, expect your learning and retention to be shallow.

The pomodoro technique is one of the best methods for maintaining focus. The idea of the pomodoro technique is that you set a timer for 25 minutes, and maintain deep focus on ONLY your work during those 25 minutes. No social media, no notifications, no distractions of any kind. After 25 minutes of deep work, you get a 5 minute break.

I've tried pomodoros before and they're REALLY effective at getting you to commit to ignoring all of the distractions that might normally interrupt your work.

My Own Protocol

Since the start of 2021, I've been quite inconsistent with my coding practice. Some days I have coded for large chunks of the day, some days I've done nothing at all.

I had a great run in December. I was consistently spending lots of time on my website and learning new things about Gatsby every day. It's been much harder to get back into the swing of things after the Christmas break.

I put out a tweet earlier this week about the dichotomy of average speed vs. maximum speed which highlights the importance of slow and steady progress. I've been thinking about how I can apply these ideas to my own life.

2021 is the year I will achieve a stronger level of mastery with JavaScript and React. I'll create amazing content and build a public profile to attract freelance work along the way. The only way I'm going to achieve this is by designing a protocol that can be sustainably adhered to over the long term.

Hours and Structure of the Practice

There are 350 days remaining in 2021 starting from tomorrow (16th January). Allowing 30 days for breaks, holidays etc. leaves me with 320 days. I think that 4+ pomodoro timers per day is achievable. This equates to 2+ hours of learning per day, and a grand total of 640 hours in 2021.

640 hours of learning in 2021 will be my target, with a few caveats:

  • Deliberate practice ONLY. This means time spent on side projects and/or client work will not be counted towards the 640 hours.
  • Although I am mainly focused on JavaScript, there may be a need to spend time doing deliberate practice on other related technologies (like CSS, for example). This will be counted as part of the 640 hours.
  • If I get some freelance work, I will need to reduce my target as I will not have the time to freelance on top of 2+ hours per day of deliberate practice.
  • The target of 640 hours is a nice vanity metric to aim for, but the system and consistency are important than the goal. If I'm struggling with my consistency week after week, I'll reduce my target in order to increase my consistency.

Accountability and Tracking

I'll use the Be Focused Macbook app to track pomodoros. It lets you produce reports showing your usage, so I'll easily be able to track total hours.

I'll provide a monthly update in blog post form for accountability purposes and to keep a public record of my progress. I love the simple way Julian tracks his monthly metrics, I'll do something similar.

My Curriculum

I'll be concentrating my learning around a small handful of high quality resources that are catered to the intermediate as opposed to the beginner.


  • JavaScript: The Definitive Guide - a comprehensive guide to the JavaScript language
  • You Don't Know JavaScript - highly rated series going in depth on some of the trickier parts of JavaScript
  • Rediscovering JavaScript and Effective JavaScript (both recommended by Derek Sivers)


  • Scrimba & Frontend Masters - lots of high quality JavaScript and React courses on both of these sites


  • Codewars - for testing myself on challenging coding problems

Follow Along

I plan on producing more high quality content in 2021 about JavaScript, React and being a better developer. If you found any of this content interesting, please follow me on twitter @davidfoxio and let me know which parts you enjoyed most :)