These days coding is all the rage. With phrases like “data science”, “big data”, and “machine learning” being thrown around with the promise of solving all the worlds problems and, gasp, actually getting you a job, I’m often asked by people how they could possibly learn to code. “But I’m 28!” they say, “I’m horrible with computers. I just wish I would have learned to code when I was younger”.

Well, I’ve got some news for you: you don’t have to be a pre-teen to gain an intuition for code. You just have to do it. Now, I know that this is usually one of the most frustrating pieces of advice that one can give, so I’m going to try and tie it into another activity that seems to attract the same self-hating feelings of futility that coding does: climbing.

Sports climbing is a great hobby. It’s good for your body, it’s good for your mind, and it’s a good community of people to be a part of. However, just like coding, if you tell someone that they should learn to climb, 90% of people will tell you the same thing: “but I could never be a climber, I don’t have any kind of upper body strength. I wish I would have started younger.”

The assumption that you can’t start coding (or climbing) because you’re too old or too dumb reveals two things: one, you underestimate your ability to learn something new; two, that you have a fundamental misunderstanding of the things that you need to do in order to be good at either of these two activities.

Remember that scene in Swordfish where they put a gun to the guy’s head and tell him to break some computer security system in sixty seconds? Remember his fingers flying around the keyboard as algorithms, equations, and cryptic code blocks float through his head? And you thought to yourself “damn, that dude must be really smart, like, super-human smart!” Yeah, coding is nothing like that. Here is what coding is actually like:

And this doesn't even include figuring out package dependencies...

And this doesn’t even include figuring out package dependencies…

Surprisingly, this graph doesn’t change that much (except if you’re smart you might grow the “asking other people” piece a bit). What does that tell you? That the process of coding is also a process of learning. You can’t decouple the two.

Getting better at coding is just like getting better at climbing. How do you get better at climbing? You do it. You try out some easier climbs that seem like they’d be fun. You give it a shot. You try climbing the wall, and you fall, and then you think about why you fell. And you know what? After you do this once you will be better at climbing. After you do this for a year, you will be great at climbing. And you will have had a lot of fun too.

Let me introduce you to Matt and Jill. Matt has been playing sports all his life, and Jill has spent most of that time watching TV. They both want to learn to climb, so they get a membership at a local gym. Let’s take a look at how their skill levels progress over time:

Hooray practice!

Hooray practice!

Notice how Jill might have started off a bit slower, but ended up making gains more quickly. That’s because being bad at something just means you’re going to be on a steeper part of the learning curve. Maybe that means it’ll be more work in the short-term, but it also means that you’re going to improve by more in the same amount of time. After the same time at the gym, Matt and Jill might still have different skill levels, but they have one thing in common: they’ve both gotten a lot better.

Why do I keep harping on this coding/climbing connection? Because both of them share the same core ingredient: constantly improving. The best climbers spend most of their time failing, and in so doing they keep getting better. The best coders spend most of their time being confused and figuring out why, and in so doing they learn about new packages, new languages, new techniques.

Climbers will never be able to “win” at climbing, there will always be a taller, steeper, more complicated wall that will defeat them. Coders will never know it all, as the world of computers is constantly evolving, growing, and pushing the boundaries of creativity and productivity. In both cases, the point is iteration, doing something, reflecting on what worked and what didn’t, and using this knowledge the next time around.

Practice iteration, and I guarantee that in no-time you’ll be a great coder (and a great climber, and a great many other things too). Find something that you want to do with python, ruby, R, whatever, and give it a shot. Keep climbing up the endless wall of computer programming, and have a great time doing it. Your first efforts will probably fail. But then, you know what to do next.

Interested in learning to code? Check out our post “How to become a data scientist before you graduate“.

Cover source.

Leave a Reply