A Programmer’s Communication Skills
Excellent communication skills are, by far, the most required qualification in the software development world. There’s just simply no other way of saying it. Many even say that communication skills are the most important skill a developer can have, trumping even technical skills.
Technical programming skills are certainly important. But general writing and communication skills are far, far more important. Even if you’re merely a humble programmer.
What do you think is the most important skill every programmer should posses?
Written and verbal communication skills.
Communication skills are completely and utterly overrated for the position of software developer. There. I said it. Look at the job listings: if you don’t have top notch written and verbal communication skills, you can’t get a job as a software developer. Please reread that last sentence and try not to laugh.
Communication skills are important, sure, but let’s not buy into this level of blogger hysteria.
The idea that communication skills trump programming skills is a snarky thought-provoking idea that makes for good blog posts. It’s appealing as an idea because it goes against what you might consider conventional wisdom. But it’s total nonsense. The single most important attribute that a software developer can possess is, without question: aptitude. There’s never been a superstar programmer who got fired because he was lousy with keynote (ahem, or powerpoint). They just find someone else to give the talk, and let him code. Good companies work extremely hard in their interviewing process to divine aptitude. They know what they are doing. No one ever went into a Google interview and had to write an essay. (I just made that up. I presume it’s true.)
If you think communication skills might be the most important skill for a developer, you either haven’t worked with a bad programmer, or… are one.
Now I’m not saying they aren’t important. They are. It’s just that they are overrated. Here’s why they are important:
1a. Easy to Judge — Getting a Job
Programmer aptitude is notoriously difficult to figure out from a simple interview. The salient point here is that when all else is roughly equal, the ease of judging communication skills serves as the greatest tiebreaker. Having good communication skills will help you get jobs.
If you are trying to decide between a few people to fill your position, always hire the better writer.
1b. Easy to Judge — First Impressions
People’s impression of you is going to be entirely predicated upon your communication skills. Your resume will get thrown in the garbage if it conveys that you lack good writing skills. From day one, your co-workers will judge you based on your interpersonal and verbal communication skills. They have literally nothing else to go on. For a few months you’ll likely be floundering around in the new code base, doing odds and ends, and slowly getting up to speed. Even if you are an all-star, only your nearest peers will ever notice you have any talent at all.
Slowly, though, that will change. People will talk behind your back. They’ll start saying things like “Johnny’s pretty good” (or bad…). This will eventually work its way to management, and around the organization. A year (or two) later, your immediate organization will have a better professional picture of you. It literally takes a year to overcome those initial opinions about you. At that point, sadly, it might even be too late.
Because aptitude is so difficult to judge, communication skills are so easy to judge, and both correlate roughly with intelligence, it can be argued that passing judgement on your aptitude based on your communication skills is statistically more effective than.. say… flipping a coin. Right or wrong, that is the reality of the situation.
2. Improvability (…is a word, I promise)
It’s much, much harder to become a better programmer than a better communicator (this is a topic for another day). TAKE ADVANTAGE. Since most people will equate them, you can use this particular equation to your benefit. Improving your communication skills improves your perceived aptitude. Just don’t kid yourself that your insanely good technical writing skills are going to save your job as a developer if you introduce bugs faster than you can fix them.
3. Versatility
The heart of the issue though is that being a good communicator makes you much more versatile inside the organization. Not everyone can be the superstar programmer that is better left alone when presentation time rolls along. More importantly, good communicators can branch out into different things. They can become software managers. They can become project managers or system analysts. They can deal with customers. It gives you a much greater ability to move both vertically and laterally inside any organization. If big organizations aren’t your thing, how about this: it makes you a far, far, far better software entrepreneur. Company founders have to wear many hats and communication skills become critical.
4. Greatness
It is also often said that great programmers are great because of their communication skills. This is probably true. Sadly, people have mistakenly taken the converse to also be true (that great communication skills make you a great programmer). The problem here is that top-notch coding skills come first, not second.
Would Linux have succeeded if Linus Torvalds hadn’t evangelized it? As brilliant a hacker as he is, it was Linus’s ability to convey his ideas in written English via email and mailing lists that made Linux attract a worldwide brigade of volunteers.
[...]
The difference between a tolerable programmer and a great programmer is not how many programming languages they know, and it’s not whether they prefer Python to Java. It’s whether they can communicate their ideas. By persuading other people, they get leverage.
I can agree with this statement. But let’s be clear: Linux wouldn’t have succeeded if Torvalds didn’t also have superb technical skills. I’m fairly certain no one would be using Linux if the primary qualifications of its developers was their communication skills.
September 16th, 2008 at 8:09 am
Linus is actually a great example of just putting the code out there and having other smart technical people recognize it for its potential purely based on what he put out there, not on how compelling he was in convincing people to come on board with him. The fact that he was used as an example of a great communicator is actually kind of baffling, as I’m sure he’d tell you himself (based on what he’s said in “Just for Fun”).
September 16th, 2008 at 9:33 am
Programming *language*. The medium through which we communicate our intentions to the computer and with other developers.
Good communication skill means the ability to convey ideas succinctly, to receive and understand ideas, and to seek clarification when you don’t understand.
If you can’t describe to me how you are going to implement something, I don’t trust that you can describe it to a computer (which has far less capability to work out what you’re trying to say).
September 16th, 2008 at 10:33 am
At one of our portfolio companies, we’ve interviewed over a dozen developers.
I’m a results-oriented person. And as the article mentions, at the end of the day, it’s all about results. We always request finished work product + references.
Still, one of the potential web developers showed up totally unprepared. He was a CalTech kid, very smart and very arrogant. I asked him to leave 10 minutes into the meeting. Complete waste of time.
We ended up hiring a prepared, talented and intelligent college-dropout. It’s been a year. He’s still awesome.
September 16th, 2008 at 11:57 am
Twylite has it right. Good communication skills don’t make you a good programmer, but *lack* of good communication skills almost certainly makes you a bad one.
Communication skills speak to how well you can organize and formulate your thoughts. I have yet to meet a developer that can do this effectively in a programming language and not their native tongue.
September 16th, 2008 at 12:03 pm
“Communication skills are completely and utterly overrated for the position of software developer”
You obviously have never ever seen business people try to communicate with software developers at a startup where positions like CTO are ambiguous at best.
September 16th, 2008 at 12:06 pm
@Lucas,
I don’t really think your point makes much sense in the context of the entire article. Nowhere did I say that communication skills were unimportant (I spent a good deal of the article saying the opposite). I simply said they were overrated… and I was specifically referring to the blog-posts quoted at the top which claimed they might even be MORE important than technical skills.
Start-up companies are special beasts because no one is being hired to do one thing. So job descriptions are far more meaningless than at larger companies. That being said… in my view (as someone who works at a startup) hiring a developer who is a shoddy programmer is substantially more dangerous to a startup than a bad communicator.
September 16th, 2008 at 12:37 pm
I respectfully disagree. If you think communications skills are somehow secondary to technical, you haven’t worked with a bad programmer.
I’m not talking about giving presentations or writing essays here, and I would guess neither are any of the persons you quote. I’m talking about not understanding (or wanting to understand!) what they are hired to do. People that work for months on some personal quest unrelated to the spec. People that make up their own specs and follow that instead without telling anyone. People that don’t read spec, and don’t care. Simply people that doesn’t communicate. They’re more common than you might think.
Whether being able to talk or being able to program is the more important skill is an academic exercise. Without both you are a useless programmer, and that is what the people you quote want to say.
September 16th, 2008 at 12:57 pm
Jonas B. and Twylite have it right. In my career the people I’ve met who I consider to be good programmers, worthy of respect (and I am a programmer as well) are also good communicators. As Jonas points out, communication skills involve listening as well as speaking / writing. If your programmer can’t understand what it is you want him to do, what use is he, no matter how good his “technical” skills might be. And, as Twylite pointed out, if you can’t formulate ideas in a clear and concise manner I don’t see how you could be much of a programmer anyway.
The funny thing is that most of us who disagree with the article seem not to be saying that communication skills are *more important* than technical skills, but that communication skills and technical / programming skills are more or less one and the same.
September 16th, 2008 at 1:15 pm
“The idea that communication skills trump programming skills is a snarky thought-provoking idea that makes for good blog posts.”
Programming *is* communication. Personal attributes are not playing a game of Bridge. The idea that you can be great at the former without the latter is a snarky idea that makes for good linkbait.
September 16th, 2008 at 1:48 pm
So what about the rock star programmer that does not give a damn about what other people think and who views all the others around him as “unworthy” of his communication? I don’t care how good of a programmer he is, such a person is a liability to a group as he hurts overall productivity even if he is a really brilliant coder. If you cannot coordinate with others, your own effectiveness is greatly diminished as multiple people have the possibility of achieving much more than just one person. Groups that do not communicate well do not perform well.
September 16th, 2008 at 2:44 pm
¡Congrats! I really like your style of writing and when I got to the end of this text I thought “hell, this is it? I want more!!” :).
So go on ;).
September 16th, 2008 at 3:25 pm
From my POV communication skills are a prerequisite to most job positions period. Of course depending on the position effective communication will be more or less of a challenge. Programmers sometimes have a tendency of being reclusive, cocky, or resistant to change or opposing ideas (FYI: I am a programmer and guilty of this myself). I think communicating ideas in the software arena is somewhat of a unique situation and more or less correlates with the woe’s of any engineer who has to communicate highly detailed and technical plans and ideas to his/her fellow departments.
Usually communication skills improve as a programmer becomes more experienced in the field and at the company he/she is working for. So depending on the requirements for the position being filled the ability to communicate varies and based upon the initial interview the potential employee’s communication skills are determined upon those first impressions. It is assumed that the individual hired at that point is competent enough to inquire on things he/she does not understand, participate in dialogue amongst team-mates and other departments of the company when necessary etc.. Communication overhead can waste a lot of time and create a lot of overhead in the company.
I still see communication skills as a byproduct of an experienced and competent programmer if you could separate the two I believe bad technical skills could potentially create far worse problems then bad communication skills, and good technical skills could produce far more solutions then good communication skills. To put it into context I’d hire a expert programmer with moderate communication skills over a bad programmer with excellent communication skills any day.
September 16th, 2008 at 3:27 pm
If you don’t have good communication skills then how is the computer going to know what you want it to do?
September 16th, 2008 at 3:34 pm
First off, fully agreed.
“If you can’t describe to me how you are going to implement something, I don’t trust that you can describe it to a computer (which has far less capability to work out what you’re trying to say).”
Trust should be based on the person’s ability to write good code. There is an easy, infallible system for determing the quality of a hacker. Look at their code. If the person writes good code, you have no basis for not “trusting” them.
Which is a more reliable way to determine the quality of a developer? Evaluating the results of the job they’re actually paid to do, or evaluating them on a tangentially related subject?
September 16th, 2008 at 4:32 pm
@louis
“hiring a developer who is a shoddy programmer is substantially more dangerous to a startup than a bad communicator”
This is where your logic falls apart and the straw man show’s its teeth. Neither Jeff nor Steve every suggest to hire shoddy programmers. However if you have the choice between a good programmer with excellent communication skills and a excellent programmer with poor communication skills… in many situations you are better off hiring just the good programmer.
September 16th, 2008 at 4:38 pm
*every = ever
September 16th, 2008 at 5:56 pm
I am of the belief that a programmer (or, well, at least *this* programmer) has two “modes” of operation, so to speak: Programmer-Guy and Developer-Guy.
Programmer-Guy (PG) is your typical heads-down, always-seems-preoccupied, sleep-is-for-the-weak, speaks-in-terse-sentence-fragments coder. This is what we typically think of when we imagine a programmer with poor communication skills.
Developer-Guy (DG) is your typical convention-floor-speaker, blogs-in-his-spare-time, beers-after-work-are-you-in-Danny’s-buying, explains-our-system-architecture-sniff-like-a-poet funny-haha-and-funny-hmmm guy. This is what we usually think of when we imagine a programmer with excellent communication skills.
Here’s the problem: a single programmer can be both PG and DG, but switching from one to the other requires a very lengthy context switch, and it is nigh *impossible* to be both simultaneously without experiencing severe performance degredation or (more frequently) crashes.
We programmers have a finite memory cache, just like the computers for which we write code. Performing the duties of PG is *incredibly* taxing on that cache, and when we’re in the zone, it eventually is entirely filled with head compile stacks, class hierarchy layouts, hazard awareness, and countless namespaces.
At this point — after a solid day’s work — we’re socially useless. After work, I generally need an hour or so before I am myself again. While a beer or two at the pub will help me along in that manner, I’m still noticeably awkward (which, at a pub, is doubly uncomfortable). It takes a slightly larger slice of my attention span to parse a simple conversation or follow along while someone relates a story. The steady stream of truly funny jokes is dry.
It is intensely frustrating!
Suddenly, things begin to click again. You blindside your buddy with an epic “That’s what she said.” You offer an insightful remark when your girlfriend asks you if you’re paying attention.
Transition complete — excellent written and verbal communications systems now online.
With any luck, Danny’s still buying!
September 17th, 2008 at 7:41 am
I read this post yesterday. Then sitting in one of my comp sci courses the lecturer mentioned this exact topic. Talked about two guys who used to write code for government contracts out of their basement. Now a multimillion dollar corporation with 37 employees.
They will not even hire you if your communication skills suck. The lecturer is computer science department chair and has had various jobs coding for defense contractors over the year.
You wanna know how he filters resumes when there is a 100 of them?
Throws out all the ones with mistakes.
Just My Two Cents
zachK
September 17th, 2008 at 9:01 am
@zachK (and others), I’d throw out all the resumes with mistakes in them too. I never said that communication skills don’t matter.
@Lucas,
“However if you have the choice between a good programmer with excellent communication skills and a excellent programmer with poor communication skills… in many situations you are better off hiring just the good programmer.”
Sure. But that comparison isn’t fair. Your perceived disparity in their skillsets is very different.
If, on the other hand, you had a brilliant programmer with good communication skills, versus a good programmer with brilliant communication skills, I would take the brilliant programmer 100 times out of 100. That’s the point here.
September 17th, 2008 at 8:23 pm
I agree with this in principle.
But…
In practice, in most shops the coding comes down to an arms race: whoever cuts the most code to get a shipping product out the door, wins.
This has been *my* personal experience.
Documentation, testing, communication, meetings, all reduce LOCS. Spend your time testing, documenting, meeting and communicating, your ability to understand WTF is going on in the code base will diminish _exponentially_ over time. As each day passes, the programmers not documenting, not testing, not meeting and not communicating start to exert exponentially increasing influence over the code. At the expense of programmers “playing fair.”
This has been *my* personal experience.
September 18th, 2008 at 11:17 am
What the author fails to recognize is that writing code is a form of communication. It communicates to two different objects. One is the next programmer who will maintain the code. Second is the cpu which will execute the code. Also, softwware is written/typed if you will.Therfore, we can logically conclude that POOR WRITING AND COMMUNICATION SKILLS ARE DEFINETLEY AN INDICATION OF POOR PROGRAMMING SKILLS! Instead of trying to make excuses for these shortcomings developers ahould work to improve like I do.
September 18th, 2008 at 7:37 pm
Yes, if you can stretch the term “communication skills” all the way to encompass writing actual code, sure.
I’m fairly certain, however, that when employers write “excellent written and verbal communication skills” as a requirement, they aren’t referring to your ability to communicate in written form with a compiler.
October 29th, 2008 at 5:32 pm
I’m late to the party, but I wanted to emphasize some things that others raised.
First, communication skills are a valid way to view one’s communication with the computer, with code as the language. I know several human languages, and I find that that background helps me learn new programming languages and new language concepts quickly. It’s all about expressing concepts in different ways.
Second, as BobJ said, part of communication in code is to the code’s next maintainer. That can be in the form of algorithms or even something as mundane as accurate variable names and code comments. I have spent weeks at a time deciphering undocumented and/or inaccurately documented code with terrible variable names. At one point, when the next person took over, he said one particular module was an example of some of the best-documented code he’d seen
Finally, when employers ask for excellent communication skills, I think they are simply hoping to get someone who knows how to explain things to them. Sadly, the limitation is often on the receiving end and can’t be addressed by the programmer
November 11th, 2008 at 10:27 am
[...] The Advantages and Disadvantages of Assertive Communication - Effective Communication Skills - A Good Communication Skills Resourcelbrandy.com