Finding a programmer that can program.
If you haven't read Jeff Atwood's Why Can't Programmers.. Program? go ahead, then come back.
Now, are you scared enough? Don't be, the problem there is with the hiring process.
Yes, there are lots of people who show up for programming positions and can't program. That's not unusual!
It's related to something I read by Joel Spolsky (amazingly, Jeff Atwood's partner in stackoverflow.com).
Suppose you are a company that tries to hire in the top 1% of programmers, and have an open position.
You get 100 applicants. Of those, 99 can't program. 1 can. You hire him.
Then the company next door needs to do the same thing. They may get 100 applicant. 99 can't program ... and probably 80 of them are the same the previous company rejected before!
So no, hiring the best 1 out of 100 is not a way to get a programmer in the top 1% at all, that's just statistics intuition getting the worse of you.
You don't want to hire in the top 1% of applicants, you want to hire in the top 1% of programmers. Different universes.
These two things are the two sides of the same coin. 99% of applicants are useless, that's why they are applicants, because they can't get a job and they can't get a job because they are useless as programmers.
So, judging programmers by the standard of the applicants you get is like judging quality of a restaurant by licking its dumpster.
But now, having taken care of this, how do you find a programmer that can actually program?
Easy! Find one that has programs he can show you!
I would never hire a programmer that can't show me code. There must be something wrong with him, because programmers write programs.
That's just what we do. If we didn't what kind of programmers would we be?
Let's see some obvious objections to my argument:
-
He wrote code for his previous employer and can't show it.
So, he did. What else has he written? Some open source code? Maybe snippets in a blog? Answers in stackoverflow?
Nothing? He has written nothing he was not paid to write? He is not who I want. He only programs for money, he lacks passion for programming, he doesn't enjoy it. He is probably not very good at it.
-
He is just finishing college, he has not written much code yet!
Why? What stopped him? He has been learning to program for years, what has he done with the knowledge he has been receiving? Saving it for his 25th brthday party? He has not practiced his craft? Not the programmer I need.
But having him show you code is not enough, of course. It also has to be good code, if you are serious about hiring excellent programmers.
So here's some bonus criteria:
Check the languages he uses. If he codes COBOL for pleasure, he may or may not be what you want.
Open source == bonus points: it means he is not ashamed of his code, plus it makes his credentials trivial to verify.
If he leads a project with multiple contributors and does a good job he is half way to becoming a programmer/manager, so huge bonus points.
Projects with long commit histories show responsability and a level head.
Development mailing lists let you gauge his personality. Is he abrasive? Is he thin-skinned? Is he annoying?
Then there's the obvious stuff, references from previous employers, interviews, exercises, an such. But those are the least important filters, the most important thing is that he must be able to code. And showing you his code is the way to do it.
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.
Great article. I'll show this to my employer.
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).
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.
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. :)
Old embarrasing code is not bad. New embarrasing code? That sucks :-)
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.
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!
Which should be common sense. If you're pointing that it isn't -- wow. I must live in a comfy little bubble. :)
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.
Unfortunately, some programmers don't know their own worth.
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.
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.
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.
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.
Indeed I don't expect, say, Guido van Rossum to answer an ad ;-)
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.
"he or she"
Sorry, I write old fashioned english.
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.
Fair enough.
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
It means you are *less* interested, though.
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?
That's employers discretion. You do what you do, the employers wants what he wants.
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
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.
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.
#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.
#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%.
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.
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.
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
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.
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.
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
this is really interesting viewpoint on the subject i might add
Man ... Beautiful . Amazing ... I will bookmark your website and use the your RSS feed also