`

<<More Joel on Software>> 飙高音

 
阅读更多

飙高音(译文)

作者: 阮一峰

日期: 2009年7月12日

是的,我还在翻译More Joel on Software 这本书。

300页,我干了8个月还没完工。出版社都快对我绝望了。

Joel的文章很不好译。他喜欢东拉西扯,喜欢文字游戏,喜欢使用延绵不断的长句,喜欢炫耀自己的知识面,这些都是对译者的折磨。就像下面这篇5000字的文章,整整花了我三天。现在,上海天天是37度的高温,我真是干得挥汗如雨(不是比喻用法喔)。

这本书的翻译费,扣除合同上的延期罚金后,已经可以忽略不计了。支持我的唯一动力,就是我觉得这本书有价值,值得传播。我还希望,在我彻底放弃译书之前,留下一本能够代表自己翻译水平的好书。

还是以下面这篇文章为例,Joel谈了一个重大问题:"最好的程序员"到底意味着什么。为什么我说这个问题很重大?因为你读完就会知道,在现行的商 业规则中,平庸者是没有报偿的,只有最优秀的人才能拿到超额报偿。用Joel的话说,就是"赢家通吃"。我认为,每个人都应该从这个角度,思考自己的人生 规划。当然,Joel的这篇文章写得太分散了,重点不突出,但是无论如何是非常具有启发性的。

我暗中为自己订下一个目标,就是希望我的翻译10年后还有人读。真的会有吗?.........

老实说,我觉得没问题。

=========================

飙高音

作者:Joel Spolsky

译者:阮一峰

原文网址:http://www.joelonsoftware.com/articles/HighNotes.html

发表日期 2005年7月25日,星期一

2000年3月,我的网站"Joel谈软件"开张了。我在上面大言不惭地说,大多数人都有一种错误的想法,他们认为必须先有一个好的点子,然后才能 开办一家成功的软件公司(www.joelonsoftware.com/articles/fog0000000074.html):

常见的看法是,你在开办软件公司之前,必须先找到一个好点子,认清你的目标市场是什么,想清楚你到底要解决前人没有解决的什么问题,然后再动手实 践,去挣大钱。我们把这种想法称为"先做好老鼠夹,再抓老鼠"(build-a-better-mousetrap)。但是,开办软件公司的真正目的,应 该是将资本转化为有用的软件。

过去5年中,我一直在现实中验证我的理论。2000年9月,我同Michael Pryor一起创办了Fog Creek软件公司,我们的理念可以总结为四个步骤:

这样的总结很合乎我们的情况,尤其反映了我们创办Fog Creek的真正目的,那就是创造一家我们愿意为之工作的软件公司。那个时候,我断言好的工作条件(或者,说得啰嗦一点,"开一家世界上最好的程序员想要 为之工作的公司")将带来利润,这是很自然的事情,就好像巧克力导致发胖、色_情电子游戏导致犯罪率升高一样。

不过,今天我不想深究这个话题,而只想谈一点,因为如果这一点不成立,我的整个理论一瞬间就灰飞烟灭了。这一点就是,谈论"最好的程序员"到底有没有意义?换句话说,程序员之间的能力差别真的有这么重要吗?

这个问题的答案,对我们来说显而易见,但是可能对其他许多人来说,它依然需要被证明。

几年前,一家大软件公司考虑并购Fog Creek。那家公司的CEO说,他不是很认同我的观点,不觉得雇佣最好的程序员有那么重要。我一听这话,就知道并购没戏。他用了《圣经》中的一个隐喻 ----你需要的只是一个大卫王[1](King David),然后再配上一支执行命令的军队就够了。没过多久,那家公司的股价快速地从20美元跌到了5美元,因此我们此前拒绝他们的并购要求,看上去就 很明智。当然,股价下跌的原因,不能归咎于那个CEO崇拜大卫王。

事实上,对于那些喜欢抄来抄去的财经记者,以及那些自己懒得思考、依赖高价请来的咨询公司代替思考的大公司,常识似乎就是,如果想要赚到钱,最重要的莫过于压低程序员的劳动力成本。

在有些行业,价格比质量重要。沃尔玛是世界上最大的公司,它的发家秘诀就是卖便宜货,而不是卖好货。如果沃尔玛只卖高质量的商品,商品的成本就要上 升,那么沃尔玛整个的价格优势就将丧失。以直筒袜(tube sock)为例,如果沃尔玛想出售经久耐穿的直筒袜,能够经得起各种各样的损耗,比如说,被洗衣机一直洗,也不会破,那么这样的直筒袜的各种成分,都必须 使用最好的原料(比如棉花),才能制造出来合格的成品,每双袜子的成本就必然上升。

既然如此,那么为什么低成本的软件供应商,就不能在软件业中生存下来呢?我们只雇佣最便宜的程序员,为什么就是不行?(说到这里,我想起了 Quark软件公司,我很想去问问他们,将整个开发团队都解雇,用低工资的程序员全部取代原来的高工资程序员,会有什么结果[2]。)

让我来告诉你原因,根本的一点就是软件的复制成本为0。这意味着,程序员的劳动力成本分摊在你销售出去的所有软件中。对软件来说,如果销售量很大,质量的改进并不会造成单位软件成本的上升。

本质上,软件质量的改进会创造出新价值,而且价值创造的速度要快于成本提升的速度。

或者,换一种不太严格的说法,如果你想压低程序员的工资,那么你就会得到质量很垃圾的软件,而这实际上也不会为你省下很多的钱。

这个现象在娱乐业中也存在。如果你想拍摄一部大片,花钱去请好莱坞大明星布拉德·皮特(Brad Pitt)主演,还是物有所值的。虽然他的开价很高,但是因为他是当红大明星,拥有巨大的票房号召力,几百万人会因为他而来看你的电影,你就能把他的报酬 分摊到这几百万人头上。

或者,改成这样说,如果你想拍摄一部大片,花钱去请好莱坞大明星安吉丽娜·朱莉(Angelina Jolie)主演,还是物有所值的。虽然她的开价很高,但是因为她是当红大明星,拥有巨大的票房号召力,几百万人会因为她而来看你的电影,你就能把她的报 酬分摊到这几百万人头上。

不过,我到现在依然没有证明任何东西。"最好的程序员"到底什么意思?不同的程序员开发的软件,在质量上真的有重大差异吗?

让我们从传统的生产率开始看起,这个指标很直观。但是,衡量程序员的生产率是很困难的,几乎所有你能想到的衡量标准(错误修正涉及的代码行数,功能 点(function point)的个数,命令行界面中的参数个数)都很不准确,无法采用。而且,在大型项目中,想要得到具有可比性的数据,难度很大,因为很少会让两个程序员 去做同样的事情。

我依靠的数据来自耶鲁大学的Stanley Eisenstat教授。每年,他都开设一门需要大量编程的课程,课程编号是CS 323。这门课的作业,主要是5道编程题,每一题都要用2星期左右才能完成。这些题对于本科生来说,真是相当艰巨,比如开发一个Unix操作系统的命令行 shell程序,写一个ZLW压缩格式的解压程序等等。

学生们对于这么重的作业负担怨声载道,以至于Eisenstat教授开始要求大家,将做每道题用了多少时间反馈给他。他很用心地收集这些数据,持续了好几年。

我花了一些时间,研究这些数据。它们记录了几十个学生在同样的时间,用同样的技术做同样的题,这是我知道的唯一一个这样的数据集。所有外界条件都被很好地控制了,就像在做试验一样。

数据集一共包括12道题,我做的第一件事,就是计算学生在每道题上花费的平均小时数、最小小时数、最大小时数和标准差。下面就是结果:

你从中注意到的最明显的东西,就是数据的变动幅度非常大。最快的学生做题的速度,比普通学生快三到四倍,比最慢的学生快十倍。标准差之大非常惊人。 嗯,我因此想到,可能其中有些学生是在敷衍了事,马马虎虎地做作业。他们只花四个小时就完成了作业,但是写出来的程序却无法运行,我决定把这样的学生排除 在外。于是,我对数据进行了筛选,只包括那些成绩排在第一个四分位数之前的学生......也就是代码质量最高的前25%的学生。我必须在这里 说,Eisenstat教授的评分是极端客观的。学生交上来的代码,都通过自动测试进行打分,通过的测试个数决定了分数的高低,分数就像公式那样被计算出 来,不考虑任何其他因素。不良的编码风格,或者迟交作业,都不会被扣分。

下面就是成绩排在第一个四分位数之前的学生的数据:

看到了吗,几乎没有差别!前25%的数据得到的标准差,几乎与整体标准差完全一样。事实上,你仔细审视这些数据,会很清楚地看到,时间和成绩之间不 存在明显的相关性。下面就是其中一道题目的散点图,很具有代表性。......我选择的题目是COMPRESS01,那是一道2001年的题目,要求学生 开发一个Ziv-Lempel-Welch压缩器。我选择这道题的原因,是因为它的标准差很接近总体的标准差。



从图中根本看不出什么东西,不过这就是我想说的。作业的质量与所花费的时间基本上是不相关的。

关于此事,我问过Eisenstat教授,他指出还有另外一个因素。因为每次都规定交作业的时间(通常是在某一天的午夜之前),迟交会受到很严厉的 批评,所以许多学生眼看时间要到了,就停下来将还没做完的作业交上来。换言之,部分因为布置作业和交作业之间的时间是有限的,所以学生花在这些作业上的最 长时间是有上限的。如果学生们有无限的时间做作业(这更接近现实世界中的情况),那么数据之间的极差(最大值与最小值的差)还会更大。

当然,这些数据并非完全可靠,可能存在谎报。有些学生也许会夸大用来做题的时间,希望以此博得一点同情,下次就会换来更容易的题目。(祝君好运!今 天CS323的作业,同我在80年代上大学时是一样的。) 另一些学生可能会少报,因为他们忘了记录时间。但是,就算存在这样对数据的扭曲,我依然相信这些数据说明了,程序员的生产率有5倍或10倍的差距。

等等,我还没说完

如果程序员之间仅有的差别就是生产率的话,那么你也许会想,你可以用5个平庸的程序员,代替一个优秀的程序员。显然,这是行不通的。还记得布鲁克斯 法则(Brooks' Law)吗?"向一个已经延误的软件项目增加人手,只会使它更加延误"(Fredrick Brooks, The Mythical Man-Month: Essays on Software Engineering, Addison-Wesley, 1975)。这就是原因。一个优秀的程序员独自完成一项任务,就不需要额外的沟通和协调。如果同样的任务让5个程序员一起完成,他们之间就必须沟通和协 调。这会花掉大量时间。开发团队越小,就越能获得额外的收益。人力与工时的互换,真的是一个神话[3]。

等等,我还是没说完

用许多平庸的程序员取代少数优秀的程序员,这种做法的真正问题在于,不管平庸的程序员工作多长时间,他们做出来的东西,都无法像优秀程序员做得那样好。

五个Antonio Salieris[4]也写不出莫扎特的《安魂曲》。永远也写不出,埋头写100年也没用。

五个Jim Davises----他是一点都不好笑的卡通人物加菲猫的创造者,"加菲猫"里面20%的笑话是在讲星期一有多糟糕,剩下的笑话则是那只猫有多么喜欢意 大利面(而且这些话都被当作妙语)......哪怕五个Jim Davises把余生都用来写喜剧,也永远写不出电视连续剧《宋飞传》(Seinfeld)中"Soup Nazi"那一集的剧本。

Creative公司的音乐播放器Zen的开发团队即使再花上许多年,对他们那个丑陋的iPod仿制品进行美化,也永远造不出像苹果公司的iPod 那样优美雅致、令人陶醉的播放器。他们不会对苹果公司的市场份额,造成任何影响,因为他们的团队中没有那种神奇的设计天才。他们就是缺少设计的天赋。

一流的歌唱演员不管在什么时候,都可以很轻松地唱出高音,而平庸的歌唱演员就是永远做不到这一点。莫扎特的歌剧《魔笛》中有一段著名的咏叹 调"Queen of the Night",音高必须达到F6[5]才能唱好这首歌,世界上能达到这个标准的女高音都快要绝迹了,而飙不到著名的F6,你就是不能表演"Queen of the Night"。

软件真的与歌唱家的高音有关系吗?"可能只是某些方面吧,"你说,"不过应该同我关系不大,我为医疗废物行业开发应收账款的用户界面。"说得不错。 我针对的是生产最终产品的公司,它们的成败完全取决于产品的质量。如果你开发的软件,只是为了在公司内部使用,开发的目的是为了配合公司的运营,而不是销 售,那么这种软件对你来说,可能只要够用就行了,而不需要特别优秀。

在过去的几年中,我们已经看到了非常多的优秀软件,它们是真正的高音选手,它们的音高是平庸的程序员所无法企及的。

回想2003年的时候,Nullsoft软件公司发布了Winamp的一个新版本,他们的网站上贴出了如下的告示:

* 华丽的新外观!

* 绝妙的新功能!

* 大部分功能真的能用!

最后一句话----"大部分功能真的能用!"----让每个人都笑出了声。用户因此觉得很开心,对Winamp感到兴奋。他们使用它,并且告诉朋友,心里觉得Winamp真是棒,这都是因为Winamp的网站上写着"大部分功能真的能用!"。这难道不是很酷吗?

如果你将一大堆多余的程序员,塞进Windows Media Player的开发团队,他们能不能唱出高音?想也别想,一千年都没有这种可能。因为你向开发团队中加进去的人越多,其中就越可能有一个坏脾气的家伙,他 认定在网站中写上"大部分功能真的能用!",是一种不专业、不成熟的表现。

更不要提了,网站上还有另一句话,"Winamp 3:差不多与Winamp 2一样新颖!"

就是这样的东西,让我们爱上了Winamp。

当AOL时代华纳集团的那些猪头们,将黑手伸向Winamp[6],网站上好玩的东西从此就消失了。这些人看上去,简直就像电影《莫扎特传》 (Amadeus)中的反派角色Antonio Salieris,怒气冲冲、抱怨不满、哭哭啼啼,一心一意要把所有创造力的标志都摧毁,因为这些标志可能会吓到明尼苏达州的某位老太太,他们为了这个, 不惜将所有使得人们喜欢这个产品的因素都清除得干干净净。

换个例子,再来看看iPod。它是不能换电池的。所以,如果电池坏了,那就太糟糕了。你只好去买一个新的iPod。当然,你事实上可以把它送回苹果公司,他们会帮你拿到工厂里换个电池,不过收费是65.95美元。哇塞。

为什么不允许你换电池?

我的理论是,苹果公司要把iPod做成一个优美、性感的播放器,不希望破坏它无比光滑、天衣无缝的表面,不希望它像其他很便宜、很垃圾的电子类消费 产品一样,背后有一个巨大丑陋的电池盖,因为电池盖的闩锁总是很容易断掉,而电池盖的细缝中总是嵌满了口袋布料的绒毛和其他各种各样恶心的东西。iPod 是我见过的表面最光洁无缝的消费类电子产品。它是那样优美。你能感觉到这种优美,仿佛河流中一块光滑的鹅卵石。一个电池盖的闩锁能把整个鹅卵石效果全毁 掉。

苹果公司的决定完全出于风格(style)的考虑。事实上,iPod里面到处都考虑到了风格。这种风格不是微软公司的100个程序员、或者 Creative公司的200个工业设计师(这家公司真是叫错了名字[7])所能达到的,因为这些公司没有Jonathan Ive[8],而外头能找到的Jonathan Ive并不多。

很抱歉,我一谈起iPod,就停不下来。那个漂亮的拇指转轮,还配上了轻轻的咔嗒声......苹果公司花了额外的钱,在iPod中装了一个喇叭, 就为了让拇指转轮的咔嗒声,听起来好像就来自转轮本身一样。他们原本可以省下这几分钱----几分钱啊!----将咔嗒声通过耳机传出来。但是拇指转轮让 你觉得你在控制。人们喜欢控制的感觉。控制的感觉让人们感到开心。拇指转轮对你的操作,反应非常快速流畅,还带有声音,这一点就会让你感到开心。它与世界 上其他6000种便携式消费类电子废物不一样,那些产品的启动时间是那样漫长,你按下on/off开关,等上一分钟才能知道是否有任何事情发生。你在控制 它吗?谁知道呢?想一想,上一次你使用按下电源开关后立刻就能通话的手机,是什么时候的事情了?

风格。

开心。

情感的诉求。

这些就是大热门产品的成功要素,不管这种产品是软件,还是电影或者消费类电子产品,都一样。如果你没有把这些要素做对,虽然你可能依然能够解决问 题,但是你的产品不会成为排名第一的热门商品,也就无法让你公司中的每一个人致富,无法让你们都开上很有风格、很让人开心、很打动人的汽车(比如法拉利的 Spider F1),无法让你们还剩下足够的钱,在后院盖一所隐居的小屋。

这不仅仅是"生产率高十倍"的问题,而是"普通"程序员永远都唱不出,开发优秀软件所需要的那种高音。

令人难过的是,对于非商业性的软件开发,这一点并不完全适用。内部使用的软件,很少重要到需要雇佣巨星来开发。没人会花钱请Dolly Parton[9]在婚礼上演唱。这就是为什么最令人满意的职业生涯(如果你是程序员的话),往往是在真正的软件公司里,而不是在银行里担任IT技术人 员。

眼下的软件市场,有点"赢家通吃"(winner-takeall)的味道。除了苹果公司,没有其他人能在MP3播放器市场上赚到钱。除了微软公 司,没有其他人能在电子表格和文字处理器市场上赚到钱。没错,我知道,他们做了破坏竞争的事情,才得到今天的市场地位,但是这改变不了这是一个"赢家通 吃"市场的事实。

在市场上排名第二,或者有一个"还不错"的产品,对你来说,就意味着失败。你的产品必须非常优异,我的意思是,好到大家愿意谈论它。想要开发优异的软件,你的唯一希望就是依靠那些真正优秀的软件天才,只有他们才能为你创造出来。下面就是整个的计划:

注释:

[1] 根据《圣经》的记载,大卫是以色列王国的第二任国王,也是一位英勇的战士。他率领以色列,击败了腓力士,杀死了巨人歌利亚。

[2] 这里的"Quark软件公司"指的是QuarkXpress,它曾经是世界上排名第一的排版软件。原创办人出售公司后,新的出资方解雇了整个开发团队,将 开发工作外包到了印度。结果,QuarkXpress 6.0版延迟了两年才发布,实际成本远远高于预算,更糟糕的是,软件中还存在许多错误。6.0版发布的时候,QuarkXpress的市场份额已经从 90%降到了50%,之后更是一路下跌,排版软件市场的老大被Adobe公司的InDesign抢走。关于此事的详细情况,请参阅 http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show& ixPost=86852。

[3] 此处指的是Frederick Brooks所写的软件项目管理名著《人月神话》(The Mythical Man-Month)。所谓"人月"就是一个人在一个月内所能完成的工作量。假如有个项目预估需要12个人月,那么派4个人来处理这个项目,理论上只要三 个月就能完成。但是,Brooks认为这种换算机制在软件业中行不通,是一个神话,因为软件项目是交互关系复杂的工作,需要大量的沟通成本,人力的增加会 使沟通成本急剧上升,反而无法达到缩短工时的目的。在本质上,软件项目的人力与工时是无法互换的,当项目进度落后时,光靠增加人力到该项目中,并不会加快 进度,反而有可能使进度更加延后。

[4] Antonio Salieris(1750-1825)是意大利作曲家。传说中,他的才能不及莫扎特,在嫉妒心的驱使下,毒死了莫扎特。

[5] F6是女高音的最高音高。

[6] Nullsoft成立于1997年,同年推出Winamp后一举成名,Winamp成为最受欢迎的MP3歌曲播放软件之一。1999年6月1日Nullsoft被美国在线(AOL)购并,成为AOL旗下的子公司。

[7] Creative的意思是"创新",公司的中文名也是这个词。

[8] Jonathan Ive是苹果公司工业设计部门的高级副总裁,也是iMac、MacBook、iPod和iPhone的主要设计者。

[9] Dolly Parton(1946-),美国著名流行歌手。

(完)

分享到:
评论

相关推荐

    More Joel on software

    美国著名程序员Joel Spolsky关于软件管理和技术公司管理精辟论述,读来受益匪浅,特别是其中给大学计算机系学生的建议。

    More Joel on Software

    Further Thoughts on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work ...

    Apress.More.Joel.on.Software.Jun.2008.pdf

    《More Joel on Software》是Joel Spolsky的著作,由Apress出版社于2008年出版。这本书深入探讨了软件开发、设计与管理领域的多样性和相关问题,旨在为软件开发者、设计师、经理以及与他们合作的人士提供有价值的...

    Joel on Software

    《Joel on Software》是由Joel Spolsky撰写的一本著名IT著作,主要涵盖了软件开发、团队管理、软件工程以及互联网行业的多个重要方面。这本书以其深入浅出的讲解和实战经验分享,深受程序员、项目经理和技术领导者们...

    Joel on Software[English Version] .rar

    在《Joel on Software》中,Spolsky分享了他的许多核心观点,这些观点对于理解软件开发的本质及其背后的商业逻辑至关重要。以下是一些关键知识点的详细说明: 1. **软件质量**:Joel强调软件质量的重要性,主张开发...

    软件随想录 - More Joel on Software

    《软件随想录 - More Joel on Software》是乔尔·斯波斯基(Joel Spolsky)的一本经典著作,他是一位知名的软件开发者、企业家和博客作者。这本书汇集了他在软件开发、团队管理、产品设计等多个领域的深入思考和经验...

    Joel On Software

    Joel On Software 大家都知道这个东西哈。挺不错的

    软件随想录(英文版) - More Joel on Software

    根据提供的文件信息,我们可以推断出这是一本关于软件开发、设计与管理的书籍,作者是Joel Spolsky。本书包含了对各种与软件开发者、设计师及管理者相关的议题的深入探讨,同时也为那些与这些专业人士合作的人提供了...

    Joel说软件

    根据提供的文件内容,可以看出这是一篇关于Joel Spolsky和他的网站Joel on Software的文章,但文本中包含了大量的乱码和非中文字符,这可能是由于编码错误或原文本的特殊处理造成的。尽管如此,我们仍然可以从有限的...

    Joel_Spolsky对计算机学生的七大建议

    ### Joel_Spolsky对计算机学生的七大建议 #### 第一大建议:毕业前练好写作技巧 Joel Spolsky强调,对于计算机专业的学生而言,掌握优秀的写作技能是至关重要的。他通过举例说明了这一观点: - **Linus Torvalds*...

    软件随想录:程序员部落酋长Joel谈软件

    ### 软件随想录:程序员部落酋长Joel谈软件 #### 一、书籍简介与背景 《软件随想录》是一本由Joel Spolsky所著的著作,该书以其深刻的见解和独特的视角在全球范围内影响了无数程序员。Joel Spolsky是一位在软件...

    The Best Software Writing I

    根据提供的文件信息,我们可以推断出这是一本关于软件写作的书籍,名为《The Best Software Writing I》,由Joel Spolsky编辑选择并作序。虽然我们没有完整的书籍内容,但可以通过标题、描述以及部分版权页的信息来...

    js > swfobject.js 使用

    &lt;script type="text/javascript" src="path/to/swfobject.js"&gt;&lt;/script&gt; ``` 2. **准备Flash内容** 创建一个HTML元素(通常是`&lt;div&gt;`),作为Flash内容将要插入的位置。同时,设置一个ID以便于后续引用。 ```html...

    joel 软件随想录

    软件大牛再出新书。相信第一本joel说软件 你也看了 想必收获不少 这本也不能错过

    软件随想录—— 程序员部落酋长 Joel 谈软件

    本书是一部关于软件技术、人才、创业和企业管理的随想文集,作者以诙谐幽默的笔触将自己在软件行业的亲身感悟娓娓道来,观点新颖独特,内容简洁实用。全书分为 36 讲,每一讲都是一个独立的专题。...

    a project model for the FreeBSD Project.7z

    Ports is the collection of meta-data that is needed to make software packages build correctly on FreeBSD. An example of a port is the port for the web-browser Mozilla. It contains information about ...

Global site tag (gtag.js) - Google Analytics