Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Jeff Atwood suggests that becoming a great programmer takes serious communication skills. What are the suggested ways for a programmer to develop his communication skills?

share|improve this question

closed as off topic by Mark Trapp Dec 30 '11 at 21:58

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

5  
First figure out what type of communication skills you are trying to grow. Writing? Verbal? Body gestures? Glances across a low lit room? –  Aaron McIver Feb 15 '11 at 16:26
4  
"Glances across a low lit room" .... I love the way your face looks in the glow of your monitor... sounds like a bad programmer oriented romance novel :-) –  Patrick Feb 15 '11 at 16:39
    
@Patrick Exactly...some teams reside in a dark setting; how you convey your glances in that setting could be catastrophic :) –  Aaron McIver Feb 15 '11 at 16:42

11 Answers 11

up vote 23 down vote accepted

read Jeff's blog post. it's a great start.

  1. Another great way to learn better communication (and as a side benefit, learn your programming better), teach someone how to program.

  2. Blog regularly.

  3. Participate in *.stackexchange sites

  4. Go to developer meetups (as a bonus, you can network as well)

  5. Write a paper, present said paper at conference.

  6. Read other blogs and take cues from their communication style and see what works well and what doesn't

share|improve this answer
2  
+1: "read". Excellent advice. –  S.Lott Feb 15 '11 at 16:23
    
Dang it. You wrote was I was writing. +1 for being faster :) –  Adam Crossland Feb 15 '11 at 16:23
1  
@Adam Crossland I knew my fast typing skills would be an advantage someday :-) –  Patrick Feb 15 '11 at 16:25
    
programmers.stackexchange.com/questions/26243/… - Who says typing speed isn't important? –  Michael K Feb 15 '11 at 16:29

How to Win Friends and Influence People has plenty of good ideas though some of these may seem obvious:

Fundamental Techniques in Handling People

  1. Don't criticize, condemn, or complain.
  2. Give honest and sincere appreciation.
  3. Arouse in the other person an eager want.

Six Ways to Make People Like You

  1. Become genuinely interested in other people.
  2. Smile.
  3. Remember that a person's name is, to him or her, the sweetest and most important sound in any language.
  4. Be a good listener. Encourage others to talk about themselves.
  5. Talk in the terms of the other person's interest.
  6. Make the other person feel important and do it sincerely.

Twelve Ways to Win People to Your Way of Thinking

  1. Avoid arguments.
  2. Show respect for the other person's opinions. Never tell someone that he or she is wrong.
  3. If you're wrong, admit it quickly and emphatically.
  4. Begin in a friendly way.
  5. Start with questions to which the other person will answer yes.
  6. Let the other person do the talking.
  7. Let the other person feel the idea is his/hers.
  8. Try honestly to see things from the other person's point of view.
  9. Sympathize with the other person.
  10. Appeal to noble motives.
  11. Dramatize your ideas.
  12. Throw down a challenge; don't talk negatively when a person is absent; talk only about the positive.

Be a Leader: How to Change People Without Giving Offense or Arousing Resentment

  1. Begin with praise and honest appreciation.
  2. Call attention to other people's mistakes indirectly.
  3. Talk about your own mistakes first.
  4. Ask questions instead of directly giving orders.
  5. Let the other person save face.
  6. Praise every improvement.
  7. Give the other person a fine reputation to live up to.
  8. Encourage them by making their faults seem easy to correct.
  9. Make the other person happy about doing what you suggest.

Recognize the breadth to what communication skills can cover as what else is in a relationship besides communication? Each may have an idea of the other though this was probably formed through various communications whether that be listening, watching, touching, smelling or tasting the other person through the various senses. Interpersonal skills, presentation skills, and linguistic skills are all within the realm of communication to my mind.

Mentors could be quite useful here as well as having those that can help identify areas for improvements also known as weaknesses that someone has.


@Steve314, when is an opinion ever wrong? This isn't about facts but rather whatever someone thinks or feels about something that is their right in most countries to own that. My understanding of something may evolve over time but that is my choice and should be respected. Someone may present facts or other opinions to try to persuade me to change but someone disrespecting me will often make me become more adversarial and defensive rather than open and flexible to changing my position.


