This site runs best with JavaScript enabled.How to Learn Quickly

How to Learn Quickly

July 09, 2020

––– views


A few months back, I set out a goal to learn TypeScript deeply in 3 months and I did it. Since then, others have asked how they can do the same. The outcome is a result of using something that I like to call the Fast Framework. This guide will teach you how you can use it to learn anything quickly.

Imagine you're in racing a car. Your goal is to cross the finish line. Taking this analogy, we break the framework into three phases:

  1. Make your Map
  2. Stay on Track
  3. Cross the Finishline

In each phase, I'll cover different aspects that will help you learn fast and reach your goal. I'll use learning TypeScript as the example. The first phase will cover the foundation for your learning project. Think of this as vision, timeframe, timeline, and organization. In the phase after, the focus will be staying on track and I'll discuss aspects related to accountability, momentum, sharing, and focus. In the final phase of the journey, the goal is to finish strong and cross the finishline. There, I'll talk about practice, confidence, vocabulary, and depth.

Make your Map

The first step is to make your map. This will help answer questions like:

  • What does it mean to "learn [insert thing]"?
  • How long will the project take?
  • What are the expected outcomes?
  • How am I going to organize my learning project?

Write a Clear Vision

For the vision, define your project and use the Objective Key Results (OKRs) framework. If you aren't familiar, this was popularized by the book "Measure What Matters" and is used at companies like Google and Intuit.

First, define what you expect to achieve.

In my TypeScript learning project, I wrote:

Learn TypeScript deeply and become the [Company] "in-house expert"

That will be your Objective. Next, figure out how you're going to measure it. We refer to these as the Key Results. Continuing with my previous project, I wrote:

Don't rush through this part. Spend some time thinking about your objective and what you need to achieve to get there. Completing your key results should allow you to confidently say you've completed your objective.

With this vision in mind, you now have clarity on it means when you say "learn [X]" and you know what you expect to achieve.

Establish a Timeframe

You don't want to be racing on this map forever. You need to be realistic and ask yourself how much time you have for this. Estimating time to complete tasks is hard. You can use what I like to call the Timeframe Formula:

Take the length of months you want to work on this, multiple by 4 to give the amount in weeks. Then multiple it by the number of hours per week that you want to dedicate.

Timeframe Formulanumber of project hours =  (months * 4) * hours/week

For example, when I did a similar project, I gave myself 3 months with 8 hours per week. Using the Timeframe Formula, you get:

3 months x 4 weeks/month x 8 hours/week = 96 hours total.

Timeframe Formula(3 months * 4 weeks) * 8 hours/week = 96 hoursexample using 3 months with 8hrs/week

You now have your timeframe. Use this to set expectations on how much time you plan to dedicate each week.

Build a Timeline

The next thing you need to add to your map is a timeline. Think of this as a week by week calendar. The timeframe answers the question of how long and the timeline answers the what will I do each week. It helps you think less because you will already know what to do for that week. It won't be perfect. You may need to readjust, but you will have removed friction.

An example:

  • Week 1 (June 1)
    • Programming TypeScript
      • Chapter 1 - Introduction
      • Chapter 2 - TypeScript: a 10_000 foot view
        • Book exercises
      • Chapter 3 - All About Types
        • Book exercises
    • Official TypeScript Handbook
      • Basic Types
      • Variable Declarations

You know yourself best. Think back to the Timeframe Formula. The example estimated 8hrs/week and 12 weeks in total. Knowing how fast you work (i.e. read, code, etc.), you would adjust accordingly. A complete timeline would have all the weeks filled out.

Two important tips:

  1. Leave ~10% buffer towards the end
  2. Give yourself some breathing room

Life comes up and you may fall behind. That's where the buffer comes in! Some weeks, you may find that you complete everything in 6 hours. No need to fill those two other hours if you don't want to. Reward yourself with rest.

With a timeline, you are be good to go!

Keep it Organized

