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.

There has been a lot of discussion around the excellent question "Will high reputation in Stack Overflow help to get a good job?". I immediately agreed with JoshK that basically said "No" (I'll will explain why), but Joel chimed in with lot of convincing facts which made me upvote him as well.

My question is what other skills (other than being a technical genius) do you require from a developer? To get the job, or to keep it.

I believe being a genius is far from being enough. I have met many technical geniuses in various companies I have worked for that impressed me a lot, but sadly in lot of cases, they were simply fired after a few months or put in ivory towers (mainly because of internal mutiny from other developers). I've seen many in personal distress as a result of this which I understand.

That's why I'm a big fan of non-technical questions for technical positions. I like to know how the candidate will interact with others (including non-technical employees), how much consideration he will have for the business, if he will work for the desired outcome, and so on.

I would like to know what you require from your developers and WHY it's important (after all, you hire someone to write code, don't you? Why would you want him to be assertive?). Ideally, I'd like you to come up with an example question you would ask during interviews in support of your answer.

share|improve this question

closed as not constructive by Yannis Rizos Mar 7 '12 at 9:09

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

    
My company is loaded with ivory towers with ivory salaries for their residents :( –  dr Hannibal Lecter Nov 22 '10 at 13:49
    
The view is nice from the top of the ivory tower :) –  user1249 Nov 22 '10 at 15:42
add comment

9 Answers

up vote 19 down vote accepted

Excellent communication skills.

If your colleagues cannot read your brain directly, you will need to be able to tell them what you think. Preferrably both verbally and written.


EDIT: A way to see them at interview time may be by asking them what their favorite framework for doing X is, and then say that they need to work on a project where X could be used, but it is a political decision to use technology Y (which is clearly older and has some limitations that X solves).

If this ends up in an argument about why the political decision is wrong, you have a strong indication of this person not doing well with pragmatic decisions.

share|improve this answer
    
Will you add more details on how to communicate with non technical guys (such as management or customers) about highly technical things? I'm currently reading an excellent book on the subject called "Even a Geek Can Speak". –  user2567 Nov 22 '10 at 12:41
    
Well, it is essentially just a question if you can think in THEIR mindset. I once found that explaining software development as "we write knitting recipes" fits well with the mindsets of grandmothers. –  user1249 Nov 22 '10 at 13:24
3  
I always have a preference for candidates who have an excellent command of English and a willingness to take the extra time to work on their written and oral communication skills. On the other hand, if he or she talks or writes as if life is just another application deployed on top of Twitter, I'll just do my best to be polite as I show them the door. –  Adam Crossland Nov 22 '10 at 15:27
    
@Pierre, is this book available online? I could not locate it on Safari. –  user1249 Nov 22 '10 at 15:57
1  
@Pierre303 you might find "The Nerd Handbook" interesting. randsinrepose.com/archives/2007/11/11/the_nerd_handbook.html. The author has a very interesting blog. –  user1249 Mar 6 '12 at 15:04
show 3 more comments

Team work / communication :

  • to be able to explain your solutions or your problems
  • to be able to work with other people without making them feel bad (in any way) - to make them feel working with you is pleasant

Without those skills, you can't work in team, and if you can't, you'll not be able to get in a company that require that (and almost all of them require teamwork, naturally). You could still be freelance and work on projects that don't have other people to work on, but you still have to communicate with people from other companies.

Even for learning, if you can't communicate with a lot of different people, like on the web, then you might not be able to do better in real life and in society (whatever the job) it's an handicap.

edit> In interview, team-work/socialization/communication is really easy to check, it might be the easiest thing. You just have to ask some questions, not technical, questions easy to answer or simply questions about what the candidate think about something or what the candidate like or dislike in a domain or another. Make him talk. You'll see.

share|improve this answer
add comment

Persistance is a skill that I don't see mentioned very much. And it is a skill - the ability to make yourself work through a problem, even if you can't see the end. Many people don't do this; they work on momentum only, or just do the minimum to get by. Unfortunatly, there's no way to tell whether a person has this trait by talking to them. You really need to be able to talk to others that have worked with the person. References can do this, but that option is not always available.

share|improve this answer
    
+1 for the persistence comment - I wonder if a high SO rep would correlate with persistence? –  Gary Rowe Nov 22 '10 at 13:56
    
@Gary - I suppose it could, if it was earned by answers to questions that required some work to solve, not newbie questions that are missing a semicolon or something. ;) –  Michael K Nov 22 '10 at 13:59
add comment

These are more traits than skills, but I'd likely suggest these are still worth finding in someone to be a successful developer:

Versatility would be another trait I'd put on there. Sometimes a developer may have to fill roles outside of pure development,e.g. business analyst, architect, or tester. I know I've had various parts on projects where I'm doing something other than designing or writing code and this should be something to see in another. Not everyone can accept taking on those other roles. Ask what kinds of situations has the developer had in the past where they had to fill another role and how that turned out.

Humility would be another that I'd likely put as a requirement. Ego can cause lots of trouble in some places and not everyone can accept that there may be someone better at something than they are. If someone else has a better idea, let that be what gets done. You might have a sample of the developer's code that you ask them to critique and see how well can they correct themselves or not.

Pride would be another to put down there. This is somewhat in contrast to the previous quality, but if someone doesn't have a sense of pride in their work what kind of quality do you think it is? Not being satisfied is slightly different here as probably a lot of developers can be perfectionistic. Ask of what past project do they feel most proud?

Self-motivation would also be an important skill to see. What drives them? How well can they articulate this? "Office Space" has this line from Peter Gibbons:

Eight, Bob. So that means that when I make a mistake, I have eight different people coming by to tell me about it. That's my only real motivation is not to be hassled, that and the fear of losing my job. But you know, Bob, that will only make someone work just hard enough not to get fired.

That is something to which I suspect many developers and non-developers can relate. Why are you doing the job you do? This can be a good question but do look for the sincerity and authenticity in the response as sometimes canned answers can occur that one has to spot.

Curiosity would be last on my list to add. The desire to see how something works, to learn new technologies and step outside one's comfort zone, are other markers for this that can be found in successful developers. A short story on how one gets into development may be a way to see this trait though another is to ask them about something they haven't seen and see if they have a, "Well that could be interesting to explore," or a "Oh brother, not that again," type of look.

share|improve this answer
    
Thanks a million, while there are already some brillant answers, yours was the one I was looking for. I hope more people will come here with more skills we can develop to be a better programmer. (I can't upvote anymore for today, sorry) –  user2567 Nov 22 '10 at 18:50
add comment

1) Communication is probably the most important skill for anyone, including software engineering types to have. Those communication skills are equally important for dealing with managers and clients as they are for dealing with coworkers.

2) Teamwork is a slightly different skill that depends heavily on the first. Essentially, I need to determine if the person I'm trying to hire will benefit the team as a whole, or will there be some personality conflicts that I'm potentially hiring. No one can predict the future, but you can't ignore warning signs in the interview either.

One tactic that I use in the interview process is to ask the person to describe one of the more challenging technical problems (that they can talk about) and how they solved them. As they talk through their reasoning process and how they uncovered the problem you can get a better idea about how well they can communicate about potentially complicated things. If they seek some additional help in the process, I see that as a plus. None of us are perfect technologists. If the problem they chose ended up being a personality clash (which has only happened once), you can either pass or probe a bit deeper.

In many ways the interview process is like going on a blind date. Both people are putting on their best face, trying to figure out if they want to spend any more time with the other party. The more you can get the interview to flow like a conversation, the more relaxed the interviewee will be; and consequently the better you'll see if they are a good fit.

share|improve this answer
add comment

Although it is a quality that may be more applicable to team than to individual developers, I think that there is a lot behind the saying, "Great engineers ship."

It's something that would be hard to demonstrate in an interview for most folks, but if I was interviewing a candidate who, for example, had authored and shipped a substantial open-source application, library or framework and could talk eloquently about the extra something that it takes to actually finish a non-trivial project, I would have to give that person a leg up over his or her competition.

Contrariwise, if a potential candidate pointed me towards his Github account and I saw that it was full of half-completed, buggy, neglected or poorly-documented projects, I would have a good reason to disregard his candidacy.

"Coffee is for closers," as a man said in a movie once.

share|improve this answer
add comment

Communication and teamwork skills are important, but I would add that being able to understand the customer's requirements and acquire business domain knowledge have also been very important in my experience.

share|improve this answer
add comment

I agree that communications is paramount, but I have experienced a failure in an excellent coder who wouldn't show other engineers the use of his processes. I was able to duplicate his processes and show them to others but without his help. He got fired because he wouldn't teach.

share|improve this answer
add comment

Its never enough.

Common Sense. Problem Solving. Interest in technology as a whole. Attitude of doing things the right way. Persistence. Team play/Communication.

Rate each skill on 1-5. If you got min 3 and on an average 20+. You will have a good life as a developer. 25+ will be successful developer. Less than 10 and you need to seriously think about a career in software development.

share|improve this answer
add comment