編程大師訪談錄(19位計算機先驅的訪談實錄)

>>>  文章華國詩禮傳家—精彩書評選  >>> 簡體     傳統

內容推薦

  本書是對19位計算機行業先驅的采訪實錄,采訪對象包括查爾斯·西蒙尼、比爾·蓋茨、安迪·赫茲菲爾德、雷·奧奇、杰夫·拉斯金等。訪談涉及他們軟件創造過程的靈感、技術、編程習慣、動機、反思,以及對未來軟件的暢想等。問答中集結了這些計算機先驅的精辟言論,處處閃爍著智慧的火花。
  本書適合IT 從業人員閱讀。

22561739-1_u_1.jpg

作者簡介

  Susan Lammers
  現居華盛頓州西雅圖市,是手機應用開發公司Flying Sofa的合伙人,也是風險投資資助的創業公司HeadboneInteractive的董事長及創始人,這家公司專為互聯網、電視及其他面向兒童的媒體開發交互式多媒體軟件。Susan是多媒體領域的先鋒,曾是微軟公司早期的多媒體出版部聯合出版人和總監,負責微軟最早的交互式媒體項目,包括微軟的電子百科全書Encarta(英卡塔)。
  1990年,Lammers離開微軟,加入一家創業公司,成為該公司的第三位員工。這家公司現名Corbis,已躋身世界最大的數字圖像代理公司之列。Corbis由比爾?蓋茨創立,旨在開發自然語言圖像的大型數據庫并進行交互式電視程序設計。
Lammers畢業于斯坦福大學,擁有英語文學士學位。

目錄

第1 篇  查爾斯·西蒙尼  
第2 篇  巴特勒·蘭普森  
第3 篇  約翰·沃諾克  
第4 篇  加里·基爾代爾  
第5 篇  比爾·蓋茨  
第6 篇  約翰·佩奇  
第7 篇  C.韋恩·萊特萊夫  
第8 篇  丹·布蘭克林  
第9 篇  鮑勃·弗蘭克斯頓  
第10 篇  喬納森·薩奇  
第11 篇  雷·奧奇  
第12 篇  彼得·羅伊森  
第13 篇  鮑勃·卡爾  
第14 篇  杰夫·拉斯金  
第15 篇  安迪·赫茲菲爾德  
第16 篇  巖谷徹  
第17 篇  斯科特·金  
第18 篇  加隆·蘭尼爾  
第19 篇  邁克爾·霍利  
詞匯表  
附 錄  


前言

