Ask HN: Self-doubt, inferiority complex is killing me. How do I fix that?
Could you guys please give me some advices on how to deal with that issue? Thanks lot!
Could you guys please give me some advices on how to deal with that issue? Thanks lot!
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.
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'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.
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.Life is not a race. :-)
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.
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.
Edit: But persevere. It's my experience that it takes at least a year of work for any significant rewiring of personality and attitudes.
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.
Rely on your compiler. I'm a senior dev and I still so a build on my machine before doing a code review. One less thing to worry about if you make it a habit.
As for the poor English: I would think that any reasonable English person would care about the quality of your English. I assume that most reasonable people would realise that English is the "universal language" and would then also realise that it isn't everyone's first language.
Professionally I have been working in almost the same situation as you: 7 years at an Afrikaans company and I started off not knowing a word of the language. Friendly jokes were made, but everyone always realised that it's more important that we could communicate and not how well we could communicate.
Basically what I'm saying is that the only person who actually cares about the quality of your English is: you.
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
There will always be people smarter and better than you. All you can do is do your best.
It's hard to be a programmer in a world where 99% of every article about programming is some sort of epic tale of mindblowing success. What those stories don't tell you is the road it took to get there. Most success stories are results of the team banging their heads against the wall for months or years until they found what works.
The life of a programmer is a neverending series of fixing your own, or if you're unlucky other people's, mistakes. There is no such thing as a perfect computer program. Occasionally you get to see the results of your work have positive impact on something or someone. Savor those moments, they don't come often for most of us.
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.
> 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.
As pointed out elsewhere, this is a long game. You may not be happy with your current scoring capacity, but you have plenty of time to improve your techniques, alter your strategies. Perhaps "avoid solving hard coding problems" is not the best approach (though it may be, every one is different and perhaps your confidence builds by successfully tackling a large number of easier problems). Your self consciousness can morph into self awareness.
Does making syntax errors help you? If not, try a different approach. Look, making errors MIGHT help you. You learn exactly where you need to sharpen and improve your thinking. Valuable feedback.
One more thing: mind and body are one. Get to a gym 3x week, and do squats. Two sets, 20 reps per set. First day do it with an empty bar. Each time you are in the gym, up the weight by 4 lbs. Six months from now your mental toughness will be through the roof. People will look at you differently.
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.
- 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.
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).
With that said:
Coding fluency is something that can be improved with practice. Google Code Jam has all the previous rounds available, and there are other similar sites. Do a round once a week, and hold yourself to the time limit. It will be unpleasant, and you might not think you do well, but no one will be watching. That context trains you to write correct code quickly, and you will improve with practice. You'll find that the coding fluency you gain helps your programming more generally.
So if that holds true, you might be holding on to a statement like "my poor english makes people think I am less of a person" - but if you try to investigate that statement you might discover that the world is full of people speaking poorly english that is not a lessor person.
Try see what internal beliefs that your are holding on to, often these belief is not true when examined, and if you let go of these beliefs you also let go of your self doubt.
From all the people I've worked with, the ones who cared were always better than the ones who didn't, and you'll be surprised at the number who don't. Of course there are other things like experience and all that, but the fact that you actually care about your ability and hopefully want to improve already will take you very far. So have faith in yourself because I certainly have faith in you random person on the internet =D
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.
My advice?
Read this: http://www.hanselman.com/blog/ImAPhonyAreYou.aspx
Watch this: https://www.youtube.com/watch?v=hIJdFxYlEKE
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...
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.
The second half of this helped me with the effects of my doubt. https://www.youtube.com/watch?v=KmEG3zzCUQs
The thing I did was to hold my doubt like a mother cradles a baby, don't deny it, acknowledging it. Until this is a joke and you're laughing at what the hell you were so worried about :) "Love your thoughts to death"
Set yourself up for success. If you do better when someone reviews your code then spend your time on reading documentation and writing good code before review. In pair programming, look for opportunities to shadow and review rather than write.
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.
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!
- William Gibson
Your English is fine, by the way.
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.
It gets better.
My suggestion is to tackle this from the language side first. It's really frustrating to be "trapped" behind a foreign language, feeling that you can't express yourself. It gets harder to learn languages as one gets older, and learning a language is like climbing a staircase: you struggle for what seems for ever with something, then you jump up a level, and everything seems a bit easier. Until you realize you're on a plateau, and you don't seem to be getting better. Again. And again. And again.
So that's one thing: even when you feel like you're standing still, as long as you're immersed in a foreign language, you are improving. Even if it doesn't feel like it.
Best advice here is just to find low-stress arenas to practice. Join a sports club, chess club, book club, film club, martial arts club... you get the idea -- find some people that share your interest and hang out. Talk without having to deal with a foreign and difficult subject at the same time.
That might help with the anxiety connected to English.
You mention English is your third language, are you using both the other two actively? If you can, it is usually much easier to learn a language if you can avoid switching back and forth -- and just stay in the new(est) one all the time. Talk, think, do everything in English. Avoid phone/video calls in your native tongue (within reason) -- try to stick to email/letters. If you think it's hard, try to make a deal with anyone you call regularly, say you'll try to give it three months. Let your brain work for you.
Don't worry about the syntax errors in code. Just code more, and you'll make fewer mistakes. Try to code for fun, or at least outside of a class setting, without any pressure. Maybe sign up at codeeval.com and try your hand at some of the easy exercises first.
Many of the problems there are pretty much lifted from project euler -- and that's a good resource too. But with codeeval everything is wrapped up nice, very little setup needed, and you can just play around.
Last, but not least -- you mention you're attending college -- try and talk with one of your TAs, professors or fellow students. See if someone might have the time to pair program with you, on something not directly related to class (again, try to avoid to stack different kinds of pressure anxiety). For example, you could make a deal to try and solve some easy codeeval (no, I'm not affiliated, it's just an easy source of a few exercises) challenges.
Finally: the best way to learn is to make mistakes. It's certainly much better to make mistakes than do nothing. And if you make errors while pair programming, not only do you learn from your mistake, your partner does to!