
How to recognise a good programmer - terpua
http://inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer
======
pmsaue0
Perhaps most people reading HN would be able to recognize a good programmer.
But there are still challenges when you need to hire someone with area of
expertise that is outside of your own - if you're hiring someone to do your
own job or your clone, it's straightforward.

For the last two start-ups in which I was involved (as a graphic designer), a
co-worker and I were placed in the position of choosing developers to build
our application. We were the most technologically savvy people on our start-up
team of businessmen, attorney's, accountants, etc. (in many ways those
startups followed the inverted timeline of most startups).

At first the only questions we could ask the applicants were... what languages
do you know? what projects have you worked on? how would you solve this
problem?... as if their answers would inspire some confidence regarding their
abilities as a programmer - their answers inspired nothing because WE knew
nothing. What I'm saying is that if you are going to hire people, you have to
educate yourself to a conversational level+ in their area of expertise.

Nowadays my said co-worker and I both know RoR and are building our own
startup apart from that original group. And when we decided to hire another
developer we were in a MUCH better position not only to recognize a strong
programmer but to leverage our own abilities.

Be wary of his point regarding PASSION. We met with some programmers who were
passionate, but were obviously charlatans.

~~~
hhm
"We met with some programmers who were passionate, but were obviously
charlatans."

And how did you tell the difference? (when it wasn't obvious... or was it
always obvious?)

~~~
pmsaue0
Well, we did hire one charlatan programmer, but we dropped him pretty quick
when we realized that he couldn't produce the quality and quantity of work
that he claimed possible. Like I said, this was when we didn't know diddly
about programming / hiring programmers.

Regarding the ones that were obvious (as it seemed to me), they were lingo
dropping high-horsers, and when we looked at their previous work and saw that
they were producing crusty web applications while claiming that they were
abreast of all the latest technologies, we knew something was up.

We chose at one point to work with a web development firm that promised great
things and they had a strong team... but what I wish we would have payed more
attention to was the fact that they were working on MANY other projects and
were spread way too thin. In the end they were late on every deadline so we
stopped working with them.

I feel fortunate to be working with two other great developers now. But I've
worked with several doozies, and it has been through that process that I've
learned more about who to hire, and I'm much more cautious now.

~~~
hhm
Thanks a lot for taking the time for writing such useful reply.

------
jcromartie
The list of qualities here would indicate a good person in _any_ profession,
not just programming. I think these challenges only exist because we (as a
society) have learned to accept schooling as the indicator of qualification.

~~~
DaniFong
Schooling might not work so well as qualification, but take care not to
trivialize the problem. You can't really figure out how good someone is until
you've worked with them, unless they have a long string of accomplishments.
Schooling might be a little above noise, but at least it functions as a fairly
reliable minimum bar.

~~~
jcromartie
Based on the _deluge_ of resumes I've seen coming into tech shops lately, the
bar set by college degrees is so low that you need to _dig_ to find it.

~~~
gaius
That is why there is the notion of league tables for colleges. My friends with
MBAs say quite plainly that unless an MBA is from a "top 25" school, it simply
isn't worth doing or having.

~~~
aswanson
That leads me to believe it is a bullshit field of study altogether, if the
only metric of worth is the school name.

~~~
gaius
CS graduate from MIT or Podunk U?

~~~
jcromartie
Well, can they code or not?

~~~
gaius
You've got a pile of a hundred CVs to sort through.

~~~
mamama
Then you've got other problems.

------
jwilliams
I've got to say - In my experience, industry-based qualifications are more
often than not a counter-indicator.

This was particularly true of the Java certifications during the dotcom boom -
it was invariably the sign of someone who really just wanted to cash in... Out
of the ten hires I was directly involved with, 6 were Java certified and 5 of
those were absolutely terrible.

It might demonstrate a knowledge of Java, but at a very superficial level -
even if you take someone with the best vocabulary in the world, it doesn't
mean they'll be a good author.

A degree is a bit different. It at least demonstrates - a probable
understanding of the fundamentals, the ability to stick at something and a
certain level of exposure to broad ideas... Plenty of good programmers won't
have degrees, but it's not a bad indicator none-the-less.

------
ConradHex
Just coincidentally, these happen to be the _exact attributes_ the author
believes he has! How fortunate!

