views:

1624

answers:

21

Is there no room in a good company for an average or above average programmer?

It seems that articles around the web are only about hiring the best or great programmers.

An average programmer has sound programming practices and enjoys the job. The individual may not always have the best solutions, get problems done in the most elegant manner, or get them down as fast, however, this individual may excel in other others (communication, planning, research, etc) and still gets the task completed through hard work.

Some things to consider:

  • I believe there is room for these programmers. Especially when you are trying to build a team that will be able to work well with each other. My best example of this theory is Hijacked Love Boat.
  • The definitions of best and great are relative.
  • The possibility of growth. Some individuals may be at their peak but others may be further behind with much higher potential peak.

EDIT
Here is a different twist on the question.

Would you knowingly hire a lesser programmer (compared to other candidates for hire) if you thought that he could contribute to your team in other ways?

+20  A: 

I don't think you've described an average programmer:

An average programmer has sound programming practices and enjoys the job. The individual may not always have the best solutions...however, this individual may excel in other areas (communication, planning, research, etc) and still gets the task completed through hard work.

That's a good programmer. I tend to find that the technology is the easy part when compared with working with customers, coworkers, etc.

I've found that although geek-factor might drive someone to be a fantastic coder from day 1, coding skills are easier to teach than the other skills a good programmer needs to be successful.

Michael Haren
+2  A: 

Everything is relative. An average for one company can be great for the other. So every company defines the best for itself and tries to hire the best possible programmer.

grigy
I like your comment. I believe the "best" is not the "best" for every company. Every team is different and needs different people.
metanaito
+14  A: 

I think there's a very simple answer to this question, and it's similar to the line Garrison Keillor says about Lake Wobegon: "where all the children are above average".

The point is, everyone wants to think their own children are above average; just like everyone wants to think that THEY are above average. By the nature of 'average', though, not everyone can be.

However... you don't want to hire someone who only thinks they're average... because of the "self-inflation" effect, someone who says they're an "average" programmer probably believes that they're actually BELOW average, and are inflating their value. So in general, it makes sense to only want to hire the "best and brightest", because, in the words of a former boss, "why would we want someone who only thinks they're average?"

McWafflestix
You've obviously seen the research on "The Lake Wobegon Effect". Great stuff.
le dorfier
I thought the question was referring to employment opportunities in the industry, not the definition of "average."
Jim Anderson
Reminds me of the Seinfeld bit about having the "worst" doctor. After all, someone had to graduate last in their class from medical school.
Jon B
I've heard an anecdotal statistic that 90% of drivers consider themselves to be above-average drivers. I know that **I'm** an excellent driver - all the people I hit say so
Michael Burr
@Mike B : The trouble is, if 90% of drivers are 10 out of 10, and 10% are 0 out of 10, the average (mean) driver is a 9 out of 10... so 90% of drivers, in this contrived example, ARE above average! ;-)
Peter K.
@Peter: I have a feeling that the distribution of driving skills is much closer to normal. In a sample like yours, using the median would be more appropriate than using the mean. But I digress...
Michael Burr
I don't think this is true. Sometimes a bit of humility can be a good thing in a programmer. Better to hire someone who appreciates that they have much to learn, than someone who only thinks they know it all.
trilobite
@trilobite This view can be skewed based on the skill level of your peers. If they're all mediocre, you'll be more inclined to think you're awesome, which might be way off base. Maybe you're just average and they're crap. Conversely if your peers are all shit hot [I always try and surround myself these types], you'll be more inclined to think you're average or below. What makes you think they're crap or shit hot? You're rating them based on your own perceived skill level - perhaps they're only average and I suck. It's all about perception.
BenAlabaster
+11  A: 

Joel Spolsky addressed this phenomenon a while back:

Everyone thinks they're hiring the top 1%

Michael Burr
That is interesting and rather amumsing. I've noticed in interviews all employers say they only hire the best (top 1%). What are they expecting candidates to say, "oh, we can stop right there, I was look for a company that hires mediocre people..."?
Jim Anderson
I wouldn't be surprised it if *is* a variation of that: They're hoping mediocre people will feel intimidated and pull *themselves* out of the running. However, since most people who aren't that skilled probably aren't even aware of it, I wonder whether this really works
Kyralessa
I think that there's also quite a bit of the psychology that McWafflestix talks about: each person or organization believes themselves to be above average.
Michael Burr
@Jim: I think I'm gonna try and work that into my next interview, that'll stun the interviewer... "Really? That's too bad, I was hoping to work for a company that only hires mediocre people" hehe...
BenAlabaster
So how come they don't pay in the top 1%
Kurt
+4  A: 