對當代最有聲望的程序員進行系列訪談的這個想法,是由微軟出版社的出版人Min S.Yee提出的。Yee熟悉軟件創作過程中的艱難與喜悅,自己又寫過幾本書,所以當他在微軟(主要是一個軟件公司,不過也是一個出版社)工作時能注意到作家和程序員工作的相似性,也就不足為奇了。他與微軟程序設計人員之間的交談揭示出了編程的藝術、手藝和科學之間大量細微的差異。Yee發現書店中有無數有關“如何”編程的書,但是以個性化、深入的方式展示軟件設計人員的經驗、方法和哲理的內容卻非常匱乏。所以,微軟出版社決定揭示軟件背后的思想和個性。而我們認為最好的辦法就是讓這些人在出版的訪談錄中講述自己的故事。
這些訪談不是為了詢問程序員有關項目的秘密,也不是要收集他們對軟件業日常進展情況的意見。我們的目的是討論那些在這個激動人心又快速發展的行業中常常被忽視的、不受時間影響的事情。我們想要揭示開發Macintosh那樣的操作系統、Lotus1-2-3那樣的應用程序、《吃豆人》(PacMan)那樣的計算機游戲的神秘之旅。我們問了這樣的問題:那些想法是從哪里來的?把想法轉化為現實有多難?開發大型程序是什么感覺?這是一門藝術還是一門科學?是手藝還是技能?同樣的事情還能再做一次嗎?
作為采訪者,我的目標不是支配、欺騙或操控。我沒有想著要教別人怎樣說話。我的目標是盡可能不被人注意,讓程序員自由地反思、反省,然后用言語把他自己的編程方法表達出來。
在訪談過程中,我盡可能問所有程序員相同的問題,這樣以后可以對這些訪談進行研讀和比較。我們覺得開放式的常規問題有助于突出編程方法間的相似與差異,讓每個程序員的個性和特殊興趣都顯現出來。實際情況也是這樣的。有些人,如加里?基爾代爾和巴特勒?蘭普森,給出了關于編程理論和實踐方法的真知灼見;另一些人,如丹?布蘭克林和鮑勃?卡爾,把主要精力放在了對特定程序開發過程的探討上;還有一些人,如鮑勃?弗蘭克斯頓和加隆?蘭尼爾,對軟件和微機的未來進行了思考。這些發人深省、內容各異的討論開始勾勒出當今各種各樣、不落窠臼的程序員的群像。
有些時候,我會和程序員們見兩三次面,談上幾個小時——沉思、談論、探索。但是,訪談結束并不意味著整個過程也結束了。我們從磁帶上將訪談內容記錄下來,編輯、精簡,然后返給程序員們,這樣他們可以讀一讀自己說過的話。他們可以對訪談內容再加工,確保能確切表達出自己的意思。
此外,我們還請每位程序員都提供一份與工作相關的樣本,可以是一段代碼、一個程序、一些程序設計的草稿或是信手涂鴉,這樣讀者可以看到程序員在紙上寫下想法時的風格。我們收到了各種各樣的材料,有些具有很高的歷史價值。比如,我們從丹?布蘭克林那里收到了VisiCalc早期設計的草圖。安迪?赫茲菲爾德送來的樣本也是別具一格:一個完整的程序,有30多頁,是Macintosh計算機上叫做IconBounce的程序。所有這些都深刻揭示了這些人的想法和工作。
世界上的優秀程序員為數眾多,他們不會都出現在本書中。所以,這是對當代杰出程序員進行訪談的系列圖書的第一本。
在這個不斷變化的行業中,每一天都有新的突破,會引入一個創新的軟件,會成立一家新公司。行業中,明星起起落落只是一夜之間的事情。要找出所謂世界上最優秀的20個左右的程序員,那是在抓瞎。所以我們選取了具有特定專長和閱歷的一群人。訪談對象主要是微機程序員,不過有些程序員在小型機和大型機上也有豐富的經驗。
“程序員”一詞有不同的含義,所以本書的書名是有點問題的。在軟件行業,“程序員”一般用來描述編寫和開發能在計算機上工作的軟件的人。隨著軟件行業越來越尖端,軟件越來越復雜,軟件設計人員和程序人員之間正出現越來越多的差別。針對本書,程序員一詞指軟件開發人員或軟件設計人員,常常但并非總是涉及實際代碼的編寫。書中的有些人,像巴特勒?蘭普森、巖谷徹和杰夫?拉斯金,承認自己并沒有參與到程序源代碼的編寫工作中,他們認為自己并不是程序員,而是軟件設計人員。他們可能構思了程序的總體想法、開發了算法、編寫了規格說明書、設計了功能,但也許并沒有一行一行地輸入那些構成程序的代碼。把這些各不相同、多才多藝的人歸到某一類總是很困難的。
本書努力從大量優秀程序員中篩選出一些人,他們中有些人的照片曾出現在雜志封面上,而有些人則鮮為人知。他們代表了不同年齡段、經歷各不相同的人。有的年紀大些,現在正是40多歲,是他們最早發起了微機革命;有的年輕,他們充滿活力、不守舊,正準備推動新計算機革命超越了已往的成就。這里有上班族,像C.韋恩?萊特萊夫和查爾斯?西蒙尼;也有堅定的獨立工作者,如喬納森?薩奇和彼得?羅伊森;還有熱情的企業家,如雷?奧奇、加里?基爾代爾和比爾?蓋茨。我們發現有些人能夠帶給我們許多啟發,有些人能讓我們幡然猛醒;有些人取得了巨大成功,有些人卻不太成功。但是毫無疑問,書中訪談的程序員都是杰出的,我們體會了他們對編程這個創意過程的深刻見解,看到了計算機行業中各種各樣的人和經歷。
雖然訪談的目的是介紹活躍在業內的程序員,但是本書也成為了一部軟件行業的外傳,這是由一些主要參與者講述的。本書的順序大致反映出這個行業的歷史,雖然很多人現在已經轉向新的產品,擁有了新的專長。
本書的第一位被訪者是查爾斯?西蒙尼。他于20世紀60年代在匈牙利開始計算機研究,那時他用的是一臺蘇聯制造的UralII計算機。接著受采訪的是巴特勒?蘭普森,他是查爾斯?西蒙尼在加州大學伯克利分校的教授,也是西蒙尼后來在施樂公司帕洛阿爾托研究中心(下文簡稱施樂PARC)的工作伙伴。蘭普森參與了Alto個人計算機的開發工作,他參與的其他很多基礎研究工作都直接推動了微機革命。約翰?沃諾克,另外一位在施樂PARC工作過的研究員,也是PostScript的開發人員,是從猶他大學來到西海岸的。在猶他大學的時候,曾參加了在Evans和Sutherland領導下的計算機圖形研究最鼎盛時期的工作。
接下來受訪的是加里?基爾代爾,他開發了個人計算機上的第一個操作系統,叫做CP/M。因為比爾?蓋茨在BASIC方面的工作,我們接下來采訪了他,BASIC是使用最廣泛的一種計算機語言。約翰?佩奇,PFS軟件產品線的設計人員,是最早一批為商業領域中新出現的個人計算機用戶定制程序的人。C.韋恩?萊特萊夫開發了dBASE,這是最先進的數據庫程序之一,在微機革命的很早期就樹立起了聲譽。然后我們轉而介紹了東海岸軟件行業的情況,我們找到了丹?布蘭克林和鮑勃?弗蘭克斯頓,他們是個人計算機上一種最早的電子表格程序VisiCalc的創始人。接下來是Lotus1-2-3的程序員喬納森?薩奇,然后我們又與雷?奧奇進行了交談,他在為Lotus開發Symphony之前,先后在DataGeneral(總部設在波士頓的一家小型計算機公司)為喬納森?薩奇工作、在SoftwareArts為丹?布蘭克林和鮑勃?弗蘭克斯頓工作。接下來我們采訪了彼得?羅伊森,他開發了T/Maker,這是另外一個電子表格程序,比VisiCalc晚6個月問世。再接下來是鮑勃?卡爾,他開發了Framework,那是Symphony的競爭產品。然后我們又把注意力放到了Macintosh計算機上,我們對杰夫?拉斯金進行了采訪,他是最初負責Macintosh項目的人。還有安迪?赫茲菲爾德,Mac操作系統的開發要歸功于他。
本書最后一組程序員是一些更加喜歡革新的、具有藝術氣質的程序員。我們在日本東京找到了極為成功的《吃豆人》游戲的設計者巖谷徹,聽他談了他的作品背后的理念。斯科特?金,一位圖形設計人員、音樂人,同時也是一名程序員,討論了第四方軟件和全新的用戶界面設計理念。加隆?蘭尼爾也是一個音樂人,之前開發過游戲,目前正在參與可視化編程的工作,他認為可視化編程將為我們的計算機體驗增加一個新的維度,會給編程帶來一場革命。最后,我們采訪了盧卡斯影業公司的邁克爾?霍利。他24歲,是本書中最年輕的程序員(同時也是音樂人)。他目前參與的工作是為SoundDroid開發軟件。SoundDroid是一種新型計算機,將用于編輯和創作電影中的音頻部分。
我們希望本書可以為雄心勃勃的年輕程序員,以及那些希望從專家那里了解到軟件行業成功秘密的專業人士提供指導。不過本書不僅僅具有指導價值,它還是一本非常好的讀物,它將軟件行業幕后的一幅幅場景活化在你面前,并且詳述了在開發創新軟件產品時出現的大量思想、方法和業界的風云人物。

Susan Lammers


