Ask HN: Self-doubt, inferiority complex is killing me. How do I fix that?

44 points by throwawaycs ↗ HN
I'm a CS student. Recently I have been battling with self-doubt a lot. I'm super self-conscious when I'm coding as well as when I'm speaking English--my 3rd language. As a result, I avoid trying to solve hard coding problems. I freak out when I have to pair program with someone or when someone else is reviewing my code. And I tend to make a lot of syntax errors. I also tend to rely on documentation a lot. Furthermore, I tend to make a lot of stupid mistakes when I'm speaking English even though I have been living and attending college in an English-speaking country for the past three years.

Could you guys please give me some advices on how to deal with that issue? Thanks lot!

52 comments

[ 2.9 ms ] story [ 101 ms ] thread
Hey,

Its a tricky time of day to be asking. Fortunately at least one person is up. ;)

First off there are considerable reasons why this might be happening, and a few ways to deal with it. But its going to be a lot of hard work. Rather than speculating, what Im going to suggest is that you take advantage of any programs at school and talk to a therapist or counsellor that is familiar with these types of issues.

Outside of that, prepare to roll up your sleeves. The mind and body are like an elastic and youre going to have to stretch it a little. You may have been protecting yourself from criticism for a little too long. Avoiding anything too difficult; too easy to fail at. Unfortunately this isnt the best way to grow. Try and be open to criticism, by understanding that its an opinion. Its feedback. Sometimes it helps you get better, and does not rob you of any accomplishment or success, no matter how sleight.

Try things that are difficult and fail. This is sometimes the best way to learn.

Find a mentor or someone you look up to and ask for guidance. You might feel awkward at first, but most people will be flattered. This is a more "safe" way to learn from experience.

Please remember to be kind to yourself during this process. Its easy to have negative self-talk. Be aware when this happens and try and steer your narrative to something that acknowledges your progress; do not rely on comparisons.

I think these issues are normal for most people starting out. Just accept that there will be many challenges. With diligence and time, you will be able to conquer them all. Keep pushing yourself and eventually the hard stuff won't be hard anymore.

Accept that you will mistakes, and that it's okay to do so. Correct them and learn from them. Keep working and keep getting better. Your biggest competition is yourself in the past.

Relying on documentation a lot is NOT a bad thing. Your problem solving abilities are important but one could make the argument that your ability to look up how to solve a problem is just as important. I can't count the number of times I've heard developers (including myself) say "Most of my job is just Googling how to solve something...".

When I was in college, once of my classmates only used documentation as an absolute last resort claiming that he didn't want to rely on it in college since he wouldn't be able to rely on it in the 'real world'. Not only was he slow and a pain to work with, but he couldn't have been farther from the truth. Google isn't going anywhere, and if anything its more accessible in the workplace than in a college setting where at times you're forced to write syntax correct code on paper in some unrealistic testing environment.

In short, embrace the documentation :)

You provided a lot of details about what's happening, but not a lot of details about what's going wrong (the emotions)... so I'm not sure if this will apply to you, but I'm going to say it in the hope it'll be useful to someone:

The goal of programming isn't that you perform flawlessly, the goal of programming is to have fun while building something that performs well.

To put that another way: It doesn't matter how many mistakes you make while coding, what matters is that you eventually build something that works. Lean on test cases, write drafts that don't work, say dumb things. It's great. It's learning. Find the flaws, and then fix them -- mistakes don't matter as long as you remove them before shipping the code... and spotting errors seems to be something you're good at :p

Clearly the anxiety is getting in the way of work and study, so it's time to visit a specialist in psychotherapy. Your college advisors or your primary physician should be able to suggest the right person in your location.

Your English is fine, by the way.

Let me say right off the bat your written English is impeccable, IMO as a native English speaker. I understand it's quite possible you spent a lot of time reviewing and revising your post... I do that too, with all of the code I feel most proud of :)

I used to be pretty bad at programming. I also used to be pretty bad at walking; when I was born I couldn't even sit up straight or crawl, let alone walk!

