How coding is like playing sports
Why treating programming as a bundle of practiced skills—rather than pure theory—helps developers escape plateaus.
On this page
Introduction
I want to share and elaborate on an analogy often used to explain the learning process to beginner coders. Think of coding as playing a sport. Don’t worry; you don’t need to like sports or be good at them. Personally, I’m not a fan of team sports. However, this is a good analogy nonetheless. Let me explain.
Imagine a person who is the world’s biggest fan of tennis. They know the game’s history, the rules in their full complexity, all the top players and their current stats, etc. Therefore, if you were to ask them about the game, it would seem like they know everything there is to know about tennis.
So one day, you get the not-so-bright idea of challenging them to a tennis match. When the time comes, and the game is about to begin, you start questioning your current life choices. I’m going to get creamed! However, once the match begins, you realize that while this person knew everything about tennis, they were terrible at playing it.
Knowledge vs. Skill
They knew it from a distance like a subject to be studied, but not as a collection of practical skills that, when bundled together, empower you to do new things (like play tennis!). As you may have guessed, learning to code is better thought of as practicing a sport rather than something studied from afar. It’s not something you learn about. It’s something you do, an activity.
Practice Matters
I’ve read many blog posts advising people to make sure they put a lot of effort into practicing coding. Just as if you want to get good at tennis, you must practice and play lots of tennis. Same with coding. Practice, practice, practice! While this is excellent advice, I think it is even more helpful if we extend the analogy further and hone in on the idea of a “bundle of skills.”
Basketball Drills
I’m going to switch sports for a second here because I happen to know more about the individual skills involved in being a basketball player. School basketball coaches often break up practice time into separate drills focusing on just one skill. I found the following list online:
- Shooting Drills
- Dribbling Drills
- Passing Drills
- Footwork Drills
- Defensive Drills
- Fun Drills
These are the bundle of skills that make up being a basketball player. Therefore, to get good at basketball, you must get good at these individual drills.
From Thinking to Instinct
When playing a real game, you must switch between these particular skills in rapid-fire motion. Dedicated time spent on each skill will make them automatic. So instead of thinking, “how do I pass the ball?” you can focus on the game happening around you so that the question becomes, “should I pass the ball?”. With enough practice, you may not even think at all; you will act on instinct!
The Kicker
Where am I going with all of this? Well, here’s the kicker (wait, which sport are we talking about?):
Whether playing a sport or learning to program computers, it is not just that practicing the “bundle of skills” will make you better. It is impossible to improve in all the individual skills without improving at the real thing, whether basketball or coding. Conversely, if you genuinely aren’t improving overall, then there is an essential skill missing from your bundle because you aren’t practicing it enough.
Find the Missing Skill
Why aren’t you practicing this missing skill? Most likely, it is either that you don’t know you should practice it, or you don’t know how. After reading a draft of this article, a friend pointed out a third option where you know what you need to work on, but you avoid it because it is too difficult or painful. While this certainly makes sense, I think it’s also possible that the difficulty and pain are to some extent a result of not knowing how to effectively practice those particular skills. I hope that making the list of skills explicit and offering guidance on practicing each of them will help people discover what is holding them back.
Moving Forward
I’m going to leave the details of the skills for a future article, but what I’m trying to get at here is that it is perfectly logical to get stuck and frustrated when learning to code. Whether it is your first exposure to coding or you’ve been at it for a while, you’ll inevitably hit a wall. So the way forward is to figure out which specific skills are holding you back so you can drill those skills. Then you will be properly equipped to smash through the barriers blocking your way. Rinse and repeat a few times, and you’ll soon be a rockstar!
Epilogue
The skill-based nature of coding goes a long way toward explaining Tutorial Hell. Watching or reading tutorials can be helpful, but there is no substitute for practicing your skills on a project. Binging Youtube or Udemy videos can only take you so far because it is more akin to watching tennis than playing it. You get some conceptual knowledge for sure, but you do not develop the skills.