我的第一次 BillG 審議 My First BillG Review

作者:周思博 (Joel Spolsky)
屬於 Joel on Software, https://www.joelonsoftware.com/2006/06/16/my-first-billg-review/

很久很久以前,Excel 有一個功能非常弱的程式語言。我們叫它「Excel 巨集」。它實在是一個很蹩腳的程式語言,沒有變數(你得把數值存在工作表的儲存格裡),沒有區域變數(locals),沒有副函式呼叫,簡單的說它根本就不能維護。它有像是 Goto 這樣的先進功能,但是實際上看不到標記(labels)。

惟一一件看起來合理的事,是它看起來比 Lotus 的巨集要好,後者只不過是儲存一長串的按鍵,像長字串一樣的被存在儲存格裡。

1991年6月17日,我進入微軟開始在Excel團隊工作。我的職稱是程式經理。我的責任是為這個問題帶來解決方案。隱含的期待是這個解決方案要跟 Basic 程式語言有關連。

「Basic?沒錯!」

我花了些時間與不同的開發團隊溝通。Visual Basic 1.0 剛剛誕生,而它實在是非常地酷。私底下有個方向錯誤的計畫在進行著,代號是「巨集者」,另一個想造出物件導向 Basic 的計畫「銀色」也進行中。「銀色」的團隊被告知它們的客戶就是 Excel,而「銀色」的市場經理 Bob Wyman(是的,就是那個 Bob Wyman)只有一個銷售對象:就是我。

巨集者就如我所說的方向錯誤,雖然遊說花了一些工夫,最後還是把它終止了。Excel 團隊說服 Basic 團隊,說我們真正需要的是某種給 Excel 用的 Visual Basic。我想法子要 Basic 加入四個可愛功能。我要他們增加 Variant,一個可以包含任何資料結構的大一統型別(否則就得動用 switch 述句,才能把試算表儲存格內容存到變數裡)。我讓他們加入了晚期繫結(late binding),後來被稱為 IDispatch(又名COM Automation),因為「銀色」的原始設計要求使用者深入了解資料型別系統,但是寫巨集的人根本就不會管這些東西。我又加了兩個語法:從 csh 偷來的 'For Each',以及從Pascal 偷來的 'With'。

然後我坐下來開始寫 Excel Basic 規格,一份後來長達數百頁的超大文件。我想當它完成時應該有 500 頁吧。(「瀑布開發法」,你竊笑著。是啊是阿...你閉嘴吧!)

當時我們習慣有 BillG 審議這檔事。基本上每個重大功能都得經過比爾.蓋茲的審查。有人叫我在審查前先送一份規格到他的辦公室,那是一大疊用雷射印表機印出的文件。

我急忙把規格印出並送到比爾的辦公室。

那一天我還有點時間,所以開始想弄清楚,Basic 裡是否有足夠的日期時間函式,足以完成所有在 Excel 能做到的事。

在大部分的現代編程環境中,日期會被儲存成實數。整數部分是過去某個大家協議好的過去日期(叫做紀元(epoch))到今天的天數,今天的日期 2006 年 6 月 16 日在 Excel 中會儲存成 38884,就是 1900 年 1 月 1 日為1開始數出的天數。

我開始瀏覽 Basic 中各種時間日期函式與 Excel 中的各種時間日期函式,做各種嘗試,而我注意到 Visual Basic 的文件中有些不尋常,Basic 用 1899 年 12 月 31 日當做紀元而非 1900 年 1 月 1 日,但是基於某種原因,今天的天數在 Excel 跟在 Basic 中的是一樣的。

呃?

我得去找一個年資夠久到會記得原因的 Excel 程式師,Ed Fries 看起來知道答案。

「喔,」,他告訴我,「1900 年 2 月 28 日是多少?」

「59」我說。

「那 3 月 1 日呢?」

「是 61!」

「60 怎麼了?」Ed問。

「2 月 29 日!1900 年是閏年!它是4的倍數!」

Ed 說「猜得好,不過猜錯了。」,讓我一陣錯愕。

喔喔。我做了一些研究,可以被 100 整除的那一年不是閏年,除非它也能被400整除。

所以 1900 年不是閏年。

「這是 Excel 的一個臭蟲!」我驚叫。

「嗯,不『完全」是,」Ed 說,「我們得這麼做才能匯入 Lotus 123 的工作表。」

「所以這是 Lotus 123 的臭蟲囉?」

「嗯,不過也許是故意的。Lotus 只能在 640K 記憶體內執行。這樣的記憶體並不怎麼多。如果忽略 1900 年,只要看最右邊兩位是不是 00,就可以知道判斷是否閏年了。這樣快又簡單多了。Lotus 那些傢伙也許認為這過去的兩個月的錯誤無關緊要。但是 Basic 的那些傢伙也許認為這兩個月非對不可,所以把紀元往前移了一天。

「哇!」我驚嘆著,然後又繼續研究為什麼選項對話視窗有個叫「1904 日期系統」的勾選框。

隔天就是偉大的 BillG 審議。

1992 年 6 月 30 日。

當時微軟的組織扁平多了。他們現在有11或12層管理階層,而當時我的上司是 Mike Conte,他的上司是 Chris Graham,再上去是 Pete Higgins,再往上是 Mike Maples,最後是比爾蓋茲。從下到上大概有6層。我們嘲笑那些像通用汽車那種有著8層管理組織的公司。

在我的BillG審查會議中,由我往上的所有上司全部都在那裡,還有他們的下屬、同級、同級的上司等等,以及一個從我的團隊來的人,他的工作就是精準的記錄比爾說了幾次F開頭的粗話,F***的次數愈少表示愈好。