在線試讀部分章節

  中文版序
  
  
  要描述技術領域革命性的巨變,20世紀可謂是美國人的世紀。20世紀的最后25年,也是本書最早出版的年代,我們看到了一場驚人的革命。個人電腦(PC)把大型機的威力和連通能力送到了每一個人的手中。新型的軟件——第一個電子表格軟件、第一套PC和Mac操作系統、第一個字處理程序——推動著這場革命。創作這些軟件程序的許多人都出現在本書中,他們進一步創立了大型的技術公司。由PC掀起的這場革命,如今繼續在更小卻更全能的移動電話和平板電腦上上演,這些設備如今遍布全球各個角落。
  那么,是誰在驅動本世紀的這場技術革命呢?談到對未來技術發展的影響,21世紀也可以叫做中國人的世紀。如今,在技術方面取得巨大進展和革新的聰明的軟件工程師,不僅來自美國,而且同樣可能來自中國。本書匯編了一系列經典的訪談筆錄,其中采訪了軟件創新產業里的一代天驕,幾十年來照亮了全世界程序員們前行的道路。通過這次新推出的中文版,我們希望將創新、靈感和智慧的種子,播撒到今日中國眾多朝氣蓬勃的編程學子心中。
  為什么說這些舊日的訪談到了今天還意義重大呢?我對PC革命先驅的訪談,就是要把你直接帶入這些杰出的年輕程序員富有想象力和創造力的大腦中,看看他們是如何思考并迸發出新思想,然后怎樣逐步完善,再投入到艱苦卓絕的編程工作中,最終得出大眾需要使用的工具。多年以來創新過程的根本并沒有什么變化,因此,這些訪談內容在今天看來依然很有價值,發人深省。這些訪談還揭示了偉大的人物是怎么開始創新并改變世界的,通常從一無所有開始,僅憑一支鉛筆、一個記事本以及堅定的信念,就此開創出豐功偉業。以我們今日的學識,去看看上世紀80年代的訪談內容,讀一下每個程序員的代碼和注解,讀者定能夠充分了解這些PC革命的領袖們如何以星星之火激起燎原之勢,在軟件業樹立起自己的游戲規則。今日的軟件行業里,也不斷重復著往日的故事。
  這些訪談展現了一些業界巨擘的遠見卓識、創業激情和編程實踐,有比爾?蓋茨、邁克爾?霍利、巖谷徹、加隆?蘭尼爾、雷?奧茲,以及其他許多仍然在積極影響軟件行業發展的人。雖然說現在看這本書,它只是反映了這些程序員曾經經歷過的一個歷史時期(甚至有些程序、想法和關注的問題如今已經不再需要考慮),但是訪談內容的精髓依然能夠激起全世界追求創新、追求卓越的程序員們的共鳴。我現在還會收到一些讀者的來信,傾訴他們怎樣在字里行間看到了一脈相承的編程精神、企業創新精神,那些對于經典編程方法的生動探討,至今仍然深刻地影響著他們的生活。
  谷歌研究中心主任彼得?諾維格最近提到這本書時說:
  “我不得不說,這實在是一本好書,一本在計算機領域獨一無二的好書,這樣的書越多越好。有關數學家的小傳很常見,有關計算機科學家的傳記也不少,但描寫編程大師的書卻寥寥無幾。你如果想了解一名程序員的工作,最好的方法就是去讀讀他們寫的程序。如果沒有機會讀(或者讀過以后),就來讀讀本書這樣的訪談錄吧……成為一名程序大師可能要花上十年時間,但細細閱讀本書,會幫助你更快地迫近自己的目標,至少會讓你對身邊的程序員們有一個更清晰的了解。”
  我希望本書在中國的出版,能夠深入下一代有遠大志向的程序員的心扉,推進他們的思想和技術生涯向前邁進,為我們的世界帶來更積極的改變。也許將來有那么一天,我有機會和來自中國的新一代程序員坐在一起,進行一段精彩的對話,聊聊他們是怎么創造性地工作的,于是我們可以再出些書,記錄下各個年代偉大程序員的聰明才智。
  感謝圖靈公司這些卓越的人士,是他們發現了本書對于讀者的價值,并著手讓譯本得以面世。他們為本書的殷勤付出與不懈努力讓我深感榮幸且大為折服。我期待著ProgrammersAt Work在中國的印行,內心激動不已。
  
  Susan Lammers
  
  1
  查爾斯?
  西蒙尼
  
  1948年9月10日,查爾斯?西蒙尼(CharlesSimonyi)出生于匈牙利布達佩斯。上高中時,他開始接觸計算機和編程,父親安排他給一名從事計算機工作的工程師當助手,當時計算機在匈牙利屈指可數。
  1966年,查爾斯高中畢業,同時也完成了他的第一個編譯器。憑借開發編譯器時積累的經驗,他在丹麥哥本哈根的A/SRegnecentralen公司謀得了一個職位。1968年,他離開丹麥進入美國加州大學伯克利分校學習,并于1972年獲得理學學士學位,1977年獲得斯坦福大學博士學位。
  西蒙尼曾先后在加州大學伯克利分校計算機中心、伯克利計算機公司、ILLIAC4項目和施樂PARC工作。自1981年以來,他一直供職于微軟公司。在施樂公司,他開發了Alto個人電腦的Bravo和BravoX程序。在微軟,他組建了應用軟件小組,并領導開發出Multiplan、Microsoft Word、MicrosoftExcel等廣受歡迎的應用軟件。
  在微型計算機世界的幾乎各個領域,查爾斯?西蒙尼都打上了他的烙印,要么通過他自己的作品,要么通過影響和他共事的那些人。他謙遜而活潑,臉上常掛著微笑,幾乎能夠就任何話題發表評論,不論是否與計算機相關。
  我們跟查爾斯見過兩次面,一次是在午餐時間,一次是在他的辦公室,談話內容無所不及,從MicrosoftExcel的特性,到駕駛直升機,乃至現代詩歌的某些話題。他說話時帶有很重的匈牙利口音,這已經成了查爾斯講話和編程的獨特標志。他每天幾乎都穿同一身行頭,褪色的牛仔夾克、襯衫和破舊的牛仔褲,看上去仍是一副20世紀60年代伯克利大學學生的模樣,不過他的學識、舉止和成就無不顯示出他的過人智慧和豐富經驗。
  *    *    *
  采訪者:你在匈牙利高中畢業之前就寫了自己的第一個計算機程序,是嗎?
  西蒙尼:是的。上高中時,我寫了自己的第一個程序,還有第一個專業程序。我寫的第一個程序是填充幻方,讓每行、每列的數之和均相等。我編程用的是一臺古老的電子管計算機。一整個下午不停地推按鈕才把程序輸進那臺機器。當天晚上,我頭痛難耐,帶著幾大卷打印有80×80幻方的紙回到家里。那是1964年。
  采訪者:說說你用過的第一臺計算機?
  西蒙尼:那是一臺俄制計算機,UralII。它只有4K內存,支持40位浮點和20位操作指令。這臺計算機只能用八進制機器碼編程(沒有匯編器)。我寫了幾千行八進制機器碼。
  這臺計算機的操作全部通過控制臺完成,你需要自己動手,跟它進行一對一的交互。程序員不必站在一旁等待另一位計算機操作員執行一批卡片。從這個角度看,UralII酷似個人計算機,因為除了機器和你,不用其他人介入。就4K的內存和緩慢的速度而言,它跟1974年推出的Altair非常相似。1964年UralII帶給我的興奮就和1974年Altair帶給比爾?蓋茨的興奮一樣。
  顯然,Ural II在某些方面有別于個人計算機。UralII體積龐大,要占用一間很大的房間,輸入和輸出的方法極為原始——主要是通過控制臺開關。控制臺看起來像一臺老式收銀機,上面有整整六列開關,右側有一個輸入鍵。每一列有8個鍵,編號從0到7。輸入數字的方式同操作收銀機差不多。因此,要輸入2275,你需要依次撥動2、2、7、5這幾個鍵。不小心按錯的話,只要還沒有按下右側的輸入鍵,都還可以修正。這種操作非常提神,因為它會伴有大量噪音。每次按動開關都會發出響亮的喀噠聲,每當清掉按鍵時——這全靠機械完成——所有按鍵一下子同時釋放,伴著巨大的  聲。
  采訪者:你的第一個專業程序是什么樣的?
  西蒙尼:我的第一個專業程序是為一種非常簡單、類似FORTRAN的高級語言寫的編譯器。我把它作為一項創新成果賣給了政府部門,并得到一大筆錢,不過我一分也沒花,因為不久之后我就離開了匈牙利。
  機遇出現在布達佩斯的一次交易會上,我見到幾位從事計算機工作的丹麥人。我跟他們接洽,了解到他們新機器相關的大量信息。在隨后一次交易會上,我帶上自己事先準備好的一個小演示程序,它能準確反饋任意時刻機器正在分析長表達式的哪一部分。我拜托其中一人把這個程序帶回丹麥,拿給他們的主管看。他們肯定很喜歡這個程序,因為他們給了我一份工作。我就這樣離開了匈牙利。
  我在丹麥干了一年半的編程,攢夠了錢去加州大學伯克利分校求學。在校期間,我進入伯克利計算機中心當程序員,掙的錢剛好也夠付學費的了。
  在伯克利上學時,我寫了一個很不錯的SNOBOL編譯器。有個計算機科學教授,叫巴特勒?蘭普森,非常喜歡這個編譯器,他還讓計算機科學專業的學生在課堂上使用它。后來,他跟另外幾個教授一起創辦了伯克利計算機公司,我便在那家公司謀得一份工作。伯克利計算機公司倒閉后,核心成員都去了施樂PARC。
  采訪者:你的編程風格主要受誰的影響?
  西蒙尼:影響主要來自兩方面——一位匈牙利工程師,一臺我在丹麥工作時用的計算機。我在匈牙利的導師是一位使用UralII計算機工作的工程師。我像個狂熱的追星族,卑躬屈膝外加免費跑腿,以換取別人容許我待在一個我本不該待的地方。這不是孩子待的地方。它是全匈牙利(也許)僅有的五臺計算機中的一臺,被看作重要資產。
  采訪者:你是怎么個卑躬屈膝法?
  西蒙尼:我父親是電子工程學教授,這個工程師是他的學生。我猜是我父親托他幫忙讓我進去的。我也盡量讓自己能派上用場。我先是給他帶午飯,后來幫他拿東西遞家伙,最后我主動提出幫他們守夜,看管機器。
  他們一到晚上就把計算機關掉,到第二天早上再打開。開關真空管時,電熱絲加熱或冷卻很容易損壞。這臺機器有2000個真空管,每次打開時都會壞掉一個。因此,他們上班后的第一件事就是先花一個小時找出那個壞掉的真空管。我在那里守夜的話,計算機就可以一直開著,他們也不用浪費那一個小時。于是,在晚上看管機器的時候,我也就可以用這臺計算機了。
  總之,我和這位工程師成了好朋友。他是個數學天才。我早年學到的許多技巧都是他教的,有的是關于算術思考,有的是關于符號問題。
  另外,那臺丹麥計算機對我影響也很大。當時,它擁有的也許是世界上最好的Algol編譯器,GierAlgol。去丹麥之前,我已經把這個編譯器的全部代碼清單研究了個遍。它全都是用機器語言寫成的,因此我既學了機器語言編程,又學會了從美學層面上思考編譯過程。這個編譯器的設計者是彼得?諾爾(PeterNaur) 。語法等式巴科斯?諾爾范式(BNF)中的字母N就取自他的名字。我對這個程序知根知底,至今仍記憶猶新。
  舉個例子,我在伯克利上學時寫的SNOBOL編譯器只是這個程序的變體。我覺得GierAlgol程序現在仍在我腦海中,也影響著我的編程風格。我總是問自己:“如果這是Algol編譯器的一部分,他們會怎么做呢?”這個程序真是精妙無比。
  有一點我印象很深,就是他們倒著掃描源代碼文本的做法。在某些情況下,如果你倒著做事情,之前顯得很復雜的問題突然之間會變得非常簡單。例如,解析前向引用(forwardreference)可能很難。要是倒著掃描,它們就變成了后向引用(backwardreference),很容易解析。只要從新的角度看待程序,原本可能很難解決的問題也會變得容易解決。這個Algol編譯器處處是玄機。
  采訪者:你是怎么進入微軟的?
  西蒙尼:決定離開施樂之后,我開始四處打探。我請鮑勃?麥特卡爾夫(BobMetcalfe)共進午餐。鮑勃是以太網發明人,3Com公司的董事長和創始人,早我兩年離開施樂。他給了我一張名單,上面列有我應該去找的人。名單上比爾?蓋茨排在第一位。誰排在第二我記不清了,因為除了比爾?蓋茨我沒再找過其他人。
  采訪者:編程是一種技巧或技能嗎?
  西蒙尼:什么是編程?人們對此一直各持己見。有人說它是科學,有人說它是藝術,還有人稱之為技能或手藝。我認為這三方面兼而有之。我們喜歡說它蘊含大量藝術成分,但是我們都知道它里面更多的是科學。
  孩子們在學校里學習數學,高中畢業時,他們會以為數學就是加法和乘法,甚或代數和微積分。其實,算術,即使簡單如加法的運算,背后也有令人難以置信的科學理論作支持。
  計算機編程背后也有大量科學理論作支持。例如,哥德爾定理的數學證明冗長而復雜,但是如果借用計算機科學的圖靈定理,證明起來不費吹灰之力。信息理論和計算機科學其他領域對數學影響巨大,反之亦然。
  編程包含有大量科學,同時,它也有點像手藝。實際上,在許多人看來,編程是一項復雜的技能,這跟工具制造很像,需要精雕細琢。我認為,只要將科學、藝術和技能這三者拿捏得恰到好處,你就能取得一些引人矚目的成績。
  采訪者:你覺得編程的哪部分可以視作藝術?是用戶界面設計嗎?
  西蒙尼:在我看來,編程顯然有審美的一面,對用戶界面而言,不僅設計中存在,甚至連外觀也不例外。當你看到那些丑陋的屏幕時,程序員在藝術上的不足便一覽無遺。在其他方面,計算機編程也堪稱藝術,正如高能物理也可視作藝術一樣。
  采訪者:審美是只關乎用戶對程序的感覺,還是它也直接影響到其他程序員分析該程序并探究其編寫方式?
  西蒙尼:絕對也會影響的,毋庸置疑。我覺得代碼清單和計算機自身的美感一直讓我陶醉其中。
  例如,那臺俄制機器看起來像是科幻小說里的計算機,因為機器里的每個觸發器(存儲1比特信息的開關裝置)都有一個小小的、橙色的老式氣體放電燈。數以百計的橙色小燈在玻璃門和柜子后面不停閃爍。機器整個生命的脈動仿佛就在眼前。
  那臺丹麥計算機是件精美的家具。它的大小與舊式的衣櫥相當。計算機正面有3扇柚木門。有一次,我看到有個美國來的主管半信半疑地盯著機器,就因為它是用柚木嵌板的。它甚至還有一個丹麥現代風格的桌臺。整臺機器散發著迷人的柚木味道。
  伯克利計算機個頭非常大,大約有6米長,1.8米高,0.6米深。它隱藏在完全漆成黑色的混凝土穹頂里。它放在穹頂里打著聚光燈的樣子看上去有點像電影《2001太空漫游》里的黑色獨石。
  采訪者:當你分析某個程序時,你認為什么樣的代碼清單或算法結構在審美上是優美或悅人的?
  西蒙尼:我覺得代碼清單帶給人的愉快同整潔的家差不多。你一眼就能分辨出家里是雜亂無章(比如垃圾和沒洗的碟子到處亂扔)還是整潔如新。這也許意義不大。因為光是房子整潔說明不了什么,它仍可能藏污納垢!但是第一印象很重要,它至少反映了程序的某些方面。我敢打賭,我在3米開外就能看出程序拙劣與否。我也許沒法保證它很不錯,但如果從3米外看起來就很糟,我敢保證這程序寫得不用心。如果寫得不用心,那它在邏輯上也許就不會優美。
  不過假定它看上去不錯,然后你打算繼續深入。理解程序的結構要困難得多。在結構因何優美的問題上也是見仁見智。純粹主義者認為,只有那些按照極其嚴格的數學方式來使用某些很簡單的構造的結構化編程,才是優美的。就20世紀60年代之前的情況而言,這種反應非常合乎情理,因為當時程序員并不知道結構化的概念。
  不過在我看來,即使程序不遵循這些概念,只要它們有其他可取之處,也可以算是優美的。這就像拿現代詩歌和古典詩歌比較。我覺得古典詩歌很棒,你可以欣賞它。但是你不能只欣賞古典詩歌而無視其他。另外,這也并不意味著,只要在紙上胡亂寫上一些字,稱之為詩歌,就有了美。但是,如果代碼有一些可取之處,我不認為非得是數學意義上的結構化才稱得上優美。
  采訪者:別人讀幾段你的源代碼,有沒有可能斷定“這代碼是查爾斯?西蒙尼寫的”?
  西蒙尼:噢,是的,毫無疑問。是不是我本人寫的可能很難分辨,但有一點是確定無疑的:只要看了代碼,你就能知道它是不是我的團隊寫的,或者是不是受我的影響寫的。這是因為我從1972年起寫的代碼都遵循特定的命名規范,許多人稱之為“匈牙利命名法”。你一眼就能分辨出哪些代碼是受我的影響寫出來的,包括MicrosoftWord、Multiplan和Bravo,以及其他許多遵循這些規范寫成的程序。
  采訪者:你提到的“匈牙利命名法”是指什么?
  西蒙尼:稱它為“匈牙利命名法”是個玩笑。你知道,如果有人說“這對我來說就是希臘文”,這表示他們看不懂,因此也可能它就真是用希臘語寫的。這里的“匈牙利”是句反話,因為這些命名規范其實是要讓代碼更易讀。這個玩笑說的是程序看起來這么難讀,說不定真是用匈牙利語寫的。其實這套規范能夠很好地控制程序中所有變量的命名。
  要是分解一個程序,把它放進磨床,然后對碎片進行分類,你就會發現程序的大部分都是名字。寫下“apples +oranges”,你會發現名字“apples”有6個字符,運算符“+”只有1個字符,名字“oranges”有7個字符,一共14個字符,只有一個字符即加號與運算有關。因此,對我來說,要起到作用或有所改進,合乎邏輯的做法就是盡力完善程序的主要部分,也就是名字。“匈牙利命名法”是一種根據變量的屬性自動為其創建名字的命名方法。這跟人們把當裁縫(tailor)的叫做泰勒(Taylor)以及把當鐵匠(blacksmith)的叫做史密斯(Smith)非常相似。
  因此,面對一個具備某些屬性的結構,不要隨隨便便地取個名字,然后讓所有人去琢磨名字和屬性之間有什么關聯,你應該把屬性本身用作結構的名字。這種方法有很多優點。首先,造個名字很容易,想到那些屬性時,把它們寫下來,名字自然就有了。第二,它很容易理解,因為當你讀到某個變量時,從名字本身就能了解到與屬性有關的大量信息。這些屬性會越來越多,因此很難簡明地描述它們。為此“匈牙利命名法”引入了一種縮寫符號,以很小的空間就能展現具體屬性。當然,這在不知情的人看來完全是一團亂麻,那個玩笑就是這么來的。
  有些人認為,如果他們可以讀出代碼里的每個字,那么程序就是可讀的。實際上,這種意義上的可讀性并不可取。沒有人會拿著代碼清單,站到演講臺上大聲朗讀程序。關鍵在于理解。只是能閱讀單詞并發出音來,這毫無用處。當人們看到采用“匈牙利命名法”的代碼清單時,他們發現這些詞很難念,可能就會認為代碼不是可讀的。但實際上,由于名字和屬性之間存在關聯,它更容易理解,也更便于溝通。那些使用匈牙利命名法編程的人,即使在離開我的部門之后,仍會繼續使用它。這種命名法已經打入蘋果電腦、3Com及其他許多公司。
  采訪者:下面說說你創建程序的整個過程。是否存在適用于所有程序的過程?
  西蒙尼:當然。嚴格來說,對編程而言,我認為我們應該知道自己想要做什么。如果不知道,那么有一個過程確實是解決各種問題的必經之路,那就是要弄清楚:我試圖做什么?目標是什么?
  打個比方,我想開發一個菜單驅動的文本編輯器,要求響應速度快,并且提供拼寫檢查器等。在開始真正編程之前,我需要先弄清楚最終產品。有時候,目標的選擇取決于我都掌握了哪些技巧。以Bravo為例,這個程序是以算法為導引的。巴特勒?蘭普森描述了兩個很有意思的算法,于是我們試圖圍繞這些算法來編寫這個編輯器,以充分利用這些算法。此外,J.斯特羅徹?摩爾(J. StrotherMoore),就是Boyer-Moore字符串查找算法的Moore,在文檔編輯方面有幾個很有意思的算法。于是我們決定:“嘿,這個編輯器要包含摩爾編輯算法、蘭普森的屏幕更新算法還有兩個緩存。”等到對目標有充分的把握之后,我才會開始真正的編程。我調整姿態,關上房門,并且大聲宣布:“現在我要開始編程了。”
  采訪者:當你調整好狀態真正開始編程時,第一步會做什么?
  西蒙尼:編程的第一步是想象。就是要在腦海中對來龍去脈有極為清晰的把握。在這個初始階段,我會使用紙和鉛筆。我只是信手涂鴉,并不寫代碼。我也許會畫些方框或箭頭,但基本上只是涂鴉,因為真正的想法在我腦海里。我喜歡想象那些有待維護的結構,那些結構代表著我想編碼的真實世界。
  一旦這個結構考慮得相當嚴謹和明確,我便開始寫代碼。我會坐到終端前,或者換在以前的話,就會拿張白紙,開始寫代碼。這相當容易。我只要把頭腦中的想法變換成代碼寫下來,我知道結果應該是什么樣的。大部分代碼會水到渠成,不過我維護的那些數據結構才是關鍵。我會先想好數據結構,并在整個編碼過程中將它們牢記于心。
  采訪者:這是最重要的一步嗎?
  西蒙尼:當然,這是最重要的一步:最優算法的知識當屬科學,結構的想象則是藝術。這些算法的細節,以及編寫高效代碼實現這些結構的轉換,是編程像手藝活的一面。從技術上講,這就是所謂維護結構的不變性。編寫代碼以維護不變性是相對簡單的技藝,不過這需要非常用心并輔之以大量訓練才能練就。
  采訪者:你對編程感到過厭倦嗎?
  西蒙尼:是的。
  采訪者:編寫程序的過程是痛苦的還是快樂的?
  西蒙尼:兩者兼而有之。假裝每時每刻都很快樂是做作。就像運動員所說的:“要是沒受傷的話,肯定是你還不夠努力。”二十年后,我已經體會不到剛開始編程一兩年時的那種新鮮感。當然,有時我仍會有這種感覺,只不過不像以往那樣常有,這是沒辦法的事。
  采訪者:你每天都有固定安排嗎?你每天都編程嗎,或者你會先把問題放一放,然后集中一周時間搞定它?
  西蒙尼:我不是每天都有機會編程。我不用特意把問題放一放,因為總會有人打斷我。我一般晚上編程,白天總是被打斷。
  采訪者:晚上你會到辦公室還是在家工作?
  西蒙尼:我就在辦公室工作。我住得很近,非常方便。來辦公室就像進自己家另一個房間。我不會窩在家里編程的,來辦公室也就是兩分鐘的事兒。
  采訪者:你如何管理手下的程序員?你覺得現在自己做管理多過編程嗎?
  西蒙尼:我兩樣都做,目前還是編程多一些。開發Bravo時,對程序員的管理非常非常直接。有一次,我其實寫了一份極為詳盡的工作指令,也就是所謂的元程序。這差不多就是個程序,只不過是用非常非常高級的語言寫的。我們從斯坦福大學找了兩個機靈鬼作為“試驗對象”。他們寫的程序完全符合我的要求,這樣我們實現了雙贏:首先,對我來說,用這種非常高級的語言工作更容易,本質上是在對這些人進行編程;其次,他們真正弄清楚了這個程序,效果遠遠好過我直接交給他們寫好的代碼清單,并叮囑他們仔細研讀這個程序。他們掌握了這個程序,因為這是他們寫的。瞧,每個人都可以宣稱自己寫了這個程序。這個程序是我寫的,也是他們寫的。真是太棒了!我認為管理的最佳方法是言傳身教,經常復審代碼。我們一直堅持開展代碼復審。
  采訪者:讓多名程序員開發一個程序,開發速度會更快嗎?
  西蒙尼:不一定。編寫同一個程序的人員越多,人均產出的實際代碼量越少。結果,總的代碼產出一開始會更多,之后實際上可能會減少。以兩個人為例,也許單位時間只能多寫百分之五十的代碼。
  順便提一下,代碼的效率還會隨著開發同一個程序的人員數量的增加而有所降低。最高效的程序往往是一個人寫的。唯一的問題是,它可能需要寫上一輩子,而這顯然是無法接受的。因此你需要找上三五十個,甚或好幾百個人開發一個項目。
  采訪者:你能預估編寫一個程序要用多長時間嗎?
  西蒙尼:預估編寫程序要花的時間難度很大。之所以難度很大,原因多種多樣。這并不意味著我們就不用盡全力預估,因為預估時間可能用處很大,就像天氣預報不僅有經濟效益還有其他好處一樣。
  真正的好程序會永遠存在,寫起來永無止境,至少只要硬件存在,程序就會存在,甚至更長久。當然,只要Alto計算機存在一天,Bravo就不會消失。編寫Bravo的是兩個暑期實習生。夏天結束時,其中一人走了,另一個人留了下來。第一個發布版本大概用了3個月。在約5年時間里,一共發布了14個版本。
  Multiplan也是大致如此。當你想到Multiplan存在于MicrosoftExcel中,就明白Multiplan將不斷延續下去。而Macintosh上的MicrosoftExcel也不會是這一鏈條中的最后一個程序。它會在Windows上延續下去。
  采訪者:開發Bravo時,你是否認為施樂Alto計算機會成為所有人的選擇?
  西蒙尼:是的,我當時太天真了。不過,Alto后續機器正逐漸成為每個人都能用的機器,由此可見我的看法并沒有錯。從某種意義上說,Macintosh計算機和Windows程序都是后繼者……(說到這里,西蒙尼停下來接電話,草草地說了幾句便接著回來和我聊)。來電話的是湯姆?馬洛伊(TomMalloy),我剛才提到的其中一個暑期學生,留下來的就是他。我有一年沒跟他聊過了。他后來去了蘋果公司,為Lisa電腦開發編輯器程序。
  采訪者:你為什么會寫程序?你把它看作是工作、職業還是掙錢的手段?這是你與生俱來的能力嗎?
  西蒙尼:應該是兼而有之吧。我年輕時還算有點天分。即使是在我不懂編程的時候,我就知道與編程有很大關系的一些東西。記住那些復雜的事情對我來說輕而易舉。隨著年齡的增長,這變得越來越困難。想象場景也不再那么清晰。
  采訪者:為什么想象場景變得不再那么清晰?
  西蒙尼:可能只是年紀大了,思維方式也跟著變了。現在,如果試圖清晰明確地想象出包含二三十個組件的東西,我就必須全神貫注,甚至還可能會頭疼。換作年輕的時候,我可以想象一座有20個房間的城堡,每個房間里有10個不同的物體,這都不在話下。不過現在我做不到了。現在我更多的是依賴早年的經驗進行思考。我看到的是一團團未成形的云,不是像明信片畫面那樣清晰的圖景。不過我的程序確實寫得更好了。
  采訪者:成為優秀程序員有什么套路可循嗎?
  西蒙尼:恐怕沒有。
  采訪者:這種才能是天生的還是來自后天教育?
  西蒙尼:挑選合適的人并培養成優秀程序員,有不少套路可循。我們招攬有天分的員工。我不清楚他們何以有如此才華,我也不用去弄清楚。但是他們確實很有才。在此基礎之上,環境可以起到很大作用。
  進入公司第一天,程序員就會拿到幾本書。其中一本是數學家喬治?波利亞寫的《怎樣解題》。(西蒙尼邊說邊從他辦公桌旁的書柜里取出那本書,翻到某一頁。)這兩頁很重要。這本書的其余內容就是基于這兩頁展開的。這就像一張問題求解的檢查單。這是起飛前、起飛和著陸檢查單。它不會教你如何飛行,但是如果不照做,即使你已經懂得怎么飛行,也有可能會墜機身亡。
  求解問題時,我們遵循以下四個步驟:首先理解問題,然后擬定計劃,接著執行計劃,最后回顧整個過程。這樣的書我們大概有四本,我覺得我們能使程序員比剛加入公司時變得更加優秀。
  采訪者:你怎么看待將來程序員的作用?
  西蒙尼:如果你是在問我們會不會像以前的物理學家那樣自高自大,天知道!任何一門學科只要碩果連連,從事那門學科的人似乎總會飄飄然:“我們早就知道自己真的很聰明。”然后,他們摩拳擦掌,想要解決其他領域的問題。
  這讓我想到1945年之后的物理學家。他們說:“我們全都搞定了!現在讓我們四處看看。”看到生物學與控制論,他們認為:“這些研究大腦的家伙什么都不懂。他們甚至不知道記憶是怎么儲存的。這也不足為奇,誰叫他們都是呆瓜呢。現在,讓我們來研究研究。我們會搞定它的。我們將運用海森堡方程、量子力學,或者以前派過用場的隨便什么玩意,我們會把它應用到大腦研究中,接下來就等著奇跡出現吧。”
  這有時行得通,有時行不通。天知道。也許計算機科學將會幫助破譯DNA,而不是只提供工具。破譯DNA可能會成為黑客的終極夢想。
  采訪者:你覺得將來程序的編寫方式會有重大改變嗎?
  西蒙尼:我認為未來的計算機會比今天的更高效,但我不覺得會有什么大的差別。我不知道第6代或32代計算機會不會做到一些完全不同的或是很了不起的事情。我對鼓吹多妙多好的新方法格外警惕。光從我們現有的方法來看,我就能看出不少改進余地。我更信賴現有的方法,不是因為我保守,而是因為我知道自己至少不會失去既有好處。
  我總是担心,當這些所謂難以置信的新好處到來時,以往所有的好處也將不復存在。然后,它會讓你陷入兩難境地,你必須自行判斷境況是否更好。我喜歡有把握的勝利。我敢斷定,改善我們現有的東西,保留既有好處并消除弊端,勝過引入新好處新弊端兼而有之的新玩意。不過也許我是錯的,到時我會第一個加入到新事物的行列中。我堅信事情會發生劇變,變得更好,不過這需要時間。
  采訪者:為什么還要等這么長時間?
  西蒙尼:因為必須先等大量愚蠢的想法消逝。這就是為什么進步需要時間。首先,新想法必須不斷演變;其次,阻礙進步的壞想法必須消亡。歷來就是如此。即使是相對論和量子力學,好的想法也必須經歷很長時間才能成形。然后,舊物理學的既得利益者會慢慢消失。
  采訪者:可以舉個例子嗎?
  西蒙尼:要是提到人們普遍厭惡的打孔卡之類的東西,我估計不會有多大效果。因此,我還是得挑些大多數人相信的東西。我認為“簡單崇拜”,即以簡單本身作為追求目標的觀念,值得高度懷疑。多年來,這個觀念一直誘使我們關注那些回報最快的問題。但它只是一種手段。我認為,計算機科學,連同其他所有數理科學(數學、物理和現代分子生物學等),都將通過理解非常復雜的現象而不斷改進。數學已經發現了一些復雜的基本對象,在這方面也處于領先地位。有一類這樣的對象其傳統名稱是“簡單群”,這頗具諷刺意味地反映出“基本”等于“簡單”的舊觀念。不過,這兩個含義也許并不相同。在計算機中,只是喋喋不休地大談簡單性,我們在實際的人工智能、用戶界面和語言等領域也許就會毫無進展。
  采訪者:不編程的時候,你都做些什么?還有其他興趣愛好嗎?
  西蒙尼:還有其他不少有意思的事情,我也樂此不疲。我對埃及象形文字略知一二。學習其他語言、旅行和觀察世界都是很不錯的活動,我不介意做這些事情。我還持有私人旋翼飛機(直升飛機)飛行員執照。
  我不覺得編程要比其他事情重要得多。但是如果你從做事的角度來看,它就變成另一回事了。實際上,比起單純的編程,正是這份業務工作讓我忙得不可開交。我非常愿意在工作過程中做編程。
  采訪者:你是否認為自己更愿意把時間用來完成編程這項業務工作?
  西蒙尼:不。我只是說我編程是因為它是工作。不只是因為我喜歡編程,而且因為我喜歡這項工作。我不會一寫代碼就雀躍不已,說:“嘿,我又寫了一行代碼,真是太開心了;寫得越多,快樂越多。”絕非如此。這行代碼我也許已經寫了10遍。只是不斷重復鍵入,以致弄傷手指,可能會非常倒胃口。因此當我編程時,那么做的原因在于它是工作的一部分,這份工作才是我想做的。
  抽象的編程和業務的編程之間,主要區別在于后者目的非常明確。否則,它不過是像下棋一樣的抽象活動,游戲終了,棋子亂成一堆,游戲就此結束。程序完成時,有人會使用它,我看到他們喜歡它,自己也會從中獲得滿足。他們中有些人甚至為它付了錢,我能分到其中一部分,可以用這些錢到埃及旅游,或者飛半小時直升飛機。順便提一下,駕駛飛機跟編程項目非常相似:起飛和降落很刺激,駕駛過程可能會非常累人,而飛機可能會隨時解體。
  采訪者:你怎么看待自己同時代的其他程序員?
  西蒙尼:我非常敬重那些影響過我的人,我非常敬重他們。不過我也非常尊重現在跟自己共事的人。
  采訪者:你跟其他開發過大型程序的程序員有無來往?你會和他們交流想法嗎?
  西蒙尼:我非常看重競爭。我有幸在兩次展會上遇見鮑勃?弗蘭克斯頓和丹?布蘭克林(這兩位是SoftwareArts公司共同創始人,世界首套電子表格軟件VisiCalc的創作者)。我還遇到過喬納森?薩奇(蓮花公司創始人之一)。但遺憾的是我們來往并不多,這些程序員來西雅圖的機會也不多。布魯斯?阿特維克(BruceArtwick,微軟飛行模擬軟件Flight Simulator的編寫者,被稱為模擬飛行之父)有時會來造訪,還有蘋果公司的人,比如比爾?阿特金森(BillAtkinson,Lisa電腦程序員之一,后來為蘋果Macintosh電腦開發了MacPaint程序)——在我眼里他是最棒的——和比爾?巴奇(BillBudge),為美國藝電公司開發了《彈珠臺制造機》 游戲)。這些家伙都很出色。
  
  我們沒有太多東西可以高談闊論。我們都很有默契,說上三兩句話就能心領神會。我知道,這些家伙只要開口說話,就會知道自己在說什么。因此當他真正開口說話、也確實知道自己在說什么時,就沒什么讓人意外的了。而且既然我也知道自己在說什么,說的又是同一件事,那又何必說呢,是吧?這就像笑話專場,聽眾圍坐一圈,說笑話的人甚至用不著講笑話。他們只要報個笑話的編號,大家就笑翻了。
  要是能和這些人一起共事,那就太棒了,只可惜我們卻是商業上的競爭對手。我覺得我們聚到一起可以成就一番偉業。也許有一天火星人入侵地球,逼不得已,我們必須實施計算機曼哈頓計劃。我們全都會被送到新墨西哥州并肩作戰。天知道。
  續寫傳奇人生
  西蒙尼從1981年進入微軟,直到2002年離開,當時他在微軟公司的頭銜是應用開發總監、首席架構師。在微軟期間,西蒙尼招聘和管理的開發團隊創造了很多最暢銷的軟件,包括MicrosoftWord、Microsoft Excel等。西蒙尼于2002年創辦了IntentionalSoftware,目前担任該公司主席和CTO。這家公司的宗旨是創造能加速軟件設計的技術,讓商務人士即使不熟悉電腦術語,也能清楚地描述需求。
  在工作以外,西蒙尼表現出對航天旅行的極大興趣,并于2006年9月在俄羅斯星城接受訓練。(星城是俄羅斯加加林宇航員培訓中心的別稱。)2007年4月7日,他與兩位俄羅斯宇航員一起搭載聯盟TMA-10飛船前往國際空間站,并于21日返回地球。4月9日到達國際空間站的時候,西蒙尼說:“黑暗天空中的一切都令人驚嘆,非常非常激動人心。就像一個巨大的舞臺布景,有許多不可思議的歌劇或現代劇的奇妙演出。當我說我徹底折服的時候,就是現在這個樣子。”
  兩年后,即2009年3月,西蒙尼再次進行了太空旅行,重游國際空間站。



網載 2015-09-06 23:24:03

[新一篇] 暗時間(平凡和優秀的距離,來自暗時間)

[舊一篇] 強國的開端 儲安平70篇珍貴佚文首次整理重現
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表