策略书之二:鸡生蛋蛋生鸡问题

作者:周思博(Joel Spolsky)
译:Paul May 梅普华
Wednesday, May 24, 2000
属于Joel on Software, http://www.joelonsoftware.com

做广告就是要说谎但不能被抓到。大部份的公司做宣传活动,都只是把公司最差的事实拿出来反过来讲(「说谎」),然后深入彻底的撒谎。让我们称之为「以反复主张来证明」。举例来说,坐飞机旅行很狭又不舒服,空服员粗鲁又让人不快,事实上整个航空 系统 就是种折磨。所以几乎所有的航空公司广告都在说坐飞机是多么的_舒服_ 而_愉快_ ,整个过程中你又多么的被_照顾_ 。英国航空有个广告是一个商人坐在飞机上梦到自己是个襁褓里的婴儿,看到这个广告时所有合理性荡然无存。

要举别的例子吗?造纸公司一直在大量砍伐我们国家的森林,把根本不属于他们的老树林砍得干干净净。所以他们做广告时当然就会展现漂亮的老松林,然后说他们有多么在意此环境。香烟会害死人,所以烟广告就展示生命,比如拍健康的人微笑着在户外运动。如此类推。

麦金塔第刚问世时根本没有软体可以用。理所当然的苹果公司就编了一大本光面目录列出所有「可用」的伟大软体。不过有一半的项目用小字印着「开发中」,而剩下一半是不管怎么都拿不到的。其中有些产品烂到不会有人买。不过即使有了这样一本厚厚的光面目录,即使里面每一页都有一个用美丽说明包装的软体「产品」,还是无法掩饰你的128KB麦金塔买不到文书处理器或试算表的事实。NeXT和BeOS都有类似的「软体产品指南」。(NeXT和BeOS的盲目崇拜者注意:我不需要任何有关你这些该死的作业系统的鬼扯,好吗?要的话在你自己的专栏里写。)软体产品指南唯一的意思就是该系统没有软体可用。当你看到这些巨兽时,朝反方向全速逃离吧。

Amiga、Atari ST、Gem、IBM TopView、NeXT、BeOS、Windows CE、General Magic,一长串失败的「新平台」不断出现。由于它们是_平台_ ,照字面上如果没有好软体就不会太有趣。虽然有极少数的例外(我相信像Amiga或RSTS-11这种神秘而冷门平台的无聊支持者会寄_一大堆_ 电邮给我),稍有常识的软体开发者在_景气_ 好时,都不会刻意为有十万用户的平台写软体,因为花同样的工夫可以为Windows这种有上亿用户的平台写软体。依旧有人替这些怪胎系统写软体,证明了利益并不是唯一的动机,而宗教狂热仍然长存。亲爱的,祝你好运。你替Timex sinclair 1000写了一个不错的microEmacs复制品。做得好!给你两毛五,去买颗糖果吧。

所以说如果你身在平台创造的产业,可能会面临一般称之为_鸡生蛋蛋生鸡的问题_ 。除非拥有好的软体可用,否则没人会买你的平台,可是你的平台要有很多用户,才会有人替你写软体。痛苦啊!这就有点像是一个哥帝安结(Gordian Knot),不过说是哥帝安死亡漩涡可能更贴切。

鸡生蛋蛋生鸡问题者以及类似状况是定策略时不可不知的最重要元素。嗯,是啦,你不知道或许也还是能生存:事实上Steve Jobs在不管这个问题的状况下_两度_ 创立了一个_事业_ 。不过我们其他人并没有Jobs的个人现实扭曲场(Personal Reality Distortion Field)可用(译注:很多人说Jobs有神奇的影响力,驱使别人不顾现实为他卖命),所以必须认真努力研究。

第一课。鸡生蛋蛋生鸡问题的典型范围是在软体平台。不过这里有另一个鸡生蛋蛋生鸡问题:每个月_数百万_ 家信用卡公司邮寄出_几亿_ 份帐单给客户。大家就会签好书面支票塞进上兆的信封再寄回去。这些信封会装到大箱子里,运到人工便宜的国家再开箱处理。不过整个过程相当花钱,我最后听到的数字是每张帐单超过一美元。

对我们这些Internet的聪明人来说真是个笑话啊。「把帐单电邮给我,」你会说「我要线上付款!」你还会说:「假设这样只要花大概十万分之一分钱。你可以省下 几百万 」或是其他类似的话。

你说得没错。所以很多公司都想进入这个技术上称为_帐单递交(Bill Presentment)_ 的领域,而微软是其中之一(想不到吧)。他们的方案TransPoint是这样子的:提供一个网站让你可以上去看帐单,然后你付款给他们。

所以现在如果你用这个微软的系统处理帐单,每几天就得去该网站看看有没有新帐单来以免漏缴。假设你一个月有十张帐单,这应该不算大麻烦。不过还是有别的问题:只有少数商家会透过这个系统收帐,所以其他帐单还是得用别的方法处理。

最后的结果呢?就是不值得。这样的系统能找到十万人来用,我都会觉得很惊讶。于是微软就必须去找商家商量:「请透过我们的系统来收帐!」然后商家会问:「可以啊,价钱怎么算?」微软回答:「五毛钱!这比一美元便宜多啦!」于是商家说「不错,还有其他费用吗?」微软就说啦:「哦,对了,你还得安装软体并把你我的系统连接起来,再加上整个运作费用,大概要廿五万美元。」

由于微软这个系统的用户数量太少,实在无法想像谁会为了节省37个客户的五毛钱而付廿五万美元。啊哈!鸡生蛋蛋生鸡问题悄悄出现了!除非商家参与否则客户不会来,可是没有客户的话商家是不会参与的!最后微软只能花钱脱离困境。不过较小的公司可没法子这么做。那么你能怎么办呢?

就鸡生蛋蛋生鸡问题的处理来说,软体平台其实可以给我们一些不错的提示。让我们稍微看看由IBM-PC起这些年间,个人电脑软体平台的历史;或许能发现某些东西!

很多人认为IBM-PC需要用PC-DOS。这并不正确。IBM-PC刚出来时有三种作业系统可以选择:PC- DOS、XENIX(一套8位元的烂UNIX,是「微软」出品的),还有某个叫UCSD P-System的东西(信不信由你,这东西就像Java:美好、缓慢、可携的bytecode,还比Java早20年。 )

如今大多数人都从未听说过XENIX或UCSD这些怪东西。你们这些现代的小朋友可能会认为,这是因为微软用行销势力或其他手法夺取了小小的作业系统市场。这绝对不是真的;那时候微软还很小,当时最有行销势力的公司是拥有多个作业系统的Digital Research。那么为什么PC-DOS会是这三家竞赛的赢家呢?

在PC出现前能用的真正作业系统只有CP/M,不过用约需一万美元的CP/M电脑市场太小了。这些电脑贵又不稳用,起来也不方便,不过还​​是有人买来当文书处理器用,因为CP/M上有一套相当好的文书处理器WordStar,而Apple II根本_不能_ 做文书处理(连小写字母都没有)。

现在有件已知的小小事实:连DOS 1.0的设计都_内建_ 了CP/M相容模式。DOS不只有一套很好的新程式介面(硬派程式师所知道的INT 21),还完整地支援了原本的CP/M程式介面。它_几乎_ 可以执行CP/M软体。事实上WordStar的程式码只改了_一个位元组_ 就移植到DOS了(真正的程式师可以告诉你是哪一个位元组,不过我早就忘了)。

这件事值得再说一次。把WordStar移植到DOS时,程式码只改了_一个位元组_ 。好好想一下。

好啦。

想到没?

DOS是_因为一开始就有软体用_ 才会流行。而它能有软体用是因为Tim Paterson想到要提供CP/M相容功能,因为在那个黑暗时代某人就有智慧去处理鸡生蛋蛋生鸡问题。

快转一下。在整个PC平台的_历史_ 里,只发生过两次足以影响到每一个PC用户的重大典范转移,我们都转移到Windows 3.x,然后又换到Windows 95。只有极少数人转移到其他地方。微软阴谋要接收全世界吗?很好,你大可那样子想。不过我想到另一个更有意思,可以回归到鸡生蛋蛋生鸡问题的原因。

我们都转移到Windows 3.x 。这句话里的_3_ 是个重要的线索。我们大家为什么不是都转换到Windows 1.0或Windows 2.0?又或后来的Windows 286或Windows 386呢?因为微软发行了五个版本才终于「做得好」吗?**错。**

真正的原因远比这个更微妙,它跟Windows 3.0所需的Intel 80386晶片中一个很神秘的硬体功能有关。