It all depends on the individual definition of "average" vs. "good."

I refer you to the "Smart and Gets Things Done" commentary by Joel Spolsky, and the follow-on post from Steve Yegge, "Done, and Gets Things Smart."

Robert S.
keep in mind that the brilliant engineers described in those posts don't grow on trees.
Dustin Getz
Brilliant engineers are grown, not born.
Robert S.
+1  A: 

I'm not sure why you say Joel Spolsky's article is your "best example" because he goes on to say:

You’re going to see three types of people in your interviews. At one end of the scale, there are the unwashed masses, lacking even the most basic skills for this job. They are easy to ferret out and eliminate, often just by asking two or three quick questions. At the other extreme you’ve got your brilliant superstars who write lisp compilers for fun, in a weekend, in Assembler for the Nintendo DS. And in the middle, you have a large number of “maybes” who seem like they might just be able to contribute something. The trick is telling the difference between the superstars and the maybes, because the secret is that you don’t want to hire any of the maybes. Ever.

So he's arguing (and I would agree) that you want the stars. The difference they can bring is worth the time it takes to find them and the expense of employing them.

Paul
sorry, I was primarily referencing the boat scenario not the entire article
Berek Bryan
I don't know if the 'stars' are always the best hires though. I think the 'maybe' is sometimes more productive in a team environment than a difficult 'star'.
Jim Anderson
Joel's point is to move on and find a non-difficult star.
Paul
Depends on how star the star is... if he's obnoxious but will get done in a week the equivalent of three months of work of the rest of the team.
Vinko Vrsalovic
I guess he's talking about Scheme rather than Common Lisp.
Pete Kirkham
+5  A: 

Some roles are best served by less-than-stellar developers. I think especially of those that deal with users. Sometimes they do the best job of gathering requirements, or building or running testing procedures. Or builds. I also think often (but not always) there's an inverse relationship between coding wizardry and the ability to finish a job.

le dorfier
+4  A: 

I'd rather have an average programmer who works well with others than a genius programmer who can't work with others. When I used to help to screen programmers I'd look for those that liked what they did and was a good fit for the company and team. I'd look at skill as secondary since what we were doing was not rocket science (though it was fun and interesting).

I'm sure others would like the other way around.

Without "average" or "poor" programmers there are no "great" programmers.

metanaito
a 'great programmer' by most definitions works well with others.
Dustin Getz
see Code Complete quote here: http://dustingetz.wikidot.com/blog:great-programmers
Dustin Getz
A: 

I think it depends where you are located and how well your skill set matches up with employers in your area. This is certainly a tough market, but some hiring is still occurrinig and I think there will always be need for good programmers regardless of the state of the economy.

Jim Anderson
+1  A: 

small projects (startups and small companies) need brilliant seed engineers to maximize profit.

large companies doing large projects need lots and lots of people to implement the solutions that the brilliant engineers already solved. the best aren't interested in work like this, and even if there were, there aren't enough brilliant engineers in the world to get all the work done.

government contracts come to mind. it takes a year to solve a satellite, and then it takes a few billion dollars of code-to-spec-labor to code it up.

Dustin Getz
+1  A: 

What kind of company would not try to hire the best?

"We at crapware corp, we hire only the mediocre! Come apply now!"

