Ultralearning… I hadn’t heard this term until recently when I started an audiobook with the title. I’ve been on a productivity audiobook kick recently (Atomic Habits, So Good They Can’t Ignore You) and Ultralearning popped up in my recommendations.
As I started reading the book I realized that this is exactly how I learned how to code. About 5 years ago I went from not knowing how to code to working at a startup in about 7 months. How did I do it? I guess I used ultralearning which the author Scott Young describes as “self-directed and intense” learning. In his book Young describes 9 key components and I thought it would be interesting to break down my experience with each idea while learning to code and how it lines up with Young’s list.
1. Meta-Learning
This is where you spend time researching and learning the What and the How of what you want to learn. Not everything is learned the same exact way, so this step helps the learning process be more efficient.
For me this started with a conversation I had with a friend of mine where he explained to me some of the technologies and concepts in modern full stack programming. Things like Front End, Backend, Full Stack, React, JavaScript. What are the topics I need to learn to actually learn programming? I posted a video recently about this, essentially four things I think you need to learn to get a front end junior engineer.
After this conversation I spent some more time researching different resources that I would go through to help with specific areas I had identified that I needed to hone in on. Some of those areas included:
JavaScript: I knew the basics but I realized I needed to learn it much better.
Web design fundamentals: I wanted to learn how to build websites at a deeper level so this was clearly one of my priorities. The resource I chose was a little dated and more old school but gave me a really solid foundation.
Using Git (and also GitHub): Git is an extremely popular way to save your code online, as a well as a powerful tool that immensely helps you when one or more people are writing code on the same project, so I planned to dive into this.
React: This was one of the main areas I had decided to focus on, and this ended up being a really good bet. It’s still in incredibly high demand today. And I also enjoy it so that helps!
2. Focus
I realize this in retrospect but this was absolutely essential to my learning-to-code success. To perform ultralearning you have to be laser-focused and to learn something difficult like computer programming takes immense focus. I basically had to kill all distractions. I basically cut out social media, tv shows, movies—anything non-essential.
I started studying first thing in the morning and didn’t stop until about 10pm (or when my brain turned off), with a few breaks for food and putting the kids to bed. I did this 6 days a week for just about three months. This gave me a solid foundation for the more subtle learning I would undertake for a few more months before finally getting my first job offers. But the focus aspect was non-negotiable.
3. Directness
Study the things you actually need to learn. If I would have started my coding journey by spending months studying abstract computer science fundamentals I would not have gotten a job as quickly as I did and possibly would have failed or given up altogether. (I have later spent many months studying CS fundamentals which are quite interesting).
This principle of directness is essential and ties directly (no pun intended) to the meta-learning principle above. Research the things you need to learn and then practice those things. Want to learn to cook? Watch a video on basic cooking techniques and then try them out in the kitchen. Do you want to learn JavaScript? Then practice JavaScript. Don’t watch videos on Python or machine learning. Write JavaScript. If you watch a video on JavaScript, practice whatever JavaScript you learned from the video.
4. Drill
The point here is to repeat the things you need practice in. If you want to be able to write full stack applications like I did, then practice building full stack applications. Setup a database. Setup a server. Setup the front end. Rinse and repeat. Young says you need to “drill the weak points.” Are you confused by how arrays work? Practice mainly with arrays until you improve. Learn the most important array methods and repeat them until they come naturally.
5. Retrieval
You might watch a video or a blog tutorial and think you learned something new, but if you can’t repeat it on your own did you really learn it? People often call this being stuck in tutorial hell. You get trapped watching videos of other people programming but you never actually learn it for yourself. You never graduate from beginner, and then you jump to another tutorial. You might even jump languages or technologies. Watch out for this because it’s hella discouraging 🤣!
Instead of getting stuck in tutorial hell, watch a video and then try to do it yourself 5 or 10 times from scratch. It’s OK if you need to rewatch the video a few times on things you miss or forget, but if you do this enough times you’ll actually learn the concept. For more on this topic read my post on How to learn hard things in tech.
6. Feedback
Feedback is one of the most important things when learning a new skill… Am I even doing this right? When I think of feedback I almost always go to the concept of deliberate practice which was really mind blowing to me. I wish I could remember who I first learned the concept from, but I’ve now heard it repeated liberally by many others (Cal Newport and Angela Duckworth to name a few). I’ve used it at various times in my life and now I have a phrase to describe it. I’d summarize deliberate practice as repeated intentional practice with quick feedback.
The faster you can make your feedback loop (how long it takes you to get feedback) the better. Also you want the highest quality feedback you can find (master/expert level if possible). This is one of the most important things that helped me learn computer programming in general and front end in particular. When I wanted to make a button match the button design of a mockup I could see my changes after saving using live server/hot-reloading. I could tell right away if my button design matched and that was a pretty fast feedback loop. This quick iteration was essential to my ultralearning. I also talk about it in my YouTube video on why I think Javascript is an amazing first programming language because you can see your changes in basically realtime. I plan to record a followup video to this one with examples so stay tuned if you’re interested!
7. Retention
What are you forgetting? Learn to remember things long term. Use spaced-repetition apps like Anki. Modern programming is interesting because you have to know how to use so many different technologies and tools. In practice you are learning how to use technologies but you don’t necessarily need to memorize all of the specifics. If you need to setup a new database for example you can just look at the documentation for the setup steps since you usually only do that once at the beginning of starting a new project. Whereas something you might do multiple times a day like to filter or sort an array is something you’d likely want committed to memory.
I noticed my retention improving when I was able to recall JavaScript language syntax more quickly. The more I practiced each day and worked on new projects the more I actively tried to remember and use the skills I needed to retain. I probably could have sped this up with some strategic flashcard drilling.
8. Intuition
Intuition is quite valuable. You may not know exactly what to do or what is causing an error message, but if you have good intuition it will help you look in the right direction and ultimately get where you need to go much faster. Developing an intuition for things takes time but does eventually build up. I remember feeling helpless countless times while learning to code. After getting an error message I would have no idea where to look or what to do to solve it. I remember having to ask for help for the simplest of things. But intuition is like a crock pot, it needs to simmer and eventually with enough time you have it! You start to develop the feel for how things work and what to do when things break or go south, but it does take time.
9. Experimentation
Young says you need to “explore outside your comfort zone”. This one is one that I personally loathe. It’s called a comfort zone for a reason.
When I think about learning something completely new or foreign to me, a new concept or a new technology, my brain starts to hurt. I feel like it’s a self-protective mechanism but in reality it’s just part fear and part unknown which leads to some form of anxiety. But the more you go outside your comfort zone the less scary it gets even if it’s only incremental. I still feel the brain hurt daily at my job, but it’s not as severe. And the benefit you gain from experimenting is something you don’t always feel right away but pays off later when your combined experiences help build intuition.
If you apply these principles to whatever you want to learn you might just benefit from ultralearning too. Let me know if you’ve had any ultralearning experiences in your life. What did you learn? Were any of the steps above more impactful to you than the others?
-Jesse