tags:

views:

425

answers:

11

After putting together an assessment form for developers which scores them on things ranging from Analysis to Unit testing, it seems possible that someone could get a mediocre score but still be a great developer. Why? Because they get “stuff” done, and they get it done well. I feel like I can’t quite put my finger on exactly what that elusive magic ingredient is, that which those star developers posses.

I want to identify these attributes so star developers get due credit and other developers can be steered in their direction. I don’t want a list of ingredients which make a good developer – that’s easy. I started with a Great Developer Shopping List but it was too large to be of any use. So concisely, what measurable key ingredients differentiate a “Great” developer from a “Good” developer?

+18  A: 

Sounds like you are looking for the Three Great Virtues of a Programmer

Laziness The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and document what you wrote so you don't have to answer so many questions about it. Hence, the first great virtue of a programmer.

Impatience The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to. Hence, the second great virtue of a programmer.

Hubris Excessive pride, the sort of thing Zeus zaps you for. Also the quality that makes you write (and maintain) programs that other people won't want to say bad things about. Hence, the third great virtue of a programmer.

Reference

I would also add curiosity as something to look for. The greatest minds I have worked with was always up to something new...

epatel
Loved the answer, +1!
MattGWagner
+3  A: 

Honestly, I don't think that that there is a single "magic ingredient" unless you want to consider "gets things done" as a single ingredient. As Joel Spolsky puts it, the kind of people you want to hire are those who are "smart and get things done." I even think that "smart" is really in context and not necessarily a matter of native intelligence. I know plenty of smart people who can't find (program) their way out of a box: they lack common sense. The only real measure of "gets things done" seems to be whether you have gotten things done in the past.

Absent proof of the ability to get things done in a different setting, I'd look for the ability to intuit/understand the fundamental problem in a project (smart), inquisitiveness (smart), a passion for development (gets things done) and the ability to stay on task (gets things done).

tvanfosson
A: 

One who takes the time to properly understand his or her code. I often see code that has obviously been fetched from some kind of article or example, and sloppily modified to solve the problem at hand. It works, but sooner or later side effects pop up, plus it's a bitch to maintain. Of course there's a balance here, reinventing the wheel isn't good practice either.

Blixt
+1  A: 

One aspect that you might want to look at is whether or not they have any personal projects that they have build and released - i.e. finished.

If you want someone that gets stuff done, then why not ask them what they have done?

Doing something, and getting it released in a finished state almost always involves overcoming obstacles that require a curious mind, and a tenacity for learning is definitley a requirement for a good programmer.

Mr. Matt
+1  A: 

I have found that curiosity and passion (for programming) are two key ingredients.

Curiosity because as an engineer/programmer you always need to learn new things both in your domain of competence and in others fields/language. You learn new design techniques, new libraries, new languages. Moreover, when you work on any project, you have to learn new things not akin to programming but to the business domain of the application.

Passion because it made you go on even if there is hard/boring things to do when you are a professionnal programmer, and passion is certainly what makes you go on.

It is curiosity and passion that makes you spend days over nights learning arcane things your non-programmer friends/colleagues can not begin to understand ;-) Curiosity and passion will certainly help you learning your way to good programming.

If you add pride/hubris (in what you code) and the will to solve problems (get things done) then you begin to have something.

neuro
+1  A: 

Actually, that shopping list you linked looks pretty good to me and isn't all that long. But concisely...

  • Someone who is viewed by peers as a technical go-to person for solving problems and designing new things
  • Someone who does not just blindly follow specs, but who uses analysis and asks questions that ultimately improve the spec. Even if you don't use specs, this person can effectively distill requirements from a vague starting point.
  • Someone who writes reusable, self-documenting code
  • Someone who codes outside of the office. If they don't have a personal or OSS project on the side, or aren't actively learning something new, they just aren't a "great" developer, period. If you are evaluating an employee, this would be someone who has an aptitude for applying new technologies to solving problems and displays intellectual curiosity.
  • If building a UI is part of the job, someone who has good natural visual design skills. UI design, usability, etc. can be taught to a degree, but in my experience the best UI developers just have a natural instinct for good design. This person is hard to find, but if the UI is important to you, make this a priority.
  • Someone who can speak and write well in their native (human) language
bmoeskau
+1  A: 

"Keep Calm and Carry On" has worked pretty well for me over the years :)

I'd say
Communication
Not being afraid to ask stupid questions
Never trust your own or others assumptions ( assumptions make an 'ass' out of you and me ) Test,test,test
Honesty
Review your processes constantly and don't be afraid to admit you got it wrong

zebrabox
A: 

Insecurity.

Pliskin
+1  A: 

Self-criticism. To be able to question your own solutions. To continually seek better ways of solving the same (and new) problems. This makes a good programmer.

FeatureCreep
A: 

Could "quality of accomplishments/achievements" be something close to what you are seeking? The accomplishment/achievement part is for getting things done, not necessarily well, but done while the other part is getting things done at a high level of quality which could be measured by support issues or change requests for one idea.

JB King
A: 

"The world is full of fascinating problems waiting to be solved"

Eric Steven Raymond

How to become a hacker

rohit.arondekar