Skip to main content

Ralsina.Me — Roberto Alsina's website

Finding a programmer that can program.

If you haven't read Jeff At­wood's Why Can't Pro­gram­mer­s.. Pro­gram? go ahead, then come back.

Now, are you scared enough? Don't be, the prob­lem there is with the hir­ing process.

Yes, there are lots of peo­ple who show up for pro­gram­ming po­si­tions and can't pro­gram. That's not un­usu­al!

It's re­lat­ed to some­thing I read by Joel Spol­sky (a­maz­ing­ly, Jeff At­wood's part­ner in stack­over­flow.­com).

Sup­pose you are a com­pa­ny that tries to hire in the top 1% of pro­gram­mer­s, and have an open po­si­tion.

You get 100 ap­pli­cants. Of those, 99 can't pro­gram. 1 can. You hire him.

Then the com­pa­ny next door needs to do the same thing. They may get 100 ap­pli­can­t. 99 can't pro­gram ... and prob­a­bly 80 of them are the same the pre­vi­ous com­pa­ny re­ject­ed be­fore!

So no, hir­ing the best 1 out of 100 is not a way to get a pro­gram­mer in the top 1% at al­l, that's just sta­tis­tics in­tu­ition get­ting the worse of you.

You don't want to hire in the top 1% of ap­pli­cants, you want to hire in the top 1% of pro­gram­mers. Dif­fer­ent uni­vers­es.

These two things are the two sides of the same coin. 99% of ap­pli­cants are use­less, that's why they are ap­pli­cants, be­cause they can't get a job and they can't get a job be­cause they are use­less as pro­gram­mers.

So, judg­ing pro­gram­mers by the stan­dard of the ap­pli­cants you get is like judg­ing qual­i­ty of a restau­rant by lick­ing its dump­ster.

But now, hav­ing tak­en care of this, how do you find a pro­gram­mer that can ac­tu­al­ly pro­gram?

Easy! Find one that has pro­grams he can show you!

I would nev­er hire a pro­gram­mer that can't show me code. There must be some­thing wrong with him, be­cause pro­gram­mers write pro­grams.

That's just what we do. If we did­n't what kind of pro­gram­mers would we be?

Let's see some ob­vi­ous ob­jec­tions to my ar­gu­men­t:

  1. He wrote code for his pre­vi­ous em­­ploy­er and can't show it.

    So, he did. What else has he writ­ten? Some open source code? Maybe snip­pets in a blog? An­swers in stack­­over­flow?

    Noth­ing? He has writ­ten noth­ing he was not paid to write? He is not who I wan­t. He on­­ly pro­­grams for mon­ey, he lacks pas­­sion for pro­­gram­ming, he does­n't en­joy it. He is prob­a­bly not very good at it.

  2. He is just fin­ish­ing col­lege, he has not writ­ten much code yet!

    Why? What stopped him? He has been learn­ing to pro­­gram for years, what has he done with the knowl­­edge he has been re­­ceiv­ing? Sav­ing it for his 25th brth­­day par­­ty? He has not prac­ticed his craft? Not the pro­­gram­mer I need.

But hav­ing him show you code is not enough, of course. It al­so has to be good code, if you are se­ri­ous about hir­ing ex­cel­lent pro­gram­mer­s.

So here's some bonus cri­te­ri­a:

  1. Check the lan­guages he us­es. If he codes COBOL for plea­­sure, he may or may not be what you wan­t.

  2. Open source == bonus points: it means he is not ashamed of his code, plus it makes his cre­­den­­tials triv­ial to ver­i­­fy.

  3. If he leads a project with mul­ti­­ple con­trib­u­­tors and does a good job he is half way to be­­com­ing a pro­­gram­mer/­­man­ager, so huge bonus points.

  4. Projects with long com­mit his­­to­ries show re­spon­s­a­bil­i­­ty and a lev­­el head.

  5. De­vel­op­­ment mail­ing lists let you gauge his per­­son­al­i­­ty. Is he abra­­sive? Is he thin-skinned? Is he an­noy­ing?

