软件随想录:程序员部落酋长Joel谈软件(local.joelonsoftware.com/wiki)-26

达到卓越

From The Joel on Software Translation Project

达到卓越

译者:jiing

作者:周思博(Joel Spolsky)

Monday, July 25, 2005

2005三月25日,星期一


约耳谈软件的一部份,http://www.joelonsoftware.com

在二千年的三月,我架了这个站并以有点不可靠的声明说:「大部份人以为你要有个点子才能建立成功的软件公司,他们错了。」:

常见的信念是:当你建立一个软件公司时,目标是找到一个简洁的点子能解决某些之前尚未被解决的问题,然后实现它,并赚点钱。我们都称此为「建立一个较佳的捕鼠陷阱(build-a-better-mousetrap)」的信念。但是软件公司的真正目标,应该是将资本转换成可以使用的软件。

过去五年我已经实际地测试了此理论。我和Michael Pryor于2000年九月开创的公司所用的公式可以被总结为四大步骤:

最佳工作条件 → 最佳程序员 → 最佳软件 → 利润!

这是相当合宜的公式,尤其因为我们在开创Fog Creek时的实际目标是去建立一个我们会想要工作的软件公司。在那些日子里我曾经声明:好的工作条件(用夸张的说法就是「建立世上最好的软件开发人员会想要工作的公司」)会产生利益,就像巧克力导致肥胖,或是电视游戏里的卡通性爱会导致黑社会式的滥杀一样的自然。

不过今日我只想要回答一个问题,因为如果这部份不是真的,我的整个理论会崩解。问题是,谈论关于有「最佳的程序员」是否有意义?程序员之间的差异是否大到需要特别在意呢?

rs1.jpg

或许这对我们而言很明显,不过对许多人而言,这个假设仍需被证明。

数年前,一家较大的公司正考虑买下Fog Creek,而当我一听到那家公司的CEO说,他不是真的同意我雇用最佳程序员的理论时,就知道这绝不可行。他用了一个圣经的隐喻:「你只需要一个大卫王,和一支只要能遵守秩序的军队」。他的公司的股价迅速地从20跌到5元,所以我们不接受那个提议是一件好事,不过这并不能归咎于对大卫王的盲目崇拜。

习于抄袭的商业记者及大公司都是倚赖收超额报酬的管理顾问,由顾问来帮忙思考甚至咀嚼他们的食物等等。在那个世界中的传统智慧,似乎把减少程序员的花费视作最重要的事。

在某些其它的工业中,便宜比好更重要。Wal*Mart藉由销售便宜的产品,而非好产品而变成地球上最大的公司。如果Wal*Mart试著销售高品质的货物,他们的花费会上升,而且他们整个便宜的优势会丧失。例如如果他们试著销售一个能禁得起严格测试(如在洗衣机一直洗)的短管袜,他们必须使用各种昂贵的元件(比如棉花),于是袜子的单价就会上升。

那么,为何软件产业內没有低成本供应商(就是尽可能雇用最廉价程序员的人)的空间呢?(提醒我去询问Quark整个「全部解雇再雇用低薪新人」的计划是如何进行的。)

这里是原因:复制软件是免费的。那代表程序员的花费是分散在你销售的所有软件备份之上。就软件而言,可以增进品质而不会增加每个售出单位的成本。

基本上,设计的附加价值高于它所增加的成本。

或者,概略地说,如果你试著从程序员上省钱,就会做出蹩脚的软件,而且根本省不到那么多的钱。

同样的原理可套用到娱乐产业。虽然布莱德彼特要求很高的薪水,请他来拍你最新的巨片还是值得的。因为薪水可以由仅因布莱德是这么红而去看电影的数百万人分摊。

或者,换个方式套用它。虽然安洁丽娜裘莉要求很高的薪水,请她来拍你最新的巨片还是值得的。因为薪水可以由仅因安洁丽娜是这么红而去看电影的数百万人分摊。

不过我尚未证明任何事。「最佳的程序设计师」是什么意思?不同的程序员所生产的软件品质真的有如此大的变异吗?

