【程序員·隨身聽】《黑客與畫家》內(nèi)容2

大家好,感謝收聽【程序員·隨身聽】。

這一期我們繼續(xù)說《黑客與畫家》。

第二章 黑客與畫家

作者試圖通過這個話題,來解釋黑客更像畫家,而不是所謂的計算機科學(xué)的工作者。作者首先解釋他這么說的原因,然后講如果黑客把自己當做計算機科學(xué)家,會引起什么誤會,走什么樣的彎路,接著講了,如果向畫家這一職業(yè)類比,會得到什么靈感,最后講了自己的一些感想。

下面我就講講作者在這篇文章中的主要內(nèi)容。

讀完計算機系的研究生,作者去了藝術(shù)學(xué)校,學(xué)習(xí)繪畫。許多人很吃驚,一個喜歡計算機的人,居然還喜歡畫畫!他們似乎覺得,擺弄計算機和畫畫是兩件截然不同的事情--計算機是冰冷的、精確的、井然有序的,而畫畫是某種原始欲望熱烈狂放的表達方式。

這種看法是錯的。計算機和畫畫有許多共同之處。事實上,在我知道的所有行業(yè)中,黑客與畫家最像。

黑客與畫家的共同之處,在于他們都是創(chuàng)作者。與作曲家、建筑師、作家一樣,黑客與畫家都是試圖創(chuàng)作出優(yōu)秀的作品。他們本質(zhì)上都不是在做研究,雖然在創(chuàng)作過程中,他們可能會發(fā)現(xiàn)一些新技術(shù)。

我一直不喜歡“計算機科學(xué)”(computer science)這個詞。主要原因是根本不存在這種東西。計算機科學(xué)就像一個大雜燴,由于某些歷史意外,很多不相干的領(lǐng)域被強行拼裝在一起。這個學(xué)科的一端是純粹的數(shù)學(xué)家,他們自稱是“計算機科學(xué)家”,只是為了得到國防部研究局(DARPA)的項目資助。中間是計算機博物學(xué)家,研究各種專門性的題目,比如網(wǎng)絡(luò)數(shù)據(jù)的路由算法。另一端則是黑客,只想寫出有趣的軟件,對于他們來說,計算機只是一種表達的媒介,就像建筑師手里的混凝土,或者畫家手里的顏料。所以,在“計算機科學(xué)”的名下,數(shù)學(xué)家,物理學(xué)家和建筑師不得不待在同一個系里。

(有時,黑客做的事情被稱為“軟件工程”(software engineering,但是這個詞也是誤導(dǎo)的。與其說優(yōu)秀的軟件設(shè)計師是工程師,還不如說是建筑師(建筑師和架構(gòu)師是同一個詞,architect,建筑學(xué)和架構(gòu)學(xué)也是,architecture)。建筑學(xué)和工程學(xué)之間的區(qū)別并不是很嚴格,但就是存在區(qū)別,建筑師決定做什么,工程師想出怎么做。

當然,做什么和怎么做不應(yīng)該分得太開。如果你決定做一件事,卻不知道怎么做,你就是在自找麻煩。但是,只是單純地決定如何實現(xiàn)某種規(guī)格,那肯定不是黑客。黑客的最高境界是創(chuàng)造規(guī)格。雖然看起來,做到這一點的最好方法就是先做出一個樣品把規(guī)格實現(xiàn)了。)

把不同類型的工作捆綁在一起,可能是為了行政管理的方便,但是卻容易引起混淆。數(shù)學(xué)家看來并不在乎自己搞的是計算機還是數(shù)學(xué),他們很高興來到這個新地方,然后就開始埋頭證明新的定理,與數(shù)學(xué)系的數(shù)學(xué)家干的事情完全一樣。但對于黑客,“計算機科學(xué)”這個標簽是一個麻煩。如果黑客的工作被稱為科學(xué),這會讓他們感到自己應(yīng)該做的像搞科學(xué)一樣。所以,大學(xué)和實驗室里的黑客,就不去做那些真正想做的事情(設(shè)計優(yōu)美的軟件),而是覺得自己應(yīng)該寫一些研究性的論文。

要是黑客寫論文,最好的情況下,寫出來的也只是一些補充性的描述,不會具有太大的實際價值。黑客先開發(fā)了一個很酷的軟件,然后就寫一篇論文,介紹這個軟件,論文變成了軟件成果的展示。優(yōu)美的軟件并不總是論文的合適題材。首先,科學(xué)研究必須具有原創(chuàng)性。其次,科學(xué)研究必須是能夠產(chǎn)生大量成果的,而那些不成熟的、障礙重重的領(lǐng)域最容易寫出許多篇論文。

但是,創(chuàng)造優(yōu)美事物的方式往往不是從頭做起,而是在現(xiàn)有成果的基礎(chǔ)上做一些小小的調(diào)整,或者將已有的觀點用比較新的方式組合起來。這種類型的工作很難用研究性的論文表達。

那么,為什么大學(xué)和實驗室還把論文數(shù)量作為考核黑客工作的指標呢?這種事情其實在日常生活中普遍存在,比如,我們使用簡單的標準化測試考核學(xué)生的學(xué)術(shù)能力傾向,再比如,我們使用代碼行數(shù)考核程序員的工作效率。這樣的考核容易實施,而容易實施的考核總是首先被采用。

唯一有效的外部考核是時間。經(jīng)過歲月的洗禮,優(yōu)美的東西生存發(fā)展的機會更大。不幸的是,這種考核需要的時間可能比一個人的生命還要長。

人們無法考核你的工作,甚至誤解你的工作,都不是最糟的事。更大的危險是你自己也會誤解自己的工作。如果你發(fā)現(xiàn)自己讀的是計算機科學(xué),你就會以為計算機科學(xué)和其他理論科學(xué)并無不同,你的工作屬于理論計算機科學(xué)所涉及的那種理論的應(yīng)用研究。讀研究生期間,我潛意識里一直有一種很不舒服的感覺,覺得自己應(yīng)該多學(xué)一點理論,不應(yīng)該期末考試結(jié)束還不到三個星期,就把所有東西忘得一干二凈?,F(xiàn)在,我意識到自己錯了。黑客搞懂計算理論的必要性,與畫家搞懂顏料化學(xué)成分的必要性差不多大。一般來說,理論上,你需要知道如何計算“時間復(fù)雜度”和“空間復(fù)雜度”;如果你寫一個解析器,可能還需要知道狀態(tài)機的概念;除此以外,并不需要知道特別多的理論。

我發(fā)現(xiàn),黑客新想法的最佳來源,并非那些名字里有計算機三個字的領(lǐng)域,而是來自于其他創(chuàng)作領(lǐng)域。與其到計算理論領(lǐng)域?qū)ふ覄?chuàng)意,還不如在繪畫中尋找創(chuàng)意。

