假期讀書|《黑客與畫家》讀後感

在剛過去的五一假期,重溫了一本書,寫了一篇讀後感。

正文開始:

這本書是一個散文集,一共15篇,每篇文章之間沒有關聯,大家可以跳躍着來讀。"黑客與畫家" 是其中一篇,書名也取了這篇文章的名字,大家現在看的這篇文字也是重點在理解 "黑客與畫家" 這篇文章的基礎之上的讀後感。黑客與畫家有什麼聯繫呢,我在《架構修煉之道》一書的最後一章也寫過類似的文章,題目叫做"程序與健身",只要思考,聯想,兩種事物之間是有聯繫的,實際上按照哲學的思維萬物之間皆有聯繫,當然我思考的水平還遠遠沒有達到《黑客與畫家》這本書乃至這篇文章的高度,更不敢妄異曲同工。

黑客的定義

當提到黑客,在一些大衆的眼裏面,黑客就是入侵計算機的人,和計算機犯罪聯繫在了一起。那麼黑客一詞最早的時候是定義爲那些專門解決計算機中出現疑難問題的人,是一流能力的象徵,自由軟件基金會的創始人理查德.斯托爾曼說:"出於興趣而解決某個難題,不管它有沒有用,這就是黑客。" 可見,從精神層面看,黑客追求着一種愉悅或者是享受,是有精神追求的人。黑客在這本書中也傾向於代表着優秀的程序員或者軟件設計師,但是對 "軟件工程師" 這個稱謂,作者是不太贊成的。作者認爲優秀的軟件設計師如其說是工程師,還不如說是建築師,建築師表現在 "做什麼",而工程師表現在 "怎麼做",有意思的一點是,在英語中 "建築師" 和 "架構師" 是同一個詞architect,那麼優秀的程序員不僅負責建造,還負責架構。當然作者也提到,"做什麼" 和 "怎麼做" 不應該分得太開,比如一名軟件架構師或者設計師,決定做一件事,知道做什麼,卻不知道怎麼做,那是一件自找麻煩的事情。

黑客與畫家都是創作者

根據以上敘述,可以看出黑客是跟計算機有關係的了,那麼書中先對 "計算機科學" 描述了一番,書中的觀點將計算機科學分成了"三段",兩端和中間。中間的這部分是由計算機博物學家研究的方向組成,比如網絡數據路由。兩端中的一端是數學家,比如二進制,十六進制換算等等,另外一端則是我們說的黑客,按照書中的描述,黑客們只想寫出有趣的軟件,"對於他們來說,計算機只是一種表達的媒介,就像建築師手裏的混凝土,或者畫家手裏的顏料",此時文章第一次將黑客與畫家聯繫在了一起。爲什麼要把畫家跟黑客放在一起,此時我GET到第一個主要原因之一就是畫家是屬於創作者,黑客也是創作者。除非黑客僅僅是按照產品的需求或者說是產品規格說明書一字不漏的編寫代碼將產品實現出來,那麼此時黑客就不是在從事創作的工作,正如書中所描述的那樣 "那麼他其實與一個挖水溝的工人是一樣的,從這頭挖到那頭,僅此而已"。此時的程序員是被當做技工,職責就是將產品經理的 "構想" 翻譯成了代碼而已,這樣的程序員距離創作者實際相差十萬八千里。

 

黑客與畫家的學習途徑

黑客和畫家都屬於創作者,創作者們學習的途徑是相似的。畫家學習繪畫主要是動手去畫,黑客學習編程也是一樣需要動手去寫代碼。我們常說 "三思而後行" 實際上對於黑客等創作者更應該是 "先行而後思",三分想七分做然後再三分想,充分做到十以上。創作者們的另外一個學習途徑是通過範例,畫家去觀摩別人的畫作,書中提到"對於畫家來說,博物館是美術技巧的圖書館",而黑客的學習範例,就是閱讀別人優秀的源代碼,"開源最鮮爲人知的優點之一,就是使得學習編程變得更容易了"。

 

黑客與畫家的學習方法