------
stcredzero
Unfortunately, there are programmers that you could recognize using these
criteria who produce highly idiosyncratic code that's nearly impossible for
someone else to maintain for the months it takes for them to come up to speed.
There are also programmers who would be recognized by this criteria who are
just as insightful and productive who produce beautiful intention revealing
code.

How would we recognize the latter group?

~~~
raganwald
Try asking them.

"Hey, do you find most of your colleagues are familiar with your code or do
you find most of them have trouble getting up to speed with it?" You can ask
this question in a very neutral tone, one that implies that the colleagues
_may_ have been at fault.

And then, be very careful to determine whether the colleagues really weren't
at fault. If you're trying to hire a very smart person, you may find someone
who has chafed writing J2EE code in BigCo, and yes his code was inscrutable to
his colleagues, that's why he wants to write Python code for you.

~~~
stcredzero
I've witnessed solo programmers writing brilliant but inscrutable code in
Smalltalk. Bittorrent's code also fit this description for awhile. Someone who
writes inscrutable code in J2EE in BigCo might do so because he's hobbled by
their coding standards. But he might be one of those folks who is a brilliant
coder but has no sense of what is intention revealing to those reading his
code.

~~~
raganwald
I agree. All I can say is... the OP mentions indicators. _It is absolutely
correct that they are merely hints_. You still have to interview them and/or
test them and/or check references from former employers and/or check
references from former colleagues, and/or...

In this particular case I speak as someone who has received both praise for my
ability to write code that my colleages find crystal clear _and_ vilification
for writing code that my colleagues find inscrutible.

Did I mention code samples? I have code I can share. I like it when I'm
interviewing and someone has code they can share.

------
truebosko
Everytime I read these kind of articles I see the one glaring headline, how
programmers love to work outside of their regular work day

Then I become sad because 80% of my week I come home and have to handle
something and by the end of it all, I don't have any time to play around (aka,
program) because I have to go to bed. Sigh, vicious cycle :(

(I know I can work on managing my time better and I am, like cooking more
meals for the week, and time-boxing other tasks .. but it takes time!)

~~~
wallflower
Freud was once asked what he though a normal person should be able to do well.
The questioner probably expected a complicated, a "deep" answer. But Freud
simply said, "Lieben und arbeiten" ("to love and to work"). It pays to ponder
on this simple formula; it gets deeper as you think about it. For when Freud
said "love", he meant the expansiveness of generosity as well as sexual love;
when he said "love and work," he meant a general work productiveness which
would not preoccupy the individual to the extent that his right or capacity to
be a sexual or loving being would be lost.

(From "Identity and the Life Cycle", by Erik H. Erikson)

Yes, this is a repost of a comment but it _is_ relevant. Work can cut into
life and life can cut into work...

~~~
swombat
On the other hand, someone said: "You can't be normal and expect abnormal
results".

~~~
yters
I like this philosophical quote:

Kant, "To be is to do"

Nietszche, "To do is to be"

Sinatra, "Do be do be do"

------
olavk
Problem is that many of the positive indicators are also present in bad
programmers.

My experience is that it is extremely hard to recognize good programmers from
bad programmers on the basis of personality traits.

The only think that seems to work is to actually investigate how well they
read and write code.

------
wallflower
I'm tired with people putting elite programmers on pedestals. I used to almost
worship this one code guru at my company but I eventually moved on to just
working on myself, taking up avocations outside of programming. I'm fortunate
to be able to code/problem solve for a profession.

~~~
hhm
This is an article for recognizing good programmers, so you can hire them, not
for other programmers to admire them.

~~~
raganwald
Exactly.

Maybe you are _contemptuous_ of them, but you have a business plan that
involves having them work back-breaking hours for some founder's equity you
will dilute down to the strength of Budweiser beer.

That sounds like sarcasm, but consider the case of salespeople. Many people
have trouble liking salespeople, and many people do not admire them. But many
businesses would close without good salespeople. So you try to find and hire
the best salespeople you can find.

Wanting to put someone to work in a manner advantageous to your business is
entirely orthogonal to putting them on a pedestal.

------
browndog
I would look for the ability to think i.e., quickly and logically breaking a
problem into its components and get to the essentials. Ask good questions
along the way, and come up with a solution to the problem. Do this in an area
outside their expertise.

Anyone who passes that test with flying colors and is interested and engaged
while doing it has a first-rate mind. The rest is detail -- do they know this
language? if not, do they want to learn it? can they work with other people?
do other people want to work with them?

Valuing "passion" (in the 20-something hacker crowd) or a university degree
(large software companies too numerous to name) over the ability to think
clearly in the abstract are both unfortunately too common. It seems to me that
either is more a tool for recognizing "people like us" than to actually
identify a good programmer.

------
shimi
If this article is correct: I should make a career change

------
hhm
Aren't these instructions on "How to recognise an hypermind programmer"?

Edit: I agree that this way you can recognize good programmers, but are all
good programmers supposed to be that way, or only hyperbrain/INTP/whatever?

~~~
swombat
Hia,

I wrote this article a long time ago, long before the whole hyperbrain thing.
It was actually published here, although with "www" in the URL, which explains
why it can be reposted :-/

This was actually the article via which I found HackerNews, since HN showed up
as a large referrer in my logs so I came here to investigate and, finding it
to my taste, stayed.

And to answer your question, no, I don't think these characteristics are in
any way related to hyperbrains.

(initial post of this article: <http://news.ycombinator.com/item?id=97121> )

~~~
hhm
Hi, thanks for answering. I relate this to hyperbrains because it talks about
programmers that: a) are intelligent, b) work in a lot of different projects,
possibly unrelated, that are usually hidden, c) are passionate, and self-
taught. Maybe not(hyperbrains<->your good programmers), but I'm sure a stable
hyperbrain programmer would have all characteristics on your list.

