背景:Excel 巨集語言的誕生#

Joel 於 1991 年加入微軟 Excel 團隊,擔任程式經理(Program Manager),負責為 Excel 巨集語言找到解決方案。當時 Excel 有一種功能極弱的「Excel 巨集語言(Excel Macros)」,沒有變數、沒有局部變數、沒有子程式呼叫。

他與各開發小組溝通後,決定讓 Excel 採用某種 Visual Basic 的變體,並加入了幾項關鍵設計:

  • Variant 資料型別:可儲存任何類型的資料,免去每次都用 switch 判斷的麻煩
  • Late Binding(後期繫結):後來成為 IDispatch 介面,又稱 COM 自動化
  • 借鑑其他語言的語法結構:從 UNIX shell 借鑑 For Each,從 Pascal 借鑑 With

之後他撰寫了長達 500 頁的 Excel Basic 規格說明書。

BillG 審查會的震撼#

在微軟,Bill Gates 會親自審查每一個重大功能。Joel 將規格說明書印出送到 Bill 的辦公室。

Bill Gates 不只是走馬看花——他在 24 小時內讀完了整份規格說明書,並在每一頁的空白處都寫滿了評語,從頭到尾無一遺漏。

審查會上的關鍵時刻:

  • Bill 的提問越來越難、越來越細,不斷追問直到你承認自己不知道為止
  • 他真正的目的不是批評,而是確認你對實現目標是否有把握
  • 有人專門負責記錄 Bill 說了幾次髒話——次數越少,代表審查結果越好(那次只有 4 次,創下最低紀錄)

日期函數的 Bug 故事#

Joel 在準備過程中發現了一個有趣的問題:Basic 和 Excel 的日期紀元不同(差一天),原因可追溯到 Lotus 1-2-3 的一個刻意設計——將 1900 年誤判為閏年以節省記憶體空間。

Bill 在審查會最後問道:「Excel 有那麼多日期和時間函數,Basic 也要有相同的函數嗎?能保證行為都一樣嗎?」Joel 回答只有 1900 年 1、2 月例外,成功過關。

核心啟示:技術領導者必須懂技術#

不懂程式設計的人管軟體公司,就好像不懂衝浪的人硬要去衝浪。那些只會說「我請了很棒的顧問」的 MBA 管理者,最終會從衝浪板上摔下來。

Bill Gates 的技術理解力令人驚嘆——他理解 Variant、COM 物件、IDispatch 介面與 Automation 的差異,也明白雙重介面(dual interface)可能帶來的問題。如果你信任這樣一個懂技術的人,他就不會干涉軟體開發;但你絕不能懶得理他。

隨著微軟日益龐大,Bill 的精力被分散到反壟斷訴訟等事務上,管理結構臃腫化、開會文化氾濫,中基層人才品質也逐漸下降——這正是缺乏技術領導力的代價。