比爾·蓋茨談軟件開發的心得體會
高章舜_2020首次發布:2024年1月10日 16:32瀏覽量:2496
 用鼠標選中
生字  后,就能自動讀出發音 
編者按:1974 年,蓋茨與艾倫合伙成立了微軟,下面是1986年蓋茨接受采訪時談到的軟件開發的心得體會,其觀點 至今仍然有生命力。下文 來自微博博主“寶玉”昨天的一篇譯文,高章舜做了少量優化和修改,供大家參考。下面為1986年的比爾·蓋茨。

比爾·蓋茨在1986年的采訪稿正文
作為微軟的掌舵人,比爾·蓋茨被視為 當今 個人計算機和辦公自動化行業的領軍人物。蓋茨從年少時代起 就踏入了計算機軟件領域。他和微軟的另一位創始人保羅·艾倫,在西雅圖的高中時期 就已經開始 擔任編程顧問。1974 年,當時還是哈佛大學學生的蓋茨與艾倫合作,為首款商用微型計算機 MITS Altair 開發了 BASIC編程語言。這個項目 大獲成功后,他們倆共同創立了微軟,目標是為新興的微型計算機市場提供軟件開發和銷售服務。
微軟在編程語言、操作系統和應用軟件方面為整個軟件行業設立了標準。蓋茨不僅為公司的新產品理念和技術發展提供了方向,還親自指導 技術團隊 研發新產品,他把大量時間投入到審查和優化微軟的軟件產品中。
蓋茨出生并成長在華盛頓州 西雅圖地區,至今仍然居住在那里。他的出生年份是 1955 年。
采訪者: 作為微軟的首席執行官,您身負重任。您現在 還親自編寫代碼嗎?
蓋茨: 不,我現在 不再編寫代碼了。雖然我仍然參與設計算法和基本架構,偶爾也會審查代碼。但自從我參與開發 IBM-PC BASIC 和 Model 100 之后,就沒再親手 編寫過程序。
采訪者: 那么,在微軟的程序開發中,您扮演著怎樣的角色?
蓋茨: 我主要負責 兩項重要工作。
第一,選擇程序中要加入的功能。要做到這一點,你需要對哪些功能容易實現 哪些難以實現 有一個清晰的認識。你還需要理解我們的產品“家族”策略,以及硬件的最新動態。
第二,我負責策劃 新功能的最佳實現方式,確保它們既緊湊又高效。舉個例子,我曾寫過一份 關于如何設計和實現一個功能的備忘錄,這個功能 被應用在 Excel 中,它能讓程序在屏幕發生變化時自動重新計算公式。
在微軟成立的最初四年里,我參與了公司所有程序的編寫和設計工作。無論是 BASIC、FORTRAN、BASIC 6800 還是 BASIC 6502,每一行代碼在發布前都經過了我的仔細審查。但現在,公司擁有 大約 160 名程序員,所以我主要負責對產品和算法進行評審。
采訪者: 在您的編程生涯中,您認為自己 最偉大的成就是什么?
蓋茨: 對我來說,編寫Intel8080 CPU的 BASIC 解釋語言最具影響力,因為它當時非常適用,且我們成功將其精簡至極。這是我們創立微軟時編寫的第一個程序。
我們中有三人能夠熟記 這個原始程序。在阿爾伯克基的一個夏天,我們有機會對它進行徹底的重寫。我覺得我們能夠進一步精簡代碼,使程序 更加緊湊。我們極其細致地優化了這個程序,最終 打造出一個 4K 大小的 BASIC 解釋器。
當你對一個程序 如此了如指掌,你會自信地認為沒有人 能夠指出更好的編程方法。這種自豪感非常棒,再加上這個程序被眾多機器采用,使其成為一項令人激動的成就。
關于 Model 100 上的軟件,我也感到非常自豪,尤其是我們成功集成了一個非常實用的小型編輯器。我與一位日本程序員杰伊·鈴木合作完成了這個項目。我們完成這個項目的時間 非常緊迫。當你的軟件需要被燒錄到 ROM 中時,是沒有犯錯的余地的。
采訪者: 在計算機編程中,你認為最困難的部分是什么?
蓋茨: 最大的挑戰在于 確定算法是什么,并盡可能地簡化它們。把事情簡化到最基本的形態 非常難。你必須在腦海中模擬程序的運作方式,并且完全理解 程序的各個部分 如何協同工作。最出色的軟件 往往是那些由個別程序員對程序的工作方式 有著完整理解的。為了達到這種理解,你必須真正熱愛這個程序,并專注于 讓它保持極度簡單。
采訪者: 隨著計算機處理能力和內存的大幅提升,程序 是否變得更復雜,或者 只是更加粗糙了?這如何影響人們編程的方式?
蓋茨: 我們不再是處于每個程序 都經過精心打造的時代了。但在那些頂尖程序的核心,你會發現關鍵內部代碼 通常由少數真正懂行的人編寫。
現在,將程序壓縮到 4K 內存區域 已不再那么重要。你會看到越來越多的情況,人們可以選擇使用 C 語言而非匯編語言。遺憾的是,很多程序變得如此龐大,以至于沒有一個人能完全掌握它們的所有部分,導致代碼共享不如以往那樣廣泛。此外,因為 總有新功能要加入,所以 重新編寫程序的機會也減少了。
最糟糕的程序是那些在初始階段 未能打下堅實基礎的,而且 原始程序員后來不再 參與其中。這些程序的處理方式達到了我稱之為“實驗性編程”的地步。程序員對這些程序的了解太少,以至于他們無法預測更改 可能影響程序的速度等方方面面。他們可能復用現有的代碼,或者不清楚 更改某些內容會破壞哪些依賴關系。因此,他們添加新代碼,運行后發現“哦,它不是這樣運行的”。這是一種極其低效的編程方式,但許多項目 最終都淪為這樣。
采訪者: 在像微軟這樣有 160 名程序員的公司里,你們是如何創造一個能夠開發成功程序的環境的?
蓋茨: 組建一個小型項目團隊,通常四到五人,其中必須有一人 具備深入理解程序的能力,這是一種方法。當這位負責人在某些問題上有所疑惑時,他或她應該可以與更有經驗的程序員進行探討。
我們的策略之一是在編碼階段前 讓程序員充分思考。撰寫設計文檔 非常關鍵,因為在將問題以算法形式表達時,可以實現 大量簡化。此時,問題以最精簡的形式呈現,讓你能夠看到它們之間的交集。
代碼審查也很重要,要確保 審查代碼,看看 有經驗的人員能否提出 改進的建議。還需要回顧 那些進行得非常順利的類似項目;程序員可以從中 學習別人的成功經驗,獲得 改善自己程序的靈感。
采訪者: 程序的靈感來源是什么?
蓋茨: 實際上 沒有一個固定的過程。在微軟,我們通常 會在晚上或周末 舉行頭腦風暴會議。每個人都有一個大概的想法,比如 制作世界上最好的文字處理器。我們希望 它能滿足技術出版部門的所有需求。我們會坐下來討論:怎樣才能提高效率?我們是否能加入繪圖功能,或者在不顯著降低程序速度的情況下 實現字符緊排?我們會探討各種問題,并產生一些創新的想法。
采訪者: 所以這是一個團隊協作的過程?
蓋茨: 對于 確定程序功能而言,確實是一個大團隊 共同提出建議的過程。接著是一個篩選階段。最終,我會決定哪些想法是可行的,并確保 有負責人親自投入,確保產品成功。我們選擇進行的項目非常少,因為要推出一款產品并設定全新的世界級標準,需要極大的專注和資源。
采訪者: 關于大型軟件公司 難以吸引能夠開發出色軟件的優秀人才的觀點,這些特立獨行的人才 往往更愿意獨立工作,您如何在微軟吸引并留住這些優秀人才?
蓋茨: 優秀的程序員 對于 創造軟件產品至關重要。但我們不支持那種因為某人能力出眾就縱容其任性的做法,比如不注釋代碼、不與他人溝通或強加自己的想法于他人。
我們希望員工 能夠真正相互尊重。我相信,大多數優秀的程序員 都愿意與同樣優秀的同行一起工作。當他們設計出一個非凡的算法時,他們喜歡 有能夠理解其巧妙之處的同僚。因為在腦海中構思這樣的模型是一種孤獨的體驗。如果你原以為 一個過程必須復雜,然后突然找到了簡化它的方法,那會讓你感到非常滿足。但同時,你也希望 得到同事的反饋。有了幾位優秀人才后,更多的人才也會隨之加入。
過去有一種觀點,認為程序員的經理 總是比程序員本身更優秀,沒有所謂的“技術倒置”,即一個程序員為不懂編程的人工作。我們依然遵循這一理念:雖然在某些層級我們設有 精通客戶業務的商業經理,但我們不讓非程序員直接管理編程項目。
采訪者: 您認為 創造優秀程序 有哪些特別的原則嗎?
蓋茨: 有人是一頭扎進去 就開始編碼,有人 則是先全盤規劃后再動手,但我認為你會發現,那些一上來 就開始編碼的程序員實際上 只是在用代碼作為思考的草稿。真正關鍵的是他們腦海里的思考過程。
你需要一位極其聰明的人。一個杰出的程序員會持續不斷地思考著程序,無論是在駕駛還是用餐時。這樣的思考方式對精神能量的要求非常高。
采訪者: 你如何描述自己的編程風格?
蓋茨: 在我動手寫代碼之前,我喜歡先從設計層面上把整個程序想清楚。寫完代碼后,我還會整體 重新編寫一遍。設計數據結構是編程 最關鍵的部分,其次是將代碼 細分成不同的模塊。只有當你親自下手編寫時,才能真正明白 哪些是應該公用的子程序。
我寫出過的那些 杰出程序,都是那些我在動手前就反復思考了很長時間的。例如,我高中時為一臺小型計算機編寫了一個 BASIC 解釋器,那時犯了很多嚴重的錯誤。后來,我研究了其他的 BASIC 解釋器,所以到了 1975 年編寫 Microsoft BASIC 時,我的挑戰不再是能否寫出這個程序,而是 如何將其壓縮到 4K 并且快速運行。我一直在擔心:“這個程序夠快嗎?會不會有人做得更快?”
我記得在 TRW 公司遇到一個叫諾頓的人,他總能指出我哪里做得不夠好。每當我做事馬虎或懶散時,我就會想象他會過來指點我:“你看,這樣做會更好。”程序中很容易 悄悄產生小的效率問題,如果你想讓程序盡善盡美,就必須 時刻警惕 這些問題的潛入。這也是為什么 有時讓別人參與你的項目 會讓你感到困擾,因為他們的編碼風格總是和你不一樣。記得在開發 BASIC 的時候,我常常重寫別人的代碼,即使這樣并沒有帶來顯著的改進。這種做法 可能會讓人不舒服,但有時候你就是覺得非這樣做不可。
采訪者: 在團隊合作中,你總是 擔任設計的主導角色嗎?
蓋茨: 是的,在我直接參與的所有項目中,我都擔任 主要的設計角色。在最初的 BASIC 項目中,我在紙上草擬設計方案。我的合作者保羅·艾倫負責設計并實現所有開發工具。
在我開始編寫代碼之前,我通常已經在腦中預演了大部分的指令。雖然 這些想法 并不是完全成熟的,我在編程時仍會做出調整,但所有好的靈感 都是在我動手編程之前 就已經浮現。如果 程序出現了錯誤,我會感到非常沮喪,因為這意味著我的心理模擬是有缺陷的。一旦心理模擬出現問題,程序中可能就隱藏著成千上萬的錯誤。我真的無法忍受看到一些程序員在編程時缺乏深思熟慮的過程。
編寫 BASIC 是我有過的最愉快的編程經驗之一。我完成了 運行在Intel8080 CPU上的 BASIC解釋器,然后和馬克·張伯倫一起用大約兩周的時間開發了 摩托羅拉6809 版本的 BASIC。那兩周開始時,我先學習了新的指令集,并編寫了三四個小程序。我還研究了其他人的程序,看看他們是如何利用這套指令集的。將我熟悉的問題映射到這個新的指令集上,并且盡可能地緊湊組合,這個過程非常有趣。
如今的程序 變得越來越龐大,增加的功能 往往會減緩程序速度。這是因為 開發者在添加新特性時,往往未充分考慮到 所加入的特殊檢查會如何影響效率。要避免這種情況,就需要一個對程序極其熟悉的程序員來把關。以我們的 BASIC 解釋器為例,在我和其他創始成員離開后,大約有三年時間里,我們沒有做出什么創新。直到最近一年半,我們才找到了那些對 BASIC 有深刻理解和歸屬感的人,他們可以輕松說出,“沒問題,加入子程序和去除 行號很簡單。”我們一直有這樣的目標,但直到找到那些能深入到程序核心,而非僅僅在外圍增加功能的人之前,我們都不敢輕易修改程序。
確實,我們現在允許 程序稍微變大一些。但就速度而言,不盡力追求最快 無疑是種懶惰,因為用戶會察覺到那些真正快速的程序,盡管他們可能無法明確指出。在最成功的程序中,快速的執行效率 總是令人驚艷。
采訪者: 在速度和性能方面,你們是如何做出取舍的?
蓋茨: 有時候,我們需要在增加功能和追求快速執行之間 做出權衡。但實際上,有很多方法 可以在擁有大量功能的同時,依然保持高速度。關鍵是要確定程序中的常見操作,并確保它們 能夠高效執行,不被各種特殊情況的檢查 所拖累。如果程序的核心交互循環 布滿了各種檢查,那么它的速度 就會不如其他程序。
采訪者: 當你們打算開發世界上 最好的文字處理器時,你們是如何入手的?你們會研究市面上所有的文字處理器嗎?
蓋茨: 是的,我們會從功能角度 出發,研究市場上所有的文字處理器,比如,我們會問:“有哪些產品在屏幕上進行字距調整,或者 能展示打印頁面的實際樣子?它們的反應速度 如何?”通常,在產品線的頂端,總有一些公司 利用昂貴的硬件 通過蠻力解決問題。我們無法這樣做,因為我們使用的計算機性能有限。很多我們正在嘗試的功能,在更強大的計算機上已經實現過;我們的目標是讓這些功能在普通用戶手中的設備上也能流暢運行。
在產品開發中,我們可以使用各種巧妙的技巧。我們在構建功能列表的同時,也在思考 如何使我們的算法超越其他人。“功能”這個概念 有些微妙,因為功能越多,用戶手冊 就越厚。功能 真正有價值的是在用戶花時間 去使用它們的時候。而速度 — 如果能更快地打印頁面、在屏幕上更快地顯示或更快地處理數據 — 這些則有極大的價值。如果你能為用戶提供幾個簡單的命令,并確保程序足夠高效,以便用戶 用這些簡單的命令就能完成他們想要的操作,那就更好了。優秀的程序的一個標志是它們在內部也遵循簡化的原則。它們在執行復雜任務時,會調用簡單的操作,而不是 每次都從頭開始處理。
采訪者: 用戶的重要性有多大?您是如何了解數據庫管理員 在其數據庫或電子表格中真正需要或希望的內容?
蓋茨: 有些程序員 并不假裝能準確理解 最終用戶的需求,他們依然是頂尖的程序員。但對市場的了解尤為重要,尤其是在應用程序團隊中。因此,我們有專職人員 負責向客戶展示代碼或審查其他的規格要求等。在微軟初創時,我們只專注于系統程序,因為我們自身就是程序員,所以非常了解 其他程序員的需求。這就是我們為什么會開發出 BASIC。
采訪者: BASIC 中最具創新性的方面是什么?
蓋茨: 最關鍵的是我們讓用戶能夠充分發揮 機器的性能。我們引入了 PEEK 和 POKE 功能,允許用戶讀取和修改機器的狀態。我們還加入了 TRON 和 TROFE 這樣的跟蹤程序。即使用戶使用的是高級語言,我們也讓他們能夠接觸到機器上所有他們可能想要添加的高級功能。用戶可以在不使用 BASIC 的情況下理解內存的使用情況,感受到他們對自己的機器有控制權。 為了使 BASIC 適配到僅 4K 的內存,我們采用了一種稱為“單表示解釋器”的策略。這是一個非常明智的選擇。我之前從未看到過這樣的解釋器。雖然 采取這種方法有一定的風險,但我對這個方案充滿信心。我在腦海中多次推敲,對此感到十分滿意。
采訪者: 在編寫過程中,您是否預見到它會取得如此巨大的成功?
蓋茨: 沒有,絕對沒有。是保羅·艾倫給我看了一本有 Altair 介紹的雜志,我們意識到,“天哪,我們必須開始行動了,因為我們知道這些機器 將會非常受歡迎。”那時我停止上課,我們開始晝夜不停地工作。最初的程序在大約三周半的時間內完成。我們總共花了大約八周的時間,才讓程序達到我真正滿意的水平。之后,我又回去重新編寫了程序。 沒有一個偉大的程序員 會坐在那里想,“我要賺很多錢”,或者“我要賣出十萬份。”因為這樣的想法 對解決問題沒有任何幫助。偉大的程序員會思考如何改進代碼:我是否應該重寫這個子程序,讓四個而不是三個人能夠使用它?我是否應該使這個程序更快 10%?我是否真的應該深入思考這里的常見案例,以確定如何排序這個檢查?如果你是一個優秀的程序員,你會讓所有的程序模塊 相互依賴,因此小小的錯誤也可能導致 嚴重后果。這就是 為什么你必須擁有精準的判斷力,并愿意回頭修改你的代碼。
采訪者: 當多個人共同開發一個程序時,您如何確保所有不同部分能夠有效地協同工作?
蓋茨: 首先,優秀的編程團隊成員之間 必須互相尊重。這是因為編程工作 非常細致且需要密切合作,就像大家一起參與一場戲劇。在編程項目中,需要巨大的判斷力和創造力。有的頂尖程序員 更喜歡獨自工作,不適合團隊合作。但我相信,學會與他人合作并指導他們是成就卓越的關鍵一環。看到團隊中的其他成員成長為出色的程序員,給我帶來了巨大的滿足感,雖然這種感覺不如 自己親手編寫程序來得強烈,但這是一件非常積極的事情。我通過花大量時間與他們交談,分享我的代碼來培養他們。在團隊項目中,我們需要將代碼變成團隊共享的財富。
采訪者: 這種團隊合作方式是自然形成的,還是你們刻意培養的?
蓋茨: 在我和保羅創立公司之前,我們曾參與過一些大型軟件項目,這些項目都失敗了。當時,項目團隊不斷擴大,卻沒有明確的方向和控制。我們當時就下定決心,要在團隊建設和項目管理上做得更好。因此,我們一直非常重視團隊的結構和組織。
有效的方法其實很直接:保持團隊精干,確保每位成員都非常優秀,為他們提供優秀的工具,確保團隊有共同的語言和術語,以便高效溝通。同時,在小團隊之外,安排一些經驗豐富的資深成員 提供咨詢和幫助。實際上,我們在項目中遇到的問題往往有很多相似之處。在設計審查時,我非常樂于 基于我以往的經驗 提出建議。
采訪者: 你認為未來編程的方式或計算機的運作方式會有根本性的變化嗎?
蓋茨: 軟件工具正在變得越來越先進。未來,我們或許能夠僅憑項目規格和機器性能的描述,讓高級編譯器自動完成許多現在由程序員手動完成的工作。
人們仍然對于機器,比如 C 編譯器,無法像人一樣 編寫代碼這一點感到自豪。但未來幾年,我們可能會在一些編程流程上實現較大程度的自動化。設計算法的工作仍將由人完成,但很多實現細節 可能由機器來承擔。我相信,在未來五年內,我們將會擁有能與人類程序員媲美的工具。
采訪者: 你之前提到了數學在編程中的重要性。你認為計算機科學和數學之間有什么關系?
蓋茨: 數學對計算機科學的影響深遠。許多卓越的程序員 都具有數學背景,因為數學訓練中對定理嚴謹證明的追求,有助于程序員 進行精確且有力的邏輯推理。在數學領域,我們需要全面理解問題,并且常常要用不同的方法組合定理來尋找解決方案。數學與編程有著密切的聯系,尤其在我的經歷中,這種聯系更加明顯。我認為計算機科學與數學之間有著天然的親密關系。
采訪者: 在你看來,計算機科學 真的算是一門科學嗎?
蓋茨: 是的,這是一個全新的領域。想想看,過去人們為了完成現在程序員日常工作中的內容,可能需要攻讀博士學位。計算機科學正在飛速發展。與數學不同,數學有 300 多年的天才在推動理論發展,而我們的計算機科學只有短短 20 多年的歷史。現在,越來越多聰明的人加入這個領域,貢獻自己的智慧;編程已經成為一種流行的活動。現在人們越來越早地接觸計算機,這將有助于改變這個領域的思維模式。很多頂尖的程序員都是在青少年時期開始編程的,那時的思維方式可能更加開放靈活。
過去,僅僅成為一名優秀的程序員是不夠的;你還需要管理他人或從事其他工作。幸運的是,這種情況正在改變。現在人們意識到,編程是一門值得深入研究和教授他人的科學。
采訪者: 多年的經驗積累 是否會讓編程變得更容易?
蓋茨: 不一定。我認為,在成為程序員的最初幾年里,你是否優秀已經基本確定。幾年后,你可能更懂得如何管理大型項目和處理各種個性,但在那之后,你的水平 已經清晰可見。在微軟,沒有人是開始時平庸幾年、然后突然變得出類拔萃。我可以通過與某人討論他們編寫的程序立刻判斷出他是否真正優秀。如果他真的很優秀,他對自己的程序了如指掌。 這就像熱愛國際象棋的人。當你全身心投入棋局時,記住十局棋的每一步是很自然的事。其他人可能會對棋手或程序員的這種記憶能力感到驚訝,認為這是些稀奇古怪的表演。但這其實很正常。直到今天,我都能在黑板上寫出我十年前編寫的微軟 BASIC 的大量源代碼。
采訪者: 在編程時,你有什么感覺?
蓋茨: 當我編譯程序,它開始輸出正確的結果時,我感到非常開心。我說真的,所有偉大的成就背后 都有情感的驅動,編程也不例外。開始敲代碼 很誘人,但如果 只是為了看到結果 而匆忙編寫代碼,然后發現 還有大量困難的工作要做,那就太糟糕了。因為這意味著 你可能需要修改已經完成的部分。我更喜歡先打好基礎 再享受編碼的樂趣,看到程序運行 就像是留下餐盤里最美味的部分 最后享用。
采訪者: 你認為年輕程序員和經驗豐富的程序員在編程方式上有什么不同嗎?
蓋茨: 現在的初學者 從未經歷過資源限制的挑戰,因此他們很難領會到 正確的思維方式,總是習慣性地認為 資源隨時可用。相比之下,十年前的程序員 常常面臨資源限制,所以經驗豐富的程序員 總是會考慮這些問題。編程是一項需要巨大精力的活動,因此多數程序員 都是年輕人。但這也帶來了問題,因為編程 需要極強的自律。年輕人 往往目標不穩定,容易被其他事情 分散注意力。我的建議是年輕程序員 應該堅持不懈,隨著時間的推移,他們會變得更加出色。以我為例,從 1975 年到 1980 年,我的編程技能有了顯著的提升。在 1975 年,我自信滿滿地認為 自己無所不能,因為我閱讀了大量的代碼,并且沒有遇到過 自己無法迅速理解的代碼。我認為,測試一個程序員 編程能力的一個很好的方法是給他們大約 30 頁代碼,看他們能多快理解這些代碼。
采訪者: 這算是 一種天賦嗎?
蓋茨: 當然,這絕對是一種天賦。這有點像純粹的智商測試。你需要全神貫注于代碼,并且回想起自己 曾經寫過的程序。很多人可能需要幾天時間來閱讀這些代碼,但真正優秀的程序員 可能只需要一個小時就能通讀完整個內容。這其中的能力差異是巨大的。
采訪者: 那么,學習計算機科學是成為程序員的最佳途徑嗎?
蓋茨: 不盡然。最好的方式是親自編寫程序,并且研究 其他人編寫的優秀程序。就像我自己的經歷,我曾經到計算機科學中心的垃圾桶里翻找,把他們操作系統的代碼清單 撿回家學習。要成為優秀的程序員,你需要愿意閱讀別人的代碼,編寫自己的代碼,然后讓其他人來審核你的代碼。你需要渴望進入一個充滿挑戰的反饋環境中,在這里,頂尖的專家 會指出你的錯誤。你不能因為一些小的個性化偏好 而忽視這些寶貴的反饋。有些頂尖專家 可能會對一些細節,比如你如何注釋代碼,有所堅持。你需要看穿這些表面現象,因為他們可能在試圖按照自己的方式塑造你,而這些并不總是與編程的核心質量相關。如果你有機會與偉大的程序員交流,你會發現他們對自己使用的工具了如指掌,就像藝術家 熟知他的畫筆一樣。了解偉大的程序員們 如何共同發展 — 他們如何獲取反饋,如何培養對代碼嚴謹和松散的敏銳感——是非常令人驚嘆的。當這些人 審視特定的代碼時,他們通常會有 非常一致的反應。
采訪者: 你在編程方式上有沒有受到哪些人的特別影響?
蓋茨: 影響我最深的是那些開發 小型機PDP 操作系統的程序員。還有 TRW 的 約翰·諾頓,他寫的關于代碼評審的備忘錄給了我很大的啟發。我也開始嘗試對別人的代碼做類似的分析。
我與 保羅·艾倫 的想法交融,因為我們共同完成了許多編程工作。在調試代碼或考慮某些技術抉擇時,有一個進度相當的伙伴可以討論,這很重要。這種交流其實是一種輕松的休息方式,它降低了工作強度,同時讓我們保持專注。我和 保羅 學會了如何高效合作,這樣的伙伴關系非常難得。他對我影響極大。在微軟時期,Charles Simonyi 和其他一些同事也給我帶來了很多啟發。
采訪者: 你認為軟件未來的發展趨勢是什么?我們會繼續開發更好的文字處理軟件和電子表格嗎?還是電腦將會開辟我們今天無法想象的新領域?
蓋茨: 我們正在走向 電腦承擔更多思考任務的時代。我提出了“軟化軟件”這個概念,指的是軟件能夠隨著時間適應用戶的需求和興趣。未來當然還會有更多優秀的文字處理和電子表格軟件,我們還會利用網絡、圖形技術和新架構。以及,通過緊湊光盤(CD)實現大量數據存儲,比如整個百科全書的存儲。
真正的變革在于 基于規則的編程。這種編程方式與傳統的“如果發生這個,就做這個;如果發生那個,就做那個”有所不同。在基于規則的編程中,你需要制定規則,然后由一個推理引擎來分析當前的事實和規則,推導出新的結論并作出相應的行動。比如,程序可能會根據重力的規則判斷,如果桌子上的東西掉落,而它是玻璃制的,那么可能會破碎。這樣的程序以一種非傳統的方式產生結果。這就是 構建專家系統所用的技術。基于規則的編程指的是通過證明機制進行推理,而不是在程序中直接明確指定。這些技術 可能在未來四五年內 開始顯現其影響力。對于那些希望在編程界留名的年輕程序員來說,專注于這種新型編程 可能是個明智的選擇。
采訪者: 基于規則的編程是否 能比傳統編程更有效地處理多樣化的信息?
蓋茨: 這個問題不太容易解釋。比如,你有一個計算橋梁建造方法的程序,它涵蓋了關于壓力、彎曲和金屬特性的所有知識。這個程序中融入了工程學和材料學等方面的專業知識。如果你突然說要用塑料來建橋,對于這個程序來說,這種改變就像是要在火星上建橋一樣翻天覆地。
在極端的規則驅動編程中,金屬能承受的壓力和重力的工作原理等物理原理 都會被明確地定義為規則。所有的邏輯推理都是基于這些規則的檢驗和應用。但現在,我們還沒有足夠高效的規則驗證工具,以這種方式去處理問題是極其低效的。然而,這正是我們正在取得進展的領域之一,它可能會在不久的將來改變編程的方式。另一個前景是,我們可能會有數百臺計算機同時并行運作。事實上,這可能有助于我們高效地運行基于規則的系統。這樣的重大架構變化可能會影響人們編程的方式,或者他們對編程的看法。
程序員最擔心的是,編譯器變得越來越強大,計算機運行速度越來越快,以至于程序員的作用變得不再重要。我曾經也擔心,當我決定專注于某個領域時,隨著時間的推移,它的重要性可能會逐漸降低。
采訪者: 作為一家業務范圍廣泛的公司,微軟如何跟上整個行業的快速變化?
蓋茨: 實際上,我并沒有跟蹤所有的事情。我與 IBM、蘋果、DEC 以及日本的頂尖人士合作。我必須了解即將發生的事情,而不是浪費時間 去猜測。當我與微軟的同事一起出差時,我們會討論目前發生的事情。微軟的電子郵件系統是一個高效的工具,幫我保持消息的更新。
保持信息更新的一個方法是使用 個人電腦,確保我閱讀了說明書并使用了前十款頂級軟件產品。這些產品并不經常變更,所以我能夠對它們有很深的了解。如果你真的對個人計算感興趣,你會嘗試每一款軟件,了解它們的特點,并思考如何做得更好。
從某種意義上講,個人電腦 已變得更加簡單。現在我們只有兩種主流架構:PC 和 Mac。回想起以前,我們有三十到四十種 完全不兼容的機器,還有許多不同的編程語言。但現在,為了讓數百萬用戶 能夠理解并使用,我們不得不使這些系統更加統一和標準化。事實上,行業中的很多活動并沒有真正推動技術的發展。我更愿意關注網絡和圖形領域,因為我們在這些領域的工作 可能會影響技術的前沿,而不是去關注 哪家零售連鎖破產了,誰賄賂了誰,或者 某公司給了某人多少股票。真正聰明的人 會專注于他們的專業領域,并將任何他們認為重要的信息或可能產生重大影響的項目帶給我。
采訪者: 十年后,你認為微軟會處于什么位置?
蓋茨: 我們的目標很明確:開發能讓每個辦公桌和每個家庭 都配備一臺計算機的軟件。我不確定這會花多少時間——預測具體時間 不是我的強項。微軟也想確保這些計算機的質量,我們將構建它們的系統軟件,并開發它們需要的重要應用。
雖然將來會有更多計算機,但我們認為無需擴大開發團隊,因為我們將制作更多銷量的軟件。這樣,我們能夠獲得豐富的軟件收益,同時保持公司規模 相對穩定。這意味著我們可以更好地了解每位員工,促進 溝通和工具共享,確保 高質量標準的維持。
微軟正在專注的一個新領域是光盤(CD-ROM)應用。我們將利用 CD-ROM 技術把個人計算機帶進千家萬戶。
......
內容太長放不下,感興趣的,可以:
1.看原文:網頁鏈接
2. 看譯文:網頁鏈接
您已瀏覽完畢。
高章舜,軟考技術支持專家、中文“智能文”發明者、中文智能化推進者。其EMAIL是:gaozhsh2007@sina.com
高章舜主持開發的中文智能編輯系統,呈現了中文“智能體”的優美。為了發揚光大中文的優秀傳統,弘揚文化自信,著作人決定第一版開源,向全社會開放本版本的使用權。如果您需要更清晰、更優美、更專業、手寫體更豐富的文章格式,甚至還需要定制字體和文章格式的話,請按上一段里的EMAIL給高章舜老師發郵件。
copy right www.gg3377.cn 回首頁