1. 功能一:旧的DOS程式在显示画面时是直接写入文字字元在萤幕上对应的记忆体位置。要让程式输出快速而专业,这是唯一的办法。不过Windows是以绘图模式执行。使用旧的Intel晶片时,微软的工程师在执行DOS程式时没有其他选择,只能切到全萤幕模式执行。不过用80386就可以设定虚拟记忆体区块和中断,让在程式试图写入显示记忆体时_通知_ 作业系统,然后Windows就可以立即在图形视窗绘出相同的文字。
2. 功能二:旧的DOS程式假设自己拥有整颗晶片,所以通常不能共存。不过Intel 80386有能力创造多个「虚拟」PC,而且每一个就和一颗完整的8086一样,所以虽然还有其他程式一起执行,可是旧PC程式还是能假装自己独占整台电脑。

所以用Intel 80386上运行的Windows 3.x是第一个能完整执行多个DOS程式的版本 (就技术上Windows 386也可以,不过在Windows 3.0问世前80386数量少又贵)。Windows 3.0是第一个真正能执行你所有旧软体的版本。

Windows 95?也没问题。它有很好的32位元新API,不过还是能正常执行旧的16位元程式。微软非常重视这件事,花了很多工夫Windows 95在上测试所有找得到的旧程式。Jon Ross是Windows 3.x版SimCity的作者,他告诉我他不小心在SimCity里留了一只虫,会去读取刚释放掉的记忆体。是的,这在Windows 3.x是可以的,因为记忆体不会跑掉。接下来的事非常神奇:SimCity在Windows 95的beta版上测试有问题,微软追查到这个问题然后 在Windows 95里加一段找寻SimCity的程式码 。如果发现SimCity正在执行,记忆体配置程式就会进入特别模式,这时并不会马上释放记忆体。就是这种向后相容的坚持让大家愿意升级到Windows 95。

要如何破解鸡生蛋蛋生鸡问题,你应该开始有些概念了吧。就是用一个向后相容模式,依你的需要提供一卡车的鸡或蛋,然后坐下来大赚钞票。

哈!现在回到帐单递交的事情。还记得帐单递交吧?这个鸡生蛋蛋生鸡问题是说,这个服务只能替你处理少部份的帐单,所以你不会去用。要怎么解决呢?微软没有想出来,不过PayMyBills.com和其他几家矽谷新创公司都同时找到答案。提供一个 向后相容模式 :如果商家不支持这个系统,就请他们把可恶的书面帐单寄到公司在加州的地址,再找一堆人来拆信封扫描进电脑,现在你_所有_ 的帐单都在他们的网站上了。由于世界上所有商家都可以用这个系统,客户可以也很乐意采用。花旗会员银行会先把电子型式的帐单送到印表机,印成纸帐单后塞进信封,用邮递走1500英哩到加州再拆开,上面印着烂广告的笨信封就丢到垃圾桶,而书面帐单则扫描进电脑,然后放到应该一开始就直接送达的网站上。虽然这种相容模式很夸张,不过最后终究会消失,因为PayMyBills.com毕竟不像微软,它可以让客户真的来用这个系统,所以不久就可以去找愚蠢的花旗会员银行谈:「嘿,我这里有93,400个你们的客户。为什么不直接和我们连线然后每个月省下93,400美元呢?」于是突然间PayMyBills.com就变得非常赚钱,而同时微软还在努力要签下第二个电子化公用事业(或许某家乔治亚州事业会是个好的备案。)

不能认清鸡生蛋蛋生鸡问题的公司可以视为想_煮沸大海(boil the ocean)_ 的公司:他们的商业计画书需要有九千三百万人配合他们疯狂的想法后才能实现。我看过最无可救药的笨点子叫ActiveNames。他们的猪头点子是让全世界所有人都在电邮软体上装个附加软体,它会在该公司的中央伺服器用人名搜寻取得真实的电邮地址。这样就不必告诉大家说你的电邮地址是kermit@sesame- street.com,只要说你的ActiveName是「spolsky」就可以了。另外别人想电邮给你时,也得安装这套特别的软体。哔!答错了!我根本懒得 开始 数落这个点子为什么行不通。

结论:如果你身在一个有鸡生蛋蛋生鸡问题的市场, 最好 有个向后相容答案来解决这个问题,否则就得花很长很长的时间(比如无穷久)才能开始。

还是有很多公司认清面对,并且聪明地解决鸡生蛋蛋生鸡的问题。当Transmeta公开他们的新CPU时,长久以来第一次有 Intel的公司终于承认一件事,就是如果想把CPU卖给很多很多人时,就必须能执行x86的程式。Hitachi、Motorola、IBM、MIPS、国家半导体还有其他数不清的公司都欺骗自己,认为自己有权利发明一组新指令集,而Transmeta架构则从一开始就认定,任何打算做一台不能执行Excel的电脑的商业计画书都是不可行的。

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