舉例來說,我在大學(xué)受到的教育是,在上機編程之前,應(yīng)該先在紙上把程序搞清楚。可我一直不是這樣編程,我喜歡直接坐在計算機前編程,而不是在紙上編程。更糟的是,我不是耐心地一步步寫成整個程序,而是一股腦不管對錯,先把代碼堆上去,再慢慢修改。書上說,debugging是最后的步驟,可我的工作方法卻像編程就是在調(diào)試。

很長一段時間,我都為此沮喪。就像小學(xué)老師教我怎么拿鉛筆,我卻總是學(xué)不會那種感覺。如果我那時看到其他創(chuàng)作領(lǐng)域,如繪畫和建筑,我會想到自己的學(xué)習(xí)方法有一個正式名稱:打草稿。

明白這一點對軟件設(shè)計有重大影響。它意味著,編程語言首要的特性應(yīng)該是允許動態(tài)擴展。編程語言是用來幫助你思考程序的,而不是用來表達你已經(jīng)想好的程序。這也是我認識的黑客,沒有一個喜歡用靜態(tài)類型語言編程的原因。

創(chuàng)作者不同于科學(xué)家,明白這一點有很多好處。除了不用為靜態(tài)類型煩惱外,還可以免去另一個折磨科學(xué)家的難題--對數(shù)學(xué)家的妒忌??茖W(xué)界的每一個人,暗地里都相信數(shù)學(xué)家比自己聰明,我覺得,數(shù)學(xué)家也相信這一點。這會引誘你用數(shù)學(xué)的方式解決問題。如果黑客認識到自己與其他創(chuàng)作者是一類人,這種誘惑就不起作用。

如果大學(xué)和實驗室不允許黑客做他們想做的事情,那么適合黑客的地方可能就是企業(yè)。不幸的是,大多數(shù)企業(yè)也不允許黑客做他們想做的事情。大學(xué)和實驗室強迫黑客成為科學(xué)家,企業(yè)強迫黑客成為工程師。在企業(yè),“黑客”的工作就是用軟件實現(xiàn)某個功能,而不是設(shè)計軟件。在那里,程序員被當做技工,職責(zé)就是將產(chǎn)品經(jīng)理的構(gòu)想翻譯成代碼。

這似乎是普遍情況。大公司這樣安排的原因是減少標準差。因為實際上只有很少一部分黑客懂得如何正確設(shè)計軟件,管理層很難識別應(yīng)該把設(shè)計軟件的任務(wù)交給誰,因此,只能交給一個負責(zé)產(chǎn)品的委員會。不過,這是創(chuàng)業(yè)公司的優(yōu)勢所在。如果你的競爭優(yōu)勢在軟件設(shè)計方面,并且你的對手是一家大公司,它大到由一群產(chǎn)品經(jīng)理來設(shè)計軟件,那么你的對手將無法趕上你。不過,說實話,這樣的機會不容易找到,你很難單單依靠軟件設(shè)計就與大公司展開競爭。真正競爭軟件設(shè)計的戰(zhàn)場是新興領(lǐng)域的市場,這里還沒有人建立過防御工事。只要你能做出大膽的設(shè)計,由一個人或一批人同時負責(zé)設(shè)計和實現(xiàn)產(chǎn)品,你就能在這里戰(zhàn)勝大公司。

