Honestly just reading through the thread and all the links provided by you guys, I'm actually started to get anxious. Its like when I was a kid and some teacher starts screaming at me for doing something wrong, when I didn't know it was wrong, and instead of teaching me that this is the wrong way of doing things, they just keep screaming at me and telling me how stupid I am (probably not a good teacher to learn from him, but still).
After reading this thread, I'm honestly more scared to share my source code with the public than ever. Because I might be doing something stupid and someone will just come along and start bashing me for writing shit code. Problem is, I will never learn the right way to code from the wrong way if I don't share my code and no one explains it to me.
TL;DR - unless you've been telling everyone that you're the greatest software engineer who's ever lived, you should never feel like that.
Often this is something that goes away with age, but it's also a cultural issue - the importance placed on protecting one's ego.
E.g. In America it's common for people to not want to admit they don't know something - from lying to your friends, saying you've heard of [obscure band]... to dancing around your co-workers questions with qualified stalling like:
"Now
I would say... that this system X probably works similar to system Y"
instead of being straightforward with:
"I haven't used system X. Greg wrote it. You should ask him, or I can look at it with you to try and figure it out".
It's ok to not know things. It's good to know that you don't know things!
"Ignorant" is not an insult, except when it's used to mean that you're choosing not to learn.
If you discover that you're ignorant of something, and then follow up with more learning, then you're now a better person.
Without first admitting and accepting that you need to learn, this self-improvement is impossible.
The internet (and professional software studios) are amazing as they can surround you with lots of really knowledgeable programmers. That's an amazing resource that you can use to become an amazing programmer yourself.
The only catch, is you've got to first admit that you're a shitty programmer. Even me, now, with over a decade making games, I'm willing to humble myself before other programmers if they're more knowledgeable in an area than me. Hell, even if they're a newbie student who knows some neat trick that I don't, it's worthwhile letting them momentarily be the master and giving them your full attention as an eager-to-learn student.
The second part is learning to accept criticism. The Wikipedia page for that word is a good start in explaining it - that a critique is not a personal attack and can/should be objective. If you get defensive when provided with a critique of you're work, then you're choosing to be a bad student, choosing permanent ignorance over learning.
Sometimes people are bad at providing critique / some people are lacking in tact. These people's critiques may sound offensive, may sound like they're attacking you personally. Just remember that they're really only there to show you where you can continue learning. If they've done this in a seemingly hurtful way, it is not your problem to deal with - it's actually their own problem, their own bad interpersonal skills. They need to learn how to interact with people better ;)
Always assume good faith and mentally translate people's words into the best meaning before taking them to heart. This can mean translating "OMG U SUCK! Why is this code 100 lines?" to "You could have done this with less lines. Ask me how." :lol:
Also, when people suck at communication like this, keep in mind that (ironically) it's usually tactful not to tell them, even though without this feedback, they themselves are being robbed of an opportunity to learn/improve their communication skills :lol: