Learning to code is like learning a foreign language
I know that sounds strange. The thing is, there are so many resources for learning to code that it can get easy to feel lost and overwhelmed. But approaching your coding education as if you were learning a different language will give you a helpful framework to operate from.
Using a framework to will allow you to structure your learning progress. This will provide you with direction, milestones along your path, and a destination at the end.
One of the main advantages of this technique is that it divides up your path from beginner to advanced into stages. Differentiating these stages will help you make more sense of what you are doing.
For example, if you know what level you are currently playing at, that knowledge will set your expectations. If you’re still at the beginner stage, don’t feel that you should be able to easily achieve intermediate or advanced skills. Having realistic expectations will help keep you from getting overly discouraged or even quitting.
Sound good? Let’s start out with a fun little exercise:
What’s your ultimate goal?
When you’re learning a language, the goal isn’t just about learning a list of vocabulary words and random phrases. Almost no one tries to learn a language just for the sake of learning new words. There’s always some kind of real-world application in mind. You want to be able to do something useful with it eventually, right? You probably even have a specific end goal in mind. It might be to hold a fluent conversation with someone, to travel in that country, or to read a book in that language.
Learning coding should be the same way. You should have an ultimate goal other than just “learning coding.” It could be to find a new full-time job, to sell a mobile app, or to work for yourself. That goal will give you the motivation to keep learning even when it gets hard. It will be your true north as you navigate the world of programming.
Stop reading this article for a moment, and take a minute to consider what your ultimate goal is in learning to code. Why are you doing this? What was the initial motivation that got you started down this path? Write down your goal on a piece of paper. Put it somewhere where you will see it every day — like next to your computer, or on your bathroom mirror. When you read that note, you’ll be reminded of why you’ve chosen to start your journey. Remembering your core reason will give you the encouragement to not give up.
Got your goal down? Good. After you finish reading this article, leave a comment down below to share what your goal is. We can always find encouragement in hearing one another’s stories, and I’d love to hear yours.
Now, let’s move on to getting fluent in coding!
The first language is the hardest
Focus on learning just one thing at a time
If you’re trying to pick your first language to learn, don’t stress — just pick one and learn it to a reasonable level of proficiency. This first language will be the most difficult to learn because you’re not just learning a language — you’re also learning how programming works. Once you get good at one language, it will be easier to learn your second and third languages.
All programming languages have common principles that run through them. And once you learn those principles, it’s more a matter of learning the new syntax and vocabulary, if you will. Obviously, each language has its own quirks. But once you have laid the foundation of learning programming, it will be much easier to pick up additional skills later on down the road.
Now that you’ve picked your first language, let’s start at the first stage in your journey:
What’s the first thing you learn how to say in a foreign language? Usually, it’s the most basic greeting, how to say “hello.” Not coincidentally, learning how to output “Hello, world!” is often the very first thing that you learn how to do in a programming language.
After learning greetings, you move on to memorizing the vocabulary words and basic grammar. In programming, you’ll learn concepts like variable types, methods, syntax, and how project files are structured. It may not be all that fun to manually learn functions and to get stuck on seemingly minor syntax errors. But mastering these building blocks will give you the skills to keep moving up.
At this beginning stage, you’re probably going to make a lot of mistakes. No, you will make a LOT of mistakes. But that’s totally ok! The point here is not to learn something perfectly before you try to use it. In fact, making mistakes is a good thing, because you can learn from those mistakes. If you’re too afraid to risk doing something wrong that you don’t try, you will hinder your own learning process. The key here is to make mistakes, to experiment with the new things you’re learning.
Here’s one way you can experiment:
If you’re going through a coding tutorial to learn your language, follow along with the lessons like usual. But then take some time go off by yourself and just play around with the code in your editor. See if you can break the code you’re working on, and try to understand how and why it breaks. Then try to rewrite the code yourself from scratch, only looking back at the lesson notes when you get stuck.
Experimenting like this will require an up-front investment of time and energy, but it will pay off in the long run. By playing around with coding concepts, you’re working out what makes them tick, and this will help those skills to stick in your brain better. You can make this an intrinsic part of how you approach new ideas no matter your skill level. (This technique of doing experiments as the path to expertise was the topic of a recent post by Michael Simmons)
Putting the pieces together
For foreign languages, this is where things start to get more fun — the more you know, the more things you can do with your new language. You’ll develop conversational skills and be able to understand a good chunk of what you’re reading and hearing in that language. You might even be able to make friends with native speakers of that language, thanks to online language learning resources.
In programming, the intermediate level means that you’re starting to get more of a sense of the principles of the language, and what you can do with it. You still need to keep working on the basics — reading books, going through tutorials, and experimenting. But you are starting to build a framework that you can continue improving upon over time. You can also learn to interact with other more experienced developers in communities like GitHub. In fact, studying how other people are programming can help you immensely.
For example, you can look at different GitHub repositories that interest you, and see how other developers solve particular problems. Once you study a particular repository, you might even notice a possible fix for an issue, and try to submit a pull request. Even if the owner doesn’t accept your request, you will still have gained a bit of experience working with the code. Keep trying, and keep learning.
You can also get help and support from other programmers from online forums like Stack Overflow, Facebook groups, and Slack channels. There are a lot of people out there that are more than willing to help you figure out a bug and point you in the right direction. There’s a worldwide community of people all learning how to code out there!
Hitting the slump
Now I have to break a bit of bad news to you… At some point in your learning, you’ll feel like you’ve plateaued. While you won’t be on the steep side of the learning curve anymore, you may feel like there’s so much more distance to cover, with no end in sight. Let’s be honest, it sucks.
However, don’t despair! This slump is a normal part of picking up any new skill. At the very beginning, you’ll make a ton of progress and feel like you’re quickly gaining skills. However, as you get better and better, the more intermediate and advanced skills are more difficult to learn, because, well, they’re more advanced. Mastering any skill will always take much more time than becoming an adept beginner.
If you feel like you’re stuck in this slump, don’t give up. Be patient with yourself, and understand that it will just take more time to keep moving up in skill. Try to not burn out, and don’t put too much pressure on yourself to excel and be perfect. Most of all, now is the time that having a strong support network, in real life and online, can help you. Reach out to others who may be in the same boat as you and swap stories and encouragement.
“Hey, I think I might actually be kinda good at this!”
When learning a foreign language, becoming proficient is the destination that most people strive to reach. Proficiency means that you are pretty confident that you can express any idea or feeling in that language that you want to. You’re practically fluent at this stage!
Hitting the proficiency level in a coding language or technology feels really good. Although you may still struggle with impostor syndrome from time to time, overall you’ll feel more confident in your own skills and your value as a programmer. You’ll be able to hit almost anything that clients or bosses throw at you. You know that even if you don’t know exactly how to do something, you have the tools to be able to research (i.e. Google) and figure out a solution with time.
However, now is not the time to rest on your laurels. Programming is a constantly changing field, and it moves fast. You need to continue honing your skills, because if you stop, your hard-won proficiency will start ebbing away. Becoming complacent and stagnant will eventually be a death knell for your career as a programmer. The good news, though, is that by this time, you’ve gotten pretty good at learning. Having to learn a new language, framework, or tool won’t take you as long as it used to. And you might even enjoy the process!
What’s your ultimate goal? Leave a comment below…
I hope you’ve enjoyed reading this article about how to learn programming. Like I said above, I’d love to hear what your programming goal is, as well as what you’re learning right now.
I'm making a course that will teach you how to build a real-world responsive website from a Figma design!Learn more