Anyway, I don't like the hyperbrain word (sounds too powerful, as if being
better than the other brains and I don't like it), though I really like your
articles on the subject btw.

~~~
swombat
_I'm sure a stable hyperbrain programmer would have all characteristics on
your list._

That's quite possible, actually. Someone with a hyperbrain who also happens to
be a programmer will probably fit most of these criteria - but then, I would
say that this is more an indication of hyperbrains being well adapted to
programming than of good programmers being hyperbrains.

 _Anyway, I don't like the hyperbrain word (sounds too powerful, as if being
better than the other brains and I don't like it), though I really like your
articles on the subject btw._

Thanks. I came up with "hyperbrain" because I felt I had to call it something
for it to stick out. Hyperbrain seems like a reasonable term because: a) it's
not in use, b) it transmits the idea that this kind of person is "hyper", in
the sense of being more extreme in their behaviour. Certainly it's not
perfect, but oh well. If it sticks around, it'll stick around, if not, it
won't ;-)

~~~
hhm
_Someone with a hyperbrain who also happens to be a programmer will probably
fit most of these criteria - but then, I would say that this is more an
indication of hyperbrains being well adapted to programming than of good
programmers being hyperbrains._

Touché. If your criteria for good programmers is ok, then you are right.

------
edw519
I only use one criteria: demonstrated performance.

~~~
swombat
You mentioned that in the previous posting of this article, but I wasn't
around to reply back then :-)

I agree that demonstrated performance is the ideal, but there are two problems
with it:

1) it's slow and expensive. Who do you ask to demonstrate performance? You
need some initial filter to cut out most of the crud, otherwise you'll spend
all your seed money getting people to demonstrate performance. These
indicators allow you to perform some sort of preselection, at least. Also, if
you're interviewing, you'll find that most good people get snapped up before
you have a chance of seeing their performance, so you'll miss out on 90+% of
good hires.

2) What if you don't know how to tell good performance from bad? You can't
reply that "a non-technical guy has no business hiring a technical guy". This
article is aimed at business guys, and they have the very real problem of
needing to basically boot-strap their business's technical expertise starting
from nothing. This article can help recognise a good cofounder too. At that
point "demonstrated performance" is fairly irrelevant, since as a business guy
you wouldn't be able to tell good performance from bad - however, you can
still tell passion from lack of it, or hidden experience from purely on-the-
job experience.

------
kilowatt
If I was hiring I'd say "point me at a public repo of some of your code."

------
known
Introverts are generally good programmers.

~~~
olavk
That is a preposterous claim! Perhaps you meant that good programmers are
often introverts?

I think programmers in general are often relatively introverted, however my
anecdotal experience is that good programmers are not on average more
introverted than bad programmers. So introversion is a really bad indicator.