I have not always been a big fan of pair programming. In fact sometimes I feel very introverted and just down-right don't want to sit down with a coworker and go through something. But, some of my best memories from school are sitting with my OS and later RTOS partner, who was from China and spoke pretty poor English, and working through our issues into the middle of the night and beyond. And these past few weeks, I've spent hours every day with a very extroverted coworker getting our code just right (it's still not done). I mentioned offhandedly how "dealing with people is a skill, one I'm still working to develop" and he said that he thought I was good at doing it. I asked, "Really?" and he said "yes", and I replied that I really appreciated the comment and the thought.

I don't think I can allay your fears, and I can't say with certainty that they are misplaced, but I believe to some (perhaps large) extent they are. But I understand them, deal with similar issues of my own, and I have a pretty successful career by my standards.

If I were in your shoes, I'd try to sit (alone) and work on some of those hard coding problems. I've heard good things about the book "Cracking the Coding Interview" and I have made a couple of half-assed attempts to go through it, and lately I intend to go at it full force and see where it takes me. I'd also try to list all of the things that I've learned and how far I came from when I first started programming - I learned from the gentle introduction in C for Dummies, quickly got in over my head, and had a friend help me with pointing out all the off-by-one errors in my new fancy lightbar menu code bit that I wrote for Borland C/DOS, and my fancy console input routines. I've looked back on my journey, and taken large steps backwards due to personal issues. But I've always moved forward in the end...

some great advice already posted.

try to not get to lost on where you are and how big of a delta to where you envision it is that you want to be. slow down if needed.

Try to enjoy where you are and master it. give your self credit at the level you are at. be proud of your code even if others are not kind. strive to make it better. always be improving.

be pragmatic. don't get lost in the weeds of politics, status, or any specific sort of rabbit hole that you won't learn from. if you aren't sure whether you will learn from, you probably will.

someone posted recently. if it's not a hell yes, then it's a no. I really like that. don't take on too much.

anxiety can suck. take it one day at a time, and learn to get the courage to ask questions when needed and practice the art of asking questions. it will be invaluable.

if you can find something passionate that excites you, remember this moment. occasionally refer to what makes you passionate and recalibrate as needed. if you find no passion, maybe take a break and revisit later.

good luck!

This is what it's like to learn something real. Also, every programmer makes mistakes. That's never going to stop. Ever. A good IDE will help with syntax errors.

It gets better.

My advice is to code more. You will get more accustomed to the thought process that goes into writing code, more accustomed to your editor, and more comfortable with coding overall.

One thing that I did that helped me code more was challenge myself to code every day. Using GitHub helps because you can check your streak. My friend and I did this for about 2 months and we felt very productive. This is his blog post about halfway through: http://www.ironzebra.com/post/105/abc-always-be-coding

Your English is fine. I live abroad and meet people all the time who use English as a second language. Yours is by far some of the best English I've seen from a non-native speaker.

I agree with this. Write more code and your confidence will improve. Syntax is usually solved by the compiler and IDE anyway. Anything particularly complex should be designed before you get to writing the code anyway.
This is the best advice given based on my experience.

I am also suffering from low confidence and inferiority complex. What actually helps is coding more and pushing to github as much as I can. Especially if I think it is still not good enough. This makes you inclined to work more at it. So gradually you get better with time.

Another thing which I could associate with is pair programming which just juggles my process. There are at least 6 things that I am thinking then the guy next to me says that is should be done this or that way, and I already lost what I thought. And you need to rebuild your entire modeling over and over and over again. Its demoralizing and energy consuming way overboard. So long story short people are different and the entire point of pair programming is talking about the problem and getting better with problem-solving by communicating.

I quote one of my latest interview where the guy said "just don't sweat over it there is no best answer". Which he was trying to say that the only thing they were interested in that I could use "lego" to build and reason about my building or not.

And I could give more and more advice. But it's okay if you feel that way, Proves that you care . And there are some quotes about being human and all.

As someone with a similar background as yours (I was an international CS student who first learned programming in the freshman year at a English-speaking college), I can only say that you are not alone in this struggle. If I can give an advice to my younger self, I would ask myself not to beat myself too much for not being able to be as smart as the people around me. In short, don't compare yourself to others, because it gives more harm than good. Instead, appreciate the good thing you have done and keep doing your best at whatever things in front of you.

> I tend to make a lot of syntax errors. I also tend to rely on documentation a lot.

Believe it or not, many of us who work in the software industry rely heavily on IDE to fix syntax errors. My suggestion here is try to pick your favorite language and keep practicing (and make mistakes) until you're comfortable using it. I hate to say that there is no shortcut in getting better. Small mistakes are tolerable, even when you're doing whiteboard interview later on. More importantly, I would say that understanding concepts in programming languages is a LOT more important than remembering syntax (i.e. memory management in C, heavy emphasis of OO in java, functional programming in scheme, and so on).

As for relying on the documentation, it does not come across as a bad thing to me. For example, before I call a function from a 3rd party library, every so often I check the documentation for it. From there I can learn the contract of the code or some gotchas that I need to be aware of.

> I also tend to rely on documentation a lot.

I'm writing some code in a language that I made myself from scratch. I rely on the reference manual quite a lot. Thank goodness I wrote one or else I'd have to go into the source code.

I make syntax errors even though I designed the machine that is telling me that I make syntax errors.

> I'm super self-conscious when I'm coding as well as when I'm speaking English--my 3rd language.

Wow, most people only speak one language and they do that badly. You speak 3! Your English is good in that post.

If this anxiety is affacting your day to day life you might want to consider a short corse of therapy. You could probably use a book or website.

"Mind Over Mood" is a respected book. http://www.amazon.com/Mind-Over-Mood-Change-Changing/dp/0898...

MoodGym is a respected Australian website. https://moodgym.anu.edu.au/welcome

If you decide to use a therapist make sure you find someone with a reputable registration and that you are clear going in what you want to work on. Cognitive Behaviour Therapy is probably useful. It should take 8 to 14 weeks at an hour per week.

> And I tend to make a lot of syntax errors. I also tend to rely on documentation a lot. Furthermore, I tend to make a lot of stupid mistakes when I'm speaking English even though I have been living and attending college in an English-speaking country for the past three years.

You are not stupid, and the mistakes you make are not stupid. English is hard! There are at least 7 different ways to pronounce "ough" (like in "rough" or "through" etc). It's tough for people to learn. Stresses on syllables come in different places. You might think that making mistakes is always bad and that everyone will judge you. Some people will judge you, but many more won't notice and even of the people who notice there'll be some people who don't care.

I've been in a similar situation as you. I come from a third world country and didn't have access to computers until my late teens and started learning CS fundamentals only after my undergraduate studies. Given this, the US tech scene has been quite competitive and intimidating since there are highly talented people who started coding when they were very young. Initially I was battling with self-doubt but once I understood above points, I've been trying to bridge the experience gap. And it's quite easy to chug along if you love what you are doing.

So I would say that it's unfair to compare yourself with others as the circumstances for everyone is different. Just use yourself as reference and see whether you are better off than you were in the past. One tell-tale sign of progress is that when you look at your code/work from recent past, you will think of a lot of things you would do differently and sometimes you would think "what the hell you were thinking then" which is a great thing. :)

One of my mantras (which I may have picked from somewhere subconsciously) is:

  Life is not a sprint, it's a marathon. 
So slow and steady may indeed win the race.
You're right that life is not a sprint, but I'd like to go one step further:

Life is not a race. :-)

