Is learning to code hard? A pragmatic guide

This blog was originally published on Substack. Subscribe to ‘Letters to New Coders’ to receive free weekly posts.

As someone who started a company that helps people learn coding skills, I hear this question all the time:

“Is learning to code hard?” (In fact, the last time I was asked this was less than 24 hours ago).

It’s a popular question, but it’s also a misguided question. It’s impossible to objectively claim whether learning to code is hard. Everything is subjective. Of course, it’s safe to expect that learning to code will have its challenging moments. But learning to code is also very attainable.

So if someone asked me “is coding hard,” I would tell them this:

Your personal learning journey is a function of the skills you need to learn and the time you have to study.

Or, to put it more simply: all it takes is time and effort.

Today I want to go back to the question “is learning to code hard,” and unpack a few assumptions.

Whether they realize it or not, anyone asking this question is most likely trying to grapple with another question — and I’ll share what that question is at the end of this blog.

But first, I want to share what you can expect from your learning journey based on your personal background.

Your learning curve = Time x Skills

Learning to code is all about building new skills, and it takes time to obtain those skills.

Depending on your background, you will have a different learning journey (and curve) than other aspiring programmers. Let’s break down what that could mean for you.

Skills you’ll need to become a developer

Some skills will differ depending on your specialization, but apart from that, the coding fundamentals remain the same.

Many people start immediately by trying to learn a programming language, but I personally believe that starting with foundational problem-solving skills is the way to go.

Problem-solving is the core of what developers do. We understand problems and learn how to tell computers how to implement optimal solutions. Every successful developer has highly developed problem-solving skills, so you’ll want to strengthen these skills from the start.

This involves training your brain to think like a coder, i.e. learning to solve problems algorithmically by breaking them down into their component parts.

Either after or alongside problem-solving, you’ll learn a programming language and its basics: its syntax, functions, variables, and so on. From there, you’ll learn the specialized tools that developers use to solve problems: data structures and algorithms.

Another essential skill is debugging. As unpleasant as it may be, your code will suffer from bugs for various reasons. It’s either going to behave unexpectedly or it won’t even run. This is normal and to be expected. Debugging is just as essential as learning to code. (In case you missed it, check out my recent post on debugging secrets).

At this point, you’ve covered the coding basics, but the rest of your skill acquisition depends on your goals for career specialization.

Certain specializations will require more advanced skills than others. For example, let’s zoom in on the math requirements. While a front-end web developer can do well with just basic algebra, machine learning engineers will need to learn Linear Algebra, etc.

Time it takes to become a developer

Learning to code could take anywhere from 12 weeks to six years. That’s a big range because there are significant variables that can affect your learning progress. The biggest variable of all is simply the time you can commit to learning and practicing.

The person who has only 2 hours to study every week simply won’t learn as quickly as someone with 40 hours of study time. If you have less time to spare due to other commitments, it’s more effective to practice often for shorter periods of time, than to fit your studies into infrequent cram sessions (e.g., 1 hour twice a week is better than 2 hours once a week).

If you’re fortunate enough to have a lot of time and happen to pick up programming quickly, you might be able to build decent sized programs in as little as 12 weeks. However, you’d still need a lot more time to secure a job or become truly proficient as a programmer.

Are there other variables?

Skills and time are the most easily predictable variables. However, there are various other circumstances that may slow or accelerate your learning journey.

Just as with sports, there may be skills (or in the case of sports, genetics) that can help you learn coding more quickly. For instance, you may find that thinking like a programmer comes more naturally if you come from a background in analytical thinking, such as math, philosophy, logic, engineering, or even science. And of course, if you already have exposure to seeing code or programming languages, that will also help you ramp up more quickly.

Because they can either accelerate or slow down our learning process, it can be easy to think of unique circumstances as advantages or disadvantages, but I think that’s an oversimplification.

To me, there’s no benefit in attaching a positive/negative value statement to circumstances that you cannot change. These words are a product of comparing oneself with your perception of others — perceptions that may not be grounded in reality. (In fact, I would even argue that the more obstacles you overcome, the stronger programmer you will be in the long run).

Just as with learning any new skill, everyone will face unique challenges when learning certain aspects of programming. Some topics will come easier to you while others won’t. This is true for every developer, no matter how “talented” they may be.

These challenges that lead to difficulty are what I like to call roadblocks.

There’s truly no way to predict exactly when you will hit roadblocks, but you should expect that they will arise at various points along your journey. And while roadblocks may seem to slow your progress, just know that these dips or plateaus in your learning are actually the precedent to having breakthroughs. (In fact, this process is what educators call a productive struggle, something I talked about in a post a couple weeks back).

No matter our circumstances, the only difference between skilled developers and beginners is persistence and time.

Let’s answer the REAL question in your head

Now let’s revisit our original question: “is learning to code hard?”

I believe what people are really wondering when they ask this question is this:

Can I really manage to become a programmer?

And to answer that question, there’s really only one way to find out.

How can we tell if someone can manage to become a chef? There’s no diagnostic test that tells us this information. Even if there were a diagnostic test, what would it assess? A person’s textbook knowledge of ingredients, food allergies, and the difference between stainless steel and cast iron isn’t enough to make them a great chef. Neither is it enough to simply have them cook something and taste it.

The final product or the presentation can’t tell us whether someone’s a great chef because it’s what happens behind the scenes that proves their greatness.

Excellent chefs deliver your meal despite any challenges they encounter in the inevitable chaos of the kitchen. They may have burnt the food, used salt instead of sugar, or gotten new oil stains, but you still wouldn’t know the difference based on the quality of the dish in front of you.

The only true way to know if you can become a programmer is to try it and stick with it. This means persisting despite any struggle along the way. Only when you get past that baking period (pun intended) can you know if you have what it takes to be a programmer.

On that note, you can take your first steps at the problem-solving foundations of coding with a Taste of Code. And if you’re ready for more, we have plenty more hands-on, AI-powered courses for beginners looking to build a strong foundation in their career.

Happy learning!

– Fahim

Subscribe to - Thoughts on Learning and Growth in Software Development

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.