让我们以一般古老的生产力来开始吧。要量测程序员的生产力相当困难;几乎任何你想得到的尺度(除错的源代码行数,功能点,命令列引数的数目)对[The_Joel_on_Software_Translation_Project:测量|游戏本身都毫无意义],而且很难在大型项目上取得具体的资料,因为很少会让二个程序设计师去做同一件事。

我所倚赖的资料来自耶鲁大学教授史丹利.艾圣斯特( Stanley Eisenstat)。每年他会教授一门需要密集编程的课程CS 323,编写程序占了课堂作业的很大部份。共约五次的编程作业每个费时约二周。作业对于大学课程而言是非常严格的:实现Unix命令列shell,实现ZLW档的压缩器,等......。

由于有太多学生问这门课有多少功课要做,以致艾圣斯特教授开始要求学生回报花在每个作业上的时间。他持续了好几年谨慎地收集这些资料。

我花了一些时间在玩味这些资料:它是我所知道唯一让数十名学生在相同时间用相同技术做相同作业的资料集。这在进行实验进行时相当难以控制。

我对这资料做的第一件事是计算十二个作业中的每一个所用时数的平均值、最小值、极大值和标准差。结果如下:

ProjectAvg HrsMin HrsMax HrsStDev Hrs
CMDLINE9914.844.6729.255.82
COMPRESS0033.8311.5877.0014.51
COMPRESS0125.7810.0048.009.96
COMPRESS9927.476.6769.5013.62
LEXHIST0117.395.5039.257.39
MAKE0122.038.2551.508.91
MAKE9922.126.7752.7510.72
SHELL0022.9810.0038.687.17
SHELL0117.956.0045.007.66
SHELL9920.384.5041.777.03
TAR0012.394.0069.0010.57
TEX0021.226.0075.0012.11
ALL PROJECTS21.444.0077.0011.16

你在此注意到最明显的事是变异很大。最快的学生比平均的学生快三倍或四倍,而比最慢的学生快上十倍。标准差非常之大。于是我想,嗯,或许这些学生正在乱写作业。我不想含括花费四小时在作业上但却无法产生一个可运作程序的学生。所以我限缩资料,只含括在第一个四分位(quartile)分数等级...也就是程序代码品质在前百分之二十五的学生。我应该提及在艾圣斯特教授课当中的分数等级是完全客观的:他们被以程序代码通过多少自动测试的公式化计算,只此而已。编程风格不佳或迟交并没有扣分。

无论如何,这里是第一个四分位级的结果:

ProjectAvg HrsMin HrsMax HrsStdDevHrs
CMDLINE9913.898.6829.256.55
COMPRESS0037.4023.2577.0016.14
COMPRESS0123.7615.0048.0011.14
COMPRESS9920.956.6739.179.70
LEXHIST0114.327.7522.004.39
MAKE0122.0214.5036.006.87
MAKE9922.548.0050.7514.80
SHELL0023.1318.0030.504.27
SHELL0116.206.0034.008.67
SHELL9920.9813.1532.005.77
TAR0011.966.3518.004.09
TEX0016.586.9230.507.32
ALL PROJECTS20.496.0077.0010.93

没有什么差别!第一四分位的标准差几乎完全相同。事实上当你仔细地观察资料,会发现时间与分数间显然并无可察觉的相关性。下面是其中一个作业的典型分布图...我选择于2001年时指派给学生的作业COMPRESS01,也就是Ziv-Lempel-Welch 压缩的实现。选择的原因是因为它的标准差接近于整体的标准差。

HrsVsScore.png

时间对分数的分布图

在此没什么可以看的,不过那就是重点。工作品质和所花费的时间是没关系的。

我针对此点询问艾圣斯特教授,而他指出另一件事:因为作业要在固定时间內交出(通常是半夜),而迟交的惩罚有很大的影响,很多学生在项目完成前便停了。换句话说,部份由于公布作业和交作业期限间的时数是有限的,所以学生花在这些作业的最长时间有其下限。如果学生有无限的时间来做项目(比较符合工作的世界),分布值可能只会更高。