Eric
+1: "articles around the web are only about hiring the best or great programmers" versus what? Versus hiring mouth-breathers, the feeble, addled or daft? What else can you say except hire the best -- without defining "best".
S.Lott
What kind of company would not try to hire the best? Almost every company I've worked with. At least half dozen of them. They want cheap. If you are still in college, the better.
Sergio Acosta
@Sergio Acosta: what companies do has nothing to do with what the articles say. The articles are largely worthless because they say "best" without definition and without much advice on what to do when the best have other jobs.
S.Lott
I worked for a small telephone sweat shop for a while, the oldest programmer had 5 years of self taught javascript and that's it. Yet the "CEO" told me in interview that they wanted to hire only the best candidate. Heck, that's what interviews are for!
Eric
+3  A: 
  1. In a world where many employers ask "FizzBuzz" type questions to screen out a large majority(!) of applicants, reasonable competency is not really "average".

  2. Eveyone wants to thing they're brilliant. Everyone working for them is Einstein, and they're revolutionizing the world. The trick is assessing what they think is "brilliant". Generally it'll be limited to their level of comprehension/awareness. There's at least a little bit of ego in the "we only hire the most brilliant". Please.

I've always found that the thing to aspire to is to work with people who are smarter than you are. Of course, there's an obvious problem with that plan.

Steve B.
+3  A: 

