作者:Joel Spolsky
译者:阮一峰
发表日期 2005年7月25日,星期一
常见的看法是,你在开办软件公司之前,必须先找到一个好点子,认清你的目标市场是什么,想清楚你到底要解决前人没有解决的什么问题,然后再动手实践,去挣大钱。我们把这种想法称为“先做好老鼠夹,再抓老鼠”(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] 根据《圣经》的记载,大卫是以色列王国的第二任国王,也是一位英勇的战士。他率领以色列,击败了腓力士,杀死了巨人歌利亚。
[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-),美国著名流行歌手。
(完)