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.
Laziness of course. Less is more.
I've seen and reviewed so much code that should have been much less code.
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.
Patience and critical thinking.
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
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.
The absolute intrinsic need to learn something new, every time and forever.
Never stop learning.
The ability to take criticism from anyone (Seniors, juniors, interns), analyze it and be able to apply it when necessary.
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.
Don't Repeat Yourself [1] / Don't re-invent the wheel!
[1] http://en.wikipedia.org/wiki/Don%27t%5Frepeat%5FyourselfUnderstanding code rather then rewriting it.
The ability to communicate ideas clearly and concisely to other people.
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.
Ability to learn quickly and figure things out just as fast.
Mathematical aesthetic sensibility. A God's gift that makes wonders.
Perfectionism and Curiosity, and thinking "outside the box" (overall picture). And planning.
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.
An unwillingness to let an unsolvable problem stay that way.
That, and making a new pot of coffee when you take the last cup.
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.
@Stephan Eggermont:
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.
Patience and perseverance ("I WILL fix this bug")
Not being able to sleep until you figured out a solution to that day's problem.
Respect to parent & appreciation - inheritance & encapsulation
Able to reuse current technologies(existing classes & packages) - re usability
Patience, curiosity, creativity, and McGuyver-tude.
Motivation, curiosity, logic and laziness.
Patience, and the force of will to rewrite something from the start.
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.
Answering questions on Stack Overflow can be considered a soft skill? Giving back to community and helping others.
Be compelled to engage in the act of programming
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.
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.
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 :)
Having the courage to sometimes scrap an entire project and start again (and again if needed)
Passion. I would say the biggest difference between great programmers and mediocre programmers in my opinion is passion.
I'll take the following any day of the week:
:)
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.
being subjective and argumentative.
Ability to learn by yourself. This way I learned crystal reports, SQL and .Net. At my work they love that.
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:
On a slightly less dramatic note:
The ability to ask the correct question in the correct place. Hint: this is not it.