Stack OverflowWhat soft skills make a great programmer?
[+27] [42] geejay
[2009-07-24 13:38:45]
[ career-development fun programmer-skills ]

I want to know what people think are the most important soft skills (e.g patience, tenacity, competitiveness) for programmers.

I’m not really interested in communication skills, but more the skills you use when you’re hunched over the keyboard.

(2) i wonder if this should be a community wiki - geowa4
(5) Make this community wiki and tag it fun, and you will stand a chance of it surviving the day. - community_owned
no community wiki - Stephan Eggermont
(1) I concur - this would be very helpful cw question - warren
how do I make it cw? - geejay
Go into edit. There should be a check box labeled "Community Wiki" - mnuzzo
edit and check box "community wiki" under the main text area - SilentGhost
(1) To all who vote to close: please let us know why this is not programming related? - Robert Munteanu
Usually the 'fun' tag is the kiss of death. SO != fun. - Kelly French
I imagine anyone who voted to close it did so because this is such a generic question. We have a colour wheel downstairs in the communal area that shows how every employee was placed on their psychometric profiling. There are a huge range of people pretty much evenly spaced all over the wheel, and it does not correspond at all to whether the person is a good programmer or not. This question has no specific connection with programming, useful qualities like patience and competetiveness apply to pretty much all jobs. - SLC
Saying "I'm not really interested in communication skills" says it all, really. - JUST MY correct OPINION
[+66] [2009-07-24 13:41:53] Stephan Eggermont

Laziness of course. Less is more.

I've seen and reviewed so much code that should have been much less code.

(3) +1 for laziness. - JimNeath
(6) Haha, don't forget hubris and impatience :) ( ) - Falaina
(2) I liked the couple of pages in Code Complete about laziness (all the way at the end). - Stefan
(1) Agreed. It's a very special kind of laziness though. The kind that will make a person spend all day writing a script so that they don't have to spend all day mechanicially cutting and pasting and modding stuff. - T.E.D.
(1) Nice! Just want to add this --> From the guru: "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris." - LarryWall - Secko
(3) The problem is that "much less" code usually doesn't result from laziness. Usually "much more" code results from laziness. - Nick Bastin
Nick kind of has that right except laziness does tend to motivate one to refactor. Inside of copying and pasting 1000 times, refactoring the code ultimately saves keystrokes for those inclined to laziness - ennuikiller
Yeah, I'd say laziness and a long term view. - Stephan Eggermont
Just gotta be looking for the easy way to do things... as long as you look at the bigger picture of laziness and make things much easier to fix without going through the whole redeployment process. - Hooloovoo
+1 for lazin - Manuel Ferreria
I agree with Nick B. - the term "laziness" is really inaccurate. The principle here is "think more, write less." But thinking is hard work, and lazy developers just "jump into it." - Andrei Taranchenko
[+64] [2009-07-24 13:42:13] Bill the Lizard [ACCEPTED]

Curiosity. You just have to be driven to figure out how things work (or how to make them work) for the sheer pleasure of it.

[+27] [2009-07-24 13:43:51] Supertux
  • Tenacity - for bug-fixing and over-coming technical blocks.
  • Analytical skills - able to break
    down big problems in to component parts.
  • Knowledge sharing - able to grow knowledge in a team and improve those around them
  • Pride in work - shows some interest in refactoring and simplifying code.

Tenacity is such a must when debugging poorly documented projects (as in, most of them) - Manuel Ferreria
[+23] [2009-07-24 13:39:49] Andrew Hare

Patience and critical thinking.

Wow - this got a lot of votes! CW this one... - Andrew Hare
While this may seem like common sense, it can be amazing how uncommon it is. - JB King
(1) What happens if you don't have patience? - Supertux
(8) @Supertux - You either fail, or get promoted to mangement. - Russ
[+15] [2009-07-24 13:43:39] ennuikiller

The ability to pull back from a particularly difficult problem. Most insights to these types of problems occur when you are doing something totally unrelated to the task at hand. If you are getting nowhere after 2-3 hours and feel as if your spinning your wheels, it is absolutely critical for you to be able to leave it aside and go do somethong else

(4) This also applies if you've been spinning your wheels for 2-3 weeks... - kibibu
[+15] [2009-07-24 13:48:39] Adam Batkin

Larry Wall said it best: Laziness, Impatience and Hubris

