I am a software developer. I am not much of a talker or a social person (even though I agree that coding is a social activity). I mean, when it comes to meetings or when my input is needed in a discussion, I am able to communicate clearly. I have been told by many other team mates that I am very good at explaining/teaching things to other people. But I'm not just a socializing person. I'm like a dull man child who enjoys his own interests. And when I know the ins and outs of something, I am able to communicate clearly and honestly. But I do get stuck if I have to take part in dishonest arguments, e.t.c.
People in my team and in office circles have been making jokes with me about not talking (which I'm okay with). But then these jokes became serious and after a while, these things started spreading to almost everyone in my office. Sometimes I even play along and make fun out of the criticisms that I face but that playing along became too much and I now actually have problems talking to people :( I've been to other places recently and people are telling me the same thing now.
And worst of all (the reason I'm asking in this site), my performance reviews contain comments about me of having bad communication skills. I did not get promoted to a senior position even though other members of the same position and some even a position junior got promoted. Sometimes people put blame on me for other things seeing this as a weakness.
What should I do to improve this weakness? I'm just not a street smart or a partying type of person. And the more people criticize me, the more get deeper into this state. I mean, how would you answer the question: "Why don't you talk?". My answer is silence, or an awkward gesture of "I don't know". It eventually becomes a habit. Then people start having dishonest and picky behavior with me, e.g. someone gives me an incorrect specification. When I tell my lead(s) about this, he/she is like "The problem with you is you don't ask/talk about things. Good. This should happen to you." And if another person comes with the same query, then the lead entertains it. Or when I train a junior employee and he makes a mistake, he says "this person (me) didn't convey the information to me properly. As you all know he has communication problems", even though he does the same task right at other places.