Another edit: Barry Schwartz on our Loss of Wisdom is a rather interesting TED Talk about how at times it is worthwhile to not follow the rules which is a good point that I've gotten out of the comments of this answer.

@Steve314, the "PI == 3" could well be true if I choose to define PI as a variable in my own code as an integer with value 3. For example if I wrote the following code fragment:

int PI = 3;
if (PI == 3)
  Console.WriteLine("PI does equal 3.");

Do you believe that WriteLine wouldn't be hit? I think it would but hey what do I know. ;)

share|improve this answer
5  
+1 A classic, and a good one too. –  FrustratedWithFormsDesigner Feb 15 '11 at 16:28
3  
+1. Great book. Don't be alienated by the title. It's not about manipulating people, it's about actually being friendly. –  nikie Feb 15 '11 at 16:30
1  
@nikie - all salespeople want you to think they're genuinely friendly, and the most convincing lies are often the ones you believe yourself. I could be wrong, but I got a really strong "this is how to be a salesperson" sense when I read the book. –  Steve314 Feb 15 '11 at 16:53
1  
@Steve314: Bad salespeople want you to think they're friendly. Good salespeople try to understand your point of view and try to solve your problems, instead of their own. That's the heart of this book. –  nikie Feb 15 '11 at 16:59
2  
I have to agree with Steve314 on this one. To me, it seemed like the book-length version of Jean Girandoux's: "The secret of success is sincerity. Once you can fake that you've got it made." –  Jerry Coffin Feb 15 '11 at 17:13

Other posts mention a lot of activities which involve talking (or writing). I would emphasize

listening

In good communication, the role of listening can't be overemphasized. Telling other people about your great ideas, or winning their support is one thing; understanding what your users (or managers, or teammates) want or think is another.

Programming is about solving users' problems using computers. To achieve this, you must first understand what the client's problem is. This is usually a long, arduous, iterative task, as users often don't know themselves what they really want. So you must listen carefully to what they say, ask for clarifications, provide constructive feedback, and repeat what you think you understood so that the client can double check whether or not his original idea went through the channel intact, and that your inner model of the problem domain matches theirs. Then you go away, think about the problems, get more questions, sketch up some design, maybe write some code or put together a quick prototype, which you take back to the client. And she says "hmmm... that's not quite what I had in mind" :-) So you continue the discussion...

Then you start working on the project - again, that requires a lot of listening to your teammates' ideas, your manager's priorities, etc. If you don't listen to others' ideas, chances are the project will suffer. Even a greenear can give constructive feedback to the most experienced developers; we are all humans, we all make mistakes or overlook things, and we all have areas to improve. Without listening to others, you will miss a lot of important feedback which could otherwise help you develop as a programmer and as a human being.

Great programmers are said to be humble; and humility starts with listening.

Even when giving a lecture or presentation, it is important to listen to your audience. Apart from asking questions, simply their body language, gestures and expressions tell a lot about whether they are engaged or bored, focussed or distracted. Being able to react to these signs in time by changing pace, stopping to explain a point deeper or inserting a quick joke can make or break a lecture.

share|improve this answer

One of the (many) organizations that are out there that can help improve communication skills is Toastmasters. I've had relatives use it and have noticed dramatic improvements in their communication skills.

share|improve this answer

I think the best way to learn how to communicate well is just to force yourself to do the things that you find uncomfortable. For years, I sat behind my monitor happily plugging along until one day that was no longer good enough. Talk to people you don't normally talk to, take great care in your written communications. Instead of just firing off a one-liner email, take time to thoughtfully write what you want to say, check your grammar and punctuation. The more you do it, the better you will become. Communicating, in any form, is just like anything else; the more you do it the better you will get at it.

share|improve this answer
1  
While I agree with your comments at a high level...the more you do something "wrong" the better you will also get at doing it "wrong". Sometimes we need guidance and an understanding on what is wrong therefore neednig attention so that we can hone that area. –  Aaron McIver Feb 15 '11 at 18:13
    