所以,開發(fā)優(yōu)秀軟件的方法之一就是自己創(chuàng)業(yè),但是,這樣做會遇到兩個問題。一個是自己開公司的話,必須處理許許多多與開發(fā)軟件完全無關(guān)的事情。作者創(chuàng)業(yè)的時候,如果能有四分之一的時間做開發(fā)就感到幸運。另一個問題是,賺錢的軟件往往不是好玩的軟件,兩者的重疊度不高。好比寫小說的回報比不上寫廣告文案的回報。

那黑客如何才能做自己喜歡的事情?那就是找一份兒白天工作,一份為了賺錢的工作,然后還有一份兒愛好的工作。幾乎所有創(chuàng)作者在職業(yè)生涯早期都有一份兒白天工作。

因為黑客更像創(chuàng)作者,而不是科學(xué)家,所以要了解黑客,不應(yīng)該在科學(xué)家身上尋找啟示,而是應(yīng)該觀察其他類型的創(chuàng)作者。那么,從畫家身上,我們還能借鑒到什么對黑客的啟示呢?

有一件事情是可以借鑒的,那就是應(yīng)該如何學(xué)習(xí)編程。畫家學(xué)習(xí)繪畫的方法主要是動手去畫,黑客學(xué)習(xí)編程的方法也理應(yīng)如此。大多數(shù)黑客不是通過大學(xué)課程學(xué)會編程的,他們從實踐中學(xué)習(xí),13歲時就自己動手寫程序了。即使上了大學(xué),黑客學(xué)習(xí)編程依然主要通過自己寫程序。還有一個可以借鑒繪畫的地方:一幅畫是逐步完成的。通常一開始是一張草圖,然后再逐步填入細節(jié)。但是,它又不單純是一個填入細節(jié)的過程。有時,原先的構(gòu)想看來是錯的,你就必須動手修改。無數(shù)古代油畫放在X光下檢視,就能看出修改的痕跡。黑客也應(yīng)該這樣工作。你不能期盼先有一個完美的規(guī)格設(shè)計,然后再動手編程。如果你預(yù)先承認規(guī)格設(shè)計是不完美的,在編程的時候,就可以根據(jù)需要當場修改規(guī)格,最終會有一個更好的結(jié)果。因而,過早優(yōu)化和過早設(shè)計都是件危險的事情。

接下來作者說,

1、優(yōu)秀的軟件應(yīng)該對美有狂熱的追求。如果你查看優(yōu)秀軟件的內(nèi)部,你會發(fā)現(xiàn)那些預(yù)料中沒有人會看見的部分也是優(yōu)美的。

2、普通黑客與優(yōu)秀黑客一個重要區(qū)別是,會不會換位思考。不會換位思考,很難設(shè)計出優(yōu)秀的軟件。判斷一個人是否具備換位思考的能力有一個好方法,就是看他怎樣向沒有技術(shù)背景的人解釋技術(shù)問題。

3、眼下看來藝術(shù)家比黑客更酷,但是我們不應(yīng)該忘記,古時候繪畫蓬勃發(fā)展的黃金年代,畫家也不是像今天這樣酷的?,F(xiàn)在正是編程的黃金年代,編程能有多酷,要看我們能夠用編程做出怎樣的工作,就像達·芬奇推動繪畫成為一種偉大的表達方式。

這一期就講到這里,感謝您的收聽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文把程序員所需掌握的關(guān)鍵知識總結(jié)為三大類19個關(guān)鍵概念,然后給出了掌握每個關(guān)鍵概念所需的入門書籍,必讀書籍,以及...
    dle_oxio閱讀 11,403評論 6 244
  • 黑客與畫家 0. 譯者序 《黑客:計算機革命的英雄》中提出的6條黑客價值觀 使用計算機以及所有有助于了解這個世界本...
    雁宇閱讀 618評論 0 2
  • 《黑客與畫家》讀書筆記作者:【美】格雷厄姆 保羅·格雷厄姆其人其事 Y Combinator (Y運算子,簡稱YC...
    Cytosine閱讀 1,455評論 0 3
  • 推薦理由 本書是硅谷創(chuàng)業(yè)之父Paul Graham 的文集,主要介紹黑客即優(yōu)秀程序員的愛好和動機,討論黑客成長、黑...
    lsfire閱讀 590評論 0 1
  • 3 沒有記憶的人生證明你只是在虛度 忽然發(fā)現(xiàn)發(fā)現(xiàn)我人生前十幾年的人生幾乎沒有什么記憶,就算有也只是偶然之間彈出...
    Deer麓閱讀 303評論 0 0

友情鏈接更多精彩內(nèi)容