4 Reasons You Can’t Learn to Code That Have Nothing to Do With Being Lazy or a Poor Programmer

Personal responsibility is important, but there may be more to it.

It’s a familiar picture. You’ve decided to learn to code. Eager and enthusiastic, you pick your first tutorials and learn-to-code websites, and start working through the content in earnest. Students typically start with HTML and CSS, so you’re likely learning the basics of putting together a website, structurally and stylistically.

You’re building confidence with each visible change, and discovering this new power is exhilarating! (Or, you could be like me and incredibly frustrated with CSS before you even hit JavaScript. If that’s the case, then… twinsies. You’re definitely not alone.)

If you made it this far, regardless of whether you’re focusing on Front-End or Back-End, your education should shift into JavaScript eventually. You can’t call yourself a web developer without at least knowing some JavaScript.

This is where things start to get hard. You learn about variables, loops, and functions. The abstraction—the lack of being able to readily see what your work is doing in the front end—can be maddening for a highly visual learner.

Many students take to various fora at this point, as I did. And we’re told a variety of things, from “I know, I’m struggling, too,” to “Suck it up, buttercup”. Apart from being kind of unhelpful, the general assumption is that everyone is coming from a similar educational background in this scenario, which is highly problematic for reasons you’ll read about shortly.

Anyway, you become anxious about learning to code. Unconsciously, you may step away from it for “a few days”. But by the time you get back—if you get back—you’re too far removed from the context for it to feel like an appealing prospect. Defeated, you may give up coding altogether.

I know this happens, because it’s happened to me, and many of the students I talk to. It’s the basis of the #1 question I get from students: is it supposed to be this hard? (for anyone curious, #2 is “what should I learn now/next?”).

This ending is 100% avoidable. But I’m absolutely not here to blame you—rather, tell you that I have experienced it, empathize fully, and have been working to figure out why this happens. I push myself to become an expert in issues that affect my ability to be my best version of myself, but as a disclaimer, I’m no professional expert. Just another self-taught coder that desperately wants to learn everything I can for the first time in my life.

Why we shy away from learning to code

Any web developer or software engineer will tell you that learning programming is difficult. There’s no illusion around that fact, and you’ve probably seen it for yourself by this point.

However, that fact clashes head-on with the fact that we need to learn to be learning every day, as efficiently and quickly as possible, to stay relevant as web developers. Without learning how to learn effectively, you’ll be a stale, outdated web developer surrounded by a blur of new technology updates. While you may still manage to run a business this way, or even get hired by a company, you’ll soon be bored and miserable—because as it turns out, learning new things is what keeps us engaged in anything.

Viking Code School discussed this particular phenomenon in their popular article, “Why Learning to Code is So Damn Hard”. I referenced this article repeatedly when pushing myself through the “desert of despair”. I’m still encountering these valleys every so often as a fairly new programmer but they are much more shallow.

Coding Confidence vs. Competence chart (source)

Viking managed to create an infographic that is both highly relatable and well-explained. When we first learn to code, we’re in the “hand-holding honeymoon” stage, where everything is peachy and great. This is mostly due to a plethora of newbie-friendly resources available for brand new coders. But like any honeymoon period, it doesn’t last.

As soon as advanced concepts make an appearance, your ability to learn—not your ability to program—will be put to the test. The “cliff of confusion” happened for me right around the time JavaScript started to get hard. I questioned my entire self. Am I meant to be a programmer? Was the advisor in college that told me I might not be a good fit for Computer Science right? Am I wasting my time?

(I mean, amplify that by 100, because I live with debilitating generalized anxiety. I’ve done enough work on myself over the past two years that by this point, I can finally respond with an immediate “no” to my anxiety voice. At that time, however, the two voices sounded much the same.)

The “desert of despair” was an ugly one, and happened around the time I moved back to the East Coast this year. Desperate to get back to relevancy, I fell prey to “mirages of mania”, grasping at a bunch of different frameworks I’d never tried, starting Full-Stack JavaScript all over again, and trying to re-commit multiple times—unsuccessfully. I even got back into Free Code Camp, thinking maybe I just needed a new platform. Projects fell by the wayside as I burned out. Nothing worked, because what I needed was a head check, some context, and focus.

So, here are the reasons why despite desperately wanting to learn to code… you haven’t been able to do so successfully. And after you read them, we’re going to start addressing them.

Reason #1: You’ve lost sight of your initial reasons for learning to code

When we start learning to code, we’re driven by our passions and a strong motivation to better our lives. In other words, our reasons are near and dear to our hearts. We love computers and technology. We’ve always been fascinated with websites and design. We’re intrigued with solving complex problems.

