>I don't have to hold my tongue when someone is wrong
I respectfully disagree. You should definitely speak up if something is wrong, and it's good that you're in an environment that allows you to. That being said, I suspect that the number one "communication problem" software developers tend to have is coming across as having an overactive ego, that your word is the divine truth handed down to the unwashed tech-illiterate masses, and that their opinions don't actually matter in the face of the cold, hard facts you bring to the table. I don't think this is the dev's actual attitude (most of the time), but it's so, so easy to come across that way. Coming up with ways to share an idea while making sure your audience understands yet doesn't feel talked down to is a skill I know a lot of devs could stand to learn. If your coworkers feel respected by you, that goes a long way toward improving communications.
The other problem I see frequently is a general lack of visibility into what progress is actually being made on the seething morass of shifting dev priorities. Even something as simple as a daily/weekly project status update e-mail to the right people can do wonders here.
(This question gets deep into greater issues of how much power tech people have and their perceived role in businesses and society, which is far too big a discussion to be had here. Short version: IT experts are witches).
Full disclosure: I am a career software developer, and like to believe I do pretty good at the communicating with business thing.