为非我发明症辩护

作者:周思博(Joel Spolsky)
译:Paul May 梅普华
Sunday, October 14, 2001
属于Joel on Software, http://www.joelonsoftware.com

猜谜时间到了。

Copley_Square.jpg

1.程式码重用是:

a)好的
b)不好的

2.重新发明轮子是:

a)好的
b)不好的

3.非我发明(Not-Invented-Here)症是:

a)好的
b)不好的

当然啰, 每个人都知道 应该要善用别人的工作成果。所以正确答案_当然_ 就是1(a) 2(b) 3(b)。

确定吗?

别说得那么快!

非我发明(NIH)被公认为典型的管理病状,指某个团队拒绝使用不是自己创造的技术。NIH症的患者显然只是很小家子气,只因为没办法居功就拒绝为整体组织的利益贡献(对吧?)。你可以在当地大书店的沉闷商业史区找到一堆故事,说愚蠢的团队花了几百万美元和12年的时间,却只做出某些只要9.99元就能在Egghead(译注:线上零售商)买到的东西。任何人只要有注意过去三十年间电脑程式设计的进展,就会知道重用是所有现代电脑系统的圣杯。

没错,我也是这样想的。所以我在做第一版Visual Basic for Applications的专案经理时,就很小心的联合了四个(注意是四个哦)微软内不同的团队,要做出Excel VBA里的定制对话盒。整个想法非常复杂而且各部门间相互牵连。有个叫AFX的团体在制作某种对话盒编辑器。然后我们会利用OLE团体新写的程式把一个应用程式嵌入在另一个程式里。而Visual Basic团队则是提供里面的程式语言。经过几星期的协商,AFX和OLE还有VB团队原则上都同意这个作法。

我去到Andrew Kwatinetz的办公室。他当时是我的经理而且我知道的一切都是他教的。「Excel开发团队绝对不会接受这个方法,」他说:「你知道他们的格言吗?『找出相关性,然后去掉。』他们绝对不会接受这么不独立的东西。」

真-有-趣-啊。这事我竟然不知道。我想这解释了Excel团队有自己的C编译器的原因了。

现在我确定很多读者已经笑到在地上打滚。「微软真是笨啊,」你会这样想「他们拒绝用别人的程式码,而且只是为了一个产品还自己做编译器。」

别说得这么快,老弟!Excel团体粗鲁的独立心态意味着他们总是能如期上市,而且出来的程式码都有一致的高水准。另外他们的编译器(由80年代开始的)会产生pcode,所以不必修改就能在Intel电脑和麦金塔68000晶片的系统上执行。pcode也使得执行档在Intel平台上只有原本的一半大小,所以由软磁载入时能更快启动而且需要较少的记忆体。

「找出相关性,然后去掉。」当你在一个非常非常优秀,有着伟大程式师的团队工作时,其他人的程式坦白说都是有虫的垃圾,何况其他人都没法子准时上市。如果你是法国蓝带学院的主厨, 需要 新鲜薰衣草时你会自己种而不是去菜市场买,因为有时候新鲜的薰衣草可能会缺货,有时候店家可能拿不新鲜的薰衣草假装新鲜卖给你。

事实上最近的网路热潮中,一堆装内行的企业作家说未来的公司会完全虚拟化,公司变成只有几个时髦的家伙待在起居室里喝着白葡萄酒,所有事情都外包出去做。这些换气过度的「梦想家」并没有注意到市场机制是为所增加的价值而付钱的。一个客厅加上两个雅痞,向A公司买一套电子商务引擎,拿B公司做的货来卖,再找C公司处理库存和送货,客户服务则交给D公司,这种作法实在没有增加什么价值。事实上如果你曾经把很关键的业务拿去外包,就会了解外包其实是个地狱。不能直接控制客户服务,客服就会烂到不像话,烂到像某人在网志上写的,想在电话公司找个人(任何人都好)去做些最最简单的事都办不到。如果物流外包出去,你的物流包商或许对即时送达会有不同的认知,而你的客户就会不太高兴,可是你一点办法都没有,因为重新找一个物流包商要花三个月。何况事实上你根本不会 知道 客户不高兴,因为他们找不到你,因为你设立了一个外包的客户服务中心,宗旨就是_不要_ 让自己听到客户的声音。至于你买的电子商务引擎?绝对不可能像Amazon用obidos做的那么有弹性,obidos可是人家自己写的(否则Amazon跟买那种东西的竞争者相比就没有优势了)。另外也没有现成的web伺服器在速度上比得过Google自己亲手制作并最佳化的伺服器。

很不幸的这个原则似乎与「重用程式码好,重新发明轮子坏」的想法直接冲突。

我能给的最好建议是:

如果是核心的事业功能,不管是什么都要自己来做。

找出你的核心事业能力和目标,然后在公司内执行。如果是家软体公司,写出优越的程式码就是成功的方法。公司餐厅和光碟压制都可以外包出去。如果是家药厂,就去写药物研究的软体,可是不要写自己的会计软体。如果是家网路会计服务公司就写自己的会计软体,不过别想做杂志广告。如果有客户的话就千万不要把客户服务外包出去。

如果你在开发电脑游戏,而且地图(plot)部份是你的竞争优势,大可去用其他厂商提供的3D程式库。不过如果游戏特色是很酷的3D特效,3D程式部份最好自己来。

我怀疑这个规则唯一的例外,就是当你自己的人完全比不上别人,不管自己做什么都会失败。没错,这种地方很多。如果是这种情况,我就帮不上忙了。

讨论

这些网页的内容为表达个人意见。
All contents Copyright © 1999-2006 by Joel Spolsky. All Rights Reserved.