《黑客與畫家》總結


總結

這個時代是程序員主導的時代,而偉大的程序員就是黑客。

《黑客與畫家》這本書不僅僅是給程序員看的,而是給所有人看的,能幫助人們了解黑客的定義、黑客的成長、編程的本質、互聯網的規則等等。

書名叫《黑客與畫家》是以畫家為參考,給普通人解釋黑客與藝術相通的地方。

眼下看來藝術家比黑客更酷,但是別忘了,古時候繪畫蓬勃發展的黃金年代,藝術家也不是像現在這樣酷,在當時的貴族看來也是low逼,只是會一門手藝用來謀生的工人而已,很多藝術家都是在死后才聲名遠播。

程序員在現在很多人看來也是low逼,程序員還喜歡自嘲碼農。
互聯網目前處於高速發展的階段,比以前任何一個時代都要迅猛,相信不久后,優秀的源碼和軟件也會被世人認可,讓普通人知道什么是真正的軟件美學。

一、黑客是什么

在媒體和普通人眼里,黑客就是入侵計算機犯罪的人,其實這有誤解,也怪各種科幻片整出一堆結合源碼畫面的炫酷效果。

那黑客是什么呢?黑客一定是最優秀的程序員。最優秀的程序員有什么特點?

  • 好玩
  • 高智商
  • 探索精神
    根據理查德·斯托爾慢的說法,只有其行為同時滿足這三個標准,才能被稱為“黑客”。

黑客為什么叫hacker?
1946年,第一台電子計算機ENIAC在美國誕生,從此世界上一些最聰明、最有創造力的人開始進入了這個行業,在他們身上逐漸形成一種獨特的技術文化。
到了20世紀60年代初,麻省理工有一個學生團體叫“鐵路模型技術俱樂部”,他們把難題的解決方法稱為hack。

hack的字典解釋是砍木頭,解決一個計算機難題就像砍倒一棵大樹,完成這種hack的過程就是hacking,而從事hacking的人就是hacker,也就是黑客(hacker)。

二、普通黑客與優秀黑客

核心就是能否“換位思考”。
這不光是黑客,而是所有技術人員和優秀技術人員的差別。
判斷一個人是不具備“換位思考”的能力的好方法,就是看他怎樣向沒有技術背景的人解釋技術問題。

越能深入淺出講解的越厲害,這也就是老子說的“大道至簡”

三、黑客與藝術的關系

黑客與畫家、音樂家、建築師、作家是一樣的,都是創作者,都想創作出優秀的作品。
本質上都不是在做研究,雖然創作過程中,他們會發現一些新技術。

我們都知道藝術其中的一項就是建築,而編程的很多理念都來自建築。
編程里邊高手都喜歡用設計模式,有23種,其實就是來源於建築學。

設計模式這個術語最初並不是出現在軟件設計中,而是被用於建築領域的設計中。
1977年,美國著名建築大師亞歷山大在《建築模式語言:城鎮、建築、構造》中提出了253種關於對城鎮、鄰里、住宅、花園和房間等進行設計的基本模式。
1979年,亞歷山大又寫了一本《建築的永恆之道》,進一步加強了設計模式的思想。

設計模式這東西其實可以理解成一種套路,以不變應萬變,就是來啥復雜的需求都能用它來套一下,能保證很好的擴展性和可維護性。

在英語中,“建築師”(architect)和“架構師”(architect)是同一個詞,優秀的程序員不僅負責建造,還負責架構 。

與其說優秀的軟件設計師是工程師,不如說是建築師。

