黑客 vs 工程師
筆者之所以翻譯這篇文章,是因長久以來筆者有感於工程師與黑客之間誤解,有些黑客瞧不起工程師的死板,工程師則看不上黑客的傲氣。事實上,在軟件項目管理過程中,安全僅僅是軟件測試階段的一個測試環節。源於思維角度的不同和性格特征的使然,筆者相信,優秀的工程師同樣也是不遜的黑客,優秀的黑客卻未必是優秀的工程師,這正是工程師和黑客需要相互了解、學習之處,讀過全文,或許你會對黑客、工程師、創業有新的認識和了解。
看待這個世界最簡單的方式是莫過於二元世界觀,一個人可以放言“這個世界上隻有兩種人……”並將生活的細微之處看地異常簡單。作為前言,我聲明這個世界上的確有兩種人:黑客和工程師。
藝術家和科學家 vs 黑客和畫家
小的時候,父親告訴我世界上有兩種人:藝術家和科學家。他說,藝術家喜怒無常而且桀驁不馴,當他們想工作的時候就工作,想休息的時候就休息。科學家則是另外一種人:按部就班、恪守規矩。無論他們想或不想,都得完成手頭工作。作為亞洲人,顯然我就一個與藝術家形象背道而馳的例子,一個立誌成為科學家的人。我應該像科學家一般的自律且有條理,這也正是我的成長曆程,盡管我家裏任何一個人都可以證明我是家中最不守規矩的一個。
六年前,我偶然拜讀了保羅.格雷厄姆(Paul Graham)(譯者注:以下簡稱保羅)的書————《黑客與畫家》。正如書名所示,黑客和畫家一章清晰地闡述了黑客與畫家之間的關聯。保羅在書中寫到,黑客與畫家的相似之處在於兩者都是創造者(Maker),也正如畫家一般,黑客有著繆斯女神(譯者注:九位古希臘文藝女神)般的工作習性。
書中“良好的壞習慣”一章,保羅進一步闡述了什麼是黑客。在他看來,黑客通常不服管教、桀驁不馴。這確是一件好事,因為創新和破舊都需要這樣良好的壞習慣。
“喜怒無常”(工作習性)和“桀驁不馴”(不服管教)幾乎便是我父親所說的“藝術家形象”。在《黑客與畫家》書中,這種比較顯而易見,然而這卻是我第一次看到有人將“藝術家形象”歸類到好的一麵,於是我決定我的確是要成為一名“黑客”。
連續性格特征
在六年裏,我做了很多工作,也學了很多東西。如果六年前在我讀過《黑客與畫家》之後你問我,我會毫不猶豫告訴你誰是黑客,誰不是黑客。但是現在我發現我錯了。
想象下有一個基於工作紀律性要求、嚴謹性要求不同而產生的連續性格。越往左邊越趨向於藝術家性格,對應的工作要求相對也較為寬鬆,越往右邊越趨向科學家/學者性格,對應的工作需要較高的嚴謹性。在中間區域,便是黑客和工程師。話說回來,這也可以被看作是藝術-科學工作的連續性。在我看來,這張圖應該是這樣的:
我在這裏所說的嚴謹指的是學術嚴謹,沒有暗含褒義或者貶義的意思。在學術領域,特別是科學領域,一個人的工作必須能夠經得起同行嚴苛的推敲和審閱,也有很多客觀的方法做這些嚴謹性驗證。但對於藝術家而言則並非如此,借用保羅書中畫家的例子,有很多主觀的方式來確定什麼是好畫家,什麼不是。我雖然搞不懂傑克遜.波洛克(Jackson Pollock)(譯者注:美國畫家)的作品,但有很多人懂。
客觀性的工作和主觀性的工作在我看來其不同在於嚴謹性。越是客觀的工作,對於嚴謹性要求越高。嚴謹一詞經常與其他的詞產生關聯,比如“標準”、“死板”和“官僚主義”。畢竟,“嚴謹(rigour)”和“死板(rigid)”有著相同的詞根。
無論在何時,一個人的性格都可能處在上圖連續性格特征中的任何一點。當你靈感突來的時候可能會創造一些新的東西,當你遇到煩心事時可能會坐下來琢磨這些煩心事,當你感覺不好也不壞,處在連續性格特征的中間區域時,你可能隻是將事情做完,再無其他。
關於工程師
如今已經有很多文字來描述什麼是黑客,但卻沒幾個字說說什麼是工程師。在某種程度上,是因為相比黑客,工程師是一個更為古老的稱唿,或多或少都已經在人們心中定型,而且工程師通常是職業的稱唿,而非性格特征的描述。在本文中,我會試圖描述工程師的性格特征。
工程師就像黑客的同胞兄弟,它們有一些相同的特征,而其他方麵則相去甚遠。黑客藐視規則,而工程師熱愛規則(或者至少喜歡創造規則)。對工程師而言,井然有序是件好事,而對黑客來說混亂不堪則是益事。工程師的工作以建立過程和事物為伊始,向著原創方向而努力,很像《黑客與畫家》中所描述的科學家。黑客則以興趣為導向進行工作,工程師則傾向於死記硬背。當然,工程師偶爾也會不修邊幅。
工程師和黑客的相似之處在於都是創造並搞定事情。正如科學家能夠完全沉浸在自己的研究當中一樣,藝術家也會在自己的藝術創作中迷失自我。黑客和工程師都是能將事情做好的人,是的,兩者的性格特征都傾向於吹毛求疵,總的說來,都是極力在直截了當地將問題徹底解決。
說到吹毛求疵,我相信在藝術家和科學家、黑客和工程師之間存在一些不同。藝術家和科學家通常沉浸在自我工作的深度上,黑客和工程師則傾向於吹毛求疵地迷失在自我工作的廣度上。這是畫家和黑客、科學家和工程師之間的顯著不同。
像黑客一樣,工程師也對細節斤斤計較。工程師對於細節的關注並非源於他們對於美的無盡追求,而是源於對正確性的自我要求,他們依賴已有知識體係和已知常識去創造事物。有些觀點認為工程師僅僅是缺乏創造力的實踐者,但我認為事實並非如此。
工程師和黑客也都是工匠和實驗者,隻不過他們以不同的方式來實踐罷了。黑客是自由散漫的工匠,工程師則是組織有序的工匠。工程師相比黑客更願意以更為有條理的方式來做事,因此也比愛冒險的黑客少了許多風險。
本質上工程師和黑客是一樣的,唯一的不同在於他們做事的方法和動機。就我看來,知識水平決定了一個人會成為黑客還是成為工程師(譯者注:知識水平越高的人越會成為工程師,因為他們知道的太多了)。
關於嚴謹性
最初的黑客其實是科學家,作為幾個世紀前便已存在的職業,科學家到二十世紀時已變地相當無組織無紀律。個人(自我)實驗司空見慣,很多暢銷小說中都會提到這麼一段瘋狂的科學家情節。
我曾經癡迷地讀過這麼一本書————《豚鼠科學家》,這是一本通俗易懂且容易找到的書。在書中,作者回顧了那些熱衷做個人實驗的著名科學家。在我記憶中印象最深的是霍爾丹(JBS Haldane)(譯者注:遺傳學家和進化生物學家),部分原因是他是一名眾所周知的科學家,他的作品之前我之前也讀過。霍爾丹的個人實驗很有名,以至於因為實驗造成失聰,背脊也受了傷。
要是霍爾丹是名電腦程序員,可能他會用所有調試方式來編寫程序來調試錯誤,簡而言之,就是黑客。
嚴謹性要求在科學領域出現的較晚。隨著越來越多的信息開始在科學家們各自研究的領域傳播和分享,各種框架或約定也越來越被科學家們所需要。畢竟,如果兩個化學家就實驗的目的,工作流程等不能達成一致,那還搞個毛飛機呢?很快,適當的嚴謹性框架/約定在科學界被確定下來,比如如果要做科學家,你就必須得會做假設檢驗。
我相信這樣的事情也發生在計算機科學及其工業領域。隨著計算機工業成熟化,它也變得越來越嚴謹。戴夫.蓋爾普林(Dave Gelperin)在1988年寫了一篇文章叫《軟件測試的發展》,在該文中,戴夫和他的合作者指出軟件開發已經從麵向調試開發發展到麵向規範開發(軟件必須滿足規範)、麵向毀滅開發(目的是尋找錯誤),麵向評估開發(能夠測試軟件質量)、麵向防範開發(檢測和阻止錯誤發生)。
今天我們可以找到很多嚴謹的軟件測試方法——從BDD到TDD,我敢打賭這隻會更加穩固軟件嚴謹性的發展,就像假設檢驗是科學界嚴謹方式的中堅力量一般。
關於黑客
黑客在哪裏?黑客無所不在。不同於將黑客和工程師看作一成不變的性格特性,我更願意認為黑客或工程師像是人們所戴的帽子————創造者尤其如此。黑客與工程師的不同在於在給定的時間、地點和情形下其本人是什麼樣的人。
在《黑客與畫家》中,保羅反對將計算機科學當作科學來對待。他寫到,黑客隻想做黑客所做的事情,而不是寫論文。基本上,我認可他的想法,在領域/職業心理層麵,這是很重要的。作程序員的人並不妨礙他成為一名黑客,當然也不妨礙他成為諾貝爾物理學獎獲得者。
正如前文中所提到的,黑客的特性是破舊,拒絕約定俗成的舉動往往會引起重大革新/突破。
李納斯.托沃茲(Linux Torvalds)反感所有常規的軟件創造過程。他打破了以往各自為營的封閉式軟件開發模式,開創了Linux開源係統,正如艾瑞克斯.雷蒙德(Eric S Raymond)在《大教堂和市集》中所描述的那樣,這是極具震撼力的革新。
盡管如此,李納斯也並非是一個草率馬虎的程序員,事實恰好相反,他所寫的Linux內核的源碼有著不可思議的美感。在創造這樣的程序時同樣需要有明確的規則、約定的方法,在Linux開發工作之餘,他也可以說是一名帶著工程師帽子的開發者。
關於角色
六年前,我曾說過做一名黑客或一名工程師需要與生俱來的品質。而我現在則認為,在不同的領域,不同的情形下我們有著不同的心理特征。
創業公司從來不會在單個領域起步,例如,一家搜索引擎起家的公司既包含商業領域(如商業運營、業務管理),又包含軟件開發領域(如開發搜索引擎軟件)。
在這裏我舉兩個創業公司至少在兩個領域起步的例子。想象一下,有兩個合夥人正處在創業階段,兩人都是程序員且都是創造者類型(就是說他們喜歡創造東西出來),但是A比B有著更多的開發經驗和知識,而B有著比A多的商業運營經驗。當涉及到商業領域時,B通常會成為工程師角色,而A則傾向於成為黑客的角色。在創建一家創業公司的結構或框架時,B比A知道更多關於商業運營方麵的陷阱,比如B知道特定的稅必須以特定的方式繳納,但A不知道而且還會提出一些美好但違法的黑客式方法。
然而,當涉及到軟件開發領域時,他們的角色將會發生轉換。例如,A有著足夠充分的理由架設桌麵視頻會議係統來用,而缺乏經驗的程序員可能會將此舉認為是在阻礙他們黑客式的行為。
當涉及到單個程序開發時就更有趣了。一個人可能會以他的知識體係和工程素養創造一段程序出來,或者是提出一個工程化解決方案,然後像黑客那樣探尋這個解決方案的更多發展空間。前者的例子是,李納斯.托瓦茲以黑客方式創造了Linux內核————當Linux被創造時是以MINIX係統的fork程序為基礎的,但同時他也做了很多精細的工程化的工作。後者的例子是理查德.費因曼(Richard Feynman)對於量子電動力學的發現。
角色轉換
當一個黑客和一個工程師在一間屋子裏計劃一起創造一些東西出來時,可能會是誰也不服誰的狀態。盡管如此,我仍然強烈建議在初創公司中既包含有黑客型人才,亦包含有工程師型人才。
依據不同的情形,創造者(黑客或工程師)有著不同的心理特征,這可以被很好的加以利用。在存在黑客和工程師的領域裏,黑客能夠以革新的角度看待舊問題,尋找漏洞並做修補,而工程師能夠為黑客提供紮實的事實基礎。上文中的稅收例子便是說明。
事實上,依據情境變化的角色轉換也可以很好的加以利用。保羅在《黑客與畫家》中談到黑客需要同理心。角色轉換是很好的同理心訓練。雖然角色轉換大多數時候發生在不同領域轉換中(比如,A是商業運營方麵的黑客,軟件開發方麵的工程師;B正好相反),如果初創業者能夠認清他們正在扮演的角色以及需要的角色,這會是很好的鍛煉同理心的機會。
工程師可能會覺得自己多年的經驗會被黑客忽視掉,而黑客會覺得他的能力會被工程師所設定的條條框框所牽絆。當這樣的事情發生時,其實是不錯的機會去感受彼此的角色————試著穿上別人的鞋子走走看,或許能走一英裏亦或兩英裏。
關於這點,我想指出的是,我不相信每個人都有黑客的品質,總會有一些人承受不了一點點的冒險或不服從的後果。在我看來這些人可能適合生活在更大的環境中,但不適合在初創團隊裏,創業團隊需要的是能夠在黑客和工程師角色之間相互轉換的人。
在另一方麵,如果初創團隊負責是是極為重要的軟件(比如可能會引起多人喪命的那種),那麼相比黑客式思考方式,團隊需要的更多是工程師式的想法。當然,這並不妨礙一些娛樂型的黑客用像Python這樣的動態語言做出一些瘋狂的事,像是用Python控製30噸重的設備。
結束語
黑客早已不是什麼新名詞,但黑客這個詞已經存在許久並將存在更久。從伽利略到費因曼再到托瓦茲,總會有一些麻煩製造者伸長了脖子探尋著盒子外的世界,桀驁不馴、尋求革新。
在軟件方麵,我讚同保羅.格雷厄姆的觀點。我們生活在軟件黑客的繁榮時代,但隨著計算機工業的成熟,工程師將會逐漸成為新新人類,他們可能沒有黑客那麼迷人,但他們將會是軟件的根基。
綜上所述,最重要的是繼續努力前行,繼續努力創造新的事物,不管你是一名黑客還是一名工程師,因為是創造者(Maker)在推動這個世界發展。
最後更新:2017-04-03 19:06:48