Level Up Past Obstacles When First Learning Programming

When you first start learning any programming language, it’s pretty intimidating because you very quickly realize that you know almost nothing. And you know so little that you don’t even know the depth of what you don’t know. You realize knowing how to accomplish even basic programming tasks is a mystery, and that you’re pretty much helpless. But don’t be discouraged.

This is how you start out with learning any new complex skill. It’s just that with programming specifically, that feeling of helplessness seems to be magnified, because it’s such an intricate technical skill that requires so many pieces of knowledge just to do fairly simple things.

You have to understand that improvement will come very slowly, in small steps, and it takes dedicated effort slogging through and grinding through all the little things that you have to struggle with at the beginning, before you’re finally able to do anything even remotely resembling a functional working product.

I like to compare learning programming to playing a video game, especially a role playing game. I love role playing games. But whenever you first start playing a brand new rpg, you are completely unfamiliar with the mechanics of the game, the controls, and you don’t know the best tactics and strategies. And worst of all, you probably start out with a character who’s very weak, who has no equipment, no armor and weapons except maybe a loincloth and a knife. And for a lot of the time initially, you have to go out into the field and fight with many rabbits or rats or other critters.

This is called grinding, where you have to grind for a long time at a very low level until you’ve killed 300 rats or whatever it is that is required for you to move from level one to level two. And once you hit level two, you are able to get tiny bit upgraded equipment and take on a little bit stronger monsters. And now you’re able to beat the enemy a little quicker and to get more experience more quickly.

And then by the time you go to level three, you’re able to venture outside of town and fight some actual baddies like wolves or orcs. And that’s exactly what it’s going to feel like as you learn programming, you’re going to start out barely able to do a “hello world” exercise. But your next project, you’ll be able to add a little bit more functionality, maybe add some color to your website, maybe learn a little bit more fancy CSS, add some buttons, and add a little more functionality.

And then next project after that you’ll be able to do even more with it. You’ll start “seeing the light” in a sense, you’ll no longer be completely lost and unable to do anything, to slowly being able to do a few programming tasks here and there.

But it’s really important that you go over things that you learned again and again. As you repeat things, you’ll see patterns. And you’ll recognize things that you’ve done before. Before long, you’ll able be able to start putting your knowledge together cohesively in order to actually get small applications built. Things that you’ve imagined and designed in your mind, you’ll be able to actually code it out and see appear in front of you as a working project. This is when programming becomes really fun and exciting.

After a few months or even few weeks (depending on how much time you are putting in every day grinding) of going over the same types of projects over and over, a lot of things will become very familiar to you by now. A lot of aspects of the technical aspects of programming will start to become second nature. And this is how you know that you are starting to learn concretely. You’ll be an actual low level warrior or mage, or paladin, or whatever rpg class you see yourself as, and no longer a total newb fighting rats.

But it’s important to start off simple and not be over ambitious at the beginning. Because it’s easy to get overwhelmed to trying to learn too many things at once. It’s like going out into the field as a level one character and trying to fight 20 rabbits at once. Sure, each rabbit alone is easy to defeat, but you can get overwhelmed by their sheer number.

When you’re first starting out, you’ll want to build very simple, easy projects at first, and make sure you understand how they work fully, then move on to more complex projects step by step. This gradual ramp up will allow you to understand what you are doing as you are learning so that you’re not just copying and pasting and flailing around, trying to figure out solutions to problems without actually knowing exactly why they work. Not knowing why your program works correctly is a sure sign you don’t know what the heck you’re doing yet.

Consistently pushing forward and overcoming errors and obstacles will give you a sense of intuition that only experience can provide. Over time, you’ll see and you’ll look back at problems that you had maybe weeks or months ago and the solution will hit you like a flash of lightning — a lot of times the solutions will appear much more clearly and easily than when you were struggling through those problems the first time. And you’ll think to yourself, “Wow, it seemed so hard to be back then. But now it seems so easy.” And that’s how you know you are progressing and truly learning.

Make sure you put in that consistent effort. But don’t push yourself too hard to the point where you’re so stressed out that it’s becoming increasingly unpleasant to work with code and trying to solve problems. If you need to take a break, take a step away from the computer, give your brain some time to rest and relax.

Almost every programmer has had the experience where they will step away from the computer for a while — maybe they’ll take a shower or take a walk, or even just get a good night’s sleep — and some problems that they’ve been struggling with and trying to figure out will suddenly “click” mentally and they’ll have a “eureka” moment. The solution will suddenly come to them after they’ve taken some time off and not thought about programming at all for a while. And I’m sure you’re going to run into this situation as well.

It’s almost as if your brain is subconsciously working on some problem that you can’t consciously figure out, even though you’re not explicitly thinking about that problem anymore. And this can happen even while you’re sleeping.

So don’t stress out. Be prepared to run into problems that seem insurmountable at first and are very difficult, and it might seem like you are running into brick walls. But just know that as you continue to push forward to solve problems, to Google answers, to ask other programmers for help, and learn how to solve these problems, you’ll slowly start developing an intuition of your own. And it will become easier and easier to figure out problems on your own.

In particular, the more types of problems you see, the more familiar you’ll become with different types of problems, and you’ll be able to recognize patterns and apply past solutions more and more quickly.

Just make sure you’re not spending most of your time just mentally learning general programming concepts and theory. You want to be able to apply any concepts that you learn pretty much immediately. You don’t want to learn some theory and then learn more theory on top of theory, without putting any of that theory into practice building things.

Because what happens is, you start to forget about any theory that you learned and it never really becomes concrete in your mind until you’ve actually applied and used that theory to solve actual programming problems and build actual programming projects. That’s when it sort of rewires the neurons in your brain, you start to remember these concepts — which before were only nebulous theory — but now become actual working knowledge.

You must learn the theory and then you must apply that theory, and spend most of your time actually in the application building phase. And then once you have solved the problem or completed the project, go back and learn some more theory, and then apply that new theory. So you get into a cycle of learning and applying theory over and over until it becomes ingrained as practical knowledge in your brain, not just nebulous theoretical knowledge. Remember, spend most of your time in the “application building” phase and not “learning new theory” phase.

Again, be prepared as a beginner to run into a lot of frustration. This is totally normal; don’t expect it to be something unusual in your case because you’re not smart enough or not good enough. Every beginner goes through the same thing. Every programmer struggled with the same types of issues at the very beginning. No matter how much of a brilliant programmer they are now, it’s common to everyone. Every single person started out as a level 1 character with a loincloth and a knife.

So don’t be discouraged and keep pushing forward. And slowly you’ll learn how to learn faster, over time, and your pace of learning will actually pick up when compared to the very beginning. Right now everything just seems so new and overwhelming and even bizarre that it will really take some time for you to get used to it all. But before long, you’ll start learning more quickly and be able to programming things that you can’t even imagine doing as a total beginner. Trust me, your skills will improve to the point where you will amaze yourself with the kind of things that you build with your programming skills after a while.

© Copyright 2019 ProgrammingFromZero.com