1. 程式人生 > >程式碼傳奇丨比爾蓋茨親手挖了個非科班程式設計師 如今是矽谷公認的作業系統天神

程式碼傳奇丨比爾蓋茨親手挖了個非科班程式設計師 如今是矽谷公認的作業系統天神

David Cutler 聽過嗎? 他是微軟公認的最厲害的程式設計師,VMS 和 Windows NT 的首席設計師,1988 年去微軟前矽谷最牛的核心開發人員,在作業系統領域摸爬滾打幾十年,其間的經歷就像一部標準的矽谷程式設計師奮鬥日記。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

大衛·卡特勒(David Cutler),又叫做戴夫·卡特勒(Dave Cutler),戴夫是他的暱稱。他是一位傳奇程式設計師,是 VMS 和 Windows NT 的首席設計師,被人們成為「作業系統天神」。

他曾供職於杜邦、DEC 等公司,1988 年,由比爾 ·蓋茨招募到微軟,他用了 5 年時間花費了 15 億美金,負責組織 NT 的開發。

與許多計算機界的前輩牛人們一樣,David Cutler 並不是計算機科班出身,他在大學拿的是數學學士,主攻物理,滿懷熱情地想成為一位建造事物的工程師。所以,畢業後他進入杜邦公司從事材料測試。一次偶然的機會,David 被指派負責在 DEC 的計算機上執行模擬程式,還為多臺單機實時系統編寫中央控制程式,排程各種任務、監控系統運作。這個經歷不僅豐富了 David 的軟體知識,還讓他做出了一個重大的決定:去一家真正從事計算機業務的公司,開發作業系統。

1971 年,David Cutler 離開杜邦公司來到 DEC。他的第一項任務就是為 DEC 的 PDP-11 微處理器開發作業系統——RSX-11M。PDP-11 是為工業控制和製造控制而設計的 16 位微處理器。David 結合總體概念和設計原則,利用匯編語言在非常有限的記憶體空間內實現了多項系統功能,如:樹型檔案系統、交換應用程式、實時排程和一整套開發工具等。據 David 回憶,當時連他的橡皮圖章上都刻著開發這個作業系統的目標——「容量就是一切!」後來,這些概念和原則也體現在了 NT 上。

70 年代後期,DEC 公司在 PDP-11 的基礎上開發出 32 位的 VAX 處理器。與之相應,也要開發基於 VAX 的作業系統 VMS,要能相容 RSX-11M,可以在不同大小的機器上執行。David Cutler 成為這個專案主要負責人,設計 VMS 的架構。1977 年,VMS 1.0 問世。David 唯一的遺憾是,因為迎合商業進度,因此 VMS 也是用匯編語言寫的,儘管當時完全可以用高階語言。所以,技術上正確的事並不見得是商業上的最佳選擇。隨後,David 繼續研製 VMS 的後續版本,不過他有些不耐煩了。1981 年,David 威脅要離開 DEC。為了挽留它的明星開發者,DEC 給了 David 大約 200 位軟硬體工程師。David 把他的小組搬到西雅圖,並建立了一個開發中心。這個精英小組的目標是設計一個新的 CPU 體系結構和作業系統,可以把 DEC 帶到九十年代。DEC 把這個小組的硬體專案稱為 Prism,作業系統為 Mica。

很不幸,Prism 專案於 1988 年被 DEC 撤銷,很多專案成員也被解僱。因此 David Cutler 萌生了去意。此時,為了未來能夠與 Unix 抗爭、開發新的作業系統,Bill Gates 見縫插針,竭力勸說 David 加入微軟。David 去了,還帶去了許多與他一同開發 VMS 和 Mica 的程式設計師。進入微軟,David 領導一個工程小組,負責設計一種能提供檔案服務、列印服務和應用服務的對稱多處理。作業系統,起名為 Windows New Technology(NT)。這就是 Bill Gates 想用來對抗 Unix 的新型武器。

