美圖欣賞 | 設為首頁 | 加入收藏 | 網站地圖

當前位置:電腦中國 > 編程 > 數據結構及算法 >

比爾·蓋茨評審產品時說 F**k 最少的一次

2018-06-28 11:19|來源:未知 |作者:dnzg |點擊:

在早些時候,Excel 有一種非常難用的沒名字的編程語言。我們叫它“Excel 宏(Excel Macros)”。這是一種功能嚴重失調的編程語言,它沒有變量(你必須將值存儲在一個工作表的單元格中)、沒有局部變量(locals)、沒有子例程調用(subroutine calls)。簡而言之,它幾乎完全無法維護。它有像任意跳轉語句 Goto 這樣的高級特性,但標簽(labels)實際上是看不見的。

唯一使它看起來合理的是,它和 Lotus 宏相比看上去太好了。Lotus 宏只不過是把一系列的鍵盤敲擊作為一個長字符串輸入到一個工作表單元格。

1991 年 6 月 17 日,我開始在微軟 Excel 團隊工作。我的頭銜是“程序經理(Program Manager)”。我應該為 Excel 宏的問題想出一個解決辦法。言外之意就是,解決方案會與 Basic 編程語言有關。

Basic?一點都沒錯!

我花了一些時間,與不同的開發小組磋商。Visual Basic 1.0 那時剛剛發布,酷到不行。有一個在誤導中進行的開發,代號為 MacroMan,以及另一個面向對象(Object-Oriented)的 Basic 也在開發,代號為“Sliver”。Sliver 團隊得知,他們的產品將會有一個客戶端:Excel。Sliver 的市場經理 Bob Wyman,沒錯,就是那個 Bob Wyman,他只用把技術售賣給一個人:我。

(2014 年的 Joel Spolsky,伯樂在線補圖 )

正如我所說的,MacroMan 誤入歧途,也采納了一些勸告,但最終它被關閉了。Excel 團隊使 Basic 團隊確信,我們真正需要的是一種針對 Excel 的 Visual Basic。我設法在 Basic 中添加了四個受寵的特性。我讓他們添加了變型(Variants),一個可以存儲任何其他類型的數據類型,否則在沒有 switch 語句的判斷下,你就不能以一個變量存儲電子表格單元格的內容。我還讓他們加上了后期綁定(late binding),也叫做 IDispatch,或是 COM 自動化。因為Silver的原始設計需要對類型系統(type systems)有深入理解,而宏的開發者根本不需要懂這個。然后,我有兩個受寵的語法特性:For Each 結構是從 csh 中借鑒的;With 結構是從 Pascal 中借鑒的。

之后,我坐下來編寫 Excel Basic 的規格說明書,一份巨大的文件,長到幾百頁。我想起寫完的時候,它有 500 頁了。(“瀑布式開發”有人在偷笑了,是的沒錯,別笑了。)

那時候,我們通常會有一件事叫做“BillG 審查”。Bill Gates 基本上會審查每個重大的功能。我被通知送一份規格說明書復印件到他的辦公室,為審查做好準備。這基本上用掉了一令打印紙。(伯樂在線注:令,英文紙張計數單位。1 令為 500 張)

我趕去把規格說明書打印出來,送到了他的辦公室。

那天晚一點的時候,我有了一些時間,因此我開始工作于計算 Basic 是否有足夠的日期和時間函數來完成所有在 Excel 里能做的任務。

在多數現代編程環境中,日期是以實數形式存儲的。這個實數的整數部分,是從以前某個公認的日子至今所經過的天數。這個公認的日子叫做“紀元(epoch)”。在 Excel 中,例如,今天的日期——2006 年 6 月 16 日,以 38884 存儲著;計算日期 1900 年 1 月 1 日的話,就是 1。

我開始徹底地測試 Basic 和 Excel 的各種日期和時間函數,在那之后,我注意到 Visual Basic 的文件里有異常——Basic 以 1899 年 12 月 31 日為紀元,而不是 1900年 1 月 1 日,但不知何種原因,當天日期的值在 Basic 和 Excel 里是一樣的。

哈?

