Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Cómo encontrar un programador que sepa programar.

¿Ya te asus­tas­te? No lo ha­ga­s, el pro­ble­ma es el pro­ce­so de con­tra­ta­ció­n.

Sí, hay mon­to­nes de per­so­nas que se pre­sen­tan pa­ra tra­ba­jos de pro­gra­ma­dor y no sa­ben pro­gra­ma­r. Eso es nor­ma­l.

Es­tá re­la­cio­na­do con una co­sa que es­cri­bió Joel Spol­sky (ex­tra­ña­men­te, so­cio de Atwood en sta­cko­ver­flo­w.­com).

Su­po­né­te que que­rés con­tra­tar a al­guien en el top 1% de los pro­gra­ma­do­res.

Te­nés 100 pos­tu­lan­tes, de ellos 99 no pue­den pro­gra­ma­r. 1 pue­de, y lo con­tra­tá­s.

Des­pués la em­pre­sa de al la­do ne­ce­si­ta lo mis­mo. Tie­nen 100 pos­tu­lan­tes, 99 no pue­den pro­gra­ma­r... ¡y 80 son los mis­mos que la otra com­pa­ñía re­cha­zó!

Así que no, con­tra­tar al me­jor de 100 no es la ma­ne­ra de te­ner un pro­gra­ma­dor "top 1%", es sim­ple­men­te tu in­tui­ción es­ta­dís­ti­ca que te ha­ce equi­vo­ca­r.

No que­rés con­tra­tar a al­guien en el top 1% de los pos­tu­lan­tes, que­rés uno en el top 1% de pro­gra­ma­do­res. Di­fe­ren­tes uni­ver­so­s.

Es­tas dos co­sas son los dos la­dos de la mis­ma mo­ne­da. 99% de los pos­tu­lan­tes son inú­ti­le­s, por eso son pos­tu­lan­tes, por­que no pue­den con­se­guir tra­ba­jo y no tie­nen tra­ba­jo por­que son inú­ti­les co­mo pro­gra­ma­do­res.

Juz­gar a los pro­gra­ma­do­res por el stan­dard de los pos­tu­lan­tes que se pre­sen­tan es co­mo juz­gar la ca­li­dad de un res­tau­ran­te la­mien­do su ta­cho de ba­su­ra.

Aho­ra, ha­bien­do en­ten­di­do es­to, ¿có­mo se en­cuen­tra un pro­gra­ma­dor que pue­da pro­gra­ma­r?

¡Fá­ci­l! ¡Bus­cás uno que ten­ga pro­gra­mas pa­ra mos­trar­te!

Nun­ca con­tra­ta­ría a un pro­gra­ma­dor que no me pue­da mos­trar có­di­go. Tie­ne que te­ner un pro­ble­ma por­que los pro­gra­ma­do­res pro­gra­man.

Es lo que ha­ce­mo­s. ¿Si no lo ha­ce­mos que so­mo­s? ¿Teó­ri­co­s?

Vea­mos al­gu­nas ob­je­cio­nes ob­via­s:

  1. Pro­­­gra­­mó pa­­ra su tra­­ba­­jo an­­te­­rior y no lo pue­­de mo­s­­tra­­r.

    Ok, lohi­­zo. ¿Qué más es­­cri­­bió? ¿A­l­­go open sou­r­­ce? ¿fra­g­­men­­tos en un blo­­­g? ¿Res­­pues­­tas en sta­­cko­­­ve­r­­flo­­w?

    ¿Na­­da? ¿No es­­cri­­bió na­­da sin co­­­bra­­r? No es el que quie­­ro. Si só­­­lo pro­­­gra­­ma por di­­ne­­ro no tie­­ne pa­­sión por la pro­­­gra­­ma­­ció­­n, o no lo dis­­fru­­ta. Pro­­­ba­­ble­­men­­te no es muy bue­­no ta­m­­po­­­co.

  2. Es­­tá te­r­­mi­­nan­­do la uni­­ve­r­­si­­da­­d, to­­­da­­vía no es­­cri­­bió mu­­cho.

    ¿Po­r­­qué? ¿Qué es­­tá es­­pe­­ran­­do? ¿Qué lo de­­tie­­ne? Lle­­va años es­­tu­­dian­­do co­­­mo pro­­­gra­­ma­­r! ¿Qué hi­­zo con el co­­­no­­­ci­­mien­­to que fué ad­­qui­­rien­­do? ¿Lo gua­r­­da pa­­ra cuan­­do cu­m­­pla 25? ¿No pra­c­­ti­­có su ar­­te? No es el pro­­­gra­­ma­­dor que bus­­ca­­mo­­s.

Pe­ro con­se­guir al­guien que te mues­tre có­di­go no es su­fi­cien­te por su­pues­to. Tam­bién tie­ne que ser buen có­di­go, si es­tás se­ria­men­te tra­tan­do de con­tra­tar pro­gra­ma­do­res ex­ce­len­tes.

Así que aquí hay unos cri­te­rios ex­tra:

  1. Fi­­já­­te en qué len­­guakes pro­­­gra­­ma. Si pro­­­gra­­ma CO­­­BOL por gus­­to pue­­de o no ser lo que ne­­ce­­si­­tá­s.

  2. Open sou­r­­ce == bo­­­nus poi­n­­ts: quie­­re de­­cir que no lo ave­r­­güen­­za su có­­­di­­go, y ha­­ce que sus cre­­den­­cia­­les sean tri­­via­­les de ve­­ri­­fi­­ca­­r.

  3. Si es el lí­­der de un pro­­­ye­c­­to con múl­­ti­­ples co­­­la­­bo­­­ra­­do­­­res y lo ha­­ce bien, es­­tá a mi­­tad de ca­­mino de ser un pro­­­gra­­ma­­do­­­r/­­ma­­na­­ge­­r, mu­­chos bo­­­nus poi­n­­ts!

  4. Pro­­­ye­c­­tos con un his­­to­­­rial de co­­­m­­mi­­ts la­r­­go mues­­tran res­­po­n­s­a­­bi­­li­­dad y cri­­te­­rio.

  5. Lis­­tas de co­­­rreo de de­s­a­­rro­­­llo te pe­r­­mi­­ten es­­ti­­mar su pe­r­­so­­­na­­li­­da­­d. ¿Es irri­­tan­­te? ¿Es sen­­si­­ble? ¿Es mo­­­le­s­­to?

Y des­pués es­tá lo ob­vio, re­fe­ren­cia­s, en­tre­vis­ta­s, ejer­ci­cio­s, pe­ro esos son fil­tros se­cun­da­rio­s, lo im­por­tan­te es que pue­da pro­gra­mar, y mos­trar­te su có­di­go es la for­ma de ha­cer­lo.

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.


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. 



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

Contents © 2000-2020 Roberto Alsina