經過近 4 年的開發工作,在 1993 年 6 月釋出的第一版 Windows NT 3.1,已經具備了現代作業系統的雛形——搶先式多工、虛擬記憶體、對稱多處理器、圖形介面、C2 安全級、堅固而穩定的核心、內建網路支援、完全的 32 位程式碼等。而 1994 年推出的 Windows NT 3.51 和 1996 年推出的 Windows NT 4.0,在效能上有了更進一步提高;NT4.0 甚至提供了當時最先進的 Windows 95 風格介面。David Cutler 在自己的天梯上繼續攀升,Bill Gates 也在銷售數字面前笑得合不攏嘴。

0?wx_fmt=jpeg

毫無疑問,NT 作業系統有一個優秀的核心,David Cutler 成功地引入了硬體抽象層、核心物件這些天才的思想。雖然我們沒能得見它的原始碼,但在鑽研 NT DDK 的過程中、在埋頭可能就是由 David 親筆撰寫的文件中時,總能有那些閃光點,讓我們可以在不同的時空與大師對話。

如今,Built On NT Technology 的 Windows 2000 和 XP 的成績有目共睹,而針對 64 位處理器的 XP 也即將推出。回顧開發作業系統的歷程,David 情不自禁地感嘆道:「我也不知道,自己竟是那麼的幸運,能夠在有生之年開發好幾個作業系統,而對於任何一個人來說,哪怕只開發一個都是非常難得的機會。」

是的,David Cutler 做到了,在作業系統領域中縱橫了幾十年,締造了許多傳奇和神話。然而,又有誰會去看他幾十年的專注、寂寞、付出與艱辛呢?可能每個人在開始自己的職業生涯時都會設定一個目標。然而只有那麼一些人會抓住目標緊緊不放、全心投入,最後這些人成了我們眼中的成功者、技術天才。也許,這就是成就天才與普通人的不同之處。

David Cutler 趣事一則

David Cutler,VMS 和 Windows NT 的首席設計師,去微軟前號稱矽谷最牛的 kernel 開發員。當初他和他的手下在微軟一週內把一個具備基本功能的 bootable kernel 寫出來,然後說:「who can』t write an OS in a week?",也是牛氣沖天的說。順便說一句,D 爺爺到 NT3.5 時,管理 1500 名開發員,自己還兼做設計和程式設計,不改 coder 本色啊。D 爺爺天生脾氣火爆,和人爭論時喜歡雙手猛擊桌子以壯聲勢。:-) 日常交談 F-word 不離口。他面試祕書時必問:"what do you think of the word 『fuck』?",讓無數美女剎羽而歸。終於有一天,一個同樣火爆的女面對這個問題脫口而出:"That』s my favorite word"。於是她被錄取樂,為 D 爺爺工作到 NT3.5 釋出。

David Cutler 是全世界公認的 Windows NT 之父,我們現在最常用的從 XP 開始直到 Win7 全部都是 NT 的核心,只是版本號不一樣。這位 NT 之父對 Windows 核心有多少程式碼貢獻呢,小編統計了一下:

\ntos\ex\alpha\raisests.c David N. Cutler (davec) 18-Oct-1990 

\ntos\ex\ia64\raisests.c based on David N. Cutler (davec) 18-Oct-1990 

\ntos\ex\mips\raisests.c David N. Cutler (davec) 18-Oct-1990 

\ntos\ex\ppc\raisests.c David N. Cutler (davec) 18-Oct-1990 

\ntos\ex\callperf.c David N. Cutler (davec) 22-May-1994 

\ntos\ex\delay.c David N. Cutler (davec) 13-May-1989 

\ntos\ex\event.c David N. Cutler (davec) 8-May-1989 

\ntos\ex\exp.h David N. Cutler (davec) 23-May-1989 

\ntos\ex\handle.c David N. Cutler (davec) 17-May-1995 (rewrite) 

\ntos\ex\lookasid.c David N. Cutler (davec) 19-Feb-1995 

\ntos\ex\mutant.c David N. Cutler (davec) 17-Oct-1989 

\ntos\ex\pool.c David N. Cutler (davec) 27-May-1994 

\ntos\ex\probe.c David N. Cutler (davec) 19-Jan-1990 

\ntos\ex\raise.c David N. Cutler (davec) 29-Apr-1995 

\ntos\ex\region.c David N. Cutler (davec) 25-Novy-1995 

