The stereotypical technical person, isn't usually depicted as a great communicator. There's merit to that. I've overheard my fair share of Programmer / Manager conversations where there was clearly an understanding deficit.
But in my experience, the issue isn't communication. Most developers I know have no trouble with technical conversations among themselves. The issue is translation.
Auto mechanics have their own language when they are working together on a repair job, but they don't use it when they're speaking to their customers. They don't rattle off names of parts and connectors, or go into detail about the tools they'll be using (at least, good ones don't). They translate their knowledge into a language the customer will understand, preferring generic familiar terms over specialized technical ones. Whenever possible, they bring you over to the car, and show you the areas of concern, instead of just telling you. If you have some mechanic experience yourself, they evaluate your background, and adjust their language to meet your understanding. By doing these things, they empower you to make informed decisions and keep your business.
If you're involved in technical work, part of your job is to translate. As a developer, you're in the guts of the machine. You have to have a certain kind of knowledge and skill to find solutions to your problems. But, have you ever actually listened to yourself when you hear a manager or stakeholder ask "how's everything coming?" What do you think they were really asking when they asked that question? (hint: I don't think they wanted to know about jQuery plugin function callback conflicts).
It's easy for me to just brain dump on people, especially when I'm feeling tired or lazy. But deep down, I know I can do better.
We all can do better. Let's try to be self-aware enough to always be translating as we go about our work.