The danger comes as we continue down our learning path. The deeper into the programming itself that we get, the further removed we can become from that initial goal. Rather, those goals are replaced with tons of tiny, irrelevant goals: create a project in X language, take a tutorial in Y language, get Z job.

This is dangerous to your early development for a couple of reasons:

  1. You’ll begin to do/learn things just because you’re told to do them, and not because you’re tying them into your overall goals as a programmer
  2. You’ll burn out—guaranteed

Something happens when we start learning the meat and bones programming principles, like data structures, functions, object-oriented programming and prototypal inheritance, etc. The more complex it gets, the less internal compass we have. Like wandering into the Bermuda Triangle, our sense of direction can get wonky really fast.

Picture this: you’re reading a tutorial one moment, then there’s a link to a related article in the comments. You may assume that this is information you need. But it isn’t totally related—you need to get more context to connect the two. So you branch off, seeking information to connect the concepts, and perhaps end up needing something else.

The end result is always lost time and energy, and possibly some skills that you may or may not use.

An experienced and confident programmer knows to ignore everything that they don’t need to know—even if they don’t already know it—and only pay attention to the information they’re actually looking for. Of course, it’s easier to focus when you know what’s important to begin with. A newbie programmer will likely try to learn everything, because they don’t have that compass and overall context.

Focusing is hard. Understanding is hard. Developing these skills takes time, practice, and a priority on primary concepts. Primary concepts provide our ever-valuable context, and take the form of questions you may have learned in early school years—what, why, and how?

Why am I doing this?
What problem does this solve?
What happens if I do this correctly?
What happens if I don’t do this correctly?
How do I do this correctly?
Why does it respond that way?

Providing this primary context to the material you’re learning helps avoid a clouded perspective. Our brains don’t have to focus so hard on remembering the details, because it makes sense. As a result, I found it much easier to remember that I’m doing this to become a better problem solver, and increase my career prospects, happiness, and balance with the rest of my life. I can make goals and decisions that align me for that type of a future, rather than losing my damn mind trying to remember all the minutia, and sight of what I really want.

If that isn’t enough reason to keep your personal goals tightly aligned with your educational goals and actions, consider that you’ll be spinning your wheels learning complex languages that you may never use professionally. Unless you can somehow afford to do this, I highly doubt that’s what any student wants.

How different you would be today if you learned everything you actually needed to know for your life in school, instead of what you were actually taught? That’s an ideal situation that never happens, so learning how to learn confidently now is your next best bet.

The process of learning to code in some language should not be your primary objective. Rather, it should be to become a competent problem solver and critical thinker, and to be comfortable with the concepts of programming. And then, build. Learning the languages will come as a side benefit of building, and nothing will change until you start building.

Reason #2: You’re experiencing residual effects of an early lack of learning privilege

Say what?

This is one that really isn’t talked about very much within the web development industry itself, but I’ve begun to open the conversation by tying in the science of learning. I think that there’s a big hesitation to peg traditional educational systems as a major problem, but we know they’re broken.

The entire “learn to code” industry tells you that it’s so easy, anyone can do it. But let’s be real—not just anyone can do this, and they know that. They will lose many of their students within their first few months of self-teaching. These people may have been excellent programmers, but were overwhelmed by information based on unconscious factors. In other words, it may not be your fault at all.

Either additionally or alternatively, your reasons for failing to learn to code may run as deep as your childhood. If you had a difficult early education as I did, or have otherwise struggled with learning, you may feel like others are “getting it” much faster than you are.

I was a student who struggled chronically with focus issues. However, this wasn’t because I had any type of learning disability. Rather, my individual learning styles were never provided for, and as a result, I was not a privileged learner—someone who is taught information in the same manner by which they best learn. Don’t be surprised if you can’t find much on this topic, as it’s my own theory. But it makes an awful lot of sense.

I didn’t learn this about myself until much later in life. I am terrible at memorization, and that still stands today, which isn’t such a bad thing. Understanding is much more important.

But, understanding difficult concepts requires more of me than the average person. However, when I do eventually understand that topic and gain that context, the information is easily retrieved with a bit of practice. I require information to be presented with as much top-level context as possible—How does this fit into the bigger picture?, or What problem is this solving?

As far as the information itself, I am a highly visual and auditory learner. I prefer to learn solo, to prevent aggravating my anxiety. Once I understand the information, I enjoy discussing it with others and asking clarification questions to fill in the gaps. In other words, give me a pair of noise-cancelling headphones, and a video with Closed Captioning and playback speed controls, then let me ask questions… and you’ll be amazed at my comprehension.