\ntos\ex\resource.c David N. Cutler (davec) 20-Mar-1994 

\ntos\ex\semphore.c David N. Cutler (davec) 8-May-1989 

\ntos\ex\spintrac.c David N. Cutler (davec) 16-May-1989 

\ntos\ex\sysenv.c David N. Cutler (davec) 10-Nov-1991 

\ntos\ex\timer.c David N. Cutler (davec) 12-May-1989 

\ntos\inc\alpha.h Joe Notarangelo 31-Mar-1992 (based on mips.h by Dave Cutler) 

\ntos\inc\arc.h David N. Cutler (davec) 18-May-1991 

\ntos\inc\arccodes.h David N. Cutler (davec) 20-Sep-1991 

\ntos\inc\duodma.h David N. Cutler (davec) 13-Nov-1990 

\ntos\inc\dzport.h David N. Cutler (davec) 15-Aug-1990 

\ntos\inc\hal.h David N. Cutler (davec) 25-Apr-1991 

\ntos\inc\i386.h David N. Cutler (davec) 2-Aug-1989 

\ntos\inc\ia64.h David N. Cutler (davec) 31-Mar-1990 

\ntos\inc\jazzdef.h David N. Cutler (davec) 26-Nov-1990 

\ntos\inc\jazzdma.h David N. Cutler (davec) 13-Nov-1990 

\ntos\inc\jazzint.h David N. Cutler (davec) 6-May-1991 

\ntos\inc\jazzprom.h David N. Cutler (davec) 27-Apr-1991 

\ntos\inc\jazzrtc.h David N. Cutler (davec) 3-May-1991 

\ntos\inc\jazzserp.h David N. Cutler (davec) 28-Apr-1991 

\ntos\inc\jnsndef.h David N. Cutler (davec) 26-Nov-1990 

\ntos\inc\jnsnint.h David N. Cutler (davec) 6-May-1991 

\ntos\inc\jnsnrtc.h David N. Cutler (davec) 3-May-1991 

\ntos\inc\jnsnserp.h David N. Cutler (davec) 28-Apr-1991 

\ntos\inc\ke.h David N. Cutler (davec) 27-Feb-1989 

\ntos\inc\mips.h David N. Cutler (davec) 31-Mar-1990 

\ntos\inc\ppc.h Based on mips.h, by David N. Cutler (davec) 31-Mar-1990 

\ntos\inc\ppcdef.h David N. Cutler (davec) 26-Nov-1990 

\ntos\inc\ppcserp.h David N. Cutler (davec) 28-Apr-1991 

\ntos\io\complete.c David N. Cutler (davec) 25-Feb-1994 

\ntos\kd\alpha\kdtrap.c David N. Cutler 27-July-1990 

\ntos\kd\mips\kdtrap.c David N. Cutler 27-July-1990 

\ntos\kd\ppc\kdtrap.c Based on David N. Cutler MIPS version 27-July-1990 

\ntos\kd\kdbreak.c David N. Cutler 2-Aug-1990 

\ntos\kd\kdcomio.c David N. Cutler 27-July-1990 

\ntos\kd\kdinit.c David N. Cutler 27-July-1990 

\ntos\kd64\alpha\kdtrap.c David N. Cutler 27-July-1990 

\ntos\kd64\ia64\kdtrap.c David N. Cutler 27-July-1990 

\ntos\kd64\kdbreak.c David N. Cutler 2-Aug-1990 

\ntos\kd64\kdcomio.c David N. Cutler 27-July-1990 

\ntos\kd64\kdinit.c David N. Cutler 27-July-1990 

\ntos\ke\alpha\alignem.c David N. Cutler (davec) 17-Jun-1991 

\ntos\ke\alpha\allproc.c David N. Cutler 29-Apr-1993 

\ntos\ke\alpha\apcuser.c David N. Cutler (davec) 23-Apr-1990 

\ntos\ke\alpha\callback.c David N. Cutler (davec) 29-Oct-1994 

\ntos\ke\alpha\exceptn.c David N. Cutler (davec) 3-Apr-1990 

\ntos\ke\alpha\floatem.c David N. Cutler (davec) 16-Jun-1991 

