
How to hire a programmer when you're not a programmer - duck
http://37signals.com/svn/posts/2628-how-to-hire-a-programmer-when-youre-not-a-programmer
======
edw519
I'm not even going to use my stock rebuttal of "correlation != causation"
because in the case of #1 through #5, I doubt if we even have correlation. For
every example of a good programmer for any of these 5 that OP can provide, I
can provide multiple counter-examples. None of these is much of an indicator
of anything.

 _1\. How opinionated are they?_

 _Everyone_ has an opinion, assholes included.

 _2\. How much do they contribute to open source projects?_

Many of the best programmers I know contribute nothing to open source because
of confidentiality agreements.

 _3\. How much do they enjoy programming?_

You mean when it's fun specing something out or at 4 in the morning when
everything is down?

 _4\. Do they actually ship?_

And what does it cost to maintain or fix it? There are 2 ways to find out. a.
Read the source. b. Wait a year. Which would you prefer?

 _5\. What have they mastered?_

Who cares? What they do on their own time is their own business. This is an
indicator of nothing.

 _6\. How well do they communicate?_

This is important for all people, for all things, so it doesn't even need to
be on this list.

So, how should a non-programmer hire a programmer?

a. Become a programmer.

b. Hire a programmer to hire a programmer.

c. Punt.

~~~
run4yourlives
The only way one can hire a programmer is to be a programmer.

That's a awfully large sense of entitlement there, one that is very, very
difficult to support. I'm surprised such a comment is coming from you.

While I don't excuse idiot HR recruiters and headhunting firms on quotas,
there is a level between clueless and mastery that a person can attain that
allows them to make the comparative judgement required in the hiring process.

I know little about law, but enough to hire a semi competent lawyer, I know
little about masonry, but have successfully hired a firm to rebuild a chimney.
They are probably not the absolute best at their professions. They probably
take shortcuts that purists wouldn't like. So be it. They get the job done and
that's _good enough for me_.

There is really no reason that someone with little knowledge of programming
cannot properly hire or outsource a competent developer for work that they
need to get done.

To suggest otherwise is only to worry about which way the mortar is spread in
between the brick, when it all boils down.

~~~
edw519
_That's a awfully large sense of entitlement there, one that is very, very
difficult to support. I'm surprised such a comment is coming from you._

Sorry if that's how it sounded; that's not what I intended.

A little background...

I have worked for about 100 managers over the years, and with few exceptions,
here's my experience:

\- Those who were programmers were able to understand, examine, critique,
question, and drive almost anything I worked on.

\- Those who were not programmers were able to fit whatever I was doing into
their project plan and evaluate it only through the eyes of other programmers
(who may or may not have done a very good job of it).

I have also maintained hundreds of thousands of lines of code and I can
predict with uncanny accuracy that which was written for a programmer boss and
that which wasn't. There _is_ a difference.

There are probably billions (or trillions) of lines of shit code out there
that never would have made it through peer review of almost any programmer
here at hn. But no one had to worry about that; they were written by
programmers working for non-technical bosses.

Hope that paints a better picture of my skepticism :-)

~~~
eof
I can certainly attest to shit code getting through non-tech bosses.

It's not just a matter of 'getting away with something' either. A badly
managed programmer won't know the larger scope of what they are doing, or even
worse be doing something the wrong way because they 'have to', and the code
inevitably becomes a series of hacks fixing whatever the latest requirement or
problem is.

------
kls
_How much do they contribute to open source projects?_

I always take issue with this one. Not all good developers are commiters to
open source projects and not all commiters are good developers. While I
personally would love to contribute to some open source project I use, the
area of work I am in makes it difficult to do so. When you freelance it is an
additional burden to try to explain to customers that portions of the code you
develop on their dime will get contributed to an open source project. Even if
they are generic routines that have no direct benefit to the company other
than getting the project done. Also given the fact that some of my clients are
blue chip tech companies jumping through the legal hoops is a royal PITA. So
in the end it is just easier for me to not be a contributor. I submit bug's,
test cases, and suggestions but the requirement of my time to CYA myself so
that I can contribute some code back kills my ability to do so. I have to
imagine that their are a good deal of top caliber developers in the same boat.
I think the point of whether someone contributes to an open source project is
moot at best.

