Great Hackers
****
| Want to start a startup? Get funded by
Y Combinator. |
July 2004
(This essay is derived from a talk at Oscon 2004.)
Edisons
-->
A few months ago I finished a new
book,
and in reviews I keep
noticing words like "provocative'' and "controversial.'' To say
nothing of "idiotic.''
I didn't mean to make the book controversial. I was trying to make
it efficient. I didn't want to waste people's time telling them
things they already knew. It's more efficient just to give them
the diffs. But I suppose that's bound to yield an alarming book.
Edisons
There's no controversy about which idea is most controversial:
the suggestion that variation in wealth might not be as big a
problem as we think.
I didn't say in the book that variation in wealth was in itself a
good thing. I said in some situations it might be a sign of good
things. A throbbing headache is not a good thing, but it can be
a sign of a good thing-- for example, that you're recovering
consciousness after being hit on the head.
Variation in wealth can be a sign of variation in productivity.
(In a society of one, they're identical.) And that
is almost certainly a good thing: if your society has no variation
in productivity, it's probably not because everyone is Thomas
Edison. It's probably because you have no Thomas Edisons.
In a low-tech society you don't see much variation in productivity.
If you have a tribe of nomads collecting sticks for a fire, how
much more productive is the best stick gatherer going to be than
the worst? A factor of two? Whereas when you hand people a complex tool
like a computer, the variation in what they can do with
it is enormous.
That's not a new idea. Fred Brooks wrote about it in 1974, and
the study he quoted was published in 1968. But I think he
underestimated the variation between programmers. He wrote about productivity in lines
of code: the best programmers can solve a given problem in a tenth
the time. But what if the problem isn't given? In programming, as
in many fields, the hard part isn't solving problems, but deciding
what problems to solve. Imagination is hard to measure, but
in practice it dominates the kind of productivity that's measured
in lines of code.
Productivity varies in any field, but there are few in which it
varies so much. The variation between programmers
is so great that it becomes a difference in kind. I don't
think this is something intrinsic to programming, though. In every field,
technology magnifies differences in productivity. I think what's
happening in programming is just that we have a lot of technological
leverage. But in every field the lever is getting longer, so the
variation we see is something that more and more fields will see
as time goes on. And the success of companies, and countries, will
depend increasingly on how they deal with it.
If variation in productivity increases with technology, then the
contribution of the most productive individuals will not only be
disproportionately large, but will actually grow with time. When
you reach the point where 90% of a group's output is created by 1%
of its members, you lose big if something (whether Viking raids,
or central planning) drags their productivity down to the average.
If we want to get the most out of them, we need to understand these
especially productive people. What motivates them? What do they
need to do their jobs? How do you recognize them? How do you
get them to come and work for you? And then of course there's the
question, how do you become one?
More than Money
I know a handful of super-hackers, so I sat down and thought about
what they have in common. Their defining quality is probably that
they really love to program. Ordinary programmers write code to pay
the bills. Great hackers think of it as something they do for fun,
and which they're delighted to find people will pay them for.
Great programmers are sometimes said to be indifferent to money.
This isn't quite true. It is true that all they really care about
is doing interesting work. But if you make enough money, you get
to work on whatever you want, and for that reason hackers are
attracted by the idea of making really large amounts of money.
But as long as they still have to show up for work every day, they
care more about what they do there than how much they get paid for
it.
Economically, this is a fact of the greatest importance, because
it means you don't have to pay great hackers anything like what
they're worth. A great programmer might be ten or a hundred times
as productive as an ordinary one, but he'll consider himself lucky
to get paid three times as much. As I'll explain later, this is
partly because great hackers don't know how good they are. But
it's also because money is not the main thing they want.
What do hackers want? Like all craftsmen, hackers like good tools.
In fact, that's an understatement. Good hackers find it unbearable
to use bad tools. They'll simply refuse to work on projects with
the wrong infrastructure.
At a startup I once worked for, one of the things pinned up on our
bulletin board was an ad from IBM. It was a picture of an AS400,
and the headline read, I think, "hackers despise
it.'' [1]
When you decide what infrastructure to use for a project, you're
not just making a technical decision. You're also making a social
decision, and this may be the more important of the two. For
example, if your company wants to write some software, it might
seem a prudent choice to write it in Java. But when you choose a
language, you're also choosing a community. The programmers you'll
be able to hire to work on a Java project won't be as
smart as the
ones you could get to work on a project written in Python.
And the quality of your hackers probably matters more than the
language you choose. Though, frankly, the fact that good hackers
prefer Python to Java should tell you something about the relative
merits of those languages.
languages as standards. They don't want to bet the company on
Betamax. The thing about languages, though, is that they're not
just standards. If you have to move bits over a network, by all
means use TCP/IP. But a programming language isn't just a format.
A programming language is a medium of expression.
language. As a standard, you couldn't wish for more. But as a
medium of expression, you could do a lot better. Of all the great
programmers I can think of, I know of only one who would voluntarily
program in Java. And of all the great programmers I can think of
who don't work for Sun, on Java, I know of zero.
Great hackers also generally insist on using open source software.
Not just because it's better, but because it gives them more control.
Good hackers insist on control. This is part of what makes them
good hackers: when something's broken, they need to fix it. You
want them to feel this way about the software they're writing for
you. You shouldn't be surprised when they feel the same way about
the operating system.
A couple years ago a venture capitalist friend told me about a new
startup he was involved with. It sounded promising. But the next
time I talked to him, he said they'd decided to build their software
on Windows NT, and had just hired a very experienced NT developer
to be their chief technical officer. When I heard this, I thought,
these guys are doomed. One, the CTO couldn't be a first rate
hacker, because to become an eminent NT developer he would have
had to use NT voluntarily, multiple times, and I couldn't imagine
a great hacker doing that; and two, even if he was good, he'd have
a hard time hiring anyone good to work for him if the project had
to be built on NT. [2]
The Final Frontier
[...]