I know that they are mostly tongue-in-cheek (you wouldn't go into a job interview and say "I think that my best skill is laziness") but deep down, they do lead to self-motivation. You want someone who will figure out what needs to be done and just do it (and WANT to do it), because it will make their own jobs easier, and if it makes their own jobs easier, it will probably make everyone else's jobs easier too.

[+14] [2009-07-24 13:44:02] Davide Vosti

The absolute intrinsic need to learn something new, every time and forever.

Never stop learning.

[+13] [2009-07-24 13:46:36] Dan Seaver

The ability to take criticism from anyone (Seniors, juniors, interns), analyze it and be able to apply it when necessary.

[+11] [2009-07-24 13:44:02] Dan Diplo

I believe conscientiousness is one of the greatest assets to a programmer. It doesn't matter how technically good a programmer you are, if you are sloppy, don't comment code, don't adhere to conventions and don't test your work. Caring about your work is important.

+1: I was looking specifically for this. I'm surprised I had to go this far down the popularity ladder to find what I was looking for. - Beska
[+9] [2009-07-24 13:44:56] Kyle Walsh

Don't Repeat Yourself [1] / Don't re-invent the wheel!


(14) You may want to reinvent the wheel to understand the wheel - Dan Seaver
@phsr Yeah, good point. Maybe I should have stuck with just DRY? Or added the "in a non learning experiment" clarification? +1 either way :) - Kyle Walsh
+1 - as someone who recently spent a long time reinventing the wheel "to understand it", and then used the original wheel the second time around and found it was rounder :) - Stuart Golodetz
[+7] [2009-07-24 13:44:20] Erin

Understanding code rather then rewriting it.

[+7] [2009-07-24 13:47:54] Feanor

The ability to communicate ideas clearly and concisely to other people.

[+6] [2009-07-24 13:45:59] kibibu

Being able to honestly assess how long something is going to take, and honestly assess how you're proceeding so far. This is a skill I fervently wish I had.

And deferring gratification: spending a few minutes searching the project or library for code that already does what you're trying to do rather than jumping in and having fun coding up a new version immediately.

[+4] [2009-07-24 13:42:00] geowa4

Ability to learn quickly and figure things out just as fast.

[+4] [2009-07-24 15:29:20] IlDan

Mathematical aesthetic sensibility. A God's gift that makes wonders.

+1 for the intrigue and yearning of the soul. - Smandoli
[+3] [2009-07-24 13:43:04] littleK

Perfectionism and Curiosity, and thinking "outside the box" (overall picture). And planning.

Too much Perfectionism can be a bad thing. - Kevin Panko
[+3] [2009-07-24 13:44:22] Chris

Clear, logical and objective thinking (even when those around you are losing thier heads), patience, being able to ask the right questions, a dash of empathy, and the ability to avoid procrastinating [too much!].

I'd also say a desire and willingness to learn. You'll be doing it a lot.

[+3] [2009-07-24 14:26:13] MusiGenesis

An unwillingness to let an unsolvable problem stay that way.

That, and making a new pot of coffee when you take the last cup.

(1) ...not necessarily in that order. :) - Bill the Lizard
+1 for coffee in gallons - Michael Durrant
[+3] [2009-07-24 14:18:17] JB King

Problem solving - Given something that doesn't work, figure out why it doesn't work and what possible solutions exist and why any of them may be the best solution to the problem.

(1) +1 The good part about that skill: the solution might require taking a higher-perspective view, and that can keep you from being a small programmer with big problems. - Smandoli
[+3] [2009-08-04 06:58:46] thezachperson31

@Stephan Eggermont:

alt text

[+2] [2009-07-27 20:56:29] Colin

Being able to LISTEN. How many times have I seen a client talking to a programmer, the guy paying attention the first few minutes and then his eyes glaze over, already forming his own ideas in his head.

P.S. I admit I used to do this too, but thankfully the I learned (and am still learning off course) how to do this better now.

[+2] [2009-07-24 13:44:30] jao

Patience and perseverance ("I WILL fix this bug")

[+2] [2009-07-24 13:43:57] David Basarab

Not being able to sleep until you figured out a solution to that day's problem.

(6) Hmmm...not necessarily. Sometimes it's best to sleep on a problem, and return to it refreshed. - Steve Melnikoff
Sure Steve but I feel that the key point here is perseverance and persistence. I'm not the best technical coder but my managers have always said that my patience and persistence win the day. Most of the top coders I know forgo sleep (for a little while) when on the tail of a hot solution. We call it fun ;) Then we sleep and continue ;) - Michael Durrant
[+2] [2010-10-06 03:58:48] Sam