Even taking into account that an "average" programmer may end up not being very good (see the other answers about everybody thinking they're "above average"), I think there are things that such a programmer can be useful for--particularly things that give them the opportunity to train up and improve their programming skills. Just make sure that what you're getting really is an "average" programmer in the sense of not being a rockstar and not in the sense of being incompetent.

The biggest one that comes to mind is debugging support. On a large project, there can be a lot of middle-ground between the QA testers who aren't programmers on the one hand, and the "top 1%" programmers on the other. Somebody with enough technical skill to simply read through a callstack and diagnose issues in a technical fashion can do a lot of good, especially provided that they are level-headed and don't see zebras where there are only horses. Sometimes a project has an abundance of easy bugs to fix and it's more efficient to let the top-tier developers worry about the really tricky ones.

Projects often have tedious, time-consuming elements to them that require programmer training but not top-tier technical talent to implement. Perhaps your project needs a simple but rather large UI, and your top people are already too busy working on the back-end functionality. Perhaps your team is large enough to need a dedicated person to manage build stability--somebody whose job is primarily to diagnose build breaks, track down the guilty parties, and goad them into either reverting their changes or submitting a fix in short order. Perhaps your project needs somebody half-way between a desktop support guy and a programmer.

For roles like these, I could see a company choosing to intentionally hire a mediocre programmer who doesn't have an oversized ego. It's often the case that such roles can be filled cheaply by hiring somebody average, not to mention the fact that top 1% programmers appreciate having the support of others who aren't shy about tackling tedious problems. You could argue that it's better just to always hire top people and sort out the top 1% from the rest on-the-job, but I would argue that doing so is an invitation to workplace drama.

Having said all that, I just want to re-emphasize my support for the other answers. As Steve B. put it, in a world where the FizzBuzz test screens out the majority, you have to be careful as to what you consider "average." Even if your company staffs hundreds of programmers, your very worst employee should find FizzBuzz to be laughably easy. I wouldn't hire a test engineer who couldn't explain to me in their own words what a breakpoint or a callstack is, and I wouldn't hire a build stability manager who can't both read code (often harder than writing it!) and understand compiler output.

Parappa
+2  A: 

The paper "Unskilled & unaware of it" shows that the low-end programmers actually think they are higher-end. So it's really hard for anyone hiring to take anything that a candidate says at face value. Depending on which test you're looking at, the paper says that the "average" (well, third quartile) seem to have the most accurate assessment of their abilities.

However, the only way to ascertain those abilities is to test!

Peter K.
+3  A: 

I've worked with a lot of programmers of lesser skill that have been quite diligent and worked really hard. They provide a great service - not all programming projects require the top 1%. Those that don't are great for lesser programmers. Not only that, but they're usually paid less, which provides better value for the customer.

Bad and lazy is another story . . .

Travis
A: 

I don't know exactly what is average is. We doing long and hard exams to find the best we can, do we find best ? i don't know, but i do know, that i have a team of programmer where every person can do any type of task in our range of tasks. And i don't want to compromise on this. I don't want to keep engineers for "boring task" only. Even in tough times where was a lot of hiring around i always preferred to stay understaffed on being fully stuffed with not good enough programmers. From my experience those programmers not only produce less work, they sometimes creates negative performance by sucking resources of capable programmers for helping them.
Bottom line it's hard to know what is the best but if you do know try to get best.
Side note best is not necessary one with 10 years of experience it's might be complete newbie that capable to learn and have passion for programming (they sometimes much better than one with 10 years)

Ilya
+1  A: 

There are only so many rockstars out there. Companies are going to have to hire average people if for no other reason than to ship a product.

Jason Baker
+1  A: 

I believe an average programmer is simply someone who comes in 9-5 and does not do too much programming outside of work. This person gets a new task that could take them awhile to figure out if they have never encountered something like it before. The design is not the best but it gets the job done with some maintainability in mind.

I believe like a previous comment that these people normally work at bigger companies and work there for a long time. I am guessing these are generally companies where software is not there business, but IT is really a support and not revenue driving.

I don't see anything wrong with this, all a matter of choice. If you have the drive and want to put in the effort you can become at least a good programmer.

Josh Harris
A: 

If there was some kind of test you could give every programmer, and then rate all the programmers, all the programmers you could find out who the "average" programmers. If we defined a programmer as anybody who spent more than 50% of their work time coding, or designing software, then, based on my observations from working in the industry, here's what we would get. "Average", those who scored in the range where 50% did better, and 50% did worse would still be terrible programmers. These are not the kind of people you want to work with on a software project. Only when you get to about the 70th or 80th percentile do you actually get people who you want to work with. That being said, there is lots of room for really bad programmers. Companies hire them all the time. Companies like to believe they hire good programmers, or tell people they hire good programmers (to get good programmers to work for them), but in reality, there are very few good programmers,

Kibbee
+9  A: 

Man, I could write forever on this subject... I'll try and keep it short as I can:

I like to think I'm bright, we all do. Am I above average? My I.Q. test says so, but what does that mean in real terms? I don't have the first clue how to figure out what's wrong with my car - is my mechanic brighter than me? If I were to get into legal trouble, I sure wouldn't represent myself in court, but does that make my lawyer brighter? No, but their areas of expertise are different. Could either of them sit down in front of a computer and make it do anywhere near what I can? It's doubtful. But that doesn't necessarily make me smarter than them either.

So what's my point? What makes a programmer a "rockstar" as someone else put it? They know the API of their entire language inside out and can code it blindfolded with one hand tied behind their back. Are there such programmers, I imagine there are some, but I doubt there are very many.

(Scenario) You've come across such a rockstar and you're thinking about snapping them up for your team. Their overall attitude has a few awkward edges, they're somewhat arrogant and make a fleeting comment on "lesser" programmers in the interview. They get 100% on your interview exam in record time and in ways you'd never dreamed you'd see it done in 20% less code than you've ever seen before. Their references are excellent, but all their experience has been in an academic environment, all their projects have been in scientific sanitized environments and they've never had to deal with end users, think on their feet or code to extreme scenarios caused by unconceived idiocy by some computer illiterate end users. It's not hard to see that this rockstar programmer could quickly fall to pieces on your team. So are they really the rockstar they seem on paper?

Most of us are average in many areas and we excel beyond comprehension in others. So this measure is extremely subjective. I excel at writing data management applications to be used in intranet environments where users are unlikely to be extremely (or even partially) computer literate, but if you wanted me to write a computer game that hosted complex artificial intelligence and graphics, I wouldn't have the first clue where to start beyond my good friend Google...I'm sure I'd eventually figure it out but not before being booted out on my behind for incompetence. However, a friend of mine that's never professionally programmed in his life can run circles around me when it comes to that stuff - and I've been programming professionally for 12 years.

Do I consider myself a rockstar? Of course I brag to my colleagues and future employers that I'm a rockstar and I complain to my wife about all the idiotic things I come across in a day, we all do. Inside though, I know there's always more to learn and while I might consider myself a rockstar in my niche, if someone decided they needed that game written, I'd consider myself beyond incompetent.

It's not what knowledge we have, but how we attain more knowledge and how we apply that knowledge that makes us stand out in the crowd.

BenAlabaster
A: 

I think the problem isn't about there being room for them as much as the candidate's view of themselves. I have had candidates that were very obviously mid-level and junior-level candidates that balk at anything that is not a senior-level position.

I do not think a shop full of senior-level people is the only way to go, and in fact, we are split evenly with senior-level and mid-level developers.

joseph.ferris