返回正常中文阅读
想对这篇译文“指手画脚”吗?
大错
小错
不顺
建议
Great Hackers
July 2004(This essay is derived from a talk at Oscon 2004.)
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 itefficient. I didn't want to waste people's time telling them thingsthey already knew. It's more efficient just to give them the diffs. ButI suppose that's bound to yield an alarming book.
Edisons
There's no controversy about which idea is most controversial: thesuggestion that variation in wealth might not be as big a problem as wethink.
I didn't say in the book that variation in wealth was in itself a goodthing. I said in some situations it might be a sign of good things. Athrobbing headache is not a good thing, but it can be a sign of a goodthing-- for example, that you're recovering consciousness after beinghit on the head.
Variation in wealth can be a sign of variation in productivity. (In a society of one, they're identical.) And thatis almost certainly a good thing: if your society has no variation inproductivity, it's probably not because everyone is Thomas Edison. It'sprobably because you have no Thomas Edisons.
In a low-tech society you don't see much variation in productivity. Ifyou have a tribe of nomads collecting sticks for a fire, how much moreproductive is the best stick gatherer going to be than the worst? Afactor of two? Whereas when you hand people a complex tool like acomputer, 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 thestudy he quoted was published in 1968. But I think he underestimatedthe variation between programmers. He wrote about productivity in linesof code: the best programmers can solve a given problem in a tenth thetime. But what if the problem isn't given? In programming, as in manyfields, the hard part isn't solving problems, but deciding whatproblems to solve. Imagination is hard to measure, but in practice itdominates the kind of productivity that's measured in lines of code.
Productivity varies in any field, but there are few in which it variesso much. The variation between programmers is so great that it becomesa difference in kind. I don't think this is something intrinsic toprogramming, though. In every field, technology magnifies differencesin productivity. I think what's happening in programming is just thatwe have a lot of technological leverage. But in every field the leveris getting longer, so the variation we see is something that more andmore fields will see as time goes on. And the success of companies, andcountries, will depend increasingly on how they deal with it.
If variation in productivity increases with technology, then thecontribution of the most productive individuals will not only bedisproportionately large, but will actually grow with time. When youreach the point where 90% of a group's output is created by 1% of itsmembers, you lose big if something (whether Viking raids, or centralplanning) drags their productivity down to the average.
If we want to get the most out of them, we need to understand theseespecially productive people. What motivates them? What do they need todo their jobs? How do you recognize them? How do you get them to comeand work for you? And then of course there's the question, how do youbecome one?
More than Money
I know a handful of super-hackers, so I sat down and thought about whatthey have in common. Their defining quality is probably that theyreally love to program. Ordinary programmers write code to pay thebills. Great hackers think of it as something they do for fun, andwhich they're delighted to find people will pay them for.
Great programmers are sometimes said to be indifferent to money. Thisisn't quite true. It is true that all they really care about is doinginteresting work. But if you make enough money, you get to work onwhatever you want, and for that reason hackers areattracted by the idea of making really large amounts of money. But aslong as they still have to show up for work every day, they care moreabout what they do there than how much they get paid for it.
Economically, this is a fact of the greatest importance, because itmeans you don't have to pay great hackers anything like what they'reworth. A great programmer might be ten or a hundred times as productiveas an ordinary one, but he'll consider himself lucky to get paid threetimes as much. As I'll explain later, this is partly because greathackers don't know how good they are. But it's also because money isnot the main thing they want.
What do hackers want? Like all craftsmen, hackers like good tools. Infact, that's an understatement. Good hackers find it unbearable to usebad tools. They'll simply refuse to work on projects with the wronginfrastructure.
At a startup I once worked for, one of the things pinned up on ourbulletin board was an ad from IBM. It was a picture of an AS400, andthe headline read, I think, "hackers despise it.'' [1]
When you decide what infrastructure to use for a project, you're notjust making a technical decision. You're also making a social decision,and this may be the more important of the two. For example, if yourcompany wants to write some software, it might seem a prudent choice towrite it in Java. But when you choose a language, you're also choosinga community. The programmers you'll be able to hire to work on a Javaproject won't be as smartas the ones you could get to work on a project written in Python. Andthe quality of your hackers probably matters more than the language youchoose. Though, frankly, the fact that good hackers prefer Python toJava should tell you something about the relative merits of thoselanguages.
Business types prefer the most popular languages because they viewlanguages 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 aprogramming language isn't just a format. A programming language is amedium of expression.
I've read that Java has just overtaken Cobol as the most popularlanguage. As a standard, you couldn't wish for more. But as a medium ofexpression, you could do a lot better. Of all the great programmers Ican 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. Notjust because it's better, but because it gives them more control. Goodhackers insist on control. This is part of what makes them goodhackers: when something's broken, they need to fix it. You want them tofeel this way about the software they're writing for you. You shouldn'tbe surprised when they feel the same way about the operating system.
A couple years ago a venture capitalist friend told me about a newstartup he was involved with. It sounded promising. But the next time Italked to him, he said they'd decided to build their software onWindows NT, and had just hired a very experienced NT developer to betheir chief technical officer. When I heard this, I thought, these guysare doomed. One, the CTO couldn't be a first rate hacker, because tobecome an eminent NT developer he would have had to use NT voluntarily,multiple times, and I couldn't imagine a great hacker doing that; andtwo, even if he was good, he'd have a hard time hiring anyone good towork for him if the project had to be built on NT. [2]
The Final Frontier
After software, the most important tool to a hacker is probably hisoffice. Big companies think the function of office space is to expressrank. But hackers use their offices for more than that: they use theiroffice as a place to think in. And if you're a technology company,their thoughts are your product. So making hackers work in a noisy,distracting environment is like having a paint factory where the air isfull of soot.
The cartoon strip Dilbert has a lot to say about cubicles, and withgood reason. All the hackers I know despise them. The mere prospect ofbeing interrupted is enough to prevent hackers from working on hardproblems. If you want to get real work done in an office with cubicles,you have two options: work at home, or come in early or late or on aweekend, when no one else is there. Don't companies realize this is asign that something is broken? An office environment is supposed to besomething that helps you work, not something you work despite.
Companies like Cisco are proud that everyone there has a cubicle, eventhe CEO. But they're not so advanced as they think; obviously theystill view office space as a badge of rank. Note too that Cisco isfamous for doing very little product development in house. They get newtechnology by buying the startups that created it-- where presumablythe hackers did have somewhere quiet to work.
One big company that understands what hackers need is Microsoft. I oncesaw a recruiting ad for Microsoft with a big picture of a door. Workfor us, the premise was, and we'll give you a place to work where youcan actually get work done. And you know, Microsoft is remarkable amongbig companies in that they are able to develop software in house. Notwell, perhaps, but well enough.
If companies want hackers to be productive, they should look at whatthey do at home. At home, hackers can arrange things themselves so theycan get the most done. And when they work at home, hackers don't workin noisy, open spaces; they work in rooms with doors. They work incosy, neighborhoody places with people around and somewhere to walkwhen they need to mull something over, instead of in glass boxes set inacres of parking lots. They have a sofa they can take a nap on whenthey feel tired, instead of sitting in a coma at their desk, pretendingto work. There's no crew of people with vacuum cleaners that roarsthrough every evening during the prime hacking hours. There are nomeetings or, God forbid, corporate retreats or team-building exercises.And when you look at what they're doing on that computer, you'll findit reinforces what I said earlier about tools. They may have to useJava and Windows at work, but at home, where they can choose forthemselves, you're more likely to find them using Perl and Linux.
Indeed, these statistics about Cobol or Java being the most popularlanguage can be misleading. What we ought to look at, if we want toknow what tools are best, is what hackers choose when they can choosefreely-- that is, in projects of their own. When you ask that question,you find that open source operating systems already have a dominantmarket share, and the number one language is probably Perl.
Interesting
Along with good tools, hackers want interesting projects. What makes aproject interesting? Well, obviously overtly sexy applications likestealth planes or special effects software would be interesting to workon. But any application can be interesting if it poses novel technicalchallenges. So it's hard to predict which problems hackers will like,because some become interesting only when the people working on themdiscover a new kind of solution. Before ITA (who wrote the softwareinside Orbitz), the people working on airline fare searches probablythought it was one of the most boring applications imaginable. But ITAmade it interesting by redefining the problem in a more ambitious way.
I think the same thing happened at Google. When Google was founded, theconventional wisdom among the so-called portals was that search wasboring and unimportant. But the guys at Google didn't think search wasboring, and that's why they do it so well.
This is an area where managers can make a difference. Like a parentsaying to a child, I bet you can't clean up your whole room in tenminutes, a good manager can sometimes redefine a problem as a moreinteresting one. Steve Jobs seems to be particularly good at this, inpart simply by having high standards. There were a lot of small,inexpensive computers before the Mac. He redefined the problem as: makeone that's beautiful. And that probably drove the developers harderthan any carrot or stick could.
They certainly delivered. When the Mac first appeared, you didn't evenhave to turn it on to know it would be good; you could tell from thecase. A few weeks ago I was walking along the street in Cambridge, andin someone's trash I saw what appeared to be a Mac carrying case. Ilooked inside, and there was a Mac SE. I carried it home and plugged itin, and it booted. The happy Macintosh face, and then the finder. MyGod, it was so simple. It was just like ... Google.
Hackers like to work for people with high standards. But it's notenough just to be exacting. You have to insist on the right things.Which usually means that you have to be a hacker yourself. I've seenoccasional articles about how to manage programmers. Really thereshould be two articles: one about what to do if you are yourself aprogrammer, and one about what to do if you're not. And the secondcould probably be condensed into two words: give up.
The problem is not so much the day to day management. Really goodhackers are practically self-managing. The problem is, if you're not ahacker, you can't tell who the good hackers are. A similar problemexplains why American cars are so ugly. I call it the design paradox.You might think that you could make your products beautiful just byhiring a great designer to design them. But if you yourself don't havegood taste, how areyou going to recognize a good designer? By definition you can't tellfrom his portfolio. And you can't go by the awards he's won or the jobshe's had, because in design, as in most fields, those tend to be drivenby fashion and schmoozing, with actual ability a distant third. There'sno way around it: you can't manage a process intended to producebeautiful things without knowing what beautiful is. American cars areugly because American car companies are run by people with bad taste.
Many people in this country think of taste as something elusive, oreven frivolous. It is neither. To drive design, a manager must be themost demanding user of a company's products. And if you have reallygood taste, you can, as Steve Jobs does, make satisfying you the kindof problem that good people like to work on.
Nasty Little Problems
It's pretty easy to say what kinds of problems are not interesting:those where instead of solving a few big, clear, problems, you have tosolve a lot of nasty little ones. One of the worst kinds of projects iswriting an interface to a piece of software that's full of bugs.Another is when you have to customize something for an individualclient's complex and ill-defined needs. To hackers these kinds ofprojects are the death of a thousand cuts.
The distinguishing feature of nasty little problems is that you don'tlearn anything from them. Writing a compiler is interesting because itteaches you what a compiler is. But writing an interface to a buggypiece of software doesn't teach you anything, because the bugs arerandom. [3] So it's not just fastidiousness that makes good hackersavoid nasty little problems. It's more a question of self-preservation.Working on nasty little problems makes you stupid. Good hackers avoidit for the same reason models avoid cheeseburgers.
Of course some problems inherently have this character. And because ofsupply and demand, they pay especially well. So a company that found away to get great hackers to work on tedious problems would be verysuccessful. How would you do it?
One place this happens is in startups. At our startup we had RobertMorris working as a system administrator. That's like having theRolling Stones play at a bar mitzvah. You can't hire that kind oftalent. But people will do any amount of drudgery for companies ofwhich they're the founders. [4]
Bigger companies solve the problem by partitioning the company. Theyget smart people to work for them by establishing a separate R&Ddepartment where employees don't have to work directly on customers'nasty little problems. [5] In this model, the research departmentfunctions like a mine. They produce new ideas; maybe the rest of thecompany will be able to use them.
You may not have to go to this extreme. Bottom-up programmingsuggests another way to partition the company: have the smart peoplework as toolmakers. If your company makes software to do x, have onegroup that builds tools for writing software of that type, and anotherthat uses these tools to write the applications. This way you might beable to get smart people to write 99% of your code, but still keep themalmost as insulated from users as they would be in a traditionalresearch department. The toolmakers would have users, but they'd onlybe the company's own developers. [6]
If Microsoft used this approach, their software wouldn't be so full ofsecurity holes, because the less smart people writing the actualapplications wouldn't be doing low-level stuff like allocating memory.Instead of writing Word directly in C, they'd be plugging together bigLego blocks of Word-language. (Duplo, I believe, is the technical term.)
Clumping
Along with interesting problems, what good hackers like is other goodhackers. Great hackers tend to clump together-- sometimes spectacularlyso, as at Xerox Parc. So you won't attract good hackers in linearproportion to how good an environment you create for them. The tendencyto clump means it's more like the square of the environment. So it'swinner take all. At any given time, there are only about ten or twentyplaces where hackers most want to work, and if you aren't one of them,you won't just have fewer great hackers, you'll have zero.
Having great hackers is not, by itself, enough to make a companysuccessful. It works well for Google and ITA, which are two of the hotspots right now, but it didn't help Thinking Machines or Xerox. Sun hada good run for a while, but their business model is a down elevator. Inthat situation, even the best hackers can't save you.
I think, though, that all other things being equal, a company that canattract great hackers will have a huge advantage. There are people whowould disagree with this. When we were making the rounds of venturecapital firms in the 1990s, several told us that software companiesdidn't win by writing great software, but through brand, and dominatingchannels, and doing the right deals.
They really seemed to believe this, and I think I know why. I thinkwhat a lot of VCs are looking for, at least unconsciously, is the nextMicrosoft. And of course if Microsoft is your model, you shouldn't belooking for companies that hope to win by writing great software. ButVCs are mistaken to look for the next Microsoft, because no startup canbe the next Microsoft unless some other company is prepared to bendover at just the right moment and be the next IBM.
It's a mistake to use Microsoft as a model, because their whole culturederives from that one lucky break. Microsoft is a bad data point. Ifyou throw them out, you find that good products do tend to win in themarket. What VCs should be looking for is the next Apple, or the nextGoogle.
I think Bill Gates knows this. What worries him about Google is not thepower of their brand, but the fact that they have better hackers. [7]
Recognition
So who are the great hackers? How do you know when you meet one? Thatturns out to be very hard. Even hackers can't tell. I'm pretty sure nowthat my friend Trevor Blackwell is a great hacker. You may have read onSlashdot how he made his own Segway. The remarkable thing about this project was that he wrote all the software in one day (in Python, incidentally).
For Trevor, that's par for the course. But when I first met him, Ithought he was a complete idiot. He was standing in Robert Morris'soffice babbling at him about something or other, and I rememberstanding behind him making frantic gestures at Robert to shoo this nutout of his office so we could go to lunch. Robert says he misjudgedTrevor at first too. Apparently when Robert first met him, Trevor hadjust begun a new scheme that involved writing down everything aboutevery aspect of his life on a stack of index cards, which he carriedwith him everywhere. He'd also just arrived from Canada, and had astrong Canadian accent and a mullet.
The problem is compounded by the fact that hackers, despite theirreputation for social obliviousness, sometimes put a good deal ofeffort into seeming smart. When I was in grad school I used to hangaround the MIT AI Lab occasionally. It was kind of intimidating atfirst. Everyone there spoke so fast. But after a while I learned thetrick of speaking fast. You don't have to think any faster; just usetwice as many words to say everything.
With this amount of noise in the signal, it's hard to tell good hackerswhen you meet them. I can't tell, even now. You also can't tell fromtheir resumes. It seems like the only way to judge a hacker is to workwith him on something.
And this is the reason that high-tech areas only happen arounduniversities. The active ingredient here is not so much the professorsas the students. Startups grow up around universities becauseuniversities bring together promising young people and make them workon the same projects. The smart ones learn who the other smart onesare, and together they cook up new projects of their own.
Because you can't tell a great hacker except by working with him,hackers themselves can't tell how good they are. This is true to adegree in most fields. I've found that people who are great atsomething are not so much convinced of their own greatness as mystifiedat why everyone else seems so incompetent.
But it's particularly hard for hackers to know how good they are,because it's hard to compare their work. This is easier in most otherfields. In the hundred meters, you know in 10 seconds who's fastest.Even in math there seems to be a general consensus about which problemsare hard to solve, and what constitutes a good solution. But hacking islike writing. Who can say which of two novels is better? Certainly notthe authors.
With hackers, at least, other hackers can tell. That's because, unlikenovelists, hackers collaborate on projects. When you get to hit a fewdifficult problems over the net at someone, you learn pretty quicklyhow hard they hit them back. But hackers can't watch themselves atwork. So if you ask a great hacker how good he is, he's almost certainto reply, I don't know. He's not just being modest. He really doesn'tknow.
And none of us know, except about people we've actually worked with.Which puts us in a weird situation: we don't know who our heroes shouldbe. The hackers who become famous tend to become famous by randomaccidents of PR. Occasionally I need to give an example of a greathacker, and I never know who to use. The first names that come to mindalways tend to be people I know personally, but it seems lame to usethem. So, I think, maybe I should say Richard Stallman, or LinusTorvalds, or Alan Kay, or someone famous like that. But I have no ideaif these guys are great hackers. I've never worked with them onanything.
If there is a Michael Jordan of hacking, no one knows, including him.
Cultivation
Finally, the question the hackers have all been wondering about: how doyou become a great hacker? I don't know if it's possible to makeyourself into one. But it's certainly possible to do things that makeyou stupid, and if you can make yourself stupid, you can probably makeyourself smart too.
The key to being a good hacker may be to work on what you like. When Ithink about the great hackers I know, one thing they have in common isthe extreme difficulty of making them work on anything they don't want to. I don't know if this is cause or effect; it may be both.
To do something well you have to loveit. So to the extent you can preserve hacking as something you love,you're likely to do it well. Try to keep the sense of wonder you hadabout programming at age 14. If you're worried that your current job isrotting your brain, it probably is.
The best hackers tend to be smart, of course, but that's true in a lotof fields. Is there some quality that's unique to hackers? I asked somefriends, and the number one thing they mentioned was curiosity. I'dalways supposed that all smart people were curious-- that curiosity wassimply the first derivative of knowledge. But apparently hackers areparticularly curious, especially about how things work. That makessense, because programs are in effect giant descriptions of how thingswork.
Several friends mentioned hackers' ability to concentrate-- theirability, as one put it, to "tune out everything outside their ownheads.'' I've certainly noticed this. And I've heard several hackerssay that after drinking even half a beer they can't program at all. Somaybe hacking does require some special ability to focus. Perhaps greathackers can load a large amount of context into their head, so thatwhen they look at a line of code, they see not just that line but thewhole program around it. John McPhee wrote that Bill Bradley's successas a basketball player was due partly to his extraordinary peripheralvision. "Perfect'' eyesight means about 47 degrees of verticalperipheral vision. Bill Bradley had 70; he could see the basket when hewas looking at the floor. Maybe great hackers have some similar inbornability. (I cheat by using a very dense language, which shrinks the court.)
This could explain the disconnect over cubicles. Maybe the people incharge of facilities, not having any concentration to shatter, have noidea that working in a cubicle feels to a hacker like having one'sbrain in a blender. (Whereas Bill, if the rumors of autism are true,knows all too well.)
One difference I've noticed between great hackers and smart people in general is that hackers are more politically incorrect.To the extent there is a secret handshake among good hackers, it's whenthey know one another well enough to express opinions that would getthem stoned to death by the general public. And I can see why politicalincorrectness would be a useful quality in programming. Programs arevery complex and, at least in the hands of good programmers, veryfluid. In such situations it's helpful to have a habit of questioningassumptions.
Can you cultivate these qualities? I don't know. But you can at leastnot repress them. So here is my best shot at a recipe. If it ispossible to make yourself into a great hacker, the way to do it may beto make the following deal with yourself: you never have to work onboring projects (unless your family will starve otherwise), and inreturn, you'll never allow yourself to do a half-assed job. All thegreat hackers I know seem to have made that deal, though perhaps noneof them had any choice in the matter.
Notes
[1] In fairness, I have to say that IBM makes decent hardware. I wrote this on an IBM laptop.
[2] They did turn out to be doomed. They shut down a few months later.
[3] I think this is what people mean when they talk about the "meaningof life." On the face of it, this seems an odd idea. Life isn't anexpression; how could it have meaning? But it can have a quality thatfeels a lot like meaning. In a project like a compiler, you have tosolve a lot of problems, but the problems all fall into a pattern, asin a signal. Whereas when the problems you have to solve are random,they seem like noise.
[4] Einstein at one point worked designing refrigerators. (He had equity.)
[5] It's hard to say exactly what constitutes research in the computerworld, but as a first approximation, it's software that doesn't haveusers.
I don't think it's publication that makes the best hackers want to workin research departments. I think it's mainly not having to have a threehour meeting with a product manager about problems integrating theKorean version of Word 13.27 with the talking paperclip.
[6] Something similar has been happening for a long time in theconstruction industry. When you had a house built a couple hundredyears ago, the local builders built everything in it. But increasinglywhat builders do is assemble components designed and manufactured bysomeone else. This has, like the arrival of desktop publishing, givenpeople the freedom to experiment in disastrous ways, but it iscertainly more efficient.
[7] Google is much more dangerous to Microsoft than Netscape was.Probably more dangerous than any other company has ever been. Not leastbecause they're determined to fight. On their job listing page, theysay that one of their "core values'' is "Don't be evil.'' From acompany selling soybean oil or mining equipment, such a statement wouldmerely be eccentric. But I think all of us in the computer worldrecognize who that is a declaration of war on.
Thanks to Jessica Livingston, Robert Morris, and Sarah Harlin for reading earlier versions of this talk.
顶尖黑客
译者按:
1.作者Paul Graham
是一个Lisp黑客
,同时也是Y-Combinator
的联合创始人(什么是Y-combinator的本意?看看这里
,可惜我没有看懂,不过我猜想和Lisp有很深的关系,好像是lambda算子
可以推出Y)
2.这篇文章是作者的Essays系列
,注意它不是blog,也就是说,这是TMD文学作品。不得不承认,这篇文章从篇章结构到遣词造句,都已经超越我了E文水平。(也许只在四六级考试里见过...)这里
是我在google docs上的草稿,如果你发现错误,尚请顺手改过来。(我在翻阅这篇文章的同时,发现了另一个老兄
已经翻译了Paul的几篇作品
)
3.翻译这篇文章的缘起是一个无聊星期六的中午和下午。不过能够坚持把它读完并打算把它译出来则是因为我自己最近的经历和体验。
=====================================
========下面进入正题======================
=====================================
(这篇散文源于2004年Oscon
上的一个演讲)
几个月前我刚刚完成了一本书
,在书评中我发现了书评中诸如这样的字眼,“煽动的”,“争议的”,更别说还有“白痴般的”评价。
我无意使那本书处于争议之中,我只是试图更有效率,告诉你们已经知道的事情是浪费你们的时间。不同是更有效的方法,不过这注定产生一本火药味的书。
爱迪生们
关于哪个是最有争议的观点中,这一个无疑没有太大异议:寻求更多的变化,这并不是像我们想得那样的大问题。
我没有在书中说寻求变化本身就一定是件好事,而是说在某些情况下这是一个好的征兆。脑袋的阵痛也许不是好事,但是有时,譬如在受到头部重击之后恢复意识的时候,就是一件好事。
力求变化可能是生产力提高的一个征兆(在一般意义上,他们几乎是同义词),这几乎永远是一件好事,如果社会的生产力停滞不前,多半不是因为人人都是爱迪生。相反是因为没有爱迪生。
在科技不发达的社会里,生产力上面的差异可能不是那么显著。在一个到处捡柴生火的游牧部落中,一个最好的捡柴禾者比最差的捡柴禾者能强多少呢?两倍吗?但是在操作像计算机这样复杂的的工具时,个体之间生产力的差异将是巨大的。
这些并不是新观念,Fred Brooks早在1974年就把它们写了下来,而他引用的研究成果发表于1968年。不过我认为Brooks还是低估了程序员之间的差异。Brooks是以代码行来描述生产力的:最好的程序员能在1/10的时间内解决问题。但是如果连问题都还没有给出呢?在程序世界的许多领域,最难得恰恰不是解决问题,而是要解决什么问题。想象力是无法量化的,但在实践中,就衡量生产力而言,占据支配地位的标准却是可以量化的代码行。
几乎所有领域的生产力都在提高,不过到目前为止,得到显著提高的领域为数有限。程序员之间的巨大差异看起来就是得到巨大提高的一个例子,不过我不认为这是写程序的固有特征。在所有领域,技术是放大生产力之间的差异的杠杆。我想在写程序上存在着特别多的技术杠杆。就当下来看,所有领域中杠杆都在变长,所以在越来越多的领域中,差异也会随着时间的推移越来越显著。公司的成功,甚或国家的成功,都取决于他们对于这种将要发生的,在效率方面差异所要采取的对策。
如果说在生产力上面的差异会随着技术而增长,那么随着时间的推移,最有效率的个体对整体做出的贡献也会不成比例的扩大。当1%的成员贡献了90%的产出时,把他们的效率拉到平均水平会使整体损失巨大。(不管是海盗出击,还是计划经济)
如果我们希望得到最大的产出,我们需要理解这些有着最高效率的人。什么是他们的驱动力?他们需要什么来完成他们的工作?如何识别他们?如何让他们为你工作?最后必然是这个问题,如何成为其中的一员?
不仅仅是钱
碰巧我认识几个超级黑客,于是我开始坐下并思考什么是他们的共同点。决定性的品质很可能是他们真的热爱编程。一般程序员写代码是为了讨生活。顶尖的黑客认为这是让他们得到乐趣的途径,更让人兴奋的是还会有人付钱给他们。
大多数时候人们认为顶尖的程序员对钱漠不关心,不幸这并不那么对。不过他们真正在乎的是他们正在做有趣的事情。为了这样的理由:能够赚足够多的钱,做任何想做的事,黑客们会被赚取巨大财富的主意吸引。一旦他们面对日常工作,他们就会更加关心他们要做什么,而不是能够得到多少报酬。
从经济学的角度看,你不需要向顶尖的黑客支付等同于他们身价的薪水,这是一个非常重要的事实。在生产力上,顶尖的程序员是一般人的数十倍甚至上百倍,他们却为自己得到了三倍的薪资而暗自高兴。后面我会提到,部分的原因是顶尖的程序员不清楚他们自己有多棒,同时对于他们来说,金钱也不是他们想要的最主要的东西。
什么是一个黑客真正希望拥有的?就像所有的手艺人那样,黑客最喜欢的是好的工具。有一句这样的话,好黑客绝不容忍差工具。对于那些构建在错误基础设施之上的项目,他们会简单得说不。
在我曾经工作过的一个创业团队当中,有一样东西是钉在我们的公告板上面的,那是一张IBM的广告。那是一张AS400
的图片,我想我能读到的标题就是“黑客不鸟它”[1]
当你决定在项目中使用什么基础设施时,不仅仅是作一个技术决定,同时也是一个社会学意义上的决定,并且后一个才是两者之中真正重要的决定。例如,你的公司决定写一个软件,看起来似乎用Java来做是一个谨慎的做法。但是在你选择编程语言的时候,你同时也是选择了一个社区。你能够雇佣的Java程序员可能不如那个使用Python的程序员,黑客的质量要比起你要选择的语言的要更加重要。并且实际上,那个使用Python而不是Java的家伙会告诉你他使用的语言(python)有多棒。
商业决定通常倾向于更流行的语言,因为它们把这些看作标准。它们不会把公司的未来赌在Betamax
上面。但是问题是语言不仅仅是个标准。如果你需要在网络上传输比特,那意味着使用TCP/IP。程序语言不仅仅是格式,而是一种表达的媒介。
我曾经读到Java已经取代Cobol成为最流行的语言。作为一个标准,你不可能再奢望更多。但是作为表达的媒介,你可以做得更好。在所有我能想到的最好的程序员中,我知道只有一个会自愿使用java。而所有这些人,没有人愿意在java上为Sun工作.
通常顶级的黑客坚持使用开源软件。不仅是它们更好,而且开源提供给他们更多的控制。好的黑客坚持控制,这是为什么他们是好的黑客的部分原因:当什么东西不对劲时,他们需要修正它。当你需要黑客们按照上面的方式去写软件的时候,对于黑客们要求他们使用的OS也应该如此时,不要感到惊讶。
数年以前,一个风险投资人朋友告诉我他正参与一个创业的团队,一切听上去很好。但是第二次我们谈到,他们决定在windows NT上面构建他们的软件 ,并且刚刚雇佣了一名非常有经验的NT开发者作为他们的CTO,我想这些家伙真是逊掉了。首先,这个CTO不可能是第一流的黑客,因为一名优秀的NT开发者会不自觉地倾向使用NT,我不能想象一个顶级的黑客会这样;其次,即使这个家伙足够棒,在使用NT的项目中,很难雇佣到一个优秀的开发者。[2]
终极边界
除了软件,对黑客来说最仰仗的工具就是他的办公室。大公司认为办公室空间的功能是等级的表示。不过黑客们是这样来使用他们的办公室的:办公室是思考的场所。如果是一家技术公司,他们思考的东西就是你的产品。所以,让黑客们工作在嘈杂混乱的环境下就像是一个空气中充满了煤烟的画室。
呆伯漫画
中总是以赞赏的态度提到小休息室。不过我认识的所有黑客对此都不屑一顾,被打断意味着阻止黑客们解决难题。如果希望在一间带着小休息室的办公室中作真正的工作,你有两个选择:在家工作,或者选择比其他人早或者比其他人迟,或者在周末,总之是没有其他人在的时候。那些公司难道没有看出这有什么不对劲么?办公室理应是帮助你工作的地方,而不是这就是你工作的地方。
像Cisco这样的公司总是自豪的宣称每个人,甚至是CEO,都有一个小休息室。但是他们并不是像他们自己想的那样前卫。显然他们还是把办公室空间看作等级的徽章。注意Cisco是以在家里开发的,很小的产品而著称,但是这些产品都来自对那些创业者的新技术的收购。这些创业者的信条是:黑客需要在安静的地方工作。
理解这些黑客们的需要有一家大公司,M$,我见过一张M$的招聘广告,上面是一个大大的门。这里的逻辑是,为我们工作,我们会给你个地方,你的确能够把工作完成。在大公司中,M$对于在提倡像在家里那样开发软件的理念是突出的。不是最好,但已经足够好。
如果公司希望黑客们有效率,它们应该关注一下黑客们在家里是怎么工作的。在家里,黑客们可以自己安排要做的事情,并将其中的绝大多数完成。而当黑客们在家里工作时,他们不会工作在嘈杂的,开放的空间中,他们是工作在门的后面。当他们需要费力思考时,他们工作在舒适的,周围有人的,有地方可以散步的环境中,而不是在停着许多车子的大停车场旁边的几个玻璃盒子中。当他们感觉疲倦时有沙发可以小憩,而不是在桌子旁边昏昏沉沉。在夜晚,这是 最主要的黑客时段,没有人拿着真空吸尘器咆哮,也没有会议和上帝禁止的集体反思乃至团队建设活动。当你望向他们的电脑时,你会巩固我先前说过的工具的观念,在工作上他们可能不得不使用java和windows,但是在家里,他们可以自己作主的地方,你很可能发现他们在使用Perl和Linux
实际上,那些关于Cobol和Java是最流行语言的统计数据可能是误导。如果我们想知道那些工具是最好的,我们应该考虑到的是黑客可以自由选择的工具。也就是黑客们自己的项目。当你问这个问题,你会发现开源OS已经占据决定性的市场份额,排名第一的语言则是Perl。
兴趣
有了好的工具,黑客们还希望有趣的项目。怎样让一个项目有趣?哦,那些公然的,性感的应用,比如偷飞机或者软件的特别作用是非常有趣的。只要准备迎接新奇技术的挑战,任何应用都是有趣的。事实上很难猜测黑客们喜好的问题,因为工作在那些无趣问题上的人通过发现新的解决方法,会使问题变得有趣。在ITA之前(Orbit上的软件
由他们完成),飞机票费用搜索可能是可以想到的最无趣的应用。不过ITA将问题换成更具雄心的描述方式之后,事情变得有趣了。
我认为相同的事情也发生在google身上,google建立时,传统智慧
认为在门户中搜索是无聊的,不重要的。不过这些家伙不认为搜索是无趣的,这就是为什么它们做的这么好的原因。
这里是经理可以做出贡献的地方。就像父母对孩子说,我打赌你在10分钟内不能把房间打扫干净。好的管理者可以把问题重新定义的更加有趣。Steve Jobs在这方面好像特别擅长,部分的原因不过是他的高标准而已。在Mac之前有很多小的,便宜的电脑。他把问题重新定义为:做一个漂亮的。这可能比任何胡萝卜加大棒都更有效。
他们当然成功了,在Mac第一次面世时,你甚至不必开机就知道它到底有多好。从这个案例中你应该可以学到什么。就在几个星期前,我走在剑桥的街道上,在某人丢弃的垃圾中我发现了Mac的包装盒,我向里看了一眼,那不是一台Mac SE
吗!我把它带回家,插上电,然后它启动了。快乐的Macintosh标志,然后是finder
。天啊,就是这么简单,就像...google(sorry,不熟悉Mac,所以什么是Macintosh face? 我翻译成标志)
黑客们喜欢和高标准的人一起工作,但是仅仅严格要求是不够的。你还必须坚持正确的事情,通常这意味着你自己也必须是一名黑客。我偶尔可以看到如何管理程序员的文章。实际上这里有俩个主题:一个是自己是程序员时要做什么,另一个是你不是程序员时你要做什么。第二种情况可以简单的浓缩为一个词:放弃
问题并不是出在日常的管理上,好的黑客都是自我管理者。问题是,如果你不是黑客,你就不能辨别谁是好的黑客。类似的我们可以解释为什么美国的汽车都很丑陋。我称之为设计悖论,你可能认为我只要雇佣好的设计者就可以设计出漂亮的产品。但是没有好品味,你怎么才能辨识好的设计者呢?名义上你可以考察他的履历,但是仅仅是得过的奖项和曾经拥有的工作是不行的。因为在设计上,或者说在所有领域,那些被时髦和人云亦云驱使的人,是没有能力做一个合格的第三方的。 下面这样是行不通的:不了解什么是美,却希望通过控制流程来制造漂亮的事物。美国汽车的丑陋是因为美国的汽车公司是一帮没有品味的人在把持。
这个国家的很多人认为品味是飘忽的,甚至是反复无常的,但是两者都不对。出色的设计中,经理应该是公司产品的要求最高的使用者。如果你确实有不错的品味,Steve Jobs就做到了,你可以在满足自己的要求的同时,让最好的人甘心为你工作。
琐碎的小问题
非常容易分辨出什么问题是无趣的:那些不是宏大的,清楚的,困难的的问题,但是你必须一个个去解决的很琐碎的问题。为一个到处是bug的软件的写界面就是一件最差的事。为每个客户提供复杂的,病态要求的定制是另一个差的不能再差的事。对于一个黑客来说这不谛于千刀万剐。
琐碎的事的显著特征就是你不能从中学习。写一个编译器是有趣的,因为你从中学到了什么是编译器。而为到处是bug的软件的写界面却不能教会你任何东西。因为bug是必然会产生的[3]。这里不是说让一个顶尖的黑客尽量远离琐碎的问题,这也不仅仅是自我保护的本能。做琐碎的事情会让你变蠢,就像模特远离奶酪三明治一样,顶尖的黑客也会远离这种问题。
当然有时必然需要这种角色。并且由于供需比例,他们也会得到非常好的报酬。就公司而言,找一个顶尖的黑客来做这些乏味的工作的尝试是有可能成功的。你怎样才能做到呢?
这种情况会发生在一个地方,就是在创业者当中。在我们创业时,我们找到了Robert Morris
做系统管理员。是不是感觉就像滚石乐队在酒吧里做善事,所以你不可能雇佣到这样的天才。但是他们会为他们自己的公司吃任何苦头。[4]
大一点的公司可以通过拆分公司来解决这个问题。他们可以成立单独的R&D部门来雇用聪明的家伙,好让他们不必直接面对刁钻的客户[5]。在这种情形下,研究部门相当于一座宝矿,产生公司其他部门使用的新奇主意。
不过你可能不需要如此极端。自下至顶编程法
建议的另一种分割公司的方法:让聪明人成为工具制造人。如果你的公司制造生产其他什么东西的软件,那就让一小群人来做,然后用这些工具软件来写你的应用。这种方法可以让聪明的家伙为你完成98%的代码,同时又可以像传统的研究部门那样,让他们几乎和用户绝缘。工具制造者的确有用户,不过面对的是公司里的开发者。[6]
如果M$使用这种发式,他们的软件就不会到处是安全漏洞。正是因为不那么聪明的家伙是不太会考虑底层的操作,比如内存分配。所以不要用C来直接写Word,应该用像搭建Lego
的积木那样的Word语言。(Duplo
,我相信这是一个太过于技术的术语)(不知道这里的Word是不是指得M$的Word)
群聚
除了有趣的事情,黑客们最欣赏的是另一个好家伙。顶尖的黑客倾向于聚集一处——有时非常壮观,譬如在施乐帕洛阿尔托研究中心
。所以所能营造出来上佳的氛围是和你能招徕到的黑客是成比例的。群聚的含义就是这样的一个氛围。所以赢者通吃,在任意时段,只有那么10到20个地方是黑客们希望工作的地方。如果不在其中,你不会招揽到少数几个黑客,而是零个。
是否拥有顶级黑客,仅就此而言,已经足够让你的公司成功的假设,对于google和ITA而言,两个目前的最炙手可热的地方,这是正确的。(译者:这是在2004,ITA是什么东西
?)但是这救不了Thinking Mchines
和施乐。Sun有一段时间做的很好,但是他们的商业模式在飞速的走下坡路,在这种情况下,甚至是最好的黑客也不能拯救你。
我认为在其他条件等同的情况下,能吸引到黑客是公司的一项巨大的优势。可能有人对此不同意,在我们于90年代开办VC企业的时候,一些人告诉我们软件公司不会通过写伟大的软件获胜,但是品牌和渠道能帮助他们成为好买卖。
他们好像很相信这一点,我想我明白为什么。我认为许多VCs在寻找下一个M$,至少是无意识的。当然M$就是你的模型,你不应寻找希望通过写好软件来获胜的公司。但是VCs寻找下一个M$是一个错误,因为没有创业公司会成为下一个M$,除非是其他人恰巧在正确的时刻屈服,转而去做下一个IBM。
把M$当作模型是一个错误,因为他们整个的文化继承于一个幸运的突破点。M$是一个错误数据,如果你把M$抛在脑后,你会发现在市场上还是好的产品更容易成功。VCs们更应该关注下一个Apple,下一个Google
我认为Bill Gates很清楚这一点,让他真正担忧不是Google的品牌,而是Google有着更好的黑客[7]。
辨识
那么谁是顶尖黑客呢?当你遇到一个时你怎么知道他就是呢?这非常困难。甚至是黑客们自己也不能辨别。我现在可以非常肯定我的朋友Trevor Blackwell
是一顶级黑客。你可能在slashdot上面
读到过他曾经做出来他自己的赛格威
电动车。令人印象深刻的是它在一天之内就写出了所有的软件(顺便提一句,他用的是python)
对Trevor 而言,这是非常平常的。不过我第一次碰到他的时候,我想这家伙真是一个完完全全的白痴。他站在Robert Morris的办公室中,嘴里胡乱的说着什么,我还能记得在他后面,Robert做着夸张的动作试图把这个怪人赶出办公室,好和我一起去吃午饭。 Robert说他一开始也错误的判断了Trevor。当Robert第一次碰到Trevor时,Trevor刚刚开始一项计划,他随身携带这些带索引的小卡片,并把个人生活的每一个方面都记在上面。Trevor那时刚从加拿大来,带着很浓的加拿大口音和他那mullet
发型。(这个找不到对应的中文词^^,hacker就是hacker)
问题在于,黑客是这样的混合体:除了他们那不善于社交的名声之外,通常他们还会付出很大的努力使得自己看起来聪慧。当我还个高中生时,我时常在MIT人工智能实验室旁边晃荡。那的确是压抑的感觉,每个人说话说得快极了。不过一段时间之后,我就发现了其中的诀窍。你的思维不需要很快,不过需要用两倍的话语来表达任何事情。
从这些纷杂的情形里传出来到信号就是,当你碰到好的黑客时认出他们是很困难的。我自己直到今天还不能辨别。你也不能从他们的简历中辨别它们。看起来唯一的途径就是和一个黑客一起工作一段时间。
这也就是高科技区域通常产生于大学的周围,这里主要是因为学生而不是教授。创业者成长在大学的周围是因为大学把这些有希望的年轻人带到一起,让他们工作在同一个项目上。一个聪明人找到了另一个,于是两个人就一起建起了他们自己的项目。
除了和他们一起工作就不能辨识好的黑客的假设对于黑客本人也适用,黑客们通常都意识不到自己有多棒。相比而言,这在其他大多数领域要容易得多。百米赛跑只需要10秒就可以知晓跑得最快的那个。甚至在数学上面哪些是公认的难题以及它们的最佳解决方案似乎也有一致的意见。但是做黑客就好像写作。谁能说在两部小说当中有一个更好呢?当然作者本人除外。
不过黑客在一起时,至少其他的家伙知道你是黑客。因为黑客并不是小说家,黑客在项目上相互协作。当你在网络上和别人较劲时,你很快会意识到还击是格外困难的。(When you get to hit a few difficult problems over the net at someone, you learn pretty quickly how hard they hit them back.)但是黑客们不能在工作中看到自己,如果你问一个顶级黑客他本人有多好,他一定会回答,我不知道。他这并不是在自谦,他是真的不知道。
除了那些我们确实在一起工作的人,其他的我们都不熟悉。这就导致了这样奇怪的情形:我们不知道谁应该是我们的英雄。那些赫赫有名的黑客通常只在特定的小圈子里有享有盛名。(The hackers who become famous tend to become famous by random accidents of PR. )通常当我需要给出顶级黑客例子的时候,我真的为很难。首先想到的肯定我认识的那些人,但是这样似乎有点眼界太小的意思。也许我应该给出像Richard Stallman,Linus Torvalds,Alan Kay这样有名的例子。但是我对于这些家伙是不是顶级的黑客一点没有底,因为我从来没有和他们在一起工作过。
如果黑客世界中有一个Michal Jordon,没有人会知道,包括他自己。(这是什么鬼意思)
养成
最后,关于黑客所有人都会感兴趣的问题是:如何才能成为一个顶级黑客?我不太确信你是否能成为其中一员。但是可以确信能够做点什么让你自己变得更蠢一点,如果你能让自己变蠢,你也很可能让自己变得更聪明。
成为一个好的黑客的关键是做你喜欢的工作。当我回想起那些我认识的顶尖黑客,他们共性是让他们做不想做的事情将是极端困难的。我不清楚这是原因还是结果,亦或二者兼具。
把事情做好的前提是热爱它,也就是你热爱什么东西你就会有持续hacking的动力。尝试去找在你14岁时迫不及待编程的感觉。如果你觉得现在的工作让你的大脑僵化,那么事实可能就是如此。
最好的黑客肯定是聪明的,但是其它很多领域最好的人也是聪明的人。那么对于黑客有什么是他们独特的品质呢?我问过一些朋友,他们首先提到的就是好奇心。不过我总是假定所有的聪明人都是好奇的——好奇是知识的自然延伸。但是明显的黑客特别好奇,特别是在事物如何工作方面。这就是意义所在,因为程序的绝大部分就是描述事情是如何运作的。
几个朋友提到黑客的能力在于专注——他们的能力就是,有人说的好,“把脑袋当中其他的一切杂念摒除”。我当然也很清楚这一点。我甚至听几个黑客说过,在没有喝掉半打啤酒之前他们是根本没有办法写程序的。所以hacking可能是在专注上是需要一些特别的能力的。可能顶尖的黑客在他们的大脑中可以容纳相当大的上下文,所以在他们看到一行行的代码是,他们不仅仅是看到了一行,而是整个程序。John Mcphee在写道Bill Bradley之所以是一个成功的篮球运动员时,部分的要归因于Bill那不同寻常的周围视野,“完美的”视野意味着水平47度的周围视野,Bill是70度,当他看像地板时他也能看见篮球。也许顶尖的黑客也有类似的与生俱来的能力。(我使用非常浓密的语言来欺骗,这会使我在法庭退缩)(I cheat by using a very dense
language, which shrinks the court天啊,这又是什么鬼意思)
这也可以解释很什么需要一个个单独的房间,对于在小房间里工作,也许从来不关注细节,管设备的人没有任何概念,不过黑客倾向于让自己的脑袋处于混乱的状态。(如果哪个孤僻症的谣言是真的,Bill对此显然非常了解)(是指Bill Gates?)
在顶尖黑客和一般意义上的聪明人之间,我注意到的一个区别是,黑客们通常都是政治错误的。好黑客之间心灵相通的奥秘,在他们很了解对方的时候,会相互表达对于公众来说是非常颠覆性的观点。我能看到的,为什么政治错误是编程上的一个好品质:程序是复杂的,在好的程序员手中尤其这样,非常灵活。在这种情形下,挑战假设就是一个很好的习惯了。
你能培养这些品质么?我不知道,至少你可以加强他们。这里我有一个良方。如果你希望自己成为一个顶尖黑客,尝试着对自己作这些事情吧:绝不工作在无聊的项目上(除非你真的没饭吃),作为报答,你也决不能允许自己做事只做一半。我认识的所有顶尖黑客都会把一票干完,虽然有时他们只是别无选择。
脚注
[1]平心而论,我不得不说IBM做硬件还是相当好的,我就是在IBM笔记本上写这篇文章的。
[2]他们的确走向了失败,几个月之后他们关门大吉了事。
[3]我想这也是人们通常所说的“生命的意义”。表面上看,这看起来很奇怪。生命不是一种表达;怎样才能有意义?但是保证品质会感觉更有意义。在一个写编译器的项目上,你不得不解决很多问题,但是所有的问题都属于一类,看起来都有相同的信号。在那些随机的产生问题的情况下,这好比是噪音。
[4]爱因斯坦曾经设计过电冰箱(他有股票)
[5]很难说什么是计算机世界里的研究,但是粗略可以等同于:那些没有用户的软件。
我不认为最好的黑客,就像公众认为的那样,倾向于工作在研究部门。我认为大部分原因是,不必和产品经理在一起开三个小时的会,来讨论第13.27条,即整合南韩版本的问题。
[6]在相当长的一段时间之内,相同的问题也发生在建筑界。几百年前建造房屋时,建筑师一切从头做起。慢慢的有人开始使用已经由别人造好的模块来构建房屋。这就像DTP
的发布,给了人们自由和损失惨重基础上的经验,但是显然这更有效。(不知道有什么典故)
[7]比起Netscape,Google是M$的真正威胁。也许是有史以来最危险的。不仅是他们决定对抗,在他们工作列表上,他们宣称一个“核心价值”是“不做恶”。从买豆油的公司到采矿设备公司,这样的宣言都不仅仅是古怪可以形容的了。我想计算机世界的所有人都知道谁宣布战争开始了。(这是在2004年)
致谢:感谢Jessica Livingston, Robert Morris, and Sarah Harlin审阅了这个讲稿的早期版本
http://www.itconversations.com/shows/detail188.html
读后感:
(原谅我既有译者按,又有译后感。不过既然我付出了劳动,总要让我表达自己的意见吧^^)
1.个人觉得这篇essay的风格还是正统硅谷风格的文章,或者说,介于黑客(hacker)和奇客(geek)之间,更倾向越黑客一点。虽然作者一直说的是黑客,不过我想黑客是信奉do it now的。表达的思想虽然有点激进,不过不妨碍他说出了很多事实。(在纠正人心上,矫弯必过正。)特别是既然在代码上不能强过你们,那么更要说点什么了。
2.前面说个人经历,我想在稍微说一点。就在最近几个月,我见识了:
- 在你debug一个下午,还在徒劳的寻找什么出错了的时候,别人只需要10分钟,再注释点几行code后,一切都正常了。是的,快速修改code的能力,文章里说黑客坚持控制,我原来也试图搞清楚一切,但是这样在出问题时你往往不能fix it。我想文章还说到了不仅仅看到了那一行code,这就是问题所在,基础的差异。
- 在别人说要需要修改代码,你花了一个星期去研究,还在各种纷繁复杂得class中试图搞清楚问题到底在哪里。别人去只花了2个小时,就了解了提出需求的人在想什么。然后快速定位了代码,虽然那些我都看过。是的,修改代码有时就像解数学题,问题面前除了排除法就是一片空白。我真是奇怪在初中是解几何题时的那种感觉那里去了。是的,这些已经不能说经验或者基础了,的确需要灵感。需要理解别人的表述风格,code的风格。一种语言就是一种表达的媒介。
- 还有在两个星期里反复看code,前一个星期也是空白,然后写code,然后改来改去,最后只需要200行就OK了