Realize (accept, internalize) that we make mistakes no matter how hard we are trying to avoid them, so being too anxious about making one is just a waste of effort (oxigen, glucose) and self-impoverishment.

Grammar mistakes in third languages are OK, the meaning of what you are intended to say is what is important. From could be imperfect if it makes sense. Striving for a perfect order of long words is what killed lots of would be writers.

Same concepts work for programming. As long as your data-structures are repressing the problem domain adequately and choice of related algorithms is reasonable, all the minor mistakes or errors doesn't matter.

BTW, there is no such thing as error in universe. It is mere a wrong path (branch) taken (take a look at what is a heuristic-based depth-first limited back-tracking search).

Just stop it.

Seriously though, you learn a new human language and jump into one of the most intense fields of study and start having an inferiority complex? With that attitude you'll need to be world renowned before you have confidence to speak in public.

If there is anything I can do to help, as a native English speaker with programming/CS experience, my email is in my profile. Best of luck.

> I also tend to rely on documentation a lot.

This is the best way to work. I am speaking from my experience. It will keep you on right track to get things done.

> I tend to make a lot of stupid mistakes when I'm speaking English

try to be friends with your class\batch mates. It is far easier than becoming friends with outside people (strangers). Go out on lunch\drinks with them. Slowly your circle with increase and eventually you will see improvement in your communication and socializing skills.