You want to stay organized on this journey. That means a place to keep track of your timeline, log any notes or things you learn, and have visual indicators for the progress you're making.

I use Notion for this because it supports project management well. I make a place for the project. I add the timeline and use checkboxes. Then, I check them off as I go and take notes as I'm learning.

Here is a non-exhaustive list of tools you might want to check out:

You could also use an analog tool such as a pen and paper.

Stay on Track

Now that we have our map, we are ready for the next phase: stay on track.

In this phase, the goal is to focus on developing the systems that will help you stay accountable, build momentum, share with others and, stay focused.

Keep Yourself Accountable

You always want to stay accountable for your project. Think of this as your race crew. They make sure you're fueled, your tires are rotated, you're hydrated, and you're ready to finish the race. We want a similar type of support and accountability.

It could be:

  • a group of friends
  • a family member
  • a friend online

All you need is at least one person with whom you can share updates. They don't have to know TypeScript or even know how to code. But they do need to be someone with whom you can check-in regularly. For TypeScript, I recommend looking for 2-3 people who will join you in your TypeScript journey. I would post:

  • on Twitter, using the #100DaysOfCode or #CodeNewbie hashtags
  • on Dev.to, using the #typescript and #discuss tags to start a discussion and share your project
  • on the TypeScript Discord

For your own project, come up with a similar list of options. Explore them all. See where you find the most success and stick with it. 2-3 people is ideal, but at least 1 other person works fine.

Build Momentum

You want momentum. Momentum will keep you going on the track and heading towards the finish line.

Think small wins, milestones and success spirals.

Small wins are the little accomplishments that we oftentimes take for granted. Examples are things like learning a new word or understanding a concept. Celebrate these.

Milestones are the next step up. These can either be date-based or achievement-based. Date-based would be hitting the 1-month mark in your 3-month timeframe for your learning project. Achievement-based would be finishing one of your key results. Either way, these are things to be celebrated and help you sustain the momentum.

Success spiral is a term I first heard in Motivation Hack by Nick Winter. It's the idea that you set yourself up for success for starting small and moving outwards, like a spiral.

In this case with TypeScript, maybe you say, "I'm going to write one line of TypeScript a day." Sounds trivial, right? Good, it should. You start there, establish the habit, then build upwards and outwards. Upwards meaning you continue doing it every day. Outwards meaning you increase the lines of code (without losing the habit).

Share with Others

Yoda quote, "Always pass on what you have learned."

One of the most important parts of staying on track is sharing with others and Learning in Public. There are various mediums you can choose from for sharing:

  • Tweets
  • Blog Posts
  • Podcasts
  • Videos
  • Tutorials
  • Courses

Any of these ways work - and there are probably more I didn't list. This will aid your project for a few reasons:

  • Help you retain what you're learning
  • Build expertise in the area
  • Meet others who are learning

When I was learning TypeScript, I tweeted as I learned. Not only did I meet other TypeScript community members, but people corrected me or taught me new things. Towards the end, people started tweeted me asking for TypeScript help. I didn't always know the answer, but my sharing with others and learning in public helped me build reputation and credibility.

I even ended up attracting the attention of an editor for a tech blog who paid me to write a few TypeScript articles. As you can see, it pays to share with others.

Keep Your Focus

The last piece I want to touch on for staying on track is keeping your focus. To stay on track, you have to keep yourself focused. The first and foremost is limit your focus. Ideally, learning TypeScript is your main focus. I wouldn't suggest doing this and learning Rust or another language or something else. Keeping your attention on one project increases the likelihood you'll stay on track.

The other thing you might want to try is deep work. An idea by Cal Newport, it's where you create an environment that lets you focus on that project for a certain amount of time (such as 1 hour or more) without distractions. Figure out when you're most productive. For me, it's in the morning before work. I wake up early, go through my routine, and then spend some time learning.