~~~
cookiecaper
I wouldn't consider it moot, but I wouldn't necessarily deduct points either.
Open-source contribution is a good bonus in a developer; it shows that they
have been able to cooperate others (among a group of people that are often
unpleasant, ornery, or crotchety) and adhere to the requirements of the BFDLs,
which shows adaptability. The big benefit of course if that you can go back
and look up their interactions and the code they submitted and how they went
about the whole thing, which is definitely useful in determining if the person
would be a good hire. It also demonstrates a level of conscientiousness about
their place in the community.

So, all that said, there are good reasons a developer may not have many open-
source contributions, as you stated. So while I don't think it's good to
necessarily detract from developers without that, I wouldn't exactly consider
it moot, either; open-source dev is a very useful reference and a good
demonstration of the candidate. If you can't contribute, you will miss out on
some of those good vibe points, but that's the way things go sometimes I
guess.

~~~
kls
Sure, I don't believe that it deducts points, I just think that there are so
many good developers that don't contribute, that using it, as even the
slightest filter of applicants, is going to do more harm than good.

------
fjh
Am I the only one who thinks that the first one is a terrible heuristic? In my
experience, people who don't have a lot of experience tend to be the most
opinionated. I may just be thinking of the wrong kind of opinionated, but as
far as I can tell any programming language's biggest fans tend to be the
programmers who only know one language.

~~~
phugoid
I was really opinionated ten years ago, before I had tried to build anything
serious. These days, I think every choice is a trade-off. I wonder if I'll
ever be opinionated again.

~~~
jpablo
I'm in the same bandwagon as you. But I still think I can discuss passionately
the tradeoffs of the different choices at length.

------
bugsy
1\. How opinionated are they?

Like religious fanatics very opinionated programmers will argue endlessly over
trivial matters that in the end make no difference, wasting valuable time, all
because they can't just let their arbitrary preferences go and are obsessed
with winning every argument due to their autism.

2\. How much do they contribute to open source projects?

Those who contribute a lot of free work without compensation don't have much
business sense. You also have to worry they will contaminate your code with
GPLd code that they have secretly reattributed.

3\. How much do they enjoy programming?

Those who are very enthusiastic about something are usually very new to it and
don't have much experience. If your oncologist was jumping up and down and
clapping when discussing your tumor because he is so excited to see this form
of tumor, would you want to use him, or assume he is either insane or fresh
out of med school and has not seen many tumors yet.

~~~
tedunangst
Not so much that they'll secretly take GPL'd code, but they'll just dump it in
without telling you and then 2 years later when somebody finds it in your
widget, it's a major pita figuring out what's happening.

~~~
dagw
This is far likely to be done by someone with little or no open source
experience. Anybody who has worked with open source code knows the basic
difference between GPL, LGPL and MIT/BSD and what you can and can't do with
the code. Someone who hasn't worked with open source software is far more
likely to go blindly assume that "open source" means I can copy and paste this
any way I want.

------
chrisaycock
Some of the "soft" questions I've recently started asking interview
candidates:

 _What computing blogs / magazines do you read?_ \- To see if he keeps up-to-
date on trends in technology.

 _What are some of your favourite languages? What do you code with in your
free time?_ \- Not just to gauge passion, but also to see how diverse his
toolset is. Someone who knows Java, Clojure and Matlab is well-rounded.
Someone who knows only Java, C++ and C# is not.

 _What do you dislike about your favourite language?_ \- To make sure the guy
isn't a religious nut, since we probably don't use his favourite.

 _Who are the key people in your field?_ \- For a given topic the developer is
passionate about, there should be someone whose papers he's read plenty of
times.

 _Why did you leave your last job?_ \- Pretty standard one, but always key.

