Ask HN: Self-doubt, inferiority complex is killing me. How do I fix that?
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 ] threadIts 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.
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.
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 :)
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
Your English is fine, by the way.
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...
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!
It gets better.
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 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.
> 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'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.
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.
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:
So slow and steady may indeed win the race.Life is not a race. :-)
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).
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.
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.
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 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.
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.
- 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.
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.
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.