目錄
- 總結
- 19位大師介紹
- 大師們的看法
- 關于程式設計
- 關于藝術
- 關于計算機、科學
- 其他精辟語錄
本書是19位程式設計大師的訪談錄,對于程式員來說肯定是好書,可以看看高手的人生是怎麼過的。對于喜歡音樂、視覺藝術、寫作的人來說也同樣有吸引力,因為這裡每一位大師幾乎都是多才多藝,有太空旅行的、彈鋼琴的、畫畫的、彈風琴的、彈吉他的、大學教授、演奏家、作家等等。
雖然大師們各有特色,但還是能找出一些共性:務實、謙虛、穿着随意、崇尚自由。
-
查爾斯·西蒙尼
Word和Excel等軟體開發者、06和09年進行了太空旅行。
-
巴特勒·蘭普森
開發過太網區域網路和Alto、Dorado個人電腦,DEC公司進階企業顧問工程師、麻省理工學院電氣工程與計算機科學系兼職教授。
-
約翰·沃諾克
Adobe公司的聯合創始人,PostScript語言開發者,愛好攝影、滑雪、繪畫、徒步旅行、收集罕見的科技書籍和印第安人用具等,和妻子開了一家古典風格的旅館——藍野豬
-
加裡·基爾代爾
CP/M 作業系統與 PL/1 程式設計語言的開發者。
-
比爾·蓋茨
微軟創始人你懂的,這就不用介紹了。
-
約翰·佩奇
軟體出版公司副總裁,主導開發了 PFS 系列産品。
-
C·韋恩·萊特萊夫
dBASE系列産品的開發者。
-
丹·布蘭克林
VisiCalc電子表格程式的合作開發者。
-
鮑勃·弗蘭克斯頓
VisiCalc電子表格程式的合作開發者,計算機+數學+電氣工程學位。
-
喬納森·薩奇
Lotus 1-2-3電子報表軟體的主要開發者,喜歡畫畫、攝影。
-
雷·奧奇
Symphony 程式的開發者。
-
彼得·羅伊森
T/Maker公司的創始人、T/Maker電子表格程式的開發者、soho一族。
-
鮑勃·卡爾
Framework軟體的開發者。
-
傑夫·拉斯金
蘋果公司Macintosh項目的發起人、藝術家、職業音樂家,喜歡自行車、射箭。
-
安迪·赫茲菲爾德
Macintosh作業系統的主要開發人員。
-
岩谷徹
吃豆人遊戲的締造者、東京工藝大學的全職講師,本人是野路子自學計算機、視覺藝術。
-
斯科特·金
Inversion一書的作者、Inversions for the Macintosh程式的開發者,斯坦福大學音樂學士學位、計算機+圖形設計博士學位。
-
加隆·蘭尼爾
Moondust遊戲的開發者、知名的音樂家、古典音樂作曲家、稀有樂器收藏家、視覺藝術家和作家。
-
邁克爾·霍利
盧卡斯影業旗下參與 SoundDroid(音響機器人)程式的開發,鋼琴演奏家、風琴演奏家。
查爾斯·西蒙尼:
- 程式設計的第一步是想象。就是要在腦海中對來龍去脈有極為清晰的把握。在這個初始階段,我會使用紙和鉛筆。我隻是信手塗鴉,并不寫代碼。我也許會畫些方框或箭頭,但基本上隻是塗鴉,因為真正的想法在我腦海裡。我喜歡想象那些有待維護的結構,那些結構代表着我想編碼的真實世界。
- 我認為管理的最佳方法是言傳身教,經常複審代碼。我們一直堅持開展代碼複審。
約翰·沃諾克:
- 優秀的系統設計不隻是工程活動,更是系統不同元件之間的一組折中和平衡。我認為這種折中和平衡才是系統設計最難的地方
比爾·蓋茨:
- 最糟糕的程式是原來的程式員在開始時沒有打好基礎,而他們也沒有再參與到程式的後續開發中。在這類程式上繼續工作就會遇到一種我所說的“實驗性程式”的情況。程式員對那些程式了解得太少,他們不知道改動之後會影響什麼,比如說會不會影響運作速度。他們可能會使用已經存在的代碼,他們也有可能并不知道如果修改了代碼,會破壞何種依賴關系。于是他們加入了新代碼,并在運作之後說:“噢,看哪,它不是那樣運作的。”這種處理程式的方法效率非常非常低,但很多項目到了最後卻都是這樣的。
- 我所寫過的真正優秀的程式都是在開始動手程式設計前已經花了大量時間去思考的。
- 今天我仍舊認為檢驗程式設計能力的最好方法之一就是給程式員一本30來頁的代碼,看看他閱讀和了解的速度有多快。
- 成為程式員的最佳途徑是編寫程式并研究其他人編寫的優秀程式。我自己以前就是去翻計算機科學中心的垃圾桶,找出他們的作業系統的程式清單。
約翰·佩奇:
- 當你在複雜的程式上艱苦工作時,鍛煉身體是很重要的。大部分程式員都缺乏身體鍛煉,這樣會失去敏銳的思維。往往在連續完成了第二個或第三個工作後,身體就虛弱了,以至于你會産生幻滅感,你會對着鏡子說:“上帝啊,看看我,我為什麼要這樣做呢?”
- 就個人而言,我在早晨的工作狀态是最好的。我喜歡很早就起床,那時很安靜,适合寫程式。我盡可能在上午做那些需要思想高度集中的工作。盡量把會議安排在下午,那時我的精力不如早上了,但我仍能好好地談話。到了晚上就很累了,無法創造性地解決問題。是以從晚上6時到第二天早上,我會毫無使用價值。
韋恩·萊特萊夫:
- 改裝跑車對我來說是一個令人滿足的項目,因為我可以做些什麼,讓它出現在我的面前。這個項目最糟糕的問題是,我需要的某些零件根本不存在。而在計算機上,如果我半夜裡需要什麼東西,這個東西目前我還沒有,我總可以自己做出來,不管它是什麼。最糟糕的情況也不過是需要很長的時間才能做出來。
- 我的程式設計人生就是制造工具。即使在10年前,和其他程式員比較時,我發現自己很大程度上喜歡通用化地解決問題,而其他人則更習慣于寫程式解決某一特殊需求。他們的程式常常比我的傳遞得更快,但我的程式則生命期更長。當特殊需求改變時,他們的程式也就完蛋了,每次都需要重新寫。我寫程式的方式總是讓程式能解決一類問題,而不是單獨一個。
- 僅從視覺角度講,代碼不應當在任何地方掉出列印紙的邊緣
- 使得程式變得幹淨,是走向優雅的一步。
- 我發現注釋可以分為兩類:一類是解釋顯而易見的東西,比無用還糟糕;一類是你需要解釋非常複雜、有很多關聯性的代碼。嗯,我總是力圖避免寫出複雜的代碼。我寫程式總是力争把代碼寫得穩固、清晰、幹淨,哪怕是需要額外多寫五行。我一般認為,你需要寫的注釋越多,你的程式就越糟糕,肯定是哪裡出了什麼問題了。好的程式并不需要很多的注釋。程式本身就應該是注釋。
丹·布蘭克林:
- 仔細觀察軟體行業銷量最大的軟體,你會發現,這些軟體一般都是由幾個人開發的。123其實是兩個人編寫和設計的,一個全職程式員,一個兼職程式員;VisiCalc也一樣。我沒記錯的話,dBASE最初全是一個人寫的。Paradox是兩個人開發的。軟體就是這麼開發出來的。
- 好的程式員是天賦、氣質、動機和努力工作的結合。我知道有很多人期望在很短的時間就成為一名好的程式員,但能成功做到這一點的人并不多。成功來自一遍又一遍地做同樣的事情,每一次學習一點點,下一次都做得更好一點。我非常幸運,在職業生涯初期,可以做很多涵蓋面很廣的、有趣的工作。現在人們很難獲得廣泛全面的工作經驗了,因為工作已經被細分了。人們往往在很早就開始專攻某一方面。
- 我發現,幾乎所有的程式設計都是驚人地相似。有一些基本的算法、循環和條件語句,但最終都會歸結為同一過程。
弗蘭克斯頓
- 我曾聽人說我的代碼很容易接手,我寫代碼的确是為了讓人很容易讀懂和接手。
雷·奧奇:
- 我推崇嚴謹、一緻而清晰的結構。另外,我認為軟體應該高度子產品化和分層,非常靈活地運用大量檔案和目錄。如果你必須分别建構不同元件,那麼接口自然就會更加凸顯出來,要求你規範這些接口。當許多人共同開發一個程式時,在項目早期确立全局的錯誤處理、參數傳遞和子程式命名規範(雖然不見得所有人都會同意),顯得非常重要。
- 如果你是硬被拉入程式設計這一行的,我建議你保持樂觀的心态,盡量多程式設計,同時盡可能參加各種不同的項目。盡可能多把時間花在計算機上,還要學會準确判斷自己的職業倦怠狀況(burnoutlevel)。要是别人覺得你很古怪,不用放在心上。
安迪·赫茲菲爾德:
- 程式設計是我能想到的唯一工作,可以讓我身兼工程師和藝術家兩種角色。它包含難以置信的、嚴密的技術元素,這是我所喜歡的,為此你必須一絲不苟,思維缜密。另一方面,它有極具創造性的一面,唯一真正的限制就是你的想象力。這兩種元素的聯姻使得程式設計獨一無二。你必須既當藝術家又當科學家,我喜歡這一點。我喜歡在程式設計工作的核心中創造魔法把戲。看到魔法把戲——你的程式的核心——第一次正确工作時,那将是編寫程式最激動人心的時刻。
- 在我看來,隻有設計者和實作者是同一撥人,才能把工作做好。寫代碼的人就是設計代碼的人。
岩谷徹:
- 你必須洞察人們的心靈,并擁有足夠的創造力,想象出别人想不到或者無法想象的東西。你必須逼迫自己做些不同尋常的事,追求與衆不同。你還必須有能力想象并給出組成遊戲的圖像,你不應該屈從于腦海裡一開始浮現的簡單想法。說到底,你必須樂于給人們帶去快樂。這是成為優秀遊戲設計師的基礎,也是成就優秀遊戲設計的必由之路。
- 最優算法的知識當屬科學,結構的想象則是藝術。這些算法的細節,以及編寫高效代碼實作這些結構的轉換,是程式設計像手藝活的一面。從技術上講,這就是所謂維護結構的不變性。編寫代碼以維護不變性是相對簡單的技藝,不過這需要非常用心并輔之以大量訓練才能練就。
巴特勒·蘭普森:
- 能被視為純藝術的程式少之又少。程式應當實作某種功能,而藝術性隻是其中一部分。不過,在我說程式設計是藝術時,意思跟說數學是藝術差不多——人們通常也不會把數學列為藝術。
加裡·基爾代爾:
- 它當然有藝術的成分在裡面。但很多的程式設計是發明和實作。這很像一個木匠,在腦海裡有他要做的櫃子的樣子。他要努力解決設計和施工的問題,直到櫃子成型。我程式設計所做的差不多也是這樣。程式設計也有科學成分在裡面,不
- 我認為程式設計有科學的成分,也有藝術的成分。計算機越人性化,裡面的藝術成分就越多。遊戲開發人員主要處理的是螢幕上的藝術形式,他們是在用高科技的産品來表達那種藝術。這種情況就跟你要做雕塑也得懂得黏土的化學組成一樣。不過,你隻需要學習幾分鐘黏土的知識就可以開始進行雕塑,而要勝任計算機上的工作則需要很長時間。不僅是時間,還需要熱情。
鮑勃·弗蘭克斯頓:
- 在工程方面,如果做錯了,會很容易看出來,因為有些東西會出問題。但好的工程和好的藝術并沒有差别。它易于了解嗎?便于維護嗎?是否簡單?是否有不必要的複雜性?如何了解它?在這個意義上,藝術和工程是相似的。當然,在純藝術領域,很少需要操作測試,是以出點問題也不容易發現。工程領域比較實際,因為需要讓某些東西可以工作。但它是不是工作一次就散架了?是不是為了修複一個bug會産生出更多的bug?一般來說,越是優秀的工程師,生産的機器就越有藝術的美感,也越有可能正常運轉。
- 在音樂和其他藝術形式中,我們會試圖遵循一定的規範,但同時我們也會在某些方面突破這些規範。在音樂中有很多規則,你需要知道什麼時候突破它們,什麼時候遵循它們,就好像程式設計一樣。教人寫作的時候,可以告訴他從列提綱開始,這樣可以使文章更有組織和條理。在程式設計領域,有很多關于組織和條理方面的技術可以教。如果你是一名雕塑家,你最好懂得重心在哪裡,或者至少對重心有點感覺,否則,當作品倒下來的時候是有可能砸死人的。在藝術領域,你會問自己别人如何感覺你的作品。你會嘗試建立一種特定的感性印象。我認為很多藝術家對主題的看法差異會很大,就像許多程式員一樣。在交流的時候,不管是寫作還是程式設計,你所表達的内容必須能被對方了解。如果連你自己都無法把程式解釋清楚,那麼計算機能夠正确運作的可能性就很小。
彼得·羅伊森:
- 程式設計是藝術。我認為任何做得好的事情都可以成為藝術,因為任何工作都可以加上一定的品位或藝術天賦來完成。在我自己的工作中,我不但關心代碼做什麼,也關心它看起來如何。我經常重新整理代碼,就為了讓它看起來更漂亮。
- 音樂、藝術和計算機不能相提并論。但我确實一直努力做那些能讓人們快樂的事情。我喜歡當音樂家的一個原因是,世界上的音樂家很少幹什麼壞事。如果你是實體學家,可能發明會爆炸的東西。但音樂家絕不可能幹這事。藝術家可以創作政治宣傳海報,但對音樂家來說,所創作的通常是中立的東西。我一直熱衷于做那些會讓人們快樂的事情。
- 我不做視覺藝術,但我還是個音樂家,盡管演奏的機會并不多。現在經營公司,我沒有充足的時間來練習。偶爾,我會受邀在朋友的婚禮上演奏。我也是靠到酒吧和夜總會演奏才讀完研究所學生的。在賓夕法尼亞州立大學,每周三晚上我會為老電影做鋼琴伴奏。我家裡有一架9英尺長(約2.75米)的三角鋼琴。我喜歡彈奏巴赫和莫紮特。
- 很多音樂家不讨厭程式設計,能夠程式設計的音樂家比能夠程式設計的其他藝術家要多得多。音樂家,至少是受過古典音樂訓練的,都習慣用抽象樂譜來工作,他們已經習慣了這一間接的過程。這不僅僅是樂譜不同于音樂,而且在他們頭腦裡的概念也是不同的。他們先在頭腦中有了音樂,然後再用樂譜把音樂寫出來。
加隆·蘭尼爾:
- 很多懂計算機和數學的人也懂音樂。音樂和程式設計語言相似,也有一套相當複雜的記号,即樂譜。還不止這些,樂器本身更像我所要做的事情。因為,使用我的程式設計語言,你在程式運作時與其進行互動,而不是事先規定它該做什麼,然後期望運作結果是正确的。這更像演奏樂器而不像讀樂譜。
- 計算機本身沒有什麼特性。它們是空的,就像一張白紙。因為它們的思想完全是空的,是以它們的特性完全由人來決定,其程度超過任何其他人類活動的領域。這就是我把我的語言設計成可以具有那麼多種不同形式的原因——它必須滿足不同的人的需要。我更多地把程式設計看作是藝術。
邁克爾·霍利:
- 我認為把計算機和藝術媒介放到一起,會讓人對藝術和技術都感到耳目一新。
- 在高中和我的貝爾實驗室經曆之後,我去了耶魯,修了音樂和計算機科學的雙學位。我大部分時間都花在彈鋼琴上,那有時候比擺弄計算機更有趣。不過,跟計算機科學相比,靠鋼琴謀生可是非常痛苦的
- 就實體學和數學而言,一如其他正統的學科,要想有所成就,必須能夠清晰地思考。這就是計算機行業的許多成功人士都來自這些領域的原因所在。而現在人們通常一直待在計算機系,要有所成就會更加困難,因為這是一門非常淺顯的學科,無法驅使你全力發揮出自己的聰明才智。
- 通過數學,你學會邏輯推理。你還會學到如何證明,以及怎麼處理抽象要素。通過實體學等實驗科學或人文學科,你學會如何應用這些抽象在現實中建立聯系。
- 學習數學。學會思考。閱讀。寫作。這些東西會更有持久的價值。學習如何證明定理:過去幾個世紀累積下來的大量證據表明,這項技能可以運用到其他許多事情上。隻學BASIC程式設計實在不靠譜。
- 我上了大學,一直念到碩士,是以接受了紮實良好的通識教育。我相信在數學、英語和基礎科學方面擁有堅實的基礎極為重要。然後,等到讀研時,可以盡管放手去學習計算機知識。如果你真想取得成功,先适應社會其他領域,然後再進入計算機行業,這才是更為可取的成功之道。
- 計算機科學正在飛速發展,但它不像數學,數學天才在300年來一直在不斷地豐富着數學理論,而人們願意投身到計算機領域卻不過是最近20年的事情。一些卓越的人加入到計算機科學領域并做出了貢獻。和以前相比,程式設計現在已經是非常主流的工作了。人們在很小的時候就開始接觸計算機,這有助于改變計算機科學領域的思維方式。很多優秀的程式員在他們十幾歲時就開始程式設計了,在那個年紀思考問題的方法也許會更靈活一些。在過去,人們認為單單成為優秀程式員是不夠的,你還得去管理别人或處理其他事情。幸運的是,這種情況正在改變,現在人們認識到計算機是一門科學,是值得堅持下去并教授給其他人的。
- 數學對計算機科學有着很大的影響。大多數優秀的程式員都有一定的數學背景,因為它有助于學習證明定理過程中的純正性,在證明定理的時候不能做模糊的陳述,隻能做精準的陳述。在數學中,不僅要建立完整的特征描述,而且要以很不明顯的方式把定理結合起來。你常常會去證明一個問題是可以在更短的時間内解決的。數學與程式設計有很直接的聯系,因為我是這麼看待這個問題的,是以我的這種觀點可能比别人更強烈一些。我認為兩者之間有着天然的聯系。
- 部分是科學,部分是技能。科學裡描述的某些内容也可能很有用,比如電源設計等。但程式設計也有手藝的成分,見習訓練是程式設計的必經之路。通過見習訓練,你可以掌握技能。有些事情,說到底就是熟能生巧。是以,它更像是一門藝術或手藝。程式設計和當精算師不同,它更多的是标準化的手藝。
- 計算機科學這個詞用得有點過度了。我更喜歡用軟體工程、計算機工程或資訊工程。因為工程沒有那麼絕對,是以我更願意把一些事情看作工程。當然,程式設計是帶有科學成分的。我認為計算是一個比較窄的概念。很多科學主要是了解互動關系的複雜性。但對程式設計本身而言,我覺得更多是工程規範。
鮑勃·卡爾:
- 程式設計是手藝和科學是兩者的結合。我非常确定地做出這一論斷。當然,軟體中有一些是科學性很強、有根有據的規則,它們對于軟體開發是至關重要的。但優秀的軟體并不止于此。比如說,如果你看看那個産生了Framework軟體設計的決策樹的草稿,會看到我花了很長時間在那兒思考、寫寫畫畫——許多的潛意識活動。這就是藝術所在。在藝術上,你無法闡明如何達到最終結果。從藝術的角度來看,最好的軟體來自于直覺的範疇。
- 如果現在給我兩個選擇,一個是拿一半的錢做我喜歡做的事,一個是拿兩倍的錢做别人讓我做的事,我會選擇低收入和自由。當在工作上很快樂時,我并不需要開一輛保時捷,因為那并不是生活的重要組成部分。做自己喜歡的工作則是我生活的一個重大組成部分。
- 我對成功的了解是,白天可以做自己喜歡的事情,月末可以付得起賬單。這樣的成功不難獲得。
- 大機構并沒有創造環境來鼓勵員工進行創造性的思考。員工做到了要求做的事情,就可以得到報償,多做也沒有用。沒有動力的話,給程式員提要求的人拿不出引人入勝的項目,而程式員也不會花時間去思考解決問題的有趣方式。
傑夫·拉斯金:
- 當下的現實:你賺的錢越多,願意聆聽你的人就越多。如果你的話沒被《财富》、《福布斯》或《華爾街日報》引用過,就沒有人會理睬。如果你說某樣東西能賺很多錢,無論你說的是真是假,人們都會洗耳恭聽。
- 在蘋果公司,掙到不少錢又沒什麼改變的人屈指可數,布裡安·霍華德便是其中一個。他這人很棒。我不清楚他身家有多少,不過他仍然開着10年前我以75美元賣給他的那輛車。
- 周圍其他人開的都是保時捷928或奔馳,而我從未想過要開什麼豪車。但是他們非常想讓我開輛體面的車。于是我找我兄弟商量,他給我支了一招。他對我說:“一輛全新奔馳或保時捷的價錢,完全可以買輛車況極佳的二手勞斯萊斯。這樣就不會有人再抱怨你開的車不夠體面,而你也不用完全照别人的想法行事。”于是我買了輛二手勞斯萊斯。說來也真逗,公司裡有些人之前從來不跟我說話,但是在我換車之後,他們突然開始笑臉相迎,樂意跟我搭話。不管怎麼說,換車之後,我還真感受到了不少我們所享有的民主。當我駛入加油站時,他們會一擁而上,開始悉心擦拭車窗,并尊稱我“先生”。我可以把車停在餐廳門口的禁泊區,他們會說“先生”,“謝謝您”,“我們很高興您把車停在大門口,這樣所有人都能看到有位勞斯萊斯車主大駕光臨”。另外,駛入麥當勞免下車購買通道時也很有意思。勞斯萊斯讓我看盡世間人情百态。
- 讓人悲傷要比讓人快樂更加困難。講幾個笑話也許很快就能把大家逗笑,但要讓人們落淚卻需要創造特别的情境,需要的時間也更長。