Students with learning privilege are fortunate enough to have information delivered to them in the same manner that they best absorb it. These students typically excel early on in education, and can build easily on existing knowledge because they are able to gain valuable context earlier than unprivileged students.

What does this mean for us as self-taught coders? Well, students withoutlearning privilege can experience deep self-doubt and anxiety with learning complex material, and these effects may be carried into adulthood, where they affect career prospects, professional development, and personal relationships.

If you’ve been surprised at your passion later in life, and have found that you can learn with relative ease compared to early years, you’re likely recovering from a negative educational experience, as well. There is hope, and I’m proof.

As an adult teaching themselves to code, you’re the student again—just like the early years. As was my personal experience, you now have the important task of digging deep to identify the source of your hesitations. Work on your hang-ups now, and you’ll absorb new information effortlessly. I’ve discussed the topic of early learning privilege more extensively on my podcast episode, “How I Learned How I Learn”, and encourage you to listen to it if you feel that this issue relates to you.

Reason #3: You’re isolating yourself and your education

This is a hard one for me to write about, because it’s my biggest issue—and it’s still an issue, to date. I don’t collaborate enough. Perhaps you don’t, either.

I know way more about web development than I write about on my blog. I love talking about it, and I’m honestly trying to write more, but it doesn’t always make it to public text. In fact, I’m going to probably go through this article in the future and update it as I learn more. So why would you think that tutorials and blog posts are going to hold everything you’d need to know?

The very experience of teaching ourselves anything is an incredibly vulnerable one. It requires reaching deep down within ourselves, and asking ourselves what we really want, then aligning those interests with the information we seek to learn. But after you’ve aligned yourself to code, don’t stay walled up in your own cocoon. You need to interact with other web developers, build relationships, and learn from your peers.

Do so in a focused manner, though. One of my biggest flaws is that I avoid meaningful educational interactions with other web developers because I’m anxious that I’ll seem unknowledgeable in comparison. I have to remind myself, sometimes out loud, that I am unknowledgeable compared to them—and that’s okay. They are not the focus. The focus is what they know.

I’m going to be really vulnerable here for a moment: I’ve been coding for going on 2 years now, and I’ve never worked collaboratively on a project with someone else. There. I said it. Nowadays, as I’m starting my freelance web development business, it’s been mostly because I don’t need to. But overall? It’s because I was afraid of my code being really shitty, and them judging me for it. I’m going to need to contract developers down the road, so I need to learn to start collaborating.

In general, sheltering yourself from other programmers is a surefire way to stunt your professional growth. Bugs are easier to see with more than one pair of eyes, and even explaining concepts to someone else will help you better retain them.

Reason #4: You’re using incompatible learning resources

Nobody says you have to stick with one particular learning resource. I mean, it’s good to stay focused on one thing to completion, but if you get stuck, ask yourself these questions before you switch:

Are you being engaged by the instructor and the material?

Does the course explain primary concepts well? (such as, why you’re doing something, or what problem it solves)

If the answer to either of these is “no”, you’ll likely want to look at other options. Your learning time is too valuable to waste on incompatible and inadequate material. Furthermore, engagement and understanding have a tight relationship, and increasing engagement will improve your understanding of the material.

So, if your instructor or course material isn’t doing it for you, don’t be afraid to go off-track a bit. For example, if you’re learning JavaScript objects, but are unable to wrap your head around why one would want to use an object, pause the video and do some Googling until something clicks with you. Fight the urge to just give up. There will be material out there that speaks to you, and it won’t be brand new to your brain. Our chances of understanding increase exponentially with each pass.

One of the greatest benefits of teaching ourselves is the ability to choose our learning material. However, be aware that this can come at a price (literally) if we don’t vet our choices well, such as enrolling in an expensive online course that is text-based when you’re a visual learner.


At the end of the day, the onus is on you to take this information and make something of it. That’s where 95% of you will fail. Be in the 5% that takes responsibility for the fact that your courses aren’t good quality, your education experience sucked, you don’t know what you’re doing anymore, and/or you’re an isolated student. Then, bury down your ego, and carry on. You’re back, with a vengeance. 👊🏼

There are more reasons than just these four, and I may be editing this post as time goes on, and I experience more of this rollercoaster we call learning web development. I’m interested in hearing your thoughts in the comments, on Twitter @lavie_encode, or on the LVEC Facebook page.

If this article was useful to you, please remember to click the PURPLE 😉 heart button!