@Aaron That's most certainly true, but you will never know if your stuff is not up to snuff unless you put it out there. Sometimes a public backlash is a good way to realize where you need improvement. –  Steven Ellliott Jr Feb 15 '11 at 18:49
    
Nobody is going to critique your writing style in a typical business setting unless you explicitly ask them to; they will just tune you out. –  Aaron McIver Feb 15 '11 at 18:51
    
@Aaron - True, though I usually have no problem telling people that their writing stinks (if they work for me); I guess I am picky like that. I also won't hire someone if I feel that they are poor writers or communicators. –  Steven Ellliott Jr Feb 15 '11 at 18:55

I try to put myself in the position of the person with whom I am (theoretically) communicating, and ask myself whether what I am about to say makes sense in their context. This usually comes up when I am describing some aspect of my work to someone who is not a programmer and is not familiar with the industry in which I work. This makes me think about how much information I need to provide to make sense, without condescending or making the listener feel like he/she is being force-fed from a fire hose.

share|improve this answer

Try to explain technical things to nontechnical people without breaking into sweat. It exercises all the major muscle groups of good communication: to be effective, you need to use humor and metaphor, you'll need to be adept at adopting perspectives radically different than your own, and you'll need to know how to peel away the onion of abstruse and difficult technical concepts to get to a core that is universally human.

share|improve this answer

A few things to try:

1) Give a talk at a users group or conference.

2) Write an article for a Magazine

(Of course you should try both, and do them more than once)

share|improve this answer

"Read a book" is obviously a bad suggestion - but I'll suggest two books anyway.

First "People Skills" by Robert Bolton.

Second "That's Not What I Meant" (I think) by Deborah Tannen. It should be the first "popular" book she published, before the gender differences one.

Tannen is good on cultural variation things - general principles like directness vs. indirectness - where people tend to believe their way is the one true way, and any variation implies some bad personality trait or other. I particularly like her idea of interactions where people start out with a very similar style, but keep exaggerating their styles as a kind of model of better behaviour, until both have plenty of evidence that the other is just insanely over-the-top.

EDIT Bolton is good on things like active listening - asking questions to confirm your understanding etc.

Anyway, getting some alternative interpretations of things is good, but there's no point in that without self-criticism and practice. In particular, when things go wrong, ask yourself why they went wrong and if there's anything you could have reasonably done better.

And try to see the other side, rather than being judgemental. But that doesn't mean "be passive".

share|improve this answer

Want to improve your communication skills? Continue to Ask Questions and Give Answers here

If you don't communicate properly, give the right amount of information, ask/answer the right questions... you will find out. Quick.

share|improve this answer

Identify the mental skills that you're expected to perform during a meeting.

(this answer migrated from the now-closed question How can I improve my communication skills and better participate to discussions?)


Memory

  • Just remember what others said during the meeting - take notes (skill #1), or use a voice recorder if allowed.
  • Need to remember the task assignment of everyone - use a project management tool!
  • Need to remember software specification changes - same! (someone should enter those details into the project management tool, during the meeting, to prevent disagreements and misunderstanding)

Answering questions

  • Answer questions about the tasks you did yesterday - summarize (skill #2) before meeting
  • Answer technical questions of various depth about your component - technical communication (skill #3) and preparation before meeting

Critical thinking

  • Need to make estimates during the meeting
    • If you have difficulty doing this, just let the team leader know - most teams will be able to accomodate.
  • Need to make decisions during the meeting
    • For simple matters, just say whatever you know and then let others decide
    • For difficult matters, ask relevant members for an extended meeting and allow for some preparation time (see "answering questions").
  • Need to raise objections to suboptimal decisions, or decisions that will work against you (e.g. unreasonable estimates or assigning tasks that aren't suitable to you)
    • Non-confrontational negotiation (skill #4). If happening too often, ask to change team (skill #5)
  • Need to explain / defend past decisions
    • Explain: see "Answering technical questions"
    • Defend: don't. Just explain what you know, and accept criticism (skill #6) and make changes as told.

Well-being

  • Escape from inferiority complex during meetings: hangout with your coworkers more, outside work. (skill #7)
share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.