\ntos\ke\alpha\flush.c David N. Cutler (davec) 26-Apr-1990 

\ntos\ke\alpha\flushtb.c David N. Cutler (davec) 13-May-1989 

\ntos\ke\alpha\getsetrg.c David N. Cutler (davec) 17-Jun-1991 

\ntos\ke\alpha\initkr.c David N. Cutler (davec) 11-Apr-1990 

\ntos\ke\alpha\intobj.c David N. Cutler (davec) 3-Apr-1990 

\ntos\ke\alpha\ipi.c David N. Cutler 24-Apr-1993 

\ntos\ke\alpha\thredini.c David N. Cutler (davec) 1-Apr-1990 

\ntos\ke\i386\apcuser.c David N. Cutler (davec) 23-Apr-1990 

\ntos\ke\i386\callback.c David N. Cutler (davec) 29-Oct-1994 

\ntos\ke\i386\exceptn.c David N. Cutler (davec) 30-Apr-1989 

\ntos\ke\i386\flush.c David N. Cutler (davec) 26-Apr-1990 

\ntos\ke\i386\flushtb.c David N. Cutler (davec) 13-May-1989 

\ntos\ke\i386\intobj.c David N. Cutler (davec) 30-Jul-1989 

\ntos\ke\i386\kernlini.c David N. Cutler (davec) 21-Apr-1989 

\ntos\ke\i386\thredini.c David N. Cutler (davec) 31-Mar-1990 

\ntos\ke\ia64\alignem.c David N. Cutler (davec) 17-Jun-1991 

\ntos\ke\ia64\allproc.c Based on MIPS original (David N. Cutler 29-Apr-1993) 

\ntos\ke\ia64\apcuser.c based on MIPS version by David N. Cutler (davec) 23-Apr-1990 

\ntos\ke\ia64\callback.c based on David N. Cutler (davec) 29-Oct-1994 

\ntos\ke\ia64\getsetrg.c David N. Cutler (davec) 17-Jun-1991 

\ntos\ke\ia64\initkr.c Based on MIPS version (David N. Cutler (davec) 11-Apr-1990) 

\ntos\ke\ia64\intobj.c David N. Cutler (davec) 3-Apr-1990 

\ntos\ke\ia64\mpipi.c Based on version of David N. Cutler 24-Apr-1993 

\ntos\ke\ia64\thredini.c David N. Cutler (davec) 1-Apr-1990 

\ntos\ke\mips\alignem.c David N. Cutler (davec) 17-Jun-1991 

\ntos\ke\mips\allproc.c David N. Cutler 29-Apr-1993 

\ntos\ke\mips\apcuser.c David N. Cutler (davec) 23-Apr-1990 

\ntos\ke\mips\branchem.c David N. Cutler (davec) 17-Jun-1991 

\ntos\ke\mips\buserror.c David N. Cutler (davec) 31-Oct-1991 

\ntos\ke\mips\callback.c David N. Cutler (davec) 29-Oct-1994 

\ntos\ke\mips\dmpstate.c David N. Cutler (davec) 17-Jan-1992 

\ntos\ke\mips\exceptn.c David N. Cutler (davec) 3-Apr-1990 

\ntos\ke\mips\floatem.c David N. Cutler (davec) 16-Jun-1991 

\ntos\ke\mips\flush.c David N. Cutler (davec) 26-Apr-1990 

\ntos\ke\mips\genmips.c David N. Cutler (davec) 27-Mar-1990 

\ntos\ke\mips\getsetrg.c David N. Cutler (davec) 17-Jun-1991 

\ntos\ke\mips\initkr.c David N. Cutler (davec) 11-Apr-1990 

\ntos\ke\mips\intobj.c David N. Cutler (davec) 3-Apr-1990 

\ntos\ke\mips\thredini.c David N. Cutler (davec) 1-Apr-1990 

\ntos\ke\mips\xxflshtb.c David N. Cutler (davec) 13-May-1989 

\ntos\ke\mips\xxmpipi.c David N. Cutler 24-Apr-1993 

\ntos\ke\ppc\alignem.c Based on MIPS version by David N. Cutler (davec) 17-Jun-1991 

