1. 程式人生 > >《黑客與畫家》讀書筆記(二)

《黑客與畫家》讀書筆記(二)

養成 筆記 高中 產生 設計 復制 原因 本質 特點

《黑客與畫家》讀書筆記(二)

軟件的bug

在自己剛剛寫好的代碼中,找出bug往往會比較快。有時,你只要看到出錯提示,就知道問題出在哪裏,甚至都不用看源碼,因為潛意識中你已經在擔心那個地方可能會出錯。如果你要解決的bug出自於6個月前寫好的代碼,那麽就麻煩了,就要大費周章了。那時,你對代碼也已經不熟悉了,就更可能采用危險的方式解決問題,甚至引入更多的bug。

很巧,前幾日我在寫編譯原理的實驗報告,就遇到了類似的問題。代碼我在近一個月前就提交了,但實驗報告卻拖到ddl才開始寫。寫報告的時候早就忘記了自己是如何實現的,而在看實驗要求時又發現了自己漏掉了一些小功能。不管是順著自己的邏輯捋清程序流程,還是在代碼中插入一些功能,都讓我痛苦萬分,寫的東西錯誤百出,有時竟分不清究竟是原來的代碼有問題,還是自己新加的代碼有問題。正如作者所述:

復合式bug有一個子類型:兩個bug是互相彌補的,好比“負負得正”,軟件反而能正常運行。這種bug可能才是最難發現的bug。當你修正了其中的一個bug,另一個bug才會暴露出來。這時對你來說,你會覺得剛才修正錯了,因為那是你最後修改的地方,你就懷疑自己在那裏做錯了,但是你其實是對的。

手工藝人

另一件程序員看來顯而易見的事情就是創造財富的速率存在巨大的差異。

Viaweb的一個程序員有著驚人的生產力,我記得看著他工作了整整一天,拿出來的產品估計使得公司的市場價值增加了幾十萬美元。一個優秀程序員連續工作幾個星期可能可以創造價值100萬美元的財富。同樣的時間內,一個平庸的程序員不僅無法創造財富,甚至還可能減少財富(比如引入了bug)。

這就是為什麽如此之多的最優秀程序員都是自由主義者的原因。

我們這個世界,你向下沈淪或者向上奮進都取決於你自己,不能把原因推給外界。許許多多不創造任何財富的人——比如本科生、記者和政客——一聽到最富有的5%人口占有全社會一半以上的財富,往往會認定這是不公平的。一個有經驗的程序員很可能也認為這是不公平的。因為最頂尖的5%的程序員寫出了全世界99%的優秀軟件。

可測量性和可放大性

你的職位產生的業績,應該是可測量的,否則你做得再多,也不會得到更多的報酬。此外,你還必須有可放大性,也就是說你做出的決定能夠產生巨大的效應。

我認為,任何一個通過自身努力而致富的個人,在他們身上應該都能同時發現可測量性和可放大性。我能想到的例子就有CEO、電影明星、基金經理、專業運動員。有一個辦法可以發現是否存在可放大性,那就是看失敗的可能性。因為收入和風險是對稱的,所以如果有巨大的獲利可能,就必然存在巨大的失敗可能。CEO、電影明星、基金經理、運動員的頭頂都懸著一把寶劍,隨時可能掉下來。一旦他們搞砸了,他們就完了。如果你有一個令你感到安全的工作,你是不會致富的,因為沒有危險,就幾乎等於沒有可放大性。

上樓梯

選擇公司要解決什麽問題應該以問題的難度作為指引,而且此後的各種決策都應該以此為原則。Viaweb的一個經驗法則就是“更上一層樓”。假定你是一個手腳敏捷的小男孩,身後有一條壯碩的大狗正在追你。你跑到樓梯口,這時應該上樓還是下樓?

應該上樓。如果下樓的話,大狗可能跑得跟你一樣快。上樓的話,大狗的龐大身軀就將成為劣勢。不錯,跑上樓你會比較吃力,但是大狗會感到更吃力。

設計者的品味

  • 好設計是簡單的設計。
    當你被迫把東西做得很簡單時,你就被迫直接面對真正的問題。當你不能用表面的裝飾交差時,你就不得不做好真正的本質部分。

  • 好設計是永不過時的設計。
    只要沒有錯誤,每一個數學證明都是永不過時的。所以,數學家哈代才會說:“醜陋的數學在世界上無法生存。”他的意思與飛機設計師凱利·約翰遜的觀點是一樣的:如果解決方法是醜陋的,那就肯定還有更好的解決方法,只是還沒有發現而已。
    如果一件東西長盛不衰,那麽它的吸引力一定來自本身的魅力,而不是來自風潮的影響。

  • 好設計是解決主要問題的設計。

  • 好設計是啟發性的設計。

  • 好設計通常是有點趣味性的設計。

因為幽默一定程度上反映了力量。幽默感是強壯的一種表現,始終擁有幽默感就代表你對厄運一笑了之,而喪失幽默感則表示你被厄運深深傷到。所以,強壯的標誌(或者至少是特點)就是輕松面對自己的人生。充滿自信的人常常像燕子一樣,以一種居高臨下的姿態輕盈地看待周圍的一切,比如希區柯克拍攝的電影、16世紀畫家勃魯蓋爾(Bruegel)的繪畫(甚至莎士比亞也是一個這方面的例子)

  • 好設計是艱苦的設計。

如果觀察那些做出偉大作品的人,你會發現他們的共同點就是工作得非常艱苦。如果你工作得不艱苦,你可能正在浪費時間。

  • 好設計是看似容易的設計。

在大多數領域,看上去容易的事情,背後都需要大量的練習。練習的作用也許是訓練你把刻意為之的事情變成一種自覺的行為。有時,我們的訓練只是為了讓身體養成下意識的反應。優秀鋼琴家彈奏名曲可以不經過大腦直接完成,藝術家也是這樣,熟練以後,腦海中的藝術形象會自動從手上流淌出來,仿佛有人在一旁為他打節奏一樣。

  • 好設計是對稱的設計。

  • 好設計是模仿大自然的設計。

  • 好設計是一種再設計。

  • 好設計是能夠復制的設計。

  • 好設計常常是奇特的設計。

你最後發展出來的風格是自然而然形成的。“奇特”這個特點尤其如此,沒有其他路可走。它就像連接大西洋和太平洋的“西北航道”,無數人希望找到這條捷徑。16世紀的風格主義者、19世紀的浪漫主義者、一代代的美國高中生都在尋找,但就是找不到。唯一達到“奇特”的方法,就是追求做出好作品,完成之後再回過頭看。

  • 好設計是成批出現的。

推動人才成批湧現的最大因素就是,讓有天賦的人聚在一起,共同解決某個難題。互相激勵比天賦更重要,達·芬奇之所以成為達·芬奇,主要原因不僅僅是他的天賦,更重要的是他生活在當時的佛羅倫薩,而不是米蘭。

  • 好設計常常是大膽的設計。

今天的實驗性錯誤就是明天的新理論。如果你想做出偉大的新成果,那就不能對常識與真理不相吻合之處視而不見,反而應該特別註意才對。

《黑客與畫家》讀書筆記(二)