# 三十七、策略II:雞與蛋問題
做廣告就是要說謊但不能被抓到。大部份的公司做宣傳活動,都只是把公司最差 的事實拿出來反過來講(「說謊」),然后深入徹底的撒謊。讓我們稱之為「以反 復主張來證明」。舉例來說,坐飛機旅行很狹又不舒服,空服員粗魯又讓人不快, 事實上整個航空裏統就是種折磨。所以幾乎所有的航空公司廣告都在說坐飛機是
多么的嚴而餘炔,整個過程中你又多么的被,棍殿。英國航空有個廣告是一個商 人坐在飛機上夢到自己是個襁褓里的嬰兒,看到這個廣告時所有合理性蕩然無存。
要舉別的例子嗎?造紙公司一直在大量砍伐我們國家的森林,把根本不屬于他們 的老樹林砍得干干凈凈。所以他們做廣告時當然就會展現漂亮的老松林,然后說 他們有多么在意此環境。香煙會害死人,所以煙廣告就展示生命,比如拍健康的 人微笑著在戶外運動。如此類推。
麥金塔第剛問世時根本沒有軟件可以用。理所當然的蘋果公司就編了一大本光面 目錄列出所有「可用」的偉大軟件。不過有一半的項目用小字印著「開發中」, 而剩下一半是不管怎么都拿不到的。其中有些產品爛到不會有人買。不過即使有 了這樣一本厚厚的光面目錄,即使里面每一頁都有一個用美麗說明包裝的軟件 「產品」,還是無法掩飾你的128KB麥金塔買不到字處理器或電子表格的事實。 NeXT和BeOS都有類似的「軟件產品指南」。(NeXT和BeOS的盲目崇拜者注意:我 不需要任何有關你這些該死的操作系統的鬼扯,好嗎?要的話在你自己的專欄里 寫。)軟件產品指南唯一的意思就是該系統沒有軟件可用。當你看到這些巨獸時, 朝反方向全速逃離吧。
Amiga、Atari ST、Gem、IBM TopView、NeXT、BeOS、Windows CE、General Magic,一長串失敗的「新平臺」不斷出現。由于它們是f臺,照字面上如果沒有好軟件 就不會太有趣。雖然有極少數的例外(我相信像Am i ga或RSTS-11這種神秘而冷門 平臺的無聊支持者會寄一大準電郵給我),稍有常識的軟件開發者在景氣好時, 都不會刻意為有十萬用戶的平臺寫軟件,因為花同樣的工夫可以為Windows這種 有上億用戶的平臺寫軟件。依舊有人替這些怪胎系統寫軟件,證明了利益并不 是唯一的動機,而宗教狂熱仍然長存。親愛的,祝你好運。你替Timex sinclair 1000寫了一個不錯的microEmacs復制品。做得好!給你兩毛五,去買顆糖果吧。
所以說如果你身在平臺創造的產業,可能會面臨一般稱之為灣生蛋蛋生灣游柯題。 除非擁有好的軟件可用,否則沒人會買你的平臺,可是你的平臺要有很多用戶, 才會有人替你寫軟件。痛苦啊!這就有點像是一個哥帝安結(Gordian Knot),不 過說是哥帝安死亡漩渦可能更貼切。
雞生蛋蛋生雞問題者以及類似狀況是定策略時不可不知的最重要元素。嗯,是啦, 你不知道或許也還是能生存:事實上Steve Jobs在不管這個問題的狀況下兩度創 立了一個事:#。不過我們其他人并沒有Jobs的個人現實扭曲場(Personal Reality Distortion Field)可用(譯注:很多人說Jobs有神奇的影響力,驅使別 人不顧現實為他賣命),所以必須認真努力研宄。
第一課。雞生蛋蛋生雞問題的典型范圍是在軟件平臺。不過這里有另一個雞生蛋 蛋生雞問題:每個月翁百”萬家信用卡公司郵寄出刀必份賬單給客戶。大家就會簽 好書面支票塞進上兆的信封再寄回去。這些信封會裝到大箱子里,運到人工便宜 的國家再開箱處理。不過整個過程相當花錢,我最后聽到的數字是每張賬單超過 一美元。
對我們這些Internet的聰明人來說真是個笑話啊。「把賬單電郵給我,」你會說 「我要在線付款!」你還會說:「假設這樣只要花大概十萬分之一分錢。你可以 省下刀百:萬」或是其他類似的話。
你說得沒錯。所以很多公司都想進入這個技術上稱為嚴卓遞交(Bill Presentment)的領域,而微軟是其中之一(想不到吧)。他們的方案TransPoint是這樣子的:提供一個網站讓你可以上去看賬單,然后你付款給他們。
所以現在如果你用這個微軟的系統處理賬單,每幾天就得去該網站看看有沒有新 賬單來以免漏繳。假設你一個月有十張賬單,這應該不算大麻煩。不過還是有別 的問題:只有少數商家會透過這個系統收帳,所以其他賬單還是得用別的方法處 理。
最后的結果呢?就是不值得。這樣的系統能找到十萬人來用,我都會覺得很驚訝。 于是微軟就必須去找商家商量:「請透過我們的系統來收帳!」然后商家會問: 「可以啊,價錢怎么算?」微軟回答:「五毛錢!這比一美元便宜多啦!」于是 商家說「不錯,還有其他費用嗎?」微軟就說啦:「哦,對了,你還得安裝軟 件并把你我的系統連接起來,再加上整個運作費用,大概要廿五萬美元。」
由于微軟這個系統的用戶數量太少,實在無法想象誰會為了節省37個客戶的五毛 錢而付廿五萬美元。啊哈!雞生蛋蛋生雞問題悄悄出現了!除非商家參與否則 客戶不會來,可是沒有客戶的話商家是不會參與的!最后微軟只能花錢脫離困境。 不過較小的公司可沒法子這么做。那么你能怎么辦呢?
就雞生蛋蛋生雞問題的處理來說,軟件平臺其實可以給我們一些不錯的提示。讓 我們稍微看看由IBM-PC起這些年間,個人計算機軟件平臺的歷史;或許能發現某 些東西!
很多人認為丨BM-PC需要用PC-D0S。這并不正確。IBM-PC剛出來時有三種操作系統 可以選擇:PC-DOS、XENIX(—套8位的爛UNIX,是「微軟」出品的),還有某個叫 UCSDP-System的東西(信不信由你,這東西就像Java:美好、緩慢、可攜的 bytecode,還比Java早20年。)
如今大多數人都從未聽說過XENIX或UCSD這些怪東西。你們這些現代的小朋友可 能會認為,這是因為微軟用營銷勢力或其他手法奪取了小小的操作系統市場。 這絕對不是真的;那時候微軟還很小,當時最有營銷勢力的公司是擁有多個操作 系統的Digital Research。那么為什么PC-DOS會是這三家競賽的贏家呢?
在PC出現前能用的真正操作系統只有CP/M,不過用約需一萬美元的CP/M計算機市 場太小了。這些計算機貴又不穩用,起來也不方便,不過還是有人買來當字處理 器用,因為CP/M上有一套相當好的字處理器WordSta「,而Apple I I根本不歲做字 處理(連小寫字母都沒有)。
現在有件已知的小小事實:連DOS 1.0的設計都內建了CP/M兼容模式。DOS不只有 一套很好的新程序接口(硬派程序員所知道的INT 21),還完整地支持了原本的 CP/M程序接口。它刀手可以執行CP/M軟件。事實上WordSta「的程序代碼只改了一 個字勞就移植到DOS 了(真正的程序員可以告訴你是哪一個字節,不過我早就忘 了)。
這件事值得再說一次。把WordSta「移植到DOS時,程序代碼只改了一個字貫。好 好想一下。
好啦。
想到沒?
DOS是琢為一方:給#存軟洋展才會流行。而它能有軟件用是因為Tim Paterson想 到要提供CP/M兼容功能,因為在那個黑暗時代某人就有智慧去處理雞生蛋蛋生雞 問題。
快轉一下。在整個PC平臺的展史里,只發生過兩次足以影響到每一個PC用戶的重 大典范轉移,我們都轉移到Windows 3.x,然后又換到Windows 95。只有極少數 人轉移到其他地方。微軟陰謀要接收全世界嗎?很好,你大可那樣子想。不過我 想到另一個更有意思,可以回歸到雞生蛋蛋生雞問題的原因。
我們都要轉移至Wndows 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也可以,不過在W i ndows 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版上測 試有問題,微軟追查到這個問題然后在W/ndws 95里加一段找尋S/mC/ty游涯淨 代碼。如果發現SimCity正在執行,內存配置程序就會進入特別模式,這時并不 會馬上釋放內存。就是這種向后兼容的堅持讓大家愿意升級到Windows 95。
要如何破解雞生蛋蛋生雞問題,你應該開始有些概念了吧。就是用一個向后兼容 模式,依你的需要提供一卡車的雞或蛋,然后坐下來大賺鈔票。
哈!現在回到賬單遞交的事情。還記得賬單遞交吧?這個雞生蛋蛋生雞問題是說, 這個服務只能替你處理少部份的賬單,所以你不會去用。要怎么解決呢?微軟沒 有想出來,不過PayMyBills.com和其他幾家硅谷新創公司都同時找到答案。提供 一個應后砉容模式:如果商家不支持這個系統,就請他們把可惡的書面賬單寄到 公司在加州的地址,再找一堆人來拆信封掃描進計算機,現在你所存的賬單都 在他們的網站上了。由于世界上所有商家都可以用這個系統,客戶可以也很樂意 采用。花旗會員銀行會先把電子型式的賬單送到打印機,印成紙賬單后塞進信封, 用郵遞走1500英哩到加州再拆開,上面印著爛廣告的笨信封就丟到垃圾桶,而書 面賬單則掃描進計算機,然后放到應該一開始就直接送達的網站上。雖然這種兼 容模式很夸張,不過最后終宄會消失,因為PayMyBills.com畢竟不像微軟,它可 以讓客戶真的來用這個系統,所以不久就可以去找愚蠢的花旗會員銀行談:「嘿, 我這里有93,400個你們的客戶。為什么不直接和我們聯機然后每個月省下93,400 美元呢?」于是突然間PayMyBills.com就變得非常賺錢,而同時微軟還在努力 要簽下第二個電子化公用事業(或許某家喬治亞州事業會是個好的備案。)
不能認清雞生蛋蛋生雞問題的公司可以視為想煮涕大海(boil the ocean)的公司: 他們的商業計劃書需要有九千三百萬人配合他們瘋狂的想法后才能實現。我看過 最無可救藥的笨點子叫ActiveNames。他們的豬頭點子是讓全世界所有人都在電 郵軟件上裝個附加軟件,它會在該公司的中央服務器用人名搜尋取得真實的電郵 地址。這樣就不必告訴大家說你的電郵地址是ke「mit@sesame-st「eet.com,只 要說你的ActiveName是「spolsky」就可以了。另外別人想電郵給你時,也得安 裝這套特別的軟件。嗶!答錯了!我根本懶得開多冷數落這個點子為什么行不通。
結論:如果你身在一個有雞生蛋蛋生雞問題的市場,最義/有個向后兼容答案來解 決這個問題,否則就得花很長很長的時間仳如無窮久)才能開始。
還是有很多公司認清面對,并且聰明地解決雞生蛋蛋生雞的問題。當Transmeta 公開他們的新CPU時,長久以來第一次有賽Intel的公司終于承認一件事,就是 如果想把CPU賣給很多很多人時,就必須能執行x86的程序。Hitachi、Motorola、 IBM、MIPS、國家半導體還有其他數不清的公司都欺騙自己,認為自己有權利發 明一組新指令集,而Transmeta架構則從一開始就認定,任何打算做一臺不能執 行Excel的電腦的商業計劃書都是不可行的。
- 第一部分 位與字節:編程實踐點滴
- 一、語言的選擇
- 二、深入底層
- 三、joel測試:改進代碼的12個步驟
- 四、每一位軟件開發人員必須、絕對要至少具備UNICODE 與字符集知識(沒有任何例外!)
- 五、輕松寫就功能規格說明書 - 第1節:為什么煩心?
- 六、輕松寫就功能規格說明書 - 第2節:什么是規格說明書?
- 七、輕松寫就功能規格說明書 - 第3節:但是……如何?
- 八、輕松寫就功能規格說明書 - 第4節:技巧
- 九、輕松制訂軟件進度表
- 十、每日連編是朋友
- 十一、難伺候的故障修復
- 十二、軟件開發中的5個世界
- 十三、稿紙原型開發
- 十四、不要被太空架構師所嚇倒
- 十五、開火與運動
- 十六、人員技能
- 十七、源于計算機學科的三個錯誤思想
- 十八、二元文化
- 十九、自動獲取用戶故障報表
- 第二部分 開發人員的管理
- 二十、面試游擊指南
- 二十一、重金激勵害多利少
- 二十、二不配備測試人員的五個首要(錯誤)原因
- 二十三、任務換人有害無益
- 二十四、絕不去做的事情,第一部
- 二十五、冰川下的秘密
- 二十六、漏洞抽象定律
- 二十七、程序設計界的LordPalmerston
- 二十八、評測
- 第三部分 Joel對常態問題的遐想
- 二十九、RickChapman解讀愚昧
- 三十、在這個國家狗是干什么的? 我們有多么天真?
- 三十一、作為哼哈二將,只管去做事
- 三十二、兩個故事
- 三十三、巨無霸麥當勞與天才廚師JamieOliver
- 三十四、沒有什么像IT看起來那么簡單
- 三十五、提防非自主開發綜合癥
- 三十六、策略I:BEN&JERRY公司與AMAZON
- 三十七、策略II:雞與蛋問題
- 三十八、策略III:讓我回去!
- 三十九、策略IV:大件與80/20神話
- 四十、策略V:公開源代碼的經濟因素
- 四十一、墨菲法則肆掠的禮拜
- 四十二、微軟公司是如何敗北API之戰的
- 第四部分 對.NET稍多的評說
- 四十三、微軟精神失常了
- 四十四、我們的.NET對策
- 四十五、請問,我可以使用連接程序嗎