Respect to parent & appreciation - inheritance & encapsulation
Able to reuse current technologies(existing classes & packages) - re usability

[+1] [2010-07-08 21:57:19] user387091

Patience, curiosity, creativity, and McGuyver-tude.

+1 for McGuyver-tude, sky is the limit with a good paperclip. - Matthieu
[+1] [2009-07-24 13:45:26] JimNeath

Motivation, curiosity, logic and laziness.

[+1] [2009-07-24 14:21:37] mere-teresa
  • learning skills : to not repeat same errors again and again
  • high abstraction level : environment doesn't matter, only code matters
  • modelisation skills : be capable to sketch/explain ideas to others

[+1] [2009-07-24 14:27:26] tr3

Patience, and the force of will to rewrite something from the start.

[+1] [2009-07-24 14:32:44] petsagouris

For everyone in any type of profession, to become great it only takes dedication to the subject. Being passionate and obsessive with laughable working hours. Specially for programming, no social exercise is required.

The ability to detect sarcasm. - Kevin Panko
[0] [2009-07-24 14:22:58] Elzo Valugi

Answering questions on Stack Overflow can be considered a soft skill? Giving back to community and helping others.

[0] [2009-07-29 20:09:42] Jeff O

Be compelled to engage in the act of programming

  1. Celebrate when you figure something out
  2. Celebrate more when people use
    your software.
  3. Celebrate even more when they pay you. *and figure out how to stop repeating yourself (I'm a work in progress).

[0] [2009-08-02 05:15:08] Gus Melo

Keep your eye on the ball.

This is more valuable than laziness, impatience, or hubris as I see it. Knowing what you need to accomplish, envisioning what 'done' needs to look like, and not allowing that idea to get buried in inaccessible depths of your brain through inevitable yak shaving.

This is especially poignant when working on code, as you set out to solve one problem and inevitably run into others along the way. Most people get lost somewhere along that road, tunnel vision into some tangential issue, and miss out on possible opportunities to solve the original problem.

I've found this single skill to have the most measurable impact (out of any other hunched-over-your-computer programming soft skills) in someone's ability to get things done efficiently.

[0] [2009-08-04 06:38:19] community_owned

How much time u need to go home from office???? Answer:probably in miniuts or hours... Programmar's answer:From which office to which home....that's ability u have As a programmar.

[0] [2009-08-04 07:01:38] Vince Panuccio

Being able to adapt to coding practices/standards in the workplace when you don't agree with them.

Be willing to learn new development methods and also being able communicate when you think your right :)

[0] [2009-08-06 16:37:19] Darknight

Having the courage to sometimes scrap an entire project and start again (and again if needed)

[0] [2009-08-06 16:40:27] Allensb

Passion. I would say the biggest difference between great programmers and mediocre programmers in my opinion is passion.

[0] [2009-08-06 16:47:10] Eric

I'll take the following any day of the week:

  • The creativity of a mad scientist
  • The greed for knowledge of a Vulcan
  • A Zen Master's lack of ego


[0] [2010-04-29 10:27:37] V S Suryanarayana

Have an orientation of thinking in terms of solving anything on computer (writing a program). When I was first learning programming on my pocket computer (CASIO PB 100) in 1985 my daughter was pressing me "Come on dad. Let's play cards." I took it as a problem and wrote a simple program for playing cards.

[0] [2009-07-24 13:44:10] redsquare

being subjective and argumentative.

[0] [2009-07-27 20:46:42] yelinna

Ability to learn by yourself. This way I learned crystal reports, SQL and .Net. At my work they love that.

[0] [2009-07-27 20:52:16] Robert Munteanu

Discipline is paramount for a good programmer. It's key to be able to make the right decisions sometimes even if it will be harder in the short term, such as:

  • not cutting corners ( meh, who cares about a little class-level state here );
  • not taking the interesting route when it's not the case ( I'll just use a little Hibernate + Spring MVC + DWR to create the simple listing I have to do in 30 minutes).

On a slightly less dramatic note:

Neal Stephenson thinks it's cute to name his labels 'dengo'

[-1] [2009-07-24 13:42:20] Bombe

The ability to ask the correct question in the correct place. Hint: this is not it.

(3) The question is programming related. Don't be such a jerk about what questions you want to allow on the site. - mnuzzo
I don't see how this particular answer is helpful. - NateDSaint