Lastly, find tools to help you stay focused. I am a big fan of the Pomodoro Technique. I have an app called Stretchly that reminds me to take a 20-second break every 20 minutes and a 5-minute break every 40 minutes. This allows me to focus for that period and then rest. It then repeats itself like a cycle.

Cross the Finishline

The last and final leg of this learning journey is cross the finishline. You should make it there and feel accomplished. Here, you want to use systems that will help you practice, build confidence, remember vocabulary, and go for depth.

Practice

Learning means nothing without practice. With your new TypeScript knowledge, you can build projects or contribute to open source. This is where the application phase of the learning cycle appears.

Learning Cycleidentifyapplyreflect

It doesn't matter what you build, but that the act of building happens.

When I was learning, I followed a tutorial to build a tiny compiler. It was written in JavaScript, but I did it in TypeScript. This forced me to figure out things on my own.

If your learning something related to code, another idea is contributing to open source. Remember our key results? Here's two of them that apply here:

For things not related to code, ask yourself, "How can I practice what I've learned?" If you are having trouble, consult your community. Ask on Twitter (people love to share their advice).

Practice is where you learn the most.

Build Confidence

You want to build confidence in whatever you're learning. This will make you feel comfortable using your new knowledge.

In the case of TypeScript, you want to build TypeScript Confidence. There are various ways to do this including:

  • teaching others
  • sharing (as we said before)
  • reviewing what you've learned
  • helping others

Many of these things translate over to other topics as well. The main thing is to feel confident in using your new skills or knowledge.

Don't Skip Vocab

Vocabulary is often overlooked. Don't skip out on it! It helps build confidence and it will solidify what you know. It's also a great tool to fight imposter syndrome. Knowing the vocabulary will allow you to build expertise.

To learn and remember vocabulary, use a spaced-repetition system such as Anki. I used it with my TypeScript learning project. You can use it to remember things such as:

  • terminology
  • concepts
  • patterns
  • syntax

Take the thing you're learning, break it down into pieces and then build a list of vocabulary or concepts around those. Study these. This will benefit you in the long-run.

Go for Depth

The last thing in this phase is going for depth. Deep learning leads to deep understanding.

There are two techniques you can use to deepen what you learn. The first is called the Feynman Technique. Take a concept you are learning, such as type inference in TypeScript and explain it as you would to a seven-year-old.

The idea is that if you can't do that, you don't know the concept well enough.

Note: the age of the person to whom you're explaining your learning concept can vary. Focus on being able to explain something you understand to someone with little knowledge or context.

The second technique I want to point out is called Ultralearning. In his book, Scott Young explains Ultralearning as,

a strategy for aggressive, self-directed learning.

—Scott Young

Think of it as taking something, being aggressive with how much or how fast you can learn it, and diving deep. You can use this with your learning projects.

While you're learning, take notes of questions you have or concepts you don't quite understand. Then at the end of your project, see if those questions remain. If they do, start a new learning project and focus on answering those questions.

As you can imagine, if you do this with a topic, you'll have several learning projects and soon start to develop expertise in this subject. It's very powerful.

Summary

The most important takeaway is this: use systems to help you learn better and faster. They will serve as your map, keep you on track and help you cross the finishline. If you were to do this with a programming language like TypeScript, you would develop a proficiency, hopefully even expertise in the language.

The next steps are to go out and use your new knowledge in the world! See what you can build. Find ways to help other people.

And if you're ambitious, I challenge you to go deeper after you finish your first learning project. Use this framework and do another round of it. See how much you can learn! You'll never know the opportunities that may show up as a result.

Tweak this learning framework to your liking and try it out on other projects - even non-technical ones. Adjust as needed. See how it works.

Special thanks to my friends Sean, swyx, and Prince for reviewing and giving feedback.

Discuss on TwitterEdit post on GitHub

Share article

Join the Newsletter

I send a couple emails per month related to programming and learning. I also share goodies and deals here.



Help others learn to code