Then there's the ob­vi­ous stuff, ref­er­ences from pre­vi­ous em­ploy­er­s, in­ter­views, ex­er­cis­es, an such. But those are the least im­por­tant fil­ter­s, the most im­por­tant thing is that he must be able to code. And show­ing you his code is the way to do it.

Juho Vepsäläinen / 2010-03-11 16:00:

I agree with your point totally. A portfolio (sample of coding work) should be as valued as a CV. In a sense code should be given the same value as literary works.

fisadev / 2010-03-11 16:00:

Great article. I'll show this to my employer.

passive / 2010-03-11 16:25:

I agree with the gist, but I think it is overly idealistic. I work for one of the largest and most prestigious technology companies in the world, but because of our internal policies, I'm basically forbidden from doing any in-public development in my spare time. I'm also discouraged from talking about development in public, so things like StackOverflow are out. Now, if I had more spare time, I might be motivated to find the acceptable loopholes in these policies, but as my job keeps me very busy (doing interesting and challenging software development that I can't show you), I don't. I do engage in mailing list discussions, but I do so using my personal email, and I never mention my employer.

To be clear, I think these are good ideas, and when hiring one of the first things I ask about is personal coding projects, but in-public development is not yet mainstream enough to allow "show me your code" as primary criteria (maybe in a few years).

Roberto Alsina / 2010-03-11 16:41:

Of course the first rule in these things is that all rules are broken ;-)

In any case: is that your first job?

And of course, this would put you at a disadvantage if you try to find another
job. That's just something to keep in mind when agreing to draconian terms.

passive / 2010-03-11 17:49:

Nope, it's my fourth position in technology, my third in software development. I do have plenty of code from earlier in my career, but some of it is pretty embarrassing. :)

Roberto Alsina / 2010-03-11 17:57:

Old embarrasing code is not bad. New embarrasing code? That sucks :-)

j_king / 2010-03-11 17:54:

I think you're very idealistic.

If you want to hire in the top 1% of programmers you must realize you should be posting a job with a salary in the top 1% salary range, with excellent benefits, and hopefully a job that is at least somewhat intellectually stimulating. Anything short of six-figures with an excellent benefits package and plenty of vacation and you'll be looking at applicants outside of that top 1% range (or perhaps idealistic snobby twenty-somethings fresh out of CS).

If your job postings are looking for "passionate" or "rock star" programmers, guess what? You're going to attract young idealistic kids looking to get a foot in the door. Not the top-1%. If you're looking to hire from this demographic in the hopes of getting a whiz-kid, you're basically asking to win the lottery. It might happen, but they'll still be inexperienced and once they get a measure of confidence in their abilities they'll be looking at better opportunities elsewhere.

Every company only wants to hire the best and brightest -- but you have to be realistic. The best and brightest cost a lot of money. Genius is rarely ever born. Great programmers are made and start out somewhere. You can be that starting point for them. If your profits manage to grow commensurately with their success, they might even stay with you and attract other smart top-1% programmers. Until then, work with what you have and set reasonable expectations.

I've done lots of hiring and it's not hard to weed out the idiots who walk in the door talking the talk. They may only be moderately good programmers, but I can fill in the gaps. If I had the budget, I'd love to hire top-percentile engineers. Just not going to happen. Doesn't have to -- my software still ships and the business I work for still makes money. Good enough.

Roberto Alsina / 2010-03-11 19:09:

You'd be surprised at how many companies actually **believe** they are hiring in the top 1%.

And sure, to hire great programmers you need to pay them what they are worth. And to get crappy programmers you can pay less. And for middle-of-the-road programmers you pay middle-of-the-road money.