我去找到一個資歷老練到記得背后原因的 Excel 開發者。Ed Fries 看起來知道答案。

他告訴我:“檢驗一下 1900 年 2 月 28 日。”

我說:“存儲值是 59。”

“那再試下 3 月 1 日。”

“是 61。”

Ed 問:“60 哪去了?”

“2 月 29 日,1900 年是閏年,它能被 4 整除!”

Ed 說:“猜測的不錯,但還不夠。”接著讓我想了一會兒。

天吶,我又思索了一番,能被 100 整除的年份,除非它還能被 400 整除,否則就不是閏年。

1900 年不是閏年。

我驚呼道,“這是一個 Excel 里的 bug。”

“不完全是,”Ed 講到,“我們不得不用那種方式,為了能導入 Lotus 123 的工作表。”

“所以這是 Lotus 123 里的 bug?” (伯樂在線補充:Lotus 123 是一種電子表格軟件,1983 年由蓮花公司推出,后來被 IBM 收購。Lotus 123 就是 Excel 的競品。)

“是的,但很有可能是故意為之。Lotus 內存小于 640 k。那是很小的內存。如果忽視 1900 年,你能只是看最右兩位是否為零來計算某一年是不是閏年。這樣快速且容易。Lotus 的人可能認為在過去的日子里只有這兩個月受到影響并不是什么重大的錯誤。但看起來,Basic 的人對這兩個月吹毛求疵,所以他們把紀元回退了一天。”

“天啊!”我感嘆到。然后繼續研究為什么在名為「1904 Date System」的選項對話框里有一個復選項。

第二天就是重要的 BillG 審查。

1992 年 6 月 30 日。

過去,微軟公司是很少官僚的。我向 Mike Conte 匯報,Mike Conte 經過 Chris Graham、Pete Higgins、Mike Maples 的層層匯報,最終 Mike Maples 就能向 Bill 匯報了。不像現在的 11 或是12 層,以前自頂向下只有 6 個層級左右。我們曾經取笑像通用汽車(General Motors )這樣的公司,因為他們有 8 個管理層或是天知道做什么的層。

在我 BillG 評審的會議上,以上的匯報層都到場了,他們還帶著一堆我懷疑是表兄表妹姑嬸的人。還有一個我團隊里的人,他負責準確記錄 Bill 整場爆了幾次粗口。Bill 說 Fxxx 的次數越少,review 結果越好。

(看到上句標紅的地方,伯小樂不由自主想到這張漫畫 😂)

Bill 進來了。

我感覺太奇怪了,他竟然有兩條腿、兩個胳膊和一個腦袋。幾乎和普通人類完全一樣。

在他手上拿著我的規格說明書。

我的規格說明書在他手上!

他坐下,和一個我不認識的高管,戲謔了幾句對我而言沒什么意義的話。一些人笑了。

Bill 轉向我。

我注意到我的規格說明書邊緣上有一些評論。他已經看過第一頁了!

他已經看過我規格說明書的第一頁了,而且還在邊上寫了幾句筆記!

想到我們剛在 24 小時前把規格說明書送給他,他一定是在昨天晚上閱讀它的。

他問了幾個問題。我回答了。它們非常簡單,但我之后再也記不起都問了什么,因為我目不轉睛地看著他翻閱著規格說明書……

他在翻閱著規格說明書!(冷靜,你是沒見過世面的小女孩么?)

……并且,邊上都寫著筆記。在規格說明書的每一頁都有。天啊,他已經閱讀過了整個文件,并且在所有邊緣寫上了筆記。

他讀了整個文件!(天啊,怎么可能!)

提問越來越難,越來越細。

問題似乎有點隨機。那時我已經把 Bill 當成自己人了。他是個不錯的家伙!他讀完了我的規格說明書!他可能只是想問我幾個和寫在邊上的評論相關的問題。我要打開錯誤提交系統,把他的每一條筆記都放進去,并且確保得到重視和解決,要快!

最后是一個很要命的問題。

Bill 說,“我不知道你們有誰真的看過如何去做的所有細節?比如,所有的日期和時間函數。Excel 有大量的日期和時間函數,Basic 是否也有一樣的函數?它們工作的方式一樣嗎?”

