In his latest post Jani Hartikainen makes a recommendation for those wanting to become better developers: first become a teacher. He suggests that communication is the second most important skill a developer can have.
What is the most important skill for a developer besides actually writing code? Communication. What do you typically do when you communicate as a developer with someone else? You explain problems, you describe solutions, you talk to non-programmers about what you're doing. You could also say that you're teaching others about what you're doing. [...] Being a good communicator is often completely overlooked.
He looks at why it's important for a developer to have good communication skills and what it means to "communicate well" with fellow developers. He suggests that real teaching can start when developers understand the domain and code they're working with. He also talks about the flip side of things, the importance of listening to other developers and those trying to help. Listening well means understanding the question and being open to different ideas, even if they contradict your own.
As with all aspects of programming, the best way to improve communication and your ability to reason about code on a higher level is practice.