黑客與畫家的共同之處,在于他們都是創(chuàng)作者。與作曲家、建筑師、作家一樣,黑客與畫家都是試圖創(chuàng)作出優(yōu)秀的作品。他們本質(zhì)上都不是在做研究,雖然在創(chuàng)作過(guò)程中,他們可能會(huì)發(fā)現(xiàn)一些新技術(shù)(那樣當(dāng)然更好)。
最近拜讀了被譽(yù)為硅谷創(chuàng)業(yè)之父Paul Graham的文集《黑客與畫家》,不得不說(shuō),這是我看到的最好的關(guān)于程序員自我修養(yǎng)的一本書,讓我愈發(fā)看清未來(lái)我自己令我喜歡的模樣。
以下整理了黑客與畫家的5點(diǎn)相通之處,讓我們看到黑客的創(chuàng)造者之心是如何悄然作響,開始在這個(gè)信息時(shí)代蠢蠢躍動(dòng)的。
創(chuàng)造者之心
黑客搞懂“計(jì)算理論”的必要性,與畫家搞懂顏料化學(xué)成分的必要性差不多大。一般來(lái)說(shuō),在理論上,您需要知道如何計(jì)算“時(shí)間復(fù)雜度”和“空間復(fù)雜度”;如果你要寫一個(gè)解析器,可能還需要知道狀態(tài)機(jī)的概念;除此以外,并不需要知道特別多的理論。這些可比畫家必須記住的顏料成分少很多。
黑客新想法的最佳來(lái)源,并非那些名字里有“計(jì)算機(jī)”三個(gè)字的理論領(lǐng)域,而是來(lái)自于其他創(chuàng)作領(lǐng)域。與其到“計(jì)算理論”領(lǐng)域?qū)ふ覄?chuàng)意,你還不如在繪畫中尋找創(chuàng)意。
你把整個(gè)程序想清楚的時(shí)間點(diǎn),應(yīng)該是在編寫代碼的同時(shí),而不是在編寫代碼之前,這與作家、畫家和建筑師的做法完全一樣。它意味著,編程語(yǔ)言首要的程序應(yīng)該是允許動(dòng)態(tài)擴(kuò)展,編程語(yǔ)言是用來(lái)幫助思考程序的,而不是用來(lái)表達(dá)你已經(jīng)想好的程序。
一份不以此為生的工作
黑客如何才能做自己喜歡的事情?找一份養(yǎng)家糊口的“白天工作”。這個(gè)詞是從音樂(lè)家身上來(lái)的,他們晚上表演音樂(lè),所以白天可以找一份其他工作。更一般地說(shuō),“白天工作”的意思是,你又一份未來(lái)賺錢的工作,還有一份為了愛(ài)好的工作。
幾乎所有的創(chuàng)作者在職業(yè)生涯的早期都有一份“白天工作”。畫家和作家尤其顯著。如果幸運(yùn)的話,你能找到一份與你的“真正工作”非常相關(guān)的“白天工作”。音樂(lè)家似乎常常是在唱片行工作。同樣地,鉆研某種編程語(yǔ)言或操作系統(tǒng)的黑客,很可能會(huì)得到一份使用這些工具的“白天工作”。黑客解決生計(jì)問(wèn)題的方法是找一份“白天工作”,然后在其余時(shí)間開發(fā)優(yōu)美的軟件,開源軟件屆的黑客早就這樣做了。
實(shí)踐出真知
畫家學(xué)習(xí)繪畫的方法主要是動(dòng)手去畫,黑客學(xué)習(xí)編程的方法也理應(yīng)如此。大多數(shù)黑客不是通過(guò)大學(xué)課程學(xué)會(huì)編程的,他們從實(shí)踐中學(xué)習(xí),13歲時(shí)就自己動(dòng)手寫程序了。畫家的作品都會(huì)保留出來(lái),你觀察這些作品,就能看出他們是怎樣一步步通過(guò)實(shí)踐學(xué)習(xí)繪畫的,沒(méi)孵化所用的技巧,都是建立在上一幅作品學(xué)到的東西之上。某幅作品如果有特別出色之處,你往往能在更早的作品上發(fā)現(xiàn)一個(gè)小規(guī)模的初期版本。
創(chuàng)作者另一個(gè)學(xué)習(xí)的途徑是通過(guò)范例,對(duì)畫家來(lái)說(shuō),博物館就是美術(shù)技巧的圖書館。幾百年來(lái),臨摹大師的作品一直是傳統(tǒng)美術(shù)教育的一部分,因?yàn)榕R摹迫使你仔細(xì)觀察一幅畫是如何完成的。同樣地,黑客可以通過(guò)觀看優(yōu)秀的程序?qū)W習(xí)編程,不是看它們的執(zhí)行結(jié)果,而是看他們的源代碼。開源運(yùn)動(dòng)最鮮為人知的優(yōu)點(diǎn)之一,就是使得學(xué)習(xí)編程變得更容易了。
工作模式
一幅畫是逐步完成的。通常一開始是一張草圖,然后再逐步填入細(xì)節(jié)。但是,它又不單純是一個(gè)填入細(xì)節(jié)的過(guò)程。有時(shí),原先的構(gòu)想看來(lái)是錯(cuò)的,你就必須動(dòng)手修改。黑客也應(yīng)該這樣的工作。你不能盼望先有一個(gè)完美的規(guī)格設(shè)計(jì),然后再動(dòng)手編程,這樣想是不現(xiàn)實(shí)的。如果你預(yù)先承認(rèn)規(guī)格設(shè)計(jì)是不完美的,在編程的時(shí)候,就可以根據(jù)需要當(dāng)初修改規(guī)格,最終會(huì)有一個(gè)更好的結(jié)果。
一種好的編程語(yǔ)言,應(yīng)該像油畫顏料一樣,能夠使得我們很從容地改變想法。動(dòng)態(tài)類型語(yǔ)言在這一點(diǎn)上就是贏家,編程語(yǔ)言靈活性的關(guān)鍵還不在這里,而在于這種語(yǔ)言應(yīng)該非常抽象。
當(dāng)多個(gè)畫家共同創(chuàng)作一幅作品時(shí),每個(gè)人畫的部分都是不一樣的。通常來(lái)說(shuō),大師負(fù)責(zé)畫主要人物,助手們負(fù)責(zé)畫次要人物和背景。但是,你肯定找不到某個(gè)部分是兩個(gè)人一起畫的。這也是多人共同開發(fā)一個(gè)軟件的正確模式。需要合作,但是不要“合”地過(guò)頭。
就像繪畫一樣,大多數(shù)軟件是為人類用戶準(zhǔn)備的。所以,黑客必須像畫家一樣,時(shí)刻考慮到用戶的人性需要,這樣才能做出偉大的產(chǎn)品。你必須能夠站在用戶的角度思考問(wèn)題,也就是說(shuō)你必須學(xué)會(huì)“換位思考”。
黃金年代
現(xiàn)在正是編程的黃金年代。大多數(shù)領(lǐng)域的偉大作品都誕生于很早以前。1430年到1500年之間的繪畫杰作,至今仍然是不可超越的。莎士比亞出現(xiàn)的時(shí)候,戲劇這種文藝體裁才剛發(fā)展起來(lái),專門表演戲劇的場(chǎng)所“戲院”才開始誕生。他把戲劇這種藝術(shù)形式提升到一個(gè)難以觸及的高度,讓后世的每一個(gè)劇作家都不得不生活在他的陰影之中。
我們看到這種模式一再反復(fù)出現(xiàn)。一種新的媒介剛剛誕生的時(shí)候,人們熱情高漲、興奮不已,短短幾代人就探索清楚了這種媒介的大部分可能性,把它的能量發(fā)揮到極致。編程目前好像就處在這個(gè)階段。
在達(dá)芬奇的年代,繪畫并不是一件很酷的事情,達(dá)芬奇用自己的工作推動(dòng)繪畫成為一種偉大的表達(dá)方式。同樣,編程到底能夠有多酷,取決于我們能夠用這種新媒介做出怎樣的工作。