Problem-first learning

Creating "a-ha" moments

One of the most memorable learning experiences of my life happened outside of school. It wasn't so much about what I learnt, but rather how I learned it, and what that taught me about the best way to teach.

Before I became a software developer, before I joined the 8-week bootcamp that launched my career, I spent a few months teaching myself how to code. I started learning a programming language called JavaScript.

I did a few courses online, and then tried building my own project. It was a silly little website that helped you plan outfits, by matching together clothing items based on colour, pattern, etc.

I did my best to make it work, but I was a real newbie, and my code was an absolute mess. JavaScript, on its own, tends to be a bit of a clusterfuck. There are all sorts of helper libraries that make JavaScript easier to write, but I avoided those at first. After struggling for a bit, however, I decided to bring in one of these libraries to make things easier.

The library was called jQuery, which was by far the most popular option. As soon as I started using it, I was awed. A bunch of the messy code I had to write by hand was replaced by short & sweet jQuery code. It was so easy to use. It was a blessing.

I remember thinking how neat it was, and how satisfying it was to use. There was a sense of relief. More importantly, I fully "got it". I didn't need someone to explain to me what jQuery was and why it was important: I could recognize it from firsthand experience. I still remember that feeling.

But imagine if the situation was reversed.

Imagine if, before I started using JavaScript, someone tried to teach me what jQuery was and why it mattered. "It makes writing JavaScript easier," they would say. "Oh, okay," I would reply with a shrug.

If I hadn't written JavaScript yet, or didn't know what made it "hard", that statement would be meaningless to me.

This is how most conventional learning happens. You get the solution before you get the problem.

A common refrain in math class: "why are we learning this?" The answer: "it will be useful someday." Well, someday isn't very compelling. And the question "why are we learning this?" comes from a sense of meaninglessness and frustration.

The opposite approach is figuring things out in the moment. Learning from experience is what makes a concept useful. This is what gave me that sense of satisfaction and appreciation.

Which do you think is more powerful?

The most satisfying part of learning anything is feeling that you have become more capable than you were before. It's like a "level up" to your abilities: "Now I know how to do this." But if you don't know why this matters, who cares? "Now I know how to calculate tan, sin, cos... but what is it good for?"

The solution is to start with the problem. Let students struggle with it. If the subject is a mathematical concept, what problem does that concept solve? Let them experience that problem firsthand. If possible, give them the tools to discover the solution themselves. Introduce the solution once they understand why it matters.

When I was learning machine learning on my own, I had very little experience with calculus. I didn't know what a derivative was. I "discovered" what a derviative was useful for in context, when I needed it to help solve a problem. I felt grateful towards derivatives, because they helped me get something done. How many people who took calculus in high school feel gratitude towards derivatives??

The most powerful part of the learning process is the "a-ha" moment. The moment of "oh, I get it!" That moment is much more memorable if the "why" component is clear: "oh, I get it, and that means I can now do this."

If you're learning on your own, you can practice this too. Learn by building, by trying to figure things out. Pursue small projects, and learn what you need to get each one done. Don't learn what you feel you "should": learn what you actually need to make things happen.

It's a lot more fun, and a lot more effective.

Get my monthly reading list

A short, once-a-month email of useful articles & guides: the best of what I write, and the best of what I find.

Sign up now and get a free copy of my mini-guide, "How to Accelerate Your Developer Career".