可以說匈织,執(zhí)行特定任務(wù)就像是從大雜燴中選定菜目浪默,排出一席美味佳肴。你可以左手一份美味右手一盤佳肴缀匕,但擱在一起可能味同狗糧纳决。懂得巧妙搭配食材才稱得上好廚師。同樣乡小,把程序各個(gè)部分妥善組合在一起阔加,才是成就優(yōu)秀計(jì)算機(jī)程序員之道。
-- 《編程大師訪談錄》
![圖片來源:douban.com](https://img1.doubanio.com/lpic/s24509127.jpg)
這個(gè)周末满钟,我花了兩天時(shí)間讀完了《編程大師訪談錄》胜榔。書中收錄了對(duì)19個(gè)傳奇程序員的訪談內(nèi)容,其中不乏大師們對(duì)編程的嚴(yán)肅思考和深刻洞見湃番,讀來趣味盎然夭织。本文摘錄了一組具有代表性的問答,從中可以對(duì)大師們對(duì)待編程的認(rèn)識(shí)和想法管窺一斑吠撮。
請(qǐng)注意尊惰,大師們的見解與論斷未必全盤正確,不加思考地把他們的觀點(diǎn)拿來奉為圭臬是危險(xiǎn)的泥兰。本書的迷人之處在于弄屡,大師們的那些充滿冒險(xiǎn)性與創(chuàng)造性的想法可以給我們帶來深刻的啟發(fā)。循著這些啟發(fā)做一番自己的思考鞋诗,或可得到一二真知琢岩。
另外,本書的成書時(shí)間是1986年师脂。閱讀時(shí),需要把訪談置于當(dāng)時(shí)的環(huán)境背景之下江锨,方能透過時(shí)空和這些大師進(jìn)行對(duì)話吃警。
對(duì)計(jì)算機(jī)與編程的看法
問:你認(rèn)為計(jì)算機(jī)科學(xué)真的是科學(xué)嗎?
查爾斯·西蒙尼:最簡(jiǎn)單的回答是啄育,它是科學(xué)酌心,就跟數(shù)學(xué)是科學(xué)一樣。計(jì)算機(jī)程序可以視作數(shù)學(xué)對(duì)象挑豌。
約翰·沃諾克:不見得安券。比起科學(xué)墩崩,它更是工程學(xué)科『蠲悖科學(xué)就是提出假說鹦筹,做各種實(shí)驗(yàn),在現(xiàn)實(shí)世界中創(chuàng)建模型址貌。計(jì)算機(jī)卻不是這樣铐拐,它們是關(guān)于現(xiàn)實(shí)世界模型的自我實(shí)現(xiàn)的預(yù)言,是極好的信息工具练对。但是遍蟋,說到計(jì)算機(jī)科學(xué),我不知道它試圖追求什么樣的真理螟凭。
約翰·佩奇:我一直在說虚青,計(jì)算機(jī)科學(xué)不是一門真正的科學(xué),因?yàn)槟銢]有實(shí)際發(fā)現(xiàn)有關(guān)物質(zhì)世界的任何東西 -- 但是螺男,這只說對(duì)了一半棒厘。有時(shí)候一個(gè)問題的答案一下子豁然開朗了,就好像答案一直都在那里一樣烟号,而我發(fā)現(xiàn)了它绊谭。我仔細(xì)檢查,發(fā)現(xiàn)答案是完美的汪拥。怪吧达传?
問:計(jì)算機(jī)或編程什么地方吸引你?
受訪者對(duì)這個(gè)問題的回答非常的一致迫筑,總結(jié)而言宪赶,他們都是被“編程”這項(xiàng)任務(wù)背后蘊(yùn)含的創(chuàng)造性和美學(xué)特性所吸引。
C·韋恩·萊特萊夫:我喜歡高科技的東西脯燃,我喜歡做出一些東西搂妻,讓它們顯示在屏幕上。如果你程序?qū)懙煤迷铮梢苑浅?yōu)雅:它就像在歌唱欲主,它制作精良。從工程的角度來看逝嚎,我享受面對(duì)這一切扁瓢,就像面對(duì)一輛漂亮的汽車,一座堅(jiān)固的橋补君,或是一棟精美的建筑引几。它的一切都是那么平衡、那么和諧挽铁。
安迪·赫茲菲爾德:這是我能像到的唯一的工作伟桅,可以讓我身兼工程師和藝術(shù)家兩種角色敞掘。它包含難以置信的、嚴(yán)密的技術(shù)元素楣铁,這是我所喜歡的玖雁,為此你必須一絲不茍,思維縝密民褂。另一方面茄菊,它有極具創(chuàng)造性的一面,唯一真正的限制就是你的想象力赊堪。這兩種元素的聯(lián)姻使得編程獨(dú)一無二面殖。你必須既當(dāng)藝術(shù)家又當(dāng)科學(xué)家,我喜歡這一點(diǎn)哭廉。我喜歡在編程工作的核心中創(chuàng)造魔法把戲脊僚。
問:你認(rèn)為編程是藝術(shù)、科學(xué)遵绰、技能辽幌、手藝,還是......?
查爾斯·西蒙尼:什么是編程椿访,人們對(duì)此一直各持己見乌企。有人說它是科學(xué),有人說它是藝術(shù)成玫,還有人稱之為技能或手藝加酵。我認(rèn)為這三方面兼而有之。我們喜歡說它蘊(yùn)含大量藝術(shù)成分哭当,但是我們都知道它里面更多的是科學(xué)猪腕。我認(rèn)為,只要將科學(xué)钦勘、藝術(shù)和技能這三者拿捏得恰到好處陋葡,你就能取得一些引人矚目的成績(jī)。最優(yōu)算法的知識(shí)當(dāng)屬科學(xué)彻采,結(jié)構(gòu)的想象則是藝術(shù)腐缤。這些算法的細(xì)節(jié),以及編寫高效代碼實(shí)現(xiàn)這些結(jié)構(gòu)的轉(zhuǎn)換肛响,是編程像手藝活的一面岭粤。
彼得·羅伊森:我當(dāng)然認(rèn)為這是藝術(shù)。我認(rèn)為任何做得好的事情都可以成為藝術(shù)终惑,因?yàn)槿魏喂ぷ鞫伎梢约由弦欢ǖ钠肺痘蛩囆g(shù)天賦來完成。在我自己的工作中门扇,我不但關(guān)心代碼做什么雹有,也關(guān)心它看起來如何偿渡。我經(jīng)常重新整理代碼,就為了讓它看起來更漂亮霸奕。
加隆·蘭尼爾:嗯溜宽,計(jì)算機(jī)本身沒有什么特性。它們是空的质帅,就像一張白紙适揉。因?yàn)樗麄兊乃枷胪耆强盏模运麄兊奶匦酝耆腥藖頉Q定煤惩,其程度超過任何其他人類活動(dòng)的領(lǐng)域嫉嘀。...... 我更多地把編程看作是藝術(shù)。上周末我在一個(gè)電視節(jié)目上和彼得·德奇交談魄揉,他說編程是一種手藝剪侮。然后,還有些人認(rèn)為編程是數(shù)學(xué)洛退。這完全取決于個(gè)人的不同看法瓣俯。
從美學(xué)的角度看程序
問:你認(rèn)為什么樣的代碼清單或算法結(jié)構(gòu)在審美上是優(yōu)美或悅?cè)说模?/strong>
這是一道非常主觀的問題,不過受訪者的回答都提到了同一個(gè)元素兵怯,那就是“結(jié)構(gòu)的簡(jiǎn)單彩匕、清晰與一致”。
查爾斯·西蒙尼:我覺得代碼清單帶給人的愉快同整潔的家差不多媒区。你一眼就能分辨出家里是雜亂無章還是整潔如新驼仪。我敢打賭,我在3米開外就能看出程序拙劣與否驻仅。我也許沒法保證它很不錯(cuò)谅畅,但如果從3米外看起來就很糟,我敢保證這程序?qū)懙貌挥眯脑敕H绻麑懙貌挥眯恼毙海撬谶壿嬌弦苍S就不會(huì)優(yōu)美。
加里·基爾代爾:當(dāng)一個(gè)程序干凈整潔粘优、結(jié)構(gòu)良好仇味、前后一致時(shí),它就是美麗的雹顺。我不能拿程序和蒙娜麗莎來比丹墨,但程序的簡(jiǎn)單和優(yōu)雅確實(shí)是美的。不同程序的風(fēng)格差異是耐人尋味的嬉愧,很像是藝術(shù)評(píng)論家眼中達(dá).芬奇的蒙娜麗莎和凡高畫作之間的差異贩挣。我特別喜歡 LISP 編程語言,它是如此賞心悅目。在 LIST 語言中有一個(gè)被稱作 M 的簡(jiǎn)明表達(dá)式王财。用 M 表達(dá)式寫的算法非常美卵迂,你幾乎想把它裝裱起來掛載墻上。
關(guān)于方法論
** 問:程序員需要具備什么樣的素質(zhì)才能寫出成功的程序绒净?**
鮑勃·弗蘭克斯頓:優(yōu)秀的人一般需要滿足兩個(gè)因素:正好具備這個(gè)知識(shí)領(lǐng)域所需要的心智见咒,并且在能力上又不是太愚鈍。這樣的組合很罕見挂疆,但并非不可思議改览。......一個(gè)優(yōu)秀的程序員必須喜歡編程,對(duì)它感興趣缤言,這樣他才會(huì)努力多學(xué)一點(diǎn)宝当。優(yōu)秀的程序員還要對(duì)美學(xué)有感覺,并且有相應(yīng)的負(fù)罪感墨闲,能夠敏銳地意識(shí)到什么時(shí)候違反了程序的美感今妄。負(fù)罪感迫使他更加努力地去改進(jìn)程序,使程序更加符合美感鸳碧。
喬納森·薩奇:天賦洞辣、氣質(zhì)董饰、動(dòng)機(jī)和努力工作的結(jié)合。我知道有很多人期望在很短的時(shí)間就成為一名好的程序員,但能成功做到這一點(diǎn)的人并不多漫萄。成功來自一遍又一遍地做同樣的事情痰催,每一次學(xué)習(xí)一點(diǎn)點(diǎn)召嘶,下一次都做得更好一點(diǎn)點(diǎn)悉默。
問:你編程的過程是什么樣的?
加里·基爾代爾:我遵循非常明確的肉迫、適合自己的流程验辞。我會(huì)先畫數(shù)據(jù)結(jié)構(gòu),然后花很長(zhǎng)時(shí)間思考數(shù)據(jù)結(jié)構(gòu)喊衫。在開始編程前跌造,我會(huì)一直思考整個(gè)程序的流程。
比爾·蓋茨:我喜歡在坐下來編寫代碼之前先把整個(gè)設(shè)計(jì)方案構(gòu)想清楚族购。而在完成代碼后壳贪,我喜歡回去把它從頭到尾再全部重寫一遍。
彼得·羅伊森:我是個(gè)非城拚龋“自底向上”的程序員违施。我不為整體戰(zhàn)略傷腦筋,因?yàn)槌峭瓿闪怂械募?xì)節(jié)瑟幕,否則我從來看不清全貌磕蒲。
問:團(tuán)隊(duì)合作編程對(duì)項(xiàng)目有什么影響留潦?
受訪者在這個(gè)問題上又達(dá)成了一致:開發(fā)團(tuán)隊(duì)?wèi)?yīng)該盡可能精簡(jiǎn)。
約翰·佩奇:如果一個(gè)產(chǎn)品需要四到五個(gè)人開發(fā)辣往,那和你自己一個(gè)人編程時(shí)采取的方法是不同的愤兵。我堅(jiān)信只能有一個(gè)人來做產(chǎn)品和高層結(jié)構(gòu)的設(shè)計(jì),最多不能超過兩個(gè)人排吴。所有的設(shè)計(jì)出于一個(gè)頭腦,才能夠?qū)崿F(xiàn)和諧與一致懦鼠。如果試圖取悅所有人钻哩,讓一個(gè)委員會(huì)來做設(shè)計(jì),你的方向就錯(cuò)了肛冶。那絕對(duì)是致命的街氢。
C·韋恩·萊特萊夫:不論是單槍匹馬還是在一個(gè)非常小的團(tuán)隊(duì)里,我都能工作得很好睦袖。當(dāng)團(tuán)隊(duì)超過6個(gè)人時(shí)珊肃,那就完全失控了。
關(guān)于其他興趣
問:不編程的時(shí)候馅笙,你都做些什么伦乔?還有其他興趣愛好嗎?
查爾斯·西蒙尼:還有其他不少有意思的事情董习,我也樂此不疲烈和。我對(duì)埃及象形文字略知一二。學(xué)習(xí)其他語言皿淋、旅行和觀察世界都是很不錯(cuò)的活動(dòng)招刹。我還持有私人旋翼飛機(jī)飛行員執(zhí)照。
加里·基爾代爾:我會(huì)間歇性的短期休假窝趣,因?yàn)槲乙埠芟矚g享受生活疯暑。這時(shí)我會(huì)外出,開飛機(jī)只是為了從工作中脫身出來哑舒。
約翰·佩奇:我是個(gè)飛行員妇拯。我正在蓋一座房子,我彈吉他散址,喜歡游泳乖阵,不是為了游泳而游泳,而是為了鍛煉身體预麸。
杰夫·拉斯金:五花八門瞪浸。我是個(gè)典型的發(fā)明家。我做過大量不同領(lǐng)域的項(xiàng)目吏祸。例如对蒲,我有一家公司制作無線電遙控模型飛機(jī)钩蚊。另外我正在做一個(gè)鋼琴方面的新設(shè)計(jì)。...... 我正在開發(fā)一款數(shù)控銑床蹈矮。
令人驚訝的是砰逻,多個(gè)受訪者對(duì)駕駛飛機(jī)(或者遙控模型飛機(jī))有著極大的興趣。對(duì)此泛鸟,約翰·佩奇表達(dá)了自己的看法:
約翰·佩奇:一個(gè)原因是那些相當(dāng)成功的程序員是有財(cái)力開飛機(jī)的蝠咆。還有一個(gè)原因是,飛行對(duì)工程師來說是一個(gè)煅煉北滥,因?yàn)樗婕安倏v復(fù)雜的事物刚操,這是工程師喜歡做的。程序員也喜歡馴服復(fù)雜的東西再芋,而開飛機(jī)是非常復(fù)雜的菊霜,所以掌控飛機(jī)是很有趣的。最后济赎,開飛機(jī)像編程鉴逞。一名優(yōu)秀的飛行員要給乘客提供完美、平穩(wěn)的航行體驗(yàn)司训,而優(yōu)秀的程序員給客戶提供的是在計(jì)算機(jī)上完美构捡、無需費(fèi)腦的經(jīng)歷。
對(duì)未來的預(yù)想
問:你認(rèn)為未來計(jì)算機(jī)在社會(huì)中會(huì)扮演什么角色壳猜?
本書成書于上世紀(jì)80年代叭喜,這給了我們一個(gè)絕佳的機(jī)會(huì)通過今天的視角來審視書中人物對(duì)未來的設(shè)想與預(yù)言。
丹·布蘭克林:我覺得將來的個(gè)人計(jì)算機(jī)會(huì)跟臺(tái)式機(jī)有所不同蓖谢,現(xiàn)在的電腦就像是放在你辦公桌上的電話捂蕴。未來的個(gè)人電腦應(yīng)該更像是個(gè)記事本。我的記事本隨身攜帶闪幽,為什么它就不能是電腦呢啥辨?嗯,這不同于我們現(xiàn)在熟知的個(gè)人電腦盯腌。計(jì)算機(jī)技術(shù)會(huì)用在各種各樣的全新場(chǎng)合溉知,比如用作記事本。
鮑勃·弗蘭克斯頓:我認(rèn)為現(xiàn)在的這種計(jì)算機(jī)會(huì)消失腕够。計(jì)算機(jī)會(huì)變成智能代理或家用電器级乍。個(gè)人計(jì)算機(jī)最終將銷聲匿跡。當(dāng)然這個(gè)過程是逐漸的帚湘。有一個(gè)階段會(huì)有很多針對(duì)個(gè)人計(jì)算機(jī)使用者的應(yīng)用玫荣,但這決不是進(jìn)化的終點(diǎn)。雖然人們還無法準(zhǔn)確預(yù)言計(jì)算機(jī)究竟會(huì)怎么發(fā)展大诸,但誰會(huì)喜歡在桌子中間放這個(gè)一個(gè)大盒子呢捅厂?
彼得·羅伊森:對(duì)于整個(gè)行業(yè)或者整個(gè)世界贯卦,我都不那么關(guān)心。對(duì)于世界焙贷,我的關(guān)心程度只限于我希望世界是安寧的撵割,我也希望盡我能盡的本分讓世界安寧。
附錄 - 受訪者名單:
- 查爾斯·西蒙尼 - Microsoft Word 和 Microsoft Excel 等著名軟件的領(lǐng)導(dǎo)開發(fā)者辙芍。值得一提的是啡彬,西蒙尼曾于2006年和2009年兩度進(jìn)行太空旅行。另外故硅,著名的匈牙利命名法也與他有關(guān)外遇。
- 巴特勒·蘭普森 - 曾擔(dān)任 DEC 公司高級(jí)企業(yè)顧問工程師,1995年進(jìn)入微軟并一直工作至今契吉。另外,蘭普森自1987年開始一直擔(dān)任麻省理工學(xué)院電氣工程與計(jì)算機(jī)科學(xué)希兼職教授诡渴。
- 約翰·沃諾克 - Adobe 公司的聯(lián)合創(chuàng)始人捐晶,PostScript 語言的開發(fā)者。
- 加里·基爾代爾 - CP/M 操作系統(tǒng)與 PL/1 編程語言的開發(fā)者妄辩。
- 比爾·蓋茨 - 這位不用介紹了吧惑灵。
- 約翰·佩奇 - 軟件出版公司副總裁,主導(dǎo)開發(fā)了 PFS 系列產(chǎn)品眼耀。
- C·韋恩·萊特萊夫 - dBASE 系列產(chǎn)品的開發(fā)者英支,曾為 NASA 的“海盜”號(hào)火星探測(cè)器的著陸支持軟件編寫數(shù)據(jù)管理程序 MFILE。
- 丹·布蘭克林 - VisiCalc 電子表格程序的合作開發(fā)者哮伟。
- 鮑勃·弗蘭克斯頓 - VisiCalc 電子表格程序的合作開發(fā)者干花。
- 喬納森·薩奇 - 取得非凡成功的 Lotus 1-2-3 電子報(bào)表軟件的主要開發(fā)者。
- 雷·奧奇 - 曾在蓮花公司與喬納森.薩奇共事過楞黄,后加入微軟池凄。是 Symphony 程序的開發(fā)者。
- 彼得·羅伊森 - T/Maker 公司的創(chuàng)始人以及 T/Maker 電子表格程序的開發(fā)者鬼廓。
- 鮑勃·卡爾 - Framework 套件的開發(fā)者肿仑。
- 杰夫·拉斯金 - 蘋果電腦公司 Macintosh 項(xiàng)目的發(fā)起人。
- 安迪·赫茲菲爾德 - Macintosh 操作系統(tǒng)的主要開發(fā)人員碎税。2015年上映的電影《史蒂夫·喬布斯》中有不少關(guān)于他的戲份尤慰。
- 巖谷徹 - 吃豆人游戲的締造者。
- 斯科特·金 - Inversion 一書的作者以及 Inversions for the Macintosh 程序的開發(fā)者雷蹂。
- 加隆·蘭尼爾 - Moondust 游戲的開發(fā)者伟端,亦是虛擬現(xiàn)實(shí)領(lǐng)域的拓荒者。
- 邁克爾·霍利 - 層在盧卡斯影業(yè)旗下參與 SoundDroid(音響機(jī)器人)程序的開發(fā)工作匪煌。