views:

2250

answers:

42

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.

+23  A: 

Patience and critical thinking.

Andrew Hare
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
What happens if you don't have patience?
Supertux
@Supertux - You either fail, or get promoted to mangement.
Russ
+58  A: 

Laziness of course. Less is more.

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

Stephan Eggermont
+1 for laziness.
JimNeath
Haha, don't forget hubris and impatience :) ( http://www.c2.com/cgi/wiki?LazinessImpatienceHubris )
Falaina
I liked the couple of pages in Code Complete about laziness (all the way at the end).
Stefan
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.
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
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
+4  A: 

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

geowa4
+57  A: 

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.

Bill the Lizard
A: 

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

Bombe
The question is programming related. Don't be such a jerk about what questions you want to allow on the site.
indyK1ng
I don't see how this particular answer is helpful.
NateDSaint
+3  A: 

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

behrk2
Too much Perfectionism can be a bad thing.
Kevin Panko
+14  A: 

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

ennuikiller
This also applies if you've been spinning your wheels for 2-3 weeks...
kibibu
+27  A: 
  • 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.
Supertux
Tenacity is such a must when debugging poorly documented projects (as in, most of them)
Manuel Ferreria
+1  A: 

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

David Basarab
Hmmm...not necessarily. Sometimes it's best to sleep on a problem, and return to it refreshed.
Steve Melnikoff
+13  A: 

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

Never stop learning.

Davide Vosti
+10  A: 

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.

Dan Diplo
+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
A: 

being subjective and argumentative.

redsquare
+5  A: 

Understanding code rather then rewriting it.

Erin
+3  A: 

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.

Chris
+1  A: 

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

jao
+8  A: 

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

Kyle Walsh
You may want to reinvent the wheel to understand the wheel
phsr
@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  A: 

Motivation, curiosity, logic and laziness.

JimNeath
+5  A: 

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.

kibibu
+12  A: 

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

phsr
+5  A: 

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

Feanor
+15  A: 

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.

Adam Batkin
+3  A: 

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.

JB King
+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
+1  A: 
  • 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
mere-teresa
A: 

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

Elzo Valugi
+2  A: 

An unwillingness to let an unsolvable problem stay that way.

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

MusiGenesis
...not necessarily in that order. :)
Bill the Lizard
+1  A: 

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

tr3
+1  A: 

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.

petsagouris
The ability to detect sarcasm.
Kevin Panko
+3  A: 

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

IlDan
+1 for the intrigue and yearning of the soul.
Smandoli
A: 

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

yelinna
A: 
Robert Munteanu
+1  A: 

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.

Colin
A: 

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).
Jeff O
A: 

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.

Gus Melo
A: 

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.

+3  A: 
thezachperson31
A: 

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 :)

Sir Psycho
A: 

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

Darknight
A: 

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

Allensb
A: 

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

:)

Eric
A: 

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.

V S Suryanarayana
A: 

Patience, curiosity, creativity, and McGuyver-tude.

+2  A: 

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

Sam