Consider the following approach: start with simple problems you know you're good enough to solve, and then send them out of the ballpark -- basically, do such a complete, perfectionist job that you can't help but be impressed with yourself. If a subject is baffling you, consider picking a small area within it and then throwing all your energy at it and killing it dead. Confidence comes with success. Small successes can build up to bigger ones.

Edit: But persevere. It's my experience that it takes at least a year of work for any significant rewiring of personality and attitudes.

> I also tend to rely on documentation a lot.

I rely heavily on resources like StackOverflow, Google, official docs and Dash.app is a godsend for offline-coding. There are many functions (python) standard library functions that I know by name, but I never remember the call-signatures for. I am always looking things up in documentation.

Things that I use all of the time are ingrained into memory through rote repetition.

That said, the most important thing is knowing what exists. If you don't know that a function or method exists, then you don't know to use it. As long as you know that it exists, you can (usually) easily lookup the documentation for how to use it.

> I freak out when I have to pair program with someone or when someone else is reviewing my code.

I've always hated being in the driver's seat for pair programming. I always feel like I make stupid mistakes and my fingers stumbled over the keys whenever someone is looking over my shoulder (this doesn't just apply to pair programming). I much prefer to just put in my headphones, get into the zone and let the rest of the world melt away as I dive into the problem at hand.

My suggestion here? Let someone else into the driver's seat for pair programming and don't be afraid to ask questions, especially if you consider the other person more skilled than yourself. If the person gets annoyed at your asking questions, then they aren't a very good mentor.

- It's amazing that you speak three languages, most English speakers will be in awe of you for that alone. Bear that in mind when you make an error! - Who cares about syntax errors in code? This is why we build in-line checkers in IDE's. Also syntax errors are easy to find and fix, semantic errors are the killers -> the bloody thing works and then blows up... arrgggh!

Big mantra : don't beat your self up. The rest of the world will do just fine at that job without your help. Also, mostly other people simply are not watching and critiquing you, people who are are either 1. mad, 2. in love with you. Both 1 & 2 mean that this is not an issue.

I think this is a wonderful worldview to have :)
I would say 1. jealous or 2. in love with you. In my experience it is rather 50/50.
Hey man - don't beat yourself up. I can barely code and still can amaze myself. I would say just do things that you think you cannot do. And don' think about the outcome. You would find just by taking the initiative you can do anything.
- You're allowed to make mistakes, that's what being a student is all about. If you knew it all already, you wouldn't need to study, right?

- Practice makes perfect. You just gotta keep trying and failing; eventually you'll find you fail less often than you try. Don't avoid trying out of a fear of failing, or you'll end up doing nothing, which is worse than feeling embarrassed.

- Don't feel self-conscious about your English skills. Ultimately it doesn't matter; I've worked with programmers from around the world, often with "quirks" in their written/spoken English skills, and never has it been a barrier to communication. A common understanding of the theoretical CS concepts should help.

- Try mindfulness meditation. Focusing on the present and awareness of the world around you might help direct your focus outwards instead of inwards.

TL;DR; Fake it till you make it

You're probably a perfectionist. Bad news: in a few years, you might still think you're not good enough, when in fact you'll good enough. Good news: perfectionism will push you forward.

So you can adopt the "fake it till you make it" attitude: stop worrying, go ahead and try to convince others you're good enough. It should be easy enough, because others are much less demanding than you might think... Then you'll see others judge you positively. That's when you'll start to make it.

In other words: I'm a very experienced (42 yo) developer, highly regarded, yet I can't write code without running it, I make typos every few lines, I rely heavily on the huge amounts of documentation found on the web...

And I know my english is not perfect, but sometimes, a native speaker tells me my english is fine... So I continue to fake it, till I'll make it.

Work on things that no one else is doing. If there is no precedence, the better.
the key to success is being able to walk through fear and anxiety and learn from it. it doesn't matter if you make plenty of syntax errors, it only matters if you pay attention and learn why you made those errors. rome wasn't built in a day. stop beating yourself up and cut yourself a break. most programmers in the world are the same as you and many of them (including me) have gone through periods of inferiority or self-doubt (or imposter syndrome).

just try to stay focused and dont spread yourself too thin when it comes to learning. build a foundation one day at a time.

have fun, laugh a lot, live free follow your dreams.