I also require a cover letter of everyone who applies, plus I tell recruiters
that I want the resume in LaTeX. In addition to gauging writing skills and
technical adeptness, those two requirements are a pretty good filter against
spray-and-pray applicants.

~~~
bostonvaulter2
> What computing blogs / magazines do you read?

Would Hacker News/Proggit be an acceptable answer?

~~~
chrisaycock
Of course, so long as it's in conjunction with a few direct sources.

------
jswinghammer
Or you can just learn a simple programming question or two that you can ask
them to write the answer to. Example:

string itoa(int i)

{

//convert integer to its string representation

}

In my experience this will tell you enough about the person's proficiency to
make a decision. I've seen so many people fall apart on this question in so
many different ways it's not even funny. The ones who get it have all been
pretty good hires.

~~~
rubyrescue
I TOTALLY agree and I've never heard anyone say the same thing. My interviews
have all been boiled down to:

(a) can they code and TEST int atoi(char *)?

(b) Are they a good cultural fit (ie they like the startup environment)

(c) Then to be sure, I start giving them some real-world challenges we're
having with a product and see if they can help.

But (a) eliminates most candidates before I even have to go any further, and
if they can do (a) they're generally a good hire. It's kind of bizarre.

~~~
cookiecaper
The glibc implementation of atoi basically just offloads to strtol, which just
offloads to strtol_l.c, which is pretty complex at first glance.

You're basically testing to see if people know about casts, right? I'm not a
big C developer and most of the languages I spend most of my time in have much
less onerous typing systems than C, but if you gave me this question I would
probably just write something like:

    
    
        return (int) char;
    

perhaps including a loop to read to the end of char*. Would I pass or not? I
don't think I'm that bad of a programmer, just don't have a lot of direct
experience with C.

~~~
jswinghammer
1) In this scenario you are implementing that mechanism. Casts don't work via
magic.

2.) C isn't required. The functions use the C conventions for naming. That's
all.

3.) That solution would never work because it would return the ASCII value for
the character.

The solution requires that you go through the string multiplying the value you
get by the next power of ten and adding it to what you had before. You work
from the 1 position back to the front of the string. You also need to ignore
non numerical characters.

~~~
cookiecaper
Can I see a functional implementation just for educational purposes here? I
don't understand really because I have casted things in C like that before
(not in lieu of atoi() with (int) char as shown, but other datatypes) and
because in my experience, when I have a read out a string, I have not gotten
an ASCII keycode, but the inputted character. Most of my C experience has been
on existing open-source projects, so maybe they'd already implemented stuff
that glossed over all this.

That said, I don't really understand why this should be a consideration for
the programmer at all. C's type system seems to get in the way and slow things
down almost as much as it helps (again, limited C experience here) and I don't
think that's how these things should work.

~~~
drtse4
Castings in c doesn't perform type conversion, regarding the implementation
just consider that every ascii char has a numerical code (it's int value) and
that in the ascii table the numbers are adjacent.

------
dblumenfeld
For a non-programming recruiter it is way to easy to get impressed by a good
talker who knows how to throw in appropriate buzzwords in a conversation. You
can judge communication skills, but how on earth would you judge whether the
prospective hire can code correctly if you cannot code yourself? IMHO the best
way to go is to find a fried of a friend who is a programmer and get an
opinion from him/her. It would also not hurt to run a candidate through 3rd-
party test that require actual programming (my favorite is codility.com, but
there are several other websites that provide similar services).

------
statictype
_How opinionated are they?_

A novice programmer probably doesn't have enough experience to create any
informed opinion.

A slightly experienced programmer is probably very opinionated about his
tools.

A very experienced programmer knows there are trade-offs in every choice and
isn't so passionate about voicing his specific opinions on the choice between
2 similar duck-typed programming languages.

------
cookiecaper
37Signals is so overrated. I hope more articles like this help change the
general perception about them.

It's not that I don't appreciate their contributions or think they're a
fine/nice shop or whatever, but the hype that goes into their stuff is a
little ridiculous for serious developers I think.