創作者們創作的過程也是相似的。一幅畫是逐步完成的,起初只是一張草圖,然後再慢慢的雕琢細節。書中提到,很多的名人古畫如果放在X光下檢查,都能看出修改的痕跡,有的四肢被移動過,有的臉部表情被調整過。也有的時候繪畫,原先的構想就是錯的,這個時候必須接受修改。這點跟黑客編寫代碼也是極其相像,而且繪畫的過程應該值得黑客去學習,因爲我們不能盼望着有一個完美的設計,然後再去動手編程,這樣想是不現實的,實際上經驗也告訴我們這個確實是不現實的。我們在學習軟件的時候很多設計的書籍,比如《架構整潔之道》中都會提醒,不要過早優化。動態的修改,這個特性也驅使黑客們更喜歡動態的編程語言比如ruby ,Python,而不喜歡靜態的編程語言比如c++ ,java等,因爲動態的編程語言不必提前就設置好各種變量的數據類型。注:書的作者更認爲編程語言的靈活性最關鍵的地方應該在於 "語言應該非常抽象,最容易修改的語言就是簡短的語言"。

 

黑客與畫家的細節之美

"堅持一絲不苟,就能取得優秀的成果。因爲那些看不見的細節累加起來,就變得可見了",既然一直拿黑客和畫家做關聯,那就不得不提達芬奇,書中以達芬奇的《女性的肖像》爲例,這幅畫是人物畫,背景是一片樹枝,既然是背景那麼大家都認爲是次要的襯托物,但是達芬奇不這樣想。他把這片作爲背景的樹枝處理的非常細緻。許多觀衆走到這幅畫的前面,當還沒有看到標籤上達芬奇的署名的時候,已經被它深深的吸引住了,甚至大家都沒有意識到這是達芬奇的畫作。當那些看不見的細節疊加在一起,就這樣產生了驚人的效果,"彷彿上千個細微的聲音都以同一個音調在歌唱"。優秀的軟件同樣也要對細節的美有狂熱的追求,當看到有些代碼連格式的縮進都亂七八糟的時候或者看到醜陋的變量名的時候,對於閱讀軟件的人的心裏都會造成不可言述的描繪。繪畫和軟件都是爲用戶服務的,"程序寫出來是給人看的,附帶能在機器上運行。"

黑客與畫家的工作心裏週期

黑客與畫家都屬於創作型工作,都需要熱情或者靈感。專業的說法是工作起來都有心裏週期。想一想,是不是有時候我們會爲了實現一個新的想法,去着迷的連續工作寫代碼好幾個小時。對於此,我想直接引用書中有一段描述是這樣的。"對於編程,實際上意味着你可以把bug留在以後解決。消滅bug對我來說屬於輕鬆的工作,只有在這個時候,編程才變得直接和機械,接近社會大衆想象中的編程的樣子",這纔是真正的黑客啊,反觀我們是在解決bug,而黑客認爲解決bug是機械的工作。繼續書中的描述,"你的程序應該能產生x結果,但是卻產生了y結果。哪裏出錯了?你知道自己最後能解決這個問題,所以做起來就很輕鬆,就好像刷牆一樣,接近於休閒了。",在書的作者來看編程永遠是創作性的工作。

 

黑客與畫家都需要合作

書中介紹歷史上很多偉大的藝術創作都是多人合作一起完成的傑作,當多個畫家共同創作一幅畫的時候,每個人的所畫的步伐都是不一樣的。這裏面有分工,仔細讀來跟軟件工程相似,比如大師負責畫主要人物,助手畫家負責畫次要人物和背景。但也絕對找不到某一個部分是兩個人一起畫的。跟我們一個團隊去編寫軟件系統是不是類似,不過作者強調了一點,"需要合作,但是不要 合 的過頭",書中寫到如果一個代碼有三四個人共同開發,就沒有人真正"擁有"這塊代碼。這種情況一旦發生,就像 "一個公用雜物間,沒人管理,又髒又亂,到處堆滿了冗餘代碼"。因此我們實際軟件系統開發中,每個模塊都有一個人明確負責。

文章首發於個人公衆號“程序架道”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章