比爾蓋茲走進來了。

想想也真是奇怪,他有兩條腿,兩隻手,一個頭...嗯,就跟個正常人一樣。

他手上拿著我的規格。

「他手上拿著我的規格文件!」

他坐下並跟一個我不認識的高階主管交換了一個詼諧的玩笑,那對我來說毫無意義。一小撮人笑了。

比爾蓋茲轉向我。

我注意到在我寫的規格頁邊寫著一些註解。他讀了第一頁!

「他讀了我寫的規格的第一頁而且寫了一些註解在頁邊上!」

想想看,我們只讓他在24小時前拿到這份文件,他一定是在前一晚才讀的。

他一直在問問題。我也逐一回答。那些問題非常簡單,但我終其一生都記不起來是什麼... 因為我無法不注意他在翻弄手上的文件...

「他在翻弄那些文件!」 [冷靜一下,你是個發春的女孩嗎?]

... 「所有頁邊都寫了註解。文件的每一頁都有。他該死的讀了整份文件還在頁邊上寫了註解。」

「他讀了全部的內容!」 [「噢我的天啊啊啊啊啊啊....」]

問題開始變得愈來愈難也愈來愈細。

那些問題似乎不太有條理。但此時我才把比爾蓋茲當做自己的同伴。他真是個厲害的傢伙!他讀了我的文件!他也許只是想問我一些關於頁邊上註解的問題!我會「馬上」把他所有的意見都輸入錯誤追蹤系統,以確保每個意見都有處理!

最後是個殺手級問題。

「我真弄不懂,你們這些傢伙,」比爾蓋茲說,「有人『真的』深入搞懂這些東西實作的細節嗎?比如說這全部的時間日期函式。Excel 有這麼多的時間日期函式。Basic 也要有這麼多相同的函式嗎?他們的作法都一樣嗎?」

「是的,」我說「除了1900年的1月跟2月。」

一片安靜。

F***記錄員與我上司交換了驚訝的眼神。我怎麼會知道那玩意?1月跟2月什麼鬼東西?

比爾說「OK。好吧,做的好。」然後拿起了他那份寫滿字的文件

「...等一下!我要那份文件...」

離開了。

「四次,」f***記錄員宣布結果,而每個人都在說「喔,這可是我所記得最低的記錄呢。比爾隨著他的年紀變穩重了。」你知道的,他那時的年紀是36歲。

稍後我對我自己解釋說,「比爾蓋茲並不是真的想要審閱你的文件,他只是想確定你把一切事都做好了。他的標準做法就是問愈來愈難的問題,直到你承認你投降為,然後他就可以對你咆哮說你什麼都沒準備好。沒有人真的確定當你答出那最難的問題後會怎樣,因為那從未發生過。

有人問「你能想像如果 Jim Manzi 在這場會議中會怎麼嗎?」。「日期函式是什麼東西?」Manzi 一定會這樣問。

Jim Manzi 是帶著 Lotus 走向下坡的那種企管碩士。

這是個重點。比爾蓋茲是個驚人的技術人。他了解 Variants、COM 物件、IDispatch,也了解 Automation 為何與 vtable 不同,而這種不同又如何導致雙重介面。他關心日期函式。如果負責的部下能讓他信任,他就不會干涉軟體上的事,但你無法唬弄他一分鐘,因為他是一個程式設計師。一個貨真價實的程式設計師。

看著試圖經營軟體公司的非程式師,就好像看著一個人不會衝浪卻想要衝浪。

他們說「這不要緊!我有一群偉大的顧問在岸邊告訴我要做什麼」,然後一次又一次跌離甲板。這是那種認為管理是個通測的企管碩士標準的哀嚎。Ballmer 會成為另一個 John Sculley 嗎?John Sculley 幾乎讓蘋果電腦完蛋,只是因為董事會認為會賣百事可樂就足以經營好電腦公司。MBA 信徒總是希望相信,即使不了解其產品,你還是可以經營一個組織。

一年一年過去,微軟變得愈來愈大,比爾蓋茲已經過度擴張了,而某些隱晦道德決策使公司必須就美國政府的對抗投入太多高層關注。Steve 已經接管 CEO 的角色,理論上這能讓比爾去做他最擅長的事:經營一個軟體開發組織,但這似乎無法治癒這 11 層組織所引起的風土病,一個持續永無休止的開會文化,頑固地堅持創造所有可能的產品而不管是什麼產品。微軟在研發、法律費用和聲譽損害上不知損失了幾十億美元,只因為他們決定不只要得做出一個 web 瀏覽器,還得完全免費。20年來鬆散,快速的召募動作,確定了微軟的中等雇員腦力水準下降。(Douglas Coupland 在 「Microserfs」一書裡說:「他們在1992年一年就雇用了3100人,而你知道他們並不是全都是珍寶。)

反正。重點轉移到別的地方。Excel Basic 變成了給 Excel 用的 Microsoft Visual Basic for Application,伴隨著一大堆我不知道那裡才能擺得下的TM與®。我在1994年離開微軟,心中假定比爾已經完全忘了我,直到我注意到華爾街日報關於比爾蓋茲的一篇專訪,在那裡面他提到(簡直是順便說的)說找個好的 Excel 程式經理有多麼困難,他們不會果子一般從樹上長出來等等之類的話。

他是在講我嗎?嗯,那也許只是另外一個人罷了。

沒差啦。

這些網頁的內容為表達個人意見。
All contents Copyright © 1999-2006 by Joel Spolsky. All Rights Reserved.