This data is not completely scientific. There's probably some cheating. Some students may overreport the time spent on assignments in hopes of gaining some sympathy and getting easier assignments the next time. (Good luck! The assignments in CS 323 are the same today as they were when I took the class in the 1980s.) Other students may underreport because they lost track of time. Still, I don't think it's a stretch to believe this data shows 5:1 or 10:1 productivity differences between programmers.

此资料并不完全是科学的。其中可能有点作弊的成分。某些学生可能会多报写作业的时间以获取同情,好在下次获取较简单的作业(祝好运!今天CS323的作业和我在1980年代修课时完全相同。)其它的学生可能低报了,因为他们忘了追踪时间。尽管如此,相信这些资料显示出程序员间出现5:1或10:1生产力差距,在我看来并不算是种曲解。

不过,等等,还有更多!

如果程序员间的唯一差异是生产力,你可能想说可以用五个平庸的程序员来取代一个真正的好程序员。这显然是行不通的。原因是Brooks的法则:「对一个延迟的软件项目增加人力会使它更迟。」一个好的程序员在单一工作上工作并没有协调或沟通的花费。五个程序员在同一件工作上工作必须协调和沟通。那会花费很多的时间。尽可能使用最小的团队有额外的效益;人月真的是神话迷思啊

不过,等等,仍还有更多!

用很多平庸的程序设计师而非一群好的程序设计师,真正的问题在于无论他们工作多久,永远没法子像伟大程序设计师做得那么好。