黑客與畫家是類似的

  1. 實踐求真知。
    畫家學習的方法是動手去畫,黑客學習編程的方式也一樣。
    大多數黑客不是通過大學課程學會編程的,而從實踐中學習的,光看書是學不會編程的。
  2. 模仿優秀作品。
    畢加索說過:“good artists copy great ones steal”
    幾百年來,臨摹大師的作品一直是傳統美術教育的一部分,因為臨摹迫使你仔細觀察一幅畫是如何完成的。
    對於畫家來說,博物館就是美術技巧的圖書館。同樣,黑客可以通過觀看優秀的源代碼學會編程。(作家、雕塑家也可以模仿別的人作品學習)
  3. 多人協作模塊化
    當多個畫家創作一幅作品時,每個人畫的部分是不一樣的。
    通常來說,大師負責畫主要人物,助手們負責畫次要人物和背景。這也是多人共同開發一個軟件的正確模式。把項目分割成嚴格定義的模塊,每個模塊由一個人明確負責。

四、什么是好的設計

書中羅烈了一堆,其實有的有些刻意了,下面這幾個是個人認為比較吃得開的幾點:

1.簡單

在數學中,簡短的證明往往是更好的證明。特別對於數學公理來說,少即是多。
在編程中,這種說法也適用。對於建築師和設計者,它意味着美依賴於一些精心選擇的結構性元素,而不依賴於表面裝飾品的堆砌。
在繪畫中,也類似,認真觀察的、非常有代表性的靜物作品往往要比表面極盡華美、但是實質上只是無意義重復的“巨作”(比如再現非常復雜的花邊的繪畫作品)更價值。
在寫作上,這種說法意味着只說必須要說的話,並且說得簡短。

2.永不過時

只要沒有錯誤,每一個數學證明都是永不過時的。
所以數學家哈代才會說:“丑陋的數學在世界上無法生存。”
他的意思與飛機設計師凱利·約翰遜的觀點一樣的:如果解決方法,只是還沒有發現而已。

3.具有啟發性

藝術作品有描述性的,也有啟發性的,后者往往比前者更引人入勝。
一千個讀者就有一千個哈姆雷特,每個人看到《蒙娜麗莎》都有自己的理解。

4.看似容易

優秀運動員比賽時,讓人覺得他輕輕松松就獲勝了,優秀設計師也是如此,他們的工作看上去很容易。大多數時候,這是一種錯覺。作家的文章讀起來流暢自如,但是背后其實經過了反復修改

來看下畢加索的公牛圖:

5.對稱性

對稱有兩種:重復性對稱和遞歸性對稱

遞歸性對稱就是子元素的重復

比如

  • 樹葉上葉脈的紋路。

  • 米開朗基羅的《創世紀 》

    搞錯了,再來

  • 巴黎的埃菲爾鐵塔(大塔里有小塔,遞歸效果)

  • 編程中的函數遞歸

在數學和工程學中,遞歸尤其有用,歸納式證明方法既簡潔又美妙。

6.大膽

許多文藝復興時期的藝術作品在當時都被認為極其大逆不道。
其實科學發展也是這樣的,
比如哥白尼挑戰地心說,
又比如愛因斯坦的相對論挑戰了牛頓的萬有引力,直到很多年后才被人接受。

7.成批出現

15世紀住佛羅倫薩的偉大藝術家一堆,有達芬奇、米開朗基羅、波提切利、馬薩喬等等。但同樣是大城市的米蘭,就寥寥無幾。
推動人才成批涌現的最大因素就是,讓有天賦的人聚在一起,共同解決某個難題。互相激勵比天賦更重要。

最后總結下:
黑客與畫家一樣,都是創作者。
畫家用的是畫筆,黑客用的是編程語言,而用什么語言並不重要,重要的是對問題是否有正確的理解,那些脫離代碼以外的東西才是核心。

編程語言是用來幫助思考程序的,而不是用來表達你已經想好的程序。
因為很多要創作的東西都不是一開始能完全想明白的,而是做的過程中逐漸才想清楚的,這與作家、畫家和建築師的做法完全一樣。
我們在寫程序的同時還要思考,編碼的過程中可能會有突然涌現的靈感。

編程語言它應該是一支鉛筆,而不是一支鋼筆。我們需要的是隨意塗抹、擦擦改改。明白這一點對軟件設計有重大影響,它意味着,編程是允許動態擴展的。

以上內容由chenqionghe總結,別忘了點個贊哦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM