By Sihui Huang
Does any of the following sound familiar?
You constantly worry that you are not good enough.
Look at the developers around you. They seem to have everything together. Their code is cleaner than yours. They debug much faster than you do. They merely glance at documentation before knowing what they need. They are confident. They enjoy coding.
But you, you are worried. You worry that you don’t know enough about the framework and the language you are using. You worry about introducing bugs. You worry about catching up with the hottest technologies. You worry that you are not talented enough. Things don’t come naturally to you. You think to yourself: “Maybe I’m not meant to be a developer.”
If any of these self-doubting thoughts sounds familiar to you, you are not alone. Google “self-doubt developers”, and you will find over 2 million results in less than a second.
I was you.
For a period of time, I also experienced intense self-doubt, wondering if I would ever “make it”. It happened in college when I was practicing and preparing for job interviews. Each day, those algorithm problems made me feel like a complete failure. I was stressed and worried, as much as you might be now.
Eventually, my practice paid off and I received multiple job offers from prestigious tech companies. Along the way, I learnt two important lessons that changed my view of programming and eliminated my self-doubting thoughts. I’m sharing them with you now. Hopefully, they help.
Lesson #1: Learning programming is exactly the same as building muscles
To learn to play soccer, you need to go to the field and play. To build stronger muscles, you need to go to the gym and lift those weights. To learn programming, you need to sit down and code.
After lifting weights, you will feel sore and tired the next day. When stuck on a programming problem, your brain will (literally) hurt and you will get frustrated.
You won’t give up working out simply because of feeling sore. You know it’s part of the process. But when you get stuck while programming, you might start doubting yourself, wondering if you are talented enough. Because: (1) you think getting stuck is your fault, (2) others make it seemed effortless.
1. Getting stuck is part of the process.
Maybe no one has told you that, but it’s absolutely normal to get stuck during programming. It happens even to senior developers. A big part of programming is about figuring out why what you expected to happen didn’t happen. If you agree that expecting a child to be able to walk the first time he or she stands up is absurd, why would you expect the first draft of your code to run perfectly without any bugs?
I remember times when I got stuck for so long that I wanted to bang my head against a wall. I know it’s hard and frustrating (especially when dealing with issues related to dev environments). But hang in there. Dig into the issue. Ask Google. Ask a friend. Take a walk. You will eventually solve it and move on. And as you gain more experience, you will gradually get stuck less.
Next time you get stuck, don’t give yourself a hard time. Remind yourself it’s not your fault. It’s normal. It’s part of the process.
PS — Setting up a dev environment might be the most difficult part of programming.
It’s very common to get stuck and spend days on setting up a development environment. These are moments that might crush your soul. You try to follow the instructions step by step. But random errors keep showing up in every single step. The instructions make it seem easy, but it’s not. It’s not your fault getting stuck. 99.99% of the people reading that tutorial get stuck. The remaining 0.01% are the lucky ones who happen to have the exact same operating system setup as the instructor.
It’s unfortunate that the first step of learning to program is also the most frustrating and soul-crushing part. When you see errors you can’t understand, just copy the exact error message and Google it. (Putting quotes around the error message or just search the first half of the message might help.) Try different solutions until you find the one that works. And move on.
Pardon me for repeating: getting stuck at this stage is not your fault. We ALL do. And I promise programming will become a lot more fun once you get past this stage.
2. We confuse “genetically smart” with “appeared smart because the person has spent tons of time on related subjects”
During my last semester in college, my friends were amazed by how well I did in the Advanced Data Structures & Algorithms class. I made it seem effortless while they were struggling.
What they didn’t know was that months before the class, to prepare for interviews, I had spent countless hours practicing coding challenges, which covered the exact same topics as the class: dynamic programming, depth-first search, breadth-first search, etc. It appeared effortless only because I had already been through these struggles.
When I first self-taught these concepts, I would spend hours staring at a problem and couldn’t figure it out. When I gave up and looked up solutions online, I struggled to understand them. When I finally did, I felt even more frustrated because I doubted I would ever be smart enough to come up with such a solution myself.
Sometimes even when I encountered the exact same problem again, I might’ve still had no clue on how to approach it. I would get so stressed that I had to take long hot showers to calm myself down.
So believe me when I say that I know how it feels to doubt yourself and worry that you can’t make it. I have been there before. And I can assure you that you are not alone. Many great developers have been through the same thing. (Here is a podcast about this topic.)
Next time you are struggling while people around you are excelling, don’t think it’s because you are not talented enough. Most likely, they just have more exposure to the subject, or similar subjects, than you. Their brains have built up the “muscles” to handle this type of subject. After you get through your current struggles, you will appear smart and effortless as well.
It’s all about reps and sets.
You build muscles by exercising them. The more effort you put in, the longer you train, the stronger you become. Learning programming has the exact same process. The more time you spend coding, the more proficient you will be. You reap what you sow.
Lesson #2: Focus on your craft, not you
Stop thinking about how good or how bad of a programmer you are. If you are in the bottom 5% of your team, you want to get better. If you are in the top 5%, you still want to get better. No matter how good or bad you are, there are always people in front of you and people behind you. So why waste time thinking about it?
Instead, focus on your craft. Stop asking how good you are. Ask how good your code is. How can you make it better, faster, more readable? Surround yourself with engineers you admire. Read their code. How is it different than yours? What are the trade-offs they are making?
If you already work as a software engineer, someone is paying you to write code. You should pause and reflect on it, as it means a lot: someone either believes in your coding skill or sees your potential. The only way to live up to that potential is to focus on your craft and improve it relentlessly.
Action Item: Start keeping track of small wins
When was the last time you got stuck and weren’t sure if you could solve the problem? How did you eventually solve it?
Open a new Google Doc and write it down.
Next time you doubt yourself, take a look at the doc and remind yourself: if you could solve that last problem, you will solve this one as well.
Use the doc to keep track of challenging problems you overcame and what you learned from them. Always, always celebrate these small wins!
Leave a comment and share the last time you got stuck to remind those who are currently struggling that they are not alone. ?
Want to read about my career in tech? Check out my other articles.
Have other questions related to programming?
Please shoot me an email: sihui@sihui.io