Disclosure: Class Central is learner-supported. When you buy through links on our site, we may earn an affiliate commission.


The Intuitive Programmer: Learning How to Learn Programming

Here’s how to become a better programmer by understanding the neuroscience that underspins learning.

If you want to learn programming, there are many good resources available. But this can distract you from investing your time in what matters most: your brain.

I got introduced to the world of MOOCs thanks to Barbara Oakley’s Learning How to Learn. It made me more aware of the learning opportunities around me and helped me land my first job: I joined the Class Central team after taking part in the Mountains 101 Study Group (my colleague Fabio wrote about it here). So I believe knowing how to learn effectively is essential.

As it happens, last month, Class Central launched a free web development bootcamp with weekly talks from guest speakers. In the inaugural week, we had a very special talk.

Barbara Oakley and senior software engineer Zach Caceres joined our bootcampers to tell them about The Intuitive Programmer — that is, they explained in very practical terms how to become better programmers by understanding the neuroscience that underpins learning. You can find the full talk here.

The talk was ideal to kick-off the bootcamp, since it equipped learners for the weeks ahead. But it’s also relevant to a broader audience, be it aspiring developers, or anyone with an interest in learning really. In this article, I’ll go over my main takeaways from Barb and Zach’s talk.

Programming is Weird & Hard

Programming used to be more concrete: a few decades back, programs were literally punched into cards. But over time, as new languages and software tools were developed atop previous ones, accruing complexity in the process, programming became more abstract. This put the onus on programmers to have an intuition of the processes taking place inside the computer.

But programmers can feel overwhelmed by this complexity. A lot of learning is required. And things move quickly, as new tools are launched and old ones are updated. So programmers are under constant pressure to stay relevant: this shows the importance of learning in this industry.

Examples of languages/tools programmers are expected to learn (Source)

Companies train their employees in new languages, tools, and technologies. But they often forget the programmer themself — a human being with a brain — neglecting to train them to learn more effectively.

So how do we become better learners and programmers? We can start by looking into a critical component of learning: our memory.

Working Memory & Long-term Memory

Working memory, put simply, is what we currently “work” with. Think of it as a metaphorical octopus that uses its tentacles to hold bits of information and retrieve information from long-term memory. Using these bits and pieces, the octopus can form links of information.

Long-term memory is pretty self-explanatory. When you actively engage with your learning material and piece it together using your working memory, the resulting chains of information are stored in your long-term memory, ready to be retrieved.

It’s crucial for programmers to get to a point where the octopus, i.e working memory, won’t have to create new links but rather just retrieve existing ones. That’s what happens when we reach proficiency in a domain.

The memory octopus is unique to each individual. Some people learn quickly; others, slowly. But learning slowly gives one the opportunity to understand more profoundly. So don’t think of it as a negative trait.

New to Programming? Take Notes

Here are some of the key challenges programmers face, and some ways to address them.

Working Memory Management

Not being aware of how your working memory is being spent is bad.

So here’s what to do:

Be Deliberate: Decluttering is paramount for making progress. Treat your working memory as you would treat your computer’s RAM: to get the best performance, do only one task at a time. So, for instance, when programming, close unnecessary tabs in your browser.

Anxiety Management

Programming can be an anxiety-inducing task.

Some ways to tackle this are:

  • Smart Tenacity: Not giving up easily, but being smart about not burning yourself out.
  • Take a Break: Taking a break helps you shift from “Focused Mode”, where you’re trying to solve something using intense focus, to “Diffuse Mode”, your natural state of mind, which facilitates learning. Diffuse mode is where the learning of information gathered during focused mode happens.

Don’t Procrastinate

Procrastinating is the worst enemy of focused mode. Understanding why we procrastinate is often the best way to overcome it.

When we encounter a difficult problem, our body experiences pain and discomfort in the insular cortex, forcing us to look for ways to get a temporary boost of happiness: that’s why we procrastinate. This is unhealthy and the more you give in, the stronger the tendency becomes.

Some ways to tackle this are:

  • Workstation Optimisation: Humans are social creatures. We perceive social expectations require immediate response. Hence, why workstation optimization is important: it’s better to not have social media or applications that carry social expectations anywhere close to your workstation.
  • Pomodoro: This is a tried and tested technique. I have used it since I learned about it in Learning How to to Learn. It’s the idea of working for a set amount of time, say 25 mins, on a task, and then taking a break, say for 5 mins. Rinse and repeat. This utilizes the power of focused mode and diffuse mode.
  • Tackle Distraction: Tackling distraction can help you overcome procrastination. Distractions take you out of focused mode and into diffuse mode. While diffuse mode helps learning, the time spent using focused mode is essential for diffused mode to proceed with learning.

“Best Practices” in Learning

In programming, “best practices” roughly translate to good habits that enhance your programming ability. These are crucial for writing good, readable and accessible code. Extrapolating this concept, here are some learning “best practices”.

Learn, Practice, Repeat

Working actively with material you’re trying to learn is the best way to learn. Engage with the material — for instance, by explaining it out loud to a rubber duck — rather than learning passively. Having a gigantic time block of learning or practice isn’t ideal. Try instead to have smaller, alternating blocks of learning and practice. 

Good Study Techniques

Here are some good study techniques:

  • Retrieval Practice: This involves retrieving information from your memory — that is, actively remembering things you’ve learned. Each time you do, it becomes easier. This study technique is the most efficient way to remember information.
  • Spaced Repetition: Forgetting is second nature to us. Spaced repetition is designed to combat this by learning information over a period of time, rather than cramming information in one study session. Learn a little every day instead. And review the material when it starts to fade from memory. The second time you see it, you’ll understand it more rapidly, and you’ll remember it longer.
  • Interleaving and Varied Practice: These techniques involve working with related but conceptually different problems. It helps build conceptual understanding through contrast. And it helps segment your learning into discernable chunks, which in turn helps consolidate them in memory.
  • Good ol’ Reading: Reading is an all-around great cognitive exercise that helps you become better at digesting information (input) and retrieving it from memory (output). 
  • Use Adrenaline to Your Advantage: Tonic adrenaline is responsible for motivation and always present to some extent in our brain. Phasic adrenaline is released when we experience something positive. In the past, programmers had to wait sometimes hours for their code to compile. Their reward: phasic adrenaline. This solidified their knowledge and supplied motivation. Use this natural mechanism to your advantage.


The brain is an amazing tool, often underutilized. So follow Barbara and Zach’s advice: make effective learning one of your priorities. Understanding the mechanisms that help us learn, and using these to become more effective learners, will help you become a better programmer.

If you want to start learning programming, do watch Barbara Oakley and Zach Caceres talk.

And if you want to deepen your understanding of the neuroscience of learning even further, I encourage you to have a look at Barbara’s online courses. Five of them are part of our 2021 Class Central ranking of the Best Online Courses of All Time:

Mervyn Medidi Profile Image

Mervyn Medidi

An engineer and a learner, I got my undergraduate degree in Mechatronics Engineering from the Manipal Institute of Technology.

Comments 2

  1. Zach Caceres (zach.dev)

    Awesome summary of the talk, Mervyn. Thanks for writing it!

    • Mervyn Medidi

      Thankyou Zach! 🙂


Leave a reply

Your email address will not be published. All comments go through moderation, so your comment won't display immediately.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Browse our catalog

Discover thousands of free online courses from top universities around the world like MIT, Stanford, and Harvard.

Browse all subjects