\ntos\ke\ppc\allproc.c David N. Cutler 29-Apr-1993 

\ntos\ke\ppc\apcuser.c based on MIPS version by David N. Cutler (davec) 23-Apr-1990 

\ntos\ke\ppc\callback.c David N. Cutler (davec) 29-Oct-1994 

\ntos\ke\ppc\dmpstate.c Based on Dave Cutler』s MIPS implemenation 

\ntos\ke\ppc\exceptn.c Adapted from MIPS version by David N. Cutler (davec) 3-Apr-1990 

\ntos\ke\ppc\flush.c David N. Cutler (davec) 26-Apr-1990 

\ntos\ke\ppc\flushtb.c David N. Cutler (davec) 13-May-1989 

\ntos\ke\ppc\genppc.c David N. Cutler (davec) 27-Mar-1990 

\ntos\ke\ppc\getsetrg.c Based on MIPS version by David N. Cutler (davec) 17-Jun-1991 

\ntos\ke\ppc\initkr.c David N. Cutler (davec) 11-Apr-1990 

\ntos\ke\ppc\intobj.c Based on original code by David N. Cutler (davec) 3-Apr-1990 

\ntos\ke\ppc\ipi.c David N. Cutler 24-Apr-1993 

\ntos\ke\ppc\thredini.c David N. Cutler (davec) 1-Apr-1990 

\ntos\ke\tests\mipsflt\flpt.c David N. Cutler (davec) 20-Jun-1991 

\ntos\ke\tests\mipsflt\flpt.h David N. Cutler (davec) 1-Jul-1991 

\ntos\ke\tests\mipsflt\flpt2.c David N. Cutler (davec) 1-Jul-1991 

\ntos\ke\tests\xcphnd\xcpt4.c David N. Cutler (davec) 18-Sep-1990 

\ntos\ke\apcobj.c David N. Cutler (davec) 5-Mar-1989 

\ntos\ke\apcsup.c David N. Cutler (davec) 14-Mar-1989 

\ntos\ke\balmgr.c David N. Cutler (davec) 13-Jul-1991 

\ntos\ke\channel.c David N. Cutler (davec) 26-Mar-1995 

\ntos\ke\config.c David N. Cutler (davec) 9-Sep-1991 

\ntos\ke\devquobj.c David N. Cutler (davec) 1-Apr-1989 

\ntos\ke\dpcobj.c David N. Cutler (davec) 6-Mar-1989 

\ntos\ke\dpcsup.c David N. Cutler (davec) 22-Apr-1989 

\ntos\ke\eventobj.c David N. Cutler (davec) 27-Feb-1989 

\ntos\ke\kernldat.c David N. Cutler (davec) 12-Mar-1989 

\ntos\ke\ki.h David N. Cutler (davec) 28-Feb-1989 

\ntos\ke\kiinit.c David N. Cutler 11-May-1993 

\ntos\ke\miscc.c David N. Cutler (davec) 13-May-1989 

\ntos\ke\mutntobj.c David N. Cutler (davec) 16-Oct-1989 

\ntos\ke\procobj.c David N. Cutler (davec) 7-Mar-1989 

\ntos\ke\queueobj.c David N. Cutler (davec) 31-Dec-1993 

\ntos\ke\raisexcp.c David N. Cutler (davec) 8-Aug-1990 

\ntos\ke\semphobj.c David N. Cutler (davec) 28-Feb-1989 

\ntos\ke\thredobj.c David N. Cutler (davec) 4-Mar-1989 

\ntos\ke\thredsup.c David N. Cutler (davec) 5-Mar-1989 

\ntos\ke\timerobj.c David N. Cutler (davec) 2-Mar-1989 

\ntos\ke\timersup.c David N. Cutler (davec) 13-Mar-1989 

\ntos\ke\wait.c David N. Cutler (davec) 23-Mar-89 

\ntos\ke\waitsup.c David N. Cutler (davec) 24-Mar-1989 

\ntos\ke\xipi.c David N. Cutler (davec) 24-Apr-1993 

\ntos\ke\yield.c David N. Cutler (davec) 15-Mar-1996 