I am nowhere near a 1% programmer myself (hey, look at my code if you don't believe me!) and I manage to get the job done, the specific number is just because it's the one used in Spolski's article, it's anecdote.

This article was more (not clearly, I guess) about the folly of evaluating a programmer based on tests and not on his code portfolio. It's like evaluating painters on how well they can do a sketch of you in 30 minutes. The ones that are good at *that* are sketching in tourist traps, not creating great art!

j_king / 2010-03-11 20:39:

Which should be common sense. If you're pointing that it isn't -- wow. I must live in a comfy little bubble. :)

Roberto Alsina / 2010-03-11 20:51:

Just for kicks I answered a development job offer by a pretty nice company. I was not really interested, but I thought, what the heck, maybe they make me an awesome offer.

45 minutes of interview. Not even *one* question about code I could show them. Not one question about open source projects I was involved in. Not one question about code at all.

Mostly questions about:

1) What university I attended and how I did there (answer: I studied maths, never finished)
2) How much was I earning now (answer: I have my own company, not their business)
3) What languages I programmed in (answer: mostly python nowadays)
4) Why had I not brought a resume (answer: they didn't ask for one)
5) Why was I there (answer: they called me!)

And so on, a really frustrating experience, a huge load of fail :-(

Luckily I didn't have a second interview where the "how many astronauts does it take to change a lightbulb" questions start.

Paddy3118 / 2010-03-11 19:57:

Unfortunately, some programmers don't know their own worth.

JohnMc / 2010-03-11 17:59:

I don't program for food anymore, haven't in a long time in my IT career. But I still program, albeit not efficiently to make my systems management job easier. The FizzBuzz problem took me 10min in python. Never said I was good, just that I could. If someone who bills them self out as a profession can't to this, then wow!

However I don't think certifications are really the answer either. I see a lot of MCSE labeled bodies who can't fathom themselves out of a particular networking problem. Certs just guarantee that they have a good short term memory and crammed like crazy. It does not test problem solving skills.

to Passive: You need to read up on your States standing on Law of Agency. Many employers have codicils in their contracts that are not enforceable. In addition, it is highly unlikely that there is not at least one Open Source project you can contribute to that is in violation of your employment contract.

passive / 2010-03-11 18:34:

Like I said, if I had more spare time, there are definitely loopholes there to be exploited. But with only a few minutes here and there, I am primarily discouraged from any casual involvement in public projects.

Roberto Alsina / 2010-03-11 20:13:

Fizzbuzz is tricky if you have a bad maths foundation. If you have a decent basic math background and some *basic* programming skills...

[ (i%3 is 0 and 'fizz' or '') + (i%5 is 0 and 'buzz' or '') for i in xrange(100)]

in python.

JohnMc / 2010-03-11 18:50:

One other observation. If you want the top 1% of programmers it might be rare to find them by advertising for them. J King pretty much hit it square in that level of talent has probably garnered the fruits of their expertise. Somebody at that level will probably tip their hand they are ready for a move with friends over lunch. Word of mouth. Two of the best talents I ever hired never came thru the HR process.

Roberto Alsina / 2010-03-11 19:10:

Indeed I don't expect, say, Guido van Rossum to answer an ad ;-)

danclamage / 2010-03-11 19:03:

If the company next door already hired that 1 good programmer out of 100, then you need to look at 200 resumes!

It's actually fairly easy even in a phone interview to determine whether a programmer is what he/she says they is. I used to do a lot of technical phone interviews. I'd start by asking a middlin' question; depending on the answer I got (good/bad, correct/wrong), I'd ask a tougher or easier question. This repetitive "binary search" method zooms in very quickly on their true skill level.

Also, when it comes to resumes, you learn how to read between the lines. One common example: "project team member". That could mean anything from principle architect to janitor. I'd ask for specific, concrete examples of what they contributed to the project.

ulrik / 2010-03-11 21:26:

"he or she"

Roberto Alsina / 2010-03-12 00:04:

Sorry, I write old fashioned english.

Ben Bangert / 2010-03-12 04:07:

I think the point about 'passion' is a bit unfair. I've met very passionate people who suck at what they're passionate about, and some amazing programmers that have no interest in doing it in their spare time. Not everyone (especially women who are also expected to raise a family, cook, etc.) wants to live and breath the same thing they do at work.

That being said, I think its useful for everyone to have a programming portfolio, that they update from time to time to show their skills, etc. If they're not into open-source, or programming 24/7 in their spare time (the passion), that's fine, just have a portfolio that can be shown off, and that's updated regularly to reflect their current skills and knowledge.

Roberto Alsina / 2010-03-12 09:42:

Fair enough.

Ben Young / 2010-03-12 07:34:

I don't think a good programmer is someone who is defined by programming in their spare time. To me that says that someone may not have enough other outside interests. I program for a living, I don't want to do more of the same when I get home. It doesn't mean I'm a bad programmer, or uninterested in programming

Roberto Alsina / 2010-03-12 09:45:

It means you are *less* interested, though.

Ben Young / 2010-03-16 13:10:

Maybe, but what does that have to do with my quality as a programmer? Is there some kind of threshold of interestedness? I'm interested enough to do my job well, and to research new technologies etc. What else would you want?

Roberto Alsina / 2010-03-16 13:30:

That's employers discretion. You do what you do, the employers wants what he wants.

Ben Young / 2010-03-17 13:55:

That's kind of my point. I help with a lot of hiring at our company, and we explicitly don't ask about programming outside of work. We just don't think it has any relevance at all. As a result, we're a pretty family friendly company, and I don't think our quality suffers at all

Roberto Alsina / 2010-03-17 14:24:

If that works for you, jolly good for you!

OTOH, how would you know if your quality suffers or not? Just because you don't ask it doesn't mean it's not there.

On the third hand, you, as many others are missing the point, it's not about making people work off-hours. It's about asking them to show you code **to prove they can code**.

If they can show you code they did while on the clock, that's good too!

Also, If they do it off-hours it means they enjoy coding. Employees that enjoy the work are happy employees.

Yes, you can have a happy employee that doesn't do that too.

29a / 2010-03-12 16:02:

Judging people by they quality of the code they release to the public is something I'd be careful about. I know folks, which I would say are good programmers,
who just look at it as a job. They take that job serious and are good at it but still most or all of the code they wrote in recent years is owned by
the companies that they work for. Why wouldn't you want to hire such a person? I think in some ways such a person might actually do better in
a company than a passionate geek who cares more about his code and doing cool things than about his customers, projects and deadlines.

But I guess if somebody is passionate about programming, he will eventually become good.

douginseattle / 2010-03-13 05:43:

#1 HTF do you know it is their code?
#2 If I am truly a 1%er, WTF would I want to work at your place? YOU HAVE TO SELL ME,
not the other way around.
#3 The top code-jockeys are working and not looking.
#4 What motivates the top 1%? Interesting work, no bs-policies, no interfering management, top 1% tools, network, ... (basically proof from the company that they value my future)

I write code all of the time. I heard whining from the last contract shop that I was $10/hour more than their other candidates. I told them I could not care less, I "get-R-done" and am not going to sell myself short.

Are you willing to fork out $150k/year minimum? Then you are unrealistic about getting top talent. I don't give a d@mn about the salary, but I am not going to work for someone who is a cheapskate. I've done it before and regretted it. If you go in cheap, they do not value you.

Roberto Alsina / 2010-03-13 12:53:

#1 for public code it's trivial, unless he's programming under a secret identity (there are very few cases). The code has an email address associated. If you are in doubt, you ask.

#2 You now you are like the 3rd person to fall for the 1% and not see that the specific number doesn't matter at all for the argument?

#3 Indeed.

#4 That's the other side of the problem: getting the guys to *want* to work for you. This is about something more basic: filtering those who you don't want.

In other words, you didn't quite understand what I wanted to say, but that's probably because I am not saying it right.

In another version, I would not say 1%.

El Barto / 2010-03-13 14:00:

Another approach would be: if I can't get a top 1% programmer (because someone else has hired him first, because I can't afford it, because I can't identify one during the hiring process), maybe I should find an intelligent, passionate, eager-to-learn fellow who I can teach. It would be a longer process, but it's more constructive in the long term. If the problem is that most applicants can't program: let's teach them how. If there's only one tree from the forest we can use, it means we need to plant some more.

In that case, the challenge may be how to identify some basic important skills. In my old job, one of my bosses, was trying to come up with tests and important questions to identify a good programmer. He was an experienced professional with a PhD. The problem was he ended up asking questions that ruled people like me out (I'm actually a history student who likes to program) and, regardless if I'm a good programmer or not, they were pretty happy with my work.

A. Nony Mouse / 2010-03-14 02:19:

At this stage in history, someone who doesn't have any code sample at all available to show to an employer is way behind the curve. Just like someone who can't write code at the whiteboard, or on a sheet of paper. These are skills you must develop in order to interview well.

Fabián / 2010-03-15 23:34:

Parece que no hay muchos hispanohablantes entre tus lectores, una lástima.

El artículo es realmente muy interesante. Sin embargo no puedo coincidir con vos en esto:

"¿Nada? ¿No escribió nada sin cobrar? No es el que quiero. Si sólo programa por dinero no tiene pasión por la programación, o no lo disfruta. Probablemente no es muy bueno tampoco."

¿Por qué éste habría de ser un criterio de selección de aplicación general? Especialmente me parece muy aventurado cuando decís "probablemente no es muy bueno tampoco". Es que no veo un argumento convincente, de hecho no veo que hayas mencionado un argumento para apoyar esa afirmación.

A Michael Jordan le gustaba el béisbol, sin embargo era un genio en básquet y pésimo en lo que le gustaba (intentó jugar béisbol y dió lástima). Quiero decir, esto pasa con mucha gente pueden ser buenos en algo y no necesariamente gustarles esa disciplina en la que destacan.

Pero es sólo un detalle. Ojalá las consultoras de RRHH y los encargados de reclutamiento en las empresas argentinas lo tuvieran en cuenta.

Faltaría otro artículo dirigido a estudiantes y programadores sobre cómo presentar sus antecedentes y portfolio, en el que se les sugiera escribir software FOSS para mostrarlo como antecedente laboral.

Saludos

Roberto Alsina / 2010-03-15 23:53:

Jordan era malo jugando al béisbol... comparado con cómo jugaba al basquet!

Sin haber jugado en serio en 10 o 15 años jugaba a nivel AA, o sea que estaba entre los mejores 5000 jugadores de EEUU (por decir un número). Alguien que juega béisbol AA juega **muy bien**. Claro, en básquet era un poco mejor ;-)

Y sí, ese artículo tal vez estaría bueno, pero no sé si soy yo la persona correcta para escribirlo.

ed jenkins / 2010-03-18 01:02:

I think most HR departments feel the answer is "BS in CS, or related area", giving no weight to experience and overall intellect. I know people with Masters degrees who can't spell, are terrible at math, and have no clue when it comes to basic logic. I'm not sure if we here in the States really know how to assess anything without having some kind of cookie-cutter, cya guidelines.

Brett Miller / 2011-11-25 00:13:

Finding a well qualified developer can be quite tough, but I have a simple answer...Get a Referral!!

I actually know many talented (and affordable) software developers. I'd be happy to provide an introduction if anyone has a project they need assistance on. 

Thanks,

Brett
http://www.customsoftwareby...
dev@cspreston.com

phone number lookup / 2011-12-03 22:31:

this is really interesting viewpoint on the subject i might add

employment background check / 2011-12-27 23:28:

Man ... Beautiful . Amazing ... I will bookmark your website and use the your RSS feed also