I don't know... I'm frequently very clear about what I'm trying to communicate and yet fail to comunicate it. Clarity certainly helps, but communication skills are another thing altogether.
Another part of the problem that he doesn't go into is that in programming, you have to "say" everything you want to say, and what you don't say is irrelevant. In communication, leaving out certain bits can be paramount - and the bits that you do leave out often say as much as the bits you leave in, to an astute interlocutor.
Commmunication is a layered cake, the first layer is being clear about exactly what it is what you want to say. The second layer is knowing how to say it. The third layer is knowing your audience, and how to communicate to that particular brand of people.
Communication is an extremely hard discipline because it requires you to both be knnowledgeable about whatever it is you have to say, being linguistically proficient, and having a good knowledge of people and psychology.
If you're a believer in the Sapir-Whorf hypothesis (or just agree with Orwell's Politics & The English Language), then it follows that your ability to think clearly is somewhat mutually dependent upon your ability to communicate clearly.
What programming to a computer and speaking to another person share in common is the ability to resolve ambiguities. Communicating effectively requires sufficient skill in listening.
I used to be big on being DRY in my communication. It bothers me when I have to repeat myself. I'm not bothered by that as much anymore. Introspecting, it used to bother me more because of two reasons:
(1) Just speaking to a person requires coming out of my shell. I didn't want to.
(2) When I do speak, I get irritated when I'm not listened-to. It doesn't feel as if the other person get what I'm saying. This frustration usually reinforces the shell and encourages behavior (1).
There is simple (though not necessarily easy) fix: learn how to mindfully listen. This is a skill that requires practice.
(1) Mindful is the opposite of mindless. The part of the brain that triggers, "wake up, this is a new experience, pay attention" is the exprience of mindful. The part of the brain that sas, "oh, seen this a million times, ignore it" is the exprience of being mindless. Driving into an unknown city for the first time and taking in everything is mindful. Zoning out on the drive back home and suddenly finding yourself at the front door without any recollection of how you got there is being mindless.
(2) Mindful listening means paying attention to the other person as if it were a new experience for the first time. You accept whatever comes in without judgement or forming any opinion. This allows you to not only take in the person's words, but also his tonality and his body language.
(3) Mindless listening is the common state of typical social interactions. It takes a lot more energy to mindfully listen than it does to listen mindlessly.
People with long-standing verbal fights usually go through the song-and-dance. They are not really listening to each other. You can often see the pattern in which they engage each other. Sometimes, you can catch one of the participant's facial expressions saying, "Geez, I know I just keep repeating this same pattern..." yet at the same time looking competely helpless in changing it.
(4) Interrupting usually means you stopped listening. Making a comment in your head even if you do not speak it out loud is a form of interruption -- you listened to the subvocalized thought in the head instead of the other person.
(5) People talking do eventually wind down.
(6) Mindfully listening is the most effective method of gaining insight about the other person. Those insights allow you to communicate much more concisely and effectively with the other person. Sometimes, you can even say something once if you have gained insight and speak at the opportune moment.
(7) Mindful listening is a skill that transfers to programming. You can use it as a form of introspection to resolve ambiguities and shape the the code. The technique of speaking to a person and programming a computer may be superficially different, however, the skill of mindfully listening is the same in both domains.
settings aside what is going on inside your head, ...
The article correctly observes that effective communication in a programming language is very concise, structured, non-repetitive, etc. ... which is quite different from effective communication among humans (imprecise, repetitive, analogy-based, etc.)
However, in addition to the observation that the communication modes or skills differ, the author makes the claim that the development of one mode/skill will produce deficiencies in the other. I don't think the author provides sufficient evidence that such an effect occurs, and I would further argue that such evidence would have to come from a more empirical rather than introspective source of knowledge (although for sure, personal experience would be what inspired the more rigorous experiment). My own experience is that quite opposite skill sets can and should be developed by individuals. Also from my own experience I would argue that knowing when to employ each different approach to communication is itself an important skill for hackers who use many different programming paradigms and technologies, as well as people who communicate with all different kinds of people (various subcultures of "creatives", scientists, academicians, business people, different socioeconomic/ethnic cultures). I think that being self-aware and well-developed is the key skill for both human-human and human-computer interaction.
There's more to communication than being clear in your own head, which was the point. I've often failed to communicate by applying cold, rational logic where a little empathy and patience were really needed.
I once had a boss who was brilliant at learning other people's idiolect and then speaking it back to them. He never failed to get his point across.
Well, maybe not in the way he means, but for whatever reason, if I get really deep into a program, I find it a little bit more difficult to speak Italian, which normally comes very naturally. I absolutely hate writing comments and commit messages and the like in Italian, even where I'm sure the code will never be touched by anyone who doesn't speak it. It's like it involves some sort of context switch that kicks some stuff out of cache and degrades performance...
Miscommunication and bad programming are definitely tied together, but that says nothing about the link between good communication and good programming.
Another part of the problem that he doesn't go into is that in programming, you have to "say" everything you want to say, and what you don't say is irrelevant. In communication, leaving out certain bits can be paramount - and the bits that you do leave out often say as much as the bits you leave in, to an astute interlocutor.