\ntos\mm\axp64\debugsup.c David N. Cutler (davec) 24-Feb-1998 

\ntos\mm\flushbuf.c David N. Cutler 24-Apr-1991 

\ntos\ps\alpha\psctxalp.c David N. Cutler (davec) 1-Oct-1990 

\ntos\ps\ia64\psctxi64.c David N. Cutler (davec) 1-Oct-1990 

\ntos\ps\mips\psctxmip.c David N. Cutler (davec) 1-Oct-1990 

\ntos\ps\ppc\psctxppc.c David N. Cutler (davec) 1-Oct-1990 

\ntos\ps\kulookup.c David N. Cutler (davec) 8-Oct-90 

\ntos\rtl\alpha\chandler.c David N. Cutler (davec) 11-Sep-1990 

\ntos\rtl\alpha\context.c David N. Cutler (davec) 18-Apr-1990 

\ntos\rtl\alpha\exdsptch.c David N. Cutler (davec) 11-Sep-1990 

\ntos\rtl\alpha\ntrtlalp.h David N. Cutler (davec) 19-Apr-90 

\ntos\rtl\i386\divlarge.c David N. Cutler 10-Aug-1992 

\ntos\rtl\i386\exdsptch.c David N. Cutler (davec) 13-Aug-1989 

\ntos\rtl\i386\raisests.c David N. Cutler (davec) 8-Aug-1990 

\ntos\rtl\ia64\chandler.c Based on the version by David N. Cutler (davec) 11-Sep-1990 

\ntos\rtl\ia64\exdsptch.c based on the version by David N. Cutler (davec) 11-Sep-1990 

\ntos\rtl\mips\chandler.c David N. Cutler (davec) 11-Sep-1990 

\ntos\rtl\mips\context.c David N. Cutler (davec) 18-Apr-1990 

\ntos\rtl\mips\exdsptch.c David N. Cutler (davec) 11-Sep-1990 

\ntos\rtl\mips\ntrtlmip.h David N. Cutler (davec) 19-Apr-90 

\ntos\rtl\ppc\chandler.c David N. Cutler (davec) 11-Sep-1990 

\ntos\rtl\ppc\context.c David N. Cutler (davec) 18-Apr-1990 

\ntos\rtl\ppc\exdsptch.c based on MIPS version by David N. Cutler (davec) 11-Sep-1990 

\ntos\rtl\ppc\jumps.c David N. Cutler (davec) 15-Sep-1990 

\ntos\rtl\ppc\ntrtlppc.h based on MIPS version by David N. Cutler (davec) 19-Apr-90 

\ntos\rtl\ppc\vunwind.c based on MIPS version by David N. Cutler (davec) 11-Sep-1990 

\ntos\rtl\generr.c David N. Cutler (davec) 2-Dec-1992 

\ntos\rtl\lookasid.c David N. Cutler (davec) 19-Feb-1995 

\ntos\rtl\ntrtlp.h David N. Cutler (davec) 15-Aug-1989 

\ntos\rtl\recip.c David N. Cutler (davec) 13-May-1989 

\sdktools\imagehlp\checksum.c David N. Cutler (davec) 21-Mar-1993

共計有 177 個檔案是出自這位 NT 之父。比 Mark Lucovsky 還要多一倍。當之無愧的 NT 之父。

更讓人欽佩的是,這位前輩依然奮戰在程式碼的第一線。與國內目前普遍認為 30 歲以後就不適合做 Coding 的態度截然不同。現在業內的心態大多太浮躁了。

就本文討論的話題,你有什麼想法,歡迎在留言區跟大家分享討論哦~另外

程式人生公開徵集程式猿(媛)故事

你是一位心思細膩、文采了得、被程式碼耽誤了的文藝程式猿(媛)麼?

你是否在工作或生活中發現過許多程式設計樂趣想要與大家分享呢?

如果有,歡迎搜尋小編微信ID:druidlost 或 duoshangshuang 投稿。

加微信時請備註:#我有個故事想說給你聽#

你的文章一經採用,我們會有精美禮品作為獎勵。

更多精彩

0?wx_fmt=gif

640?wx_fmt=png