DEV Community 👩‍💻👨‍💻

Cover image for Why learning to code makes you feel incompetent — and ways to combat it
Matthew Collison for Skill Pathway

Posted on • Updated on

Why learning to code makes you feel incompetent — and ways to combat it

First of all, let’s get something straight. Even if you’ve been programming for 12 years — you’re still learning all the time. Programming is one of the most rapidly evolving skillsets you’ll ever come across.

Rapid evolution is just one reason for these many complaints: “I just feel lost” or “It just makes me feel like I’m stupid” or “Why am I so incompetent when trying to build something.” — or just a general sense of being completely stuck on most problems you run into.

We have a hypothesis that at least 95% of programming students never make it past the first few hurdles and give up — solely because of how demoralising it can be. It says a lot about those who’ve stuck with it thus far.

Let’s challenge this perspective for a moment. We’re going to present some of the most common reasons for this feeling of incompetence, and break down how to help pick yourself up when you’re going through them.

The Error Screen

Ah yes, the fated error screen. For some, it’s like a smack in the face. But it’s something you’ll see 100s of times a day as a professional programmer — for the learning programmer, however, it may feel like “you just can’t get anything right.”

That’s not true: you need to start by setting realistic expectations of yourself.

People who work programming jobs are bombarded with error screens all day. And when they don’t have error screens — it’s even more worrying because there’s usually something going wrong that the program isn’t telling you.

So on that token, if experience developers go through this, it’s completely impractical to think you should be experiencing no error screens at all. It’s completely normal — it’s actually a good thing.

Error screens are great: first of all, it’s a clear message as to what’s going wrong. Sometimes it’s not always helpful, but at least you know something broke, rather than a silent failure that rears its ugly head months down the line in production.

Secondly, if you take this perspective, it makes things a whole lot better: Programming is like building a sculpture. You start with a block of stone and chisel away piece by piece until you have a beautiful piece of art. In the programming world, your application is your piece of art, and the block of stone at the start is a wall of errors and problems. You deal with these one-by-one until eventually, you have an excellent application.

Each error screen solved is one step closer to the finished product — learn to enjoy them by seeing them for what they are.

Hard-to-install software and tools

So you want to learn to program, huh? Well, how about you install these 14 tools using these four different package managers, use these two build tools depending on your environment and blah blah blah… You get the picture.

There’s nothing worse than being super excited to write your first line of code, you’ve followed every step in the “easy how-to guide,” and the thing won’t even work. Everyday consumer software can be hard to set up — programming tools take that to a whole new level.

This is particularly true when trying to install things on Windows as the command line API is different from the others, although MacOS and Linux can also present challenges of their own — these environmental inconsistencies make it a nightmare to follow any one guide.

Our #1 tip to overcoming this is to use a virtualization tool which you can take from OS to OS — like Vagrant or Docker. Vagrant is particularly easy to set up, and once it is, most vagrant setups you find on the web work consistently across all operating systems. How awesome! Not to mention there are many “Vagrant Files” across the web with ready-to-go versions of software you find hard to install.

Docker is more complicated but also far more valuable to know as it is performant, scalable and can help you shine in interviews or architecting more enterprise-level systems down the line. There are also once again tons of available “Docker Images” to use to get tools up-and-running with lightning pace.

Here’s a tip exclusive to Windows users: grab Laragon. A free tool which makes it unbelievably easy to get set up with a database, caching server and any number of backend language servers. It even has one-click sharing, so you can let other people see your work as you develop it — over the internet.

One more way you can overcome this is really to just ask for help on places like GitHub issues (for the software you’re having a problem with), Quora or commenting on YouTube tutorials which you try and can’t get to work. Seriously, you’ll be surprised how often people do respond — we all want to get that thing installed, and at the end of the day, can understand each other’s frustration.

The pace of change in the coding community

Things change all the time in web development. A tool can become redundant in months, there seems to be a new “revolutionary framework” every other week, and unique programming patterns are emerging all the time.

It’s the perfectionist’s nightmare — “What if the frame I chose goes out of fashion?” or “What if the skill I’m learning isn’t a hireable one when I get to the level I’m aiming for?.”

Here is the truth though: things aren’t moving faster than you can learn.

Put it this way, if someone ever told you “X framework is going out of fashion” or “X programming language is old and terrible to use,” the thing they don’t realise is that most of these frameworks and languages still get 1000’s of job posts requiring them worldwide every single day.

Frameworks are never truly phased out in months. The community phases them out many years. So you’re in luck.

Our advice here is to pick a modern enough tool or framework that has at least been around for two years and seems to be going strong with sufficient jobs available, and that has an active community on Stack Overflow. These are tell-tale signs of a framework that will be long-standing.

Even better if it has LTS support, like Laravel, NodeJS, etc. LTS stands for Long-term support and shows it has an active enough community and enterprise following because this is the scale of commitment enterprises require.

So in short, pick a good one and go for it — the worst case scenario is you’ll have to re-skill in 6 years time — much better than never having started in the first place! And if that actually did occur, however unlikely — you’ll be in a much better position to hop ship.

Tell us your struggles

As much as we can find droves of content on the web teaching you to code, we’ve seen a lack of focus on the individual battles people have when just getting started. Most of it focuses on only tips or concepts — so we want to help cover the other side which is just as important — attitude and mindset. We want to engage the community in that conversation.

Let us know in the comments what struggles you’ve had, and we’ll do our best to help you directly — and maybe even write articles on your specific issues if we see some themes emerge!

We help people do what they love for a living

There's hundreds of tutorials available online to learn web & app development, and we want to contribute to the conversation of healthy learning. We run online code bootcamps and also provide free courses for beginners to show them ropes in web development.

To check us out and register for any of our free courses, visit the Skill Pathway website.

Top comments (3)

efrapp profile image
Efrain Pinto Ponce

I’m surprised that this post hasn’t received comments yet. It is a very helpful and valuable post and I feel identified with some ideas expressed here. I’m a developer with 7 years of “experience” and I still find myself struggling with some things when I try to develop and application. I would like to check your page to improve some aspects of my career path.

Thanks for this post!

matthew_collison profile image
Matthew Collison Author

Thanks so much for this comment Efrain! We're glad you found it so helpful and valuable, it means a lot to us. It's one of the first posts we wrote and we continue to write things that we think can bring value, sometimes we wonder whether re-posting these old ones could be useful to anyone.

It would surprise most that a lot of developers even with 10+ years developers struggle with a lot of the issues outlined in this post - and that's absolutely ok. We definitely do too. And you sharing your experience should help others stop judging themselves for it - programming is hard and the points here only speak to the little side effects that make it more difficult.

Thanks again for your comment! We hope you get tons of value from our other posts in this series!

efrapp profile image
Efrain Pinto Ponce

Yeah I’m definitely going to read all the series. Thank you!

Take a look at this:


Go to your customization settings to nudge your home feed to show content more relevant to your developer experience level. 🛠