The Better You Program, The Worse You Communicate
secretgeek.netBoy is that not true. The key to miscommunication and bad programming is the same: not to be clear in your own head about what you're doing.
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.
I don't know if the layering is all that clear.
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.
I call bullshit too.
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.
I think a lot of programmers mistakenly use this as an excuse when in reality, they should just get out more :)
I disagree with the headline.
The site, however gives me "Service Unavailable", which is either bad programming or bad communication.
Some well explained thoughts. Overall, I agree with the "gist" of it. :-)
I have experienced something similar, after rather intense stretches of coding, especially when it involved optimization or visualization, ... I sometimes find it difficult to resurface and be verbally expressive and articulate again.
Same thing happens to me. I just tell everyone I'm "code brained" and sit in a corner until I snap out of it.
It's true. The better you program, the worse you are at breathing. The essence of programming is to not repeat yourself. The essence of breathing is repetition. In, out, in, out. QED.
The essence of programming is to effectively get an automaton to do repetitive tasks for you. In the case of breathing, that is exactly what the autonomic nervous system is for.
Well, it's true that they're different means of communication; programming is like math. But if the title of the article were actually true, then super-clear writers like Ka-Ping Yee would be terrible programmers, and good programmers like Larry Wall or Linus Torvalds would be bad writers. In fact all three of those people are expert at both forms of communication, and that's typical in my experience.
You'll find that philosophers talk to each other in much the same way that programmers talk to compilers. Philosophers invent and define new terms all the time, try to make the most general true statement possible, and spend an interminable amount of time debugging each other's arguments.
And here we have a massive movement from programmers saying "how come ? You are wrong, I communicate well. If you communicate bad, you are bad programmer."
Well, that sounds like healthy putting yourself in question, and healthy communication "You're wrong, because you are".
About me, I don't think I'm an awful programmer, but I see many valid points in this (mostly about the "i explained it to you once, how come you don't get it !" :P).
Quite interesting read, not especially to take as a direct truth, more to lightly smile about it. Obviously, the "better you program", the less you are open to light criticism.
I disagree.
I think that if the average programmer steps out once in a while to communicate with humans and keeps social momentum, he can differentiate between the two.
As a programmer, I don't talk to my friends like they're machines. I do, however, speak pragmatically and logically. I also use common sense.
I do have a little unproven, silly theory that good programmers are able to solve social conflicts easier because of good debugging skills. My life seems to be rather drama-free. I could just be full of shit, though. :)
The argument supposes that people have a single set of abilities/tendencies that they apply to everything they do. That is ridiculous: we adapt our behaviour to the circumstances. When you're with friends, you behave and communicate differently then when you are with colleagues or relatives. Cooking requires a different kind of attention than fixing your bike does.
Some interesting points, but obviously a coder bait topic.
I'd argue that the best coders express themselves to humans and computers both pretty well: with clarity and brevity, and without introducing unnecessary new concepts. And they cover their corner cases. :)
All green of skin. 800 centuries ago their bodily fluids include the birth of half-breeds. For the fundamental truth and self-determination of the cosmos. For dark is the suede that mows like a harvest.