"I can't get it to work. I just don't think I'm cut out for this."
"You know, I really feel like programming just might not be for me."
Worrying that you're not cut out for programming is one of the most common forms of self doubt encountered by people learning to code. The reality is that some people genuinely don't enjoy coding. But more often than not, you can overcome these negative thoughts with a few simple techniques.
Learning to code is difficult, and at times frustrating. You would be hard pressed to find a developer that has not, at some point in their coding career, wondered these things. I have certainly been there (and not just on one occasion).
To figure out what to do in this situation, you need to do two things:
- Establish if coding is actually a good fit for you
- Either quit, or learn how to manage these feelings of uncertainty
So how do you tell whether what you're experiencing is a temporary wave of self doubt, or if coding is just something you'll never enjoy, no matter how hard you try?
Throughout my career, I've worked with a lot of different developers. And I've noticed there are four qualities or personality traits that many of them seem to share:
- Intellectual curiosity
- A love of learning
But how do you know if you have these traits, specifically in relation to programming?
Ask yourself these questions
To expand a bit more on what I mean by each of these, let's look at each one in the context of a question.
Do I like solving logic-based puzzles (e.g. games, riddles or debates)?
At its core, coding is about logic. Whenever you're writing a program, you're using a set of constructs (given to you by a programming language) to perform some task, usually to manipulate, process or respond to some data.
To be able to do this effectively, you need to enjoy this process of logic-based problem-solving: identifying problems, constructing solutions, and using the tools available to you to just generally figure things out.
If you like brain-teaser type puzzles, or perhaps debating, where you have to identify the holes in your opponent's argument to win, that's a good indication that (if you stick with it long enough) you're the kind of person who will enjoy coding.
Is continually having new things to learn fun for me?
In this industry, things move at a lighting fast pace. New tools, frameworks, languages and ways to do things are released all the time. So a tool widely used today could be replaced by something else entirely next month.
This means that there's never any real end to your training as a software engineer. That's not to say you'll be in school forever (you'll learn a lot passively through your day-to-day work once you get a job) but expect to read books and articles, take courses from time to time, go to conferences, and build little projects on the side—all as a way to make sure your skills stay relevant.
The good news is that none of this learning has to feel boring or like a chore—if you do it right.
Am I good at figuring out frustrating and/or difficult problems on my own?
Have you ever taught yourself a difficult skill before? Perhaps a language, a sport, or a musical instrument.
If so, you're probably familiar with this feeling: being stuck; not being able to progress past a certain point, no matter what you seem to try.
A significant part of learning to code also involves getting stuck. It happens to everyone—especially when you're just starting out—and there's not a lot you can do to avoid it.
It can be incredibly frustrating. In fact, being stuck for hours on a problem you just can't seem to figure out is exactly the kind of situation that leads to you questioning if you're really cut out for programming. (It's even more frustrating when you discover that the problem all along was that you'd made a typo!)
You're also going to have to do a lot of this alone. Sure, you might have classmates or mentors or even co-workers that you can ask for help (especially when you're junior), but no one will be there to hand-hold you 100% of the time.
Working through these kinds of problems, sometimes for hours (or even days) takes a lot of patience. So that's a trait you're going to need to either have, or learn. Deciding to quit in moments of frustration is the easy way out, but the people who have the will to stick at it are the ones who will succeed.
Can I find and absorb information for myself, especially by reading and following instructions?
A lot of the information you need as a developer, both to get yourself out of frustrating situations, and when you're just learning how to use a particular tool, will require you to absorb information.
There's now a lot of information out there to help you learn almost anything, like tutorials or forums or videos. Third-party resources like these can be great, but I have another tip for something that could really help you.
Documentation (or docs) is what we call the official source of instructions for any language, library or framework you might be learning. Some projects have better documentation than others, but one thing I've seen hold many developers back is that they don't take the time to actually use this documentation. Either they don't even read it (it's often not the most exciting), or they try but miss important details or don't follow it correctly.
If you can learn to figure out where to find the information you need, and actually absorb that information, this will put you ahead of a lot of people—sometimes even those with several years of experience.
What to do now
Did you answer yes to all 4 questions?
If so, it's likely that you're just experiencing a moment of (totally normal) self doubt.
If not, it's possible you might just not be someone that enjoys programming (and that's okay too!). If you still want to get into the industry, there are many, many roles in tech that don't require any coding.
Push past the self doubt
So, assuming you're just experiencing a temporary crisis of confidence, what can you do to get past it?
Remind yourself it's temporary
It can be hard to do in the moment, but try to reassure yourself that this will pass. Remind yourself of the last time you experienced a similar feeling, which then had a positive outcome, like something that you eventually got to work! Then think about how relieved you will be, and how good it will feel, when this thing finally works too.
Focus on your goal
When you're deep in a technical problem, it's easy to lose sight of the why. Why are you doing this, what are you working towards, and what do you hope to achieve by completing it?
If you take a moment to step back and think about how awesome the app you're building will be when it's finally done, or how good it will feel to get that acceptance call when you finally receive a job offer, it could just give you the motivation you need to push through.
Come back to it later
It's perfectly acceptable (and encouraged) to get up and take a break when you're tackling a frustrating problem, or getting stuck in a negative mindset.
Get some water, take a walk, go do something completely different for a while, and come back to your code with a clear mind when you've had a chance to give your brain a rest.
In fact, studies suggest even very short breaks are actually useful for learning new skills. This could explain something many programmers experience after taking a break: if you were stuck on a specific problem, when you come back you'll often spot the solution right away!
This suggestion sounds obvious, but you'd be surprised how many people just don't do it enough. I know I have to drag myself away from difficult problems sometimes—and when I do remember to, I'm always glad I did.