五个Antonio Salieris(译:电影阿玛迪斯中害死莫扎特的宮廷乐师)不能谱出莫札特的安魂曲(Mozart's Requiem)。甚或,即使他们工作一百年也一样。

五个Jim Davis(无聊卡通猫的创造者,其中两成的笑话是有关于周一有多烂,剩下的是关于猫有喜欢意大利千层面(lasagna)和那些结尾警语!五个Jim Davis用尽余生来写喜剧,也永远写不出Seinfeld的纳粹汤厨桥段。

The Creative Zen team could spend years refining their ugly iPod knockoffs and never produce as beautiful, satisfying, and elegant a player as the Apple iPod. And they're not going to make a dent in Apple's market share because the magical design talent is just not there. They don't have it.

创巨的Zen团队即使花费数年美化他们丑陋的iPod仿冒机,也永远做不出如Apple iPod般漂亮、令人满意而典雅的播放器。而他们也无法抢到Apple的市场占有率,因为神奇的设计天才并不在那里。他们没有这种人。

平庸者就是永远达不到天才随时能唱出的高音。能唱出莫札特午夜皇后(The Queen of the Night)中f6高音的女主唱少得像是快绝迹,而没有著名的f6就无法演出午夜皇后。

软件真的与艺术般的高音有关吗?「或许某方面是吧」你说:「不过我是在医药废弃业写应收帐款的使用者介面。」说得不错。不过这里讲的是软件公司和以收缩胶膜包裝的软件,而这种公司的成败直接取决于程序代码的品质。

而且我们在过去的几年间,已经看过很多伟大软件的例子,那些真正的高音:平庸的软件开发者就是做不出来的东西。

回到2003年,Nullsoft推出了新版本的Winamp,在他们的网站有以下的注意事项:

  • 华丽的新外观!
  • 时髦的新特色!
  • 大部份的东西真的能动!

最后一项「大部份的东西真的能动!」让每个人笑了,而且他们很快乐并且对Winamp感到很兴奋,然后他们亲身使用它并告诉朋友,他们认为Winamp真是棒,全都是因为他们真的在他们的网站上写著「大部份的东西真的能动!」这不是太酷了吗?

如果你把一堆多余的程序员丟去Windows Media Player团队,他们会达到那种高水准吗?一千年也不会。因为在那个团队加入愈多人,就愈可能出现一个脾气真正坏的人,认为在你的网站上写「大部份的东西真的能动!」既不专业又不成熟

更别提那个意见了:「Winamp 3:几乎和Winamp 2一样新!」

就是那种东西让我们爱上Winamp。


当美国在线时代华纳公司的猪头插手时,网站上这些有趣的东西就不见了。你可以想像他们就像阿玛迪斯里的Salieri一样愤怒、痛苦地啜泣著,试著打压所有可能吓到一位明尼苏达州的老妇人的创造性象征,而代价是可能会清除所有能让人们喜欢上这个产品的事物。

或者看一下iPod吧。你不能换电池。所以当电池坏了,真惨。买个新的iPod吧。事实上如果你将它送回工厂,Apple会换一颗电池,不过这得花$65.95。哦,真他妈贵。

为什么你不能更换电池呢?

我的理论是,因为Apple很重视他们美丽性感iPod上平滑无缝的完美表面,而那些在其它便宜烂货上所看到的恐怖电池盖,那些总是会断的电池门闩,那些塞满口袋棉线的缝隙和所有那些恶心东西,都会让它破坏无遗。iPod是我所见过消费电子产品中最无缝的。它很美。它让人感到美,就像平滑的河石。而一个电池门闩会让这整个河石般的效果荡然全无。

Apple made a decision based on style, in fact, iPod is full of decisions that are based on style. And style is not something that 100 programmers at Microsoft or 200 industrial designers at the inaptly-named Creative are going to be able to achieve, because they don't have Jonathan Ive, and there aren't a heck of a lot of Jonathan Ives floating around.

Apple基于格调做了一个决定,事实上,iPod充满著基于格调的决策。而格调并不是一百个微软的程序设师,或是名不符实的创巨(Creative)里二百个工业设计师所能达成的东西,因为他们没有Jonathan Ive,而外头能找到的Jonathan Ive并不多。

我很抱歉,我无法停止讨论iPod。那个漂亮的拇指滚轮及它小小的喀嚓声.......Apple花了额外的钱在iPod上裝一个喇叭,好让拇指滚轮的喀嚓声听起来像是来自拇指滚轮如果喀嚓声是由头戴式耳机来播放,他们就已经省下了好几分钱...几分钱!不过拇指滚轮让你感觉像是由你掌控。人们喜欢掌控的感觉。掌控的感觉让人们快乐。拇指滚轮平稳流畅地回应,并且对你的命令发出声音,这种事实会让你快乐。不像其它6,000种口袋型消费性电子废物,按下开关时开机要等很久,你必须等一分钟才知道是否有任何事发生。是你在掌控吗?谁知道?想想你拥有按开关马上就能用的行动电话是什么时候的事了?

风格。

快乐。

感情的吸引力。

这些是在软件产品和电影中,以及在消费性电子产品中造成大热门的原因。如果没有把这些东西做对,你或许可以解决问题,不过产品绝不会变成让公司里的每个人致富的头号产品,也不能让你们全都可以开著有风格的、快乐而且吸引人的车(像是法拉利Spider F-1),并且仍有足够的钱去在你自己的后院建造一个嬉皮士群居之会所(ashram)。

这不仅是「十倍多的生产力」的事。它是「一般生产力」的开发人员从未达到,但却能做出伟大软件的那种高水准。

令人难过的,这并不真的能套用于非产品性的软件开发。內部开发的软件很少会重要到需要雇用巨星。没人雇用桃莉巴顿(Dolly Parton)在婚礼上唱歌。这是为何令人满意的职业生涯(如果你是个软件开发者)大都在真正的软件公司里,而不要是某些银行里做IT工作。

现在的软件市场是某种赢家全拿(winner-take-all)的系统。制造MP3播放器的除了Apple外,没有别人赚钱。除了微软外,没有人由试算表或文字处理赚到钱。是的,我知道,他们做了反竞争的事才取得那种地位,不过那不并改变赢家全拿的事实。

成为第二名或是有个「够好了」的产品都是你无法承受的。它必须是引人注目地好,我的意思是好到让人们都注目它。从真正、真正、真正天才的软件开发者得到的赠品获得非凡卓越的唯一希望(译:意思是有天才不一定做得到,但是没有天才是万万不能)。以下就是整个计划:

最佳工作条件 → 最佳程序员 → 最佳软件 → 利润!

这些页面的內容代表个人的意见。

所有內容的版权© 1999-2006 by Joel Spolsky. 保留所有权利。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值