“看過,”我回答到,“除了 1900 年的 1 月和 2 月。”

一片寂靜。

粗口記錄員和我上司驚訝地對視了一眼。我是怎么知道的?1 月 和 2 月怎么了?

“好。那么,做的不錯,”Bill 這么說。他拿起他做了筆記的規格說明書復印件。

……等等!我想要那個!【新錦江娛樂官網:www.justoa69.com】

然后他走了。

“4 次。”粗口記錄員匯報道。所有人都說:“哇。這是我記憶中的最低記錄。Bill 隨著年齡大起來越來越穩重了。” 那年,他 36 歲。

后來,我自己解釋:“Bill 并不是真的要評論規格說明書,只是想確保你已經完全掌握了它。他的標準做法是不斷提問,越問越難,直到你承認你不懂,接著他就會吼你‘為什么沒準備好?’沒人真的知道,如果答出來了那個他拋出的最難得問題會怎么樣,因為之前還沒人答上過。”

“你能想象如果 Jim Manzi 在那個會上嗎?”有人問。“Manzi 會問你‘什么是日期函數?’”

Jim Manzi 是 MBA 類型的領導,他把 Lotus 帶上了下坡路。(伯樂在線補注:Jim Manzi 1982 年加入 Lotus 公司。1984 年成為 Lotus 總裁。)

這是很重要的一點。Bill Gates 是個驚人的技術人員。他理解可變數據類型、COM 對象、IDispatch 接口,以及 Automation 和虛表有什么不同,為什么這樣會導致雙重接口(dual interfaces)。他擔憂日期函數。他不會干涉軟件,如果他信任為此工作的人。但你一分鐘也不能糊弄他,因為他是一個程序員。一個真真正正的程序員。

看那些不懂編程的人想經營一家軟件公司,就像看不會沖浪的人硬要去沖浪一樣。【新錦江娛樂官網:www.justoa69.com】

“沒關系。我有極好的顧問站在岸邊告訴我如何去做!”他們這樣說,結果他們會一次又一次的從滑板摔落。這是那些 MBA 的標準說辭,他們相信管理是一項通用技能。鮑爾默會成為另一個 John Sculley 嗎? John Sculley 幾乎差點讓蘋果(Apple)破產,就因為那時蘋果的董事會相信一個整天想著賣百事可樂的人能準備好經營一家計算機公司。MBA 的崇拜者樂于相信人可以經營一家公司,而根本不懂公司業務。

幾年過去,微軟逐漸變得龐大。Bill 精力分散,一些道德上名聲不好的決策,使得公司管理需要在很多方向上與美國政府抗爭。鮑爾默接手微軟 CEO 的角色,在理論上能夠讓 Bill 把更多時間放在他的長處上,去經營軟件開發組織,但這似乎并沒有解決由于一些特殊原因造成的問題。像是11 層的管理結構、無盡的開會文化、一種將所有可能產品都制造出來的固執,無論那是什么。(微軟流失了不可計數的美元,在研發、法律費用和名譽損失上,只因為他們決定不僅必須要做一個瀏覽器,而且還必須要免費發布。)以及幾十年以來匆忙、草率的招聘使微軟中層的水平下降。(Douglas Coupland 在 Microserfs 中說:他們在 1992 年雇傭了 3100 人,其中并不都是人才。)

好了。聚會已經搬到了其他地方。Excel Basic 成為了 Microsoft Visual Basic 應用程序微軟 Excel 版,有太多注冊商標(TM)和(R)以至于我不知道該把它們放哪。我在 1994 年離開了微軟公司,以為 Bill 已經完全忘記了我,直到我發現《華爾街日報》上一篇 Bill Gates 的小專訪。里面他講到招聘是多么難的事時,幾乎只是順便一提地說了,就像一個優秀的 Excel 程序經理,他們不是簡單地長在樹上,諸如此類的話。

他會不會是在說我?不會吧,那可能是別的什么人。

一切都定格在過去了。

(責任編輯:dnzg)
相關閱讀
足彩半全场是什么意思