When you begin learning to code, there are plenty of resources available. There are books on web development and on HTML and CSS. Courses on learning PHP and on programming with Java. There’s “Learn the Basics of JavaScript” and “Build Your Own Website”.
You can allow yourself to be pulled in any number of different directions. Needless to say, there are a lot of choices.
And the simple fact is: when you have a lot of choices, many of them are going to be sub-par.
Like Codecademy.
But before we dive into my gripes with Codecademy, let’s take a step back and discuss some thoughts on the process of learning a new skill, in general.
Context is key
When you’re learning something new, the absolute last thing you need is a bunch of facts thrown at you without any context.
In this story from his book ”Surely You’re Joking, Mr Feynman!”, famed, Nobel prizing-winning physicist Richard Feynman talks about reviewing a school’s science textbook:
”There was a (text)book that started out with four pictures: a wind-up toy; an automobile; a boy riding a bicycle; and something else. And underneath each picture it said, ‘What makes it go?’
I turned the page. The answer was, for the wind-up toy, ‘Energy makes it go.’ And for the boy on the bicycle, ‘Energy makes it go.’ For everything, ‘Energy makes it go.’
Now that doesn’t mean anything. Suppose it’s ‘Wakalixes.’ That’s the general principle: ‘Wakalixes make it go.’ There’s no knowledge coming in. The child doesn’t learn anything; it’s just a word!”
In that example, on its own, “energy” doesn’t mean anything. As Feynman notes, “it’s just a word!”
He continues:
“What they should have done is to look at the wind-up toy, see that there are springs inside, learn about springs, learn about wheels, and never mind ‘energy.’ Later on, when the children know something about how the toy actually works, they can discuss the more general principles of energy.”
What matters is that you can use the relevant information — in this case, say, the inner components of the toy — in order to figure out how those help make it move. That is knowledge — demonstrating information in a useful context.
The importance of a natural environment
Similarly, things need to be learned and experienced in natural, practical settings.
You can work on throwing that 50-yard deep ball all you want in practice, but when it comes time to throw the same pass in a game — with the crowd roaring, and the opposition’s seething defensive line staring you down — the situation is different.
And that’s why true “game-time” experience is so crucial. As Adrian Peterson once said:
“I treat every practice as if it were a game.”
That’s also exactly why coaches go through such great lengths to simulate real-game atmospheres. That’s why Les Miles, the famed coach of college football powerhouse LSU, has been known to pipe loud music — and even cowbells, before a matchup with Mississippi State — into practice before big games to simulate the deafening cheers of an opposing crowd.
Because performing something, anything, in (as close to a) real-life, practical setting is, by far, the most valuable experience you can get.
So what does this all have to do with coding? And with Codecademy?
Let’s start with the former.
Learning to code is like acquiring any other skill.
Just like learning to ice skate, or to play chess, there’s a natural progression involved in acquiring any new skill. Learning to code is no different.
The importance of learning in context
Picture this… You’re at the ice rink, you just got your skates laced up, and you’re determined to finally learn to skate. You step out onto the ice, and, hugging the wall, slowly begin to make your way around, never looking up from your feet.
When you’re starting out, this may seem like a pretty standard approach, right? But it’s probably not the best…
Now, let’s say that — instead of just attempting to skate around in a directionless manner — you have an experienced skater helping you out. They help you start out small, but they provide direction. “Start by just standing up and balancing in place. Then, as you start to move, focus on keeping your gliding motions consistent, and go just five paces — then stop again and rebalance.”
They give you goals with context — say, to skate an entire lap, looking up, without holding onto the wall. Your actions immediately have a purpose: to achieve that goal.
And while you may make some progress with approach number one — by haphazardly strapping on the skates and making your way around the rink (hopefully without crashing into any unsuspecting patrons along the way) — your improvement will be much more rapid, and more dramatic, in the scenario where you’re receiving direction from the skating coach.
And then there’s the aspect of practicing in a natural setting.
The importance of learning in a natural environment
Is practicing your gliding ice skating motions on the kitchen floor as valuable as practicing them on an actual rink?
No. It might help, but you’ll undoubtedly progress quicker, and with a stronger understanding, when practicing in the most natural setting — the rink.
![The Optimal Learning Sweet Spot](https://selftaughtcoders.com/wp-content/uploads/2015/02/optimal-learning-sweet-spot-graph.png)
The Optimal Learning Sweet Spot
Learning to code is no different. When learning to code, as when learning any other skill, learning in context and learning in a natural environment are key.
And herein lie my issues with Codecademy.
Codecademy lacks direction and context
When you log into Codecademy, you’re presented with a bunch of modules simply titled things like “HTML” and “PHP”. If you’re paying close attention, you’ll immediately notice an issue: what good does “PHP” do me? Will I go through the exercises and then just start “PHPing” things?
Will they help you learn some PHP code? Sure! But to what end?
Are you gonna go out and code up a bunch of loops to print out an endless list of numbers? What’s the goal? There’s nothing at the end of the tunnel.
And then there’s the fact that you write all of the code within the Codecademy website.
Codecademy lacks a real-life environment
Sure, it’s great to be able to log in and start coding away. But guess what? That’s not how it works in the real world.
You have to set up your development environment; you have to install and configure all the necessary software on your computer. You have to gain an understanding, and appreciation, of how those things actually work in practice and how they work together.
When you do Codecademy exercises, all of your code is utterly trapped within their system. You may have written it, but it’s not yours.
You can’t easily revisit your code in the future, read through it, tinker with it, and say, “OH yeah! THAT’S how I did that!”
And rereading, revisiting, playing with, and hacking away at code you’ve already written is, by far, one of the most valuables ways to strengthen your coding chops. Because it prompts you to revisit your code in context. It makes you think about how certain pieces of code function within the greater scheme of things. It triggers your brain to develop richer neural connections and associations, which as Joshua Foer describes in his book Moonwalking with Einstein, are the basis of memory:
“All of our memories are bound together in a web of associations. This is not merely a metaphor, but a reflection of the brain’s physical structure. The three-pound mass balanced atop our spines is made up of somewhere in the neighborhood of 100 billion neurons, each of which can make upwards of five to ten thousand synaptic connections with other neurons. A memory, at the most fundamental physiological level, is a pattern of connections between those neurons. Every sensation that we remember, every thought that we think, transforms our brains by altering connections within that vast network.”
Learning both in context and in a natural environment facilitates the creation of those new neural connections,
increasing the strength of the memories related to the new skill you’re working to acquire, thus greatly enhancing the overall learning process.
And that’s why I always teach students to code using classes such as “Learn to Build Your First Web Application”. Does that sound more useful than a course called “PHP”? That’s because it is.
Particularly when you’re learning a new skill, it’s crucial that things are done with clear goals in mind in a natural setting. It will not only accelerate your growth and learning, it will help you stay on track and alleviate potential frustrations.
If you remember only two things…
Please remember to, whenever possible:
- Give your learning context
- Practice in a real-life environment
It can be the difference between your rise to a world-class expert versus getting frustrated and giving up within a week.
Trust me — I’ve seen it go both ways.