黑客與畫家讀書筆記

weixin_34413065發表於2018-05-24

黑客與畫家 保羅·格雷厄姆
為什麼書呆子不受歡迎

我讀四年級時遇到的Mihalko老師就是一個精力充沛、充滿想象力的老師。他使得那個學年如此令人難忘,以至於三十年後,他的學生依然在談論這段往事。但是,像他這樣的老師只是個別現象,無法改變整個體系。 注: 個人的力量難以改變整體的格局,除非這是上帝派來的天才

如果存在對於真正能力的外部測試,呆在等級關係的底層也不會那麼痛苦。球隊的新人並不會怨恨老隊員的球技,他希望有一天自己也能如此,所以很髙興有機會向老隊員求教。老隊員可能也會因此產生一種傳幫帶的光榮感(noblesse oblige)。最重要的是,老隊員的地位是通過他們本身出色的能力獲得的,而不是通過排擠他人獲得的。 注: 實踐是學習最有效的方法!

許多書呆子可能都與我一樣,直到高中畢業多年後,才去讀中學裡的指定讀物 注: 我也是這樣? 2.黑客與畫家

^「在英語中,“建築師”(architect)和“架構師”(architect)是同一個詞,所以這裡用的是雙關語,意思是優秀程式設計師不僅負責建造,還負責架構。後一句中的“建築學”(architecture)也是這種雙關用法,同時指“架構學”(architecture)。一譯者注」

人工智慧(AI)
唯一有效的外部考核就是時間。經過歲月的洗禮,優美的東西生存發展的機會更大,醜陋的東西往往會被淘汰。不幸的是,這種考核需要的時間可能比一個人的生命還要長。塞繆爾·約翰遜說過,人們對一個作家的評價,需要100年才能達成一致^。你必須先等他的那些有影響力的朋友都死了,然後再等他的追隨者都死了,才能對他有一個公正的評價。 注: 沉澱下來的才是經典!現在讀新聞都需要沉澱了,沉澱下來的新聞才是真新聞~

舉例來說,我在大學受到的教育是,在上機程式設計之前,應該先在紙上把程式搞清楚。可我自己一直不是這樣程式設計的,我喜歡直接坐在計算機前程式設計,而不是在紙上程式設計。更糟的是,我不是耐心地一步步寫出整個程式,確保大體上是正確的,而是一股腦不管對錯,先把程式碼堆上去,再慢慢修改。書上說,除錯(debugging)是最後的步驟,用來糾正打字的錯誤和疏忽。可是我的工作方法看上去卻像程式設計就是在除錯。

如果某一天你想要去賺大錢,那麼記住上面這一點,因為這是創業公司能夠成功的原因之一。大公司為了避免設計上的災難,選擇了減少設計結果的標準差。但是當你排斥差異的時候,你不僅將失敗的可能性排除在外,也將獲得高利潤的可能性排除在外。這對大公司來說不是問題,因為生產特別優秀的產品不是它們的獲勝手段。大公司只要做到不太爛,就能贏。

就算寫一個比微軟的Word更好的文書處理軟體不是難事,但是微軟公司有自己的城堡,它的作業系統是壟斷的,你根本無法對它構成威脅,它甚至都不會注意到你的存在。

大學裡學習程式設計,就像讀書和挑選衣服一樣,你會發現自己髙中時的品味是多麼糟糕。

同樣地,黑客可以通過觀看優秀的程式學會程式設計,不是看它們的執行結果,而是看它們的原始碼。開源運動最鮮為人知的優點之一,就是使得學習程式設計變得更容易了。我學程式設計的時候,不得不主要依靠教材上的範例。那時可以搞到的原始碼,主要來自於Unix,但是就連Unix也不是開源的。大部分閱讀Unix原始碼的人都是通過約翰·萊昂斯^那本書的非法影印本。該書雖然是1977年寫的,但是在1996年之前都不被允許公開出版。 注: 看別人的原始碼,寫自己的程式碼。

合適的工具能夠幫助我們避免這種危險。一種好的程式語言,應該像油畫顏料一樣,能夠使得我們很從容地改變想法。動態型別語言在這一點上就是蠃家,因為你不必提前就設定好各種變數的資料型別。不過我認為,程式語言靈活性的關鍵還不在這裡,而在於這種語言應該非常抽象。最容易修改的語言就是簡短的語言。

這也是多人共同開發一個軟體的正確模式。需要合作,但是不要“合”得過頭。如果一個程式碼塊由三四個人共同開發,就沒有人真正“擁有”這塊程式碼。最終,它就會變得像一個公用雜物間,沒人管理,又髒又亂,到處堆滿了冗餘程式碼。正確的合作方法是將專案分割成嚴格定義的模組,每一個模組由一個人明確負責。模組與模組之間的介面經過精心設計,如果可能的話,最好把文件說明寫得像程式語言規範那樣清晰。 注: 模組化;說明文件清晰;

程式寫出來是給人看的,附帶能在機器上執行。 3.不能說的話

歷史的常態似乎就是,任何一個年代的人們,都會對一些荒謬的東西深信不疑。他們的信念還很堅定,只要有人稍微表示一點懷疑,就會惹來大麻煩。 注: 這就是時代的侷限性! 你是一個隨大流的人嗎

讓我先問你一個問題:大庭廣眾之下,你有沒有什麼觀點不願說出口?如果回答是沒有,那麼你也許應該停下來想一想了。你的每一個觀點都能毫不猶豫地說出口,你自己深深贊同這些觀點,並且你也確信肯定會獲得別人的贊同,這是否太過於巧合了?一種可能是,也許事情並沒有這麼巧合,你的觀點就是從別人那裡聽來的,別人告訴你什麼,你就相信了什麼,你把別人灌輸的觀點當作了自己的觀點。   另一種可能是,你的思想觀點確實是獨立思考得到的,碰巧與社會主流的思想觀點一模一樣。這種情況的可能性似乎不大,因為這意味著,如果別人犯錯了,你也必須碰巧犯一個同樣的錯誤。為了防止他人複製,古代製作地圖的工匠會故意在地圖上畫錯一個小地方。如果你的地圖與他的地圖一樣,就說明不太可能是你自己獨立製作的。 為什麼這樣做

有人可能會問,為什麼要去找出“不能說的話”?為什麼要故意打探那些齷齪的、見不得人的思想觀點?你明知那裡有擋住去路的石頭,為什麼還要把它們翻過來看個究竟呢?   首先,我這樣做與小孩子翻石頭是出於同樣的原因:純粹的好奇心。我對任何被禁止的東西都有特別強烈的好奇心。我要親眼看一下,然後自己做決定。   其次,我這樣做是因為我不喜歡犯錯。如果像其他時代一樣,那些我們自以為正確的事情將來會被證明是荒謬可笑的,我希望自己能夠知道是哪些事情,這樣可以使我不會上當。   再次,我這樣做,是因為這是很好的腦力訓練。想要做出優秀作品,你需要一個什麼問題都能思考的大腦。尤其是那些似乎不應該思考的問題,你的大腦也要養成思考它們的習慣。   優秀作品往往來自於其他人忽視的想法,而最被忽視的想法就是那些被禁止的思想觀點。舉例來說,自然選擇學說(natural selection)是一種偉大的理論。它的觀點非常簡單,你會奇怪為什麼以前沒有人想到。這是因為它與傳統觀點的差異實在太明顯了,可能引發軒然大波,所以其他人不敢去想。達爾文也因此不得不非常小心,他只想當一個生物學家,不想陷入宗教爭論。 注: 優秀的作品往往來自於思考別人不思考的部分!

不管是哪一個原因,看來存在一個很清晰的關聯關係:智力越高的人,越願意去思考那些驚世駭俗的思想觀點。這不僅僅因為聰明人本身很積極地尋找傳統觀念的漏洞,還因為傳統觀念對他們的束縛力很小,很容易擺脫。 注: 質疑,思考那些顯而易見或是理所當然的事情,這是獨特的第一步 守口如瓶

訓練自己去想那些不能想的事情,你獲得的好處會超過所得到的想法本身。 注: 創新的祕訣嗎?

自由思考比暢所欲言更重要。

我就鼓勵自己在心裡默默思考那些最無法無天的想法。你的思想是一個地下組織,絕不要把那裡發生的事情一股腦說給外人聽。

守口如瓶”的真正缺點在於,你從此無法享受討論帶來的好處了。討論一個觀點會產生更多的觀點,不討論就什麼觀點也沒有。所以,如果可能的話,你最好找一些信得過的知己,只與他們暢所欲言、無所不談。這樣不僅可以獲得新觀點,還可以用來選擇朋友。能夠一起談論“異端邪說”並且不會因此氣急敗壞的人,就是你最應該認識的朋友。 注: 這叫同道中人! 笑臉相迎?

一定要你回答“到底是贊成還是反對我們”,你不妨以不變應萬變:“我既不反對也不贊成。”   不過,更好的回答是“我還沒想好”

所有反擊方法之中,最好的一種可能就是幽默。狂熱分子都有一個共同點:缺乏幽默感。 注: 幽默必備~ 永遠質疑

時間就是一種產生距離的簡單方法。實際上,新的流行讓舊的流行更容易被觀察到,因為對比之下,舊的流行會顯得很荒唐。 注: 時間真是一個偉大的東西!

如果你想要清晰地思考,就必須遠離人群。但是走得越遠,你的處境就會越困難,受到的阻力也會越大,因為你沒有迎合社會習俗,而是一步步地與它背道而馳。小時候,每個人都會鼓勵你不斷成長,變成一個心智成熟、不再耍小孩子脾氣的人。但是,很少有人鼓勵你繼續成長,變成一個懷疑和抵制社會錯誤潮流的人。 注: 做一個少數人還是 多數人,自己選擇吧! 使用者的勝利

現在,升級不再對使用者形成大的衝擊。久而久之,軟體變得更強大了。這需要開發者付出一定的努力

所有使用者都使用同樣版本的網際網路軟體,bug一發現就會立刻得到糾正。

網際網路應用程式能夠同時被多人使用,所以非常適合團隊協作性的工作

如果使用網際網路軟體,資料會更安全。即使硬碟損壞的風險依然存在,但是與使用者沒有關係,他們可以從此不關心這件事。 軟體的釋出

網際網路軟體帶來的最大變化之一,就是軟體釋出方式的改變。對於桌面軟體來說,釋出新版本是一個很痛苦的過程,整個公司不得不使盡全力,滿頭大汗地擠出一大塊巨型程式碼。從過程和結果上來看,無異於一次分娩。

如果一年釋出一個新版本,你很可能會以打包方式處理bug,把它們留著,然後一次性全部解決。在釋出新版本前,你可能會修改和更換一半的程式碼,從而又引入無數新的bug

對於網際網路軟體來說,大部分的變化都是細微和漸進的,所以引入bug的機會比較小

桌面軟體導致了bug的宿命論 軟體bug

解決新程式碼的bug要比解決歷史遺留程式碼的bug容易。在自己剛剛寫好的程式碼中,找出bug往往會比較快。有時,你只要看到出錯提示,就知道問題出在哪裡,甚至都不用看原始碼,因為潛意識中你已經在擔心那個地方可能會出錯。如果你要解決的bug出自於6個月前寫好的程式碼(假定你一年釋出一個新版本,那麼6個月就是發現bug的平均時間),那麼就麻煩了,就要大費周章了。那時,你對程式碼也已經不熟悉了,就更可能採用危險的方式解決問題,甚至引入更多的bug^

早一點發現bug就不容易形成複合式bug,也就是互相影響的兩個bug。舉例來說,一個bug是樓梯很滑,另一個bug是扶手鬆了,那麼只有當這兩個bug互相作用時,才會導致你從樓梯上摔下來。在軟體中,複合式bug是最難發現的bug,往往也會導致最大的損失^。傳統的方法是:“把軟體徹底拆開,將所有bug統統清理乾淨。” 注: 今天第一次聽說這種bug,長見識了 全身心投入

^「我們在Viaweb舉辦過一個比賽,看誰能說出我們軟體中最差勁的地方。兩位客服人員並列第一,我至今想起他們的敘述都不寒而慄。比賽一結束,我們立刻修復了那兩個問題。」 注: 不失為一種改善軟體的好方法。 關注使用者

軟體應該做到使用者認為它可以做到的事情。但是,你不知道使用者到底怎麼想,除非你親眼看到他們如何使用你的軟體,相信我,看到和看不到大不相同。網際網路軟體能夠讓你前所未有地瞭解使用者行為。你不必再人為挑選一個小型的使用者樣本,進行重點觀察。每個使用者的每一次點選你都可以看到。所以,你不得不仔細斟酌到底要看哪些行為,因為你不應該侵犯使用者的隱私。但是,即使是最常見的統計專案,也能提供大量資訊。 目標客戶

有一段時間,我們構思了一種新型別的服務,名叫“Viaweb黃金版”。它比我們普通型別的服務貴十倍,但是功能一模一樣,唯一的區別就是有專人穿著西裝面對面把它賣給你。我們從未把這個構思付諸實踐,但是我很肯定,要是真推出的話,一定會有商家購買。

大公司付出的高價之中,很大一部分是商家為了讓大公司買下這個商品而付出的費用 創業公司

帕金森定律(Parkinson's Law)是英國作家諾斯科特·帕金森(Cyril Northcote Parkinson,1909—1993)在1955~1958年的一組系列文章的總稱。在這些文章中,帕金森諷刺了英國的官僚主義,總結了許多常見的官僚主義的表現形式。“帕金森定律”後來成為這些表現形式的代名詞,它包括很多內容,其中有一條就是“因為你必須做到,所以你能夠做到”。因此,本文作者稱“因為你能夠做到,所以你必須做到”是逆向的帕金森定律 注: 好可怕的定律! 為什麼不嘗試一下?

許多農場用電籬笆防止奶牛逃跑,但是不少電籬笆其實並沒有通電。不過奶牛們已經吃過苦頭,顯然學會了不去碰電籬笆,這時不通電也能起到效果。“奶牛們,行動吧!”他寫道,“趁著統治者打鼾時,奪回你們的自由!” 注: 人又何嘗不是這樣! 金錢不等於財富

致富的方法有許多種,本文只談論其中的一種,也就是通過創造有價值的東西在市場上得到回報,從而致富。其他許多種的致富方法包括賭博、投機、婚姻、繼承、偷竊、敲詐、詐騙、壟斷、行賄、遊說、造假、開礦等。獲得最可觀的財富往往會涉及其中的幾種方法。   通過創造有價值的東西而致富,這種方法的優勢不僅僅在於它是合法的(許多其他方法如今都是不合法的),還在於它更簡單。你只需要做出別人需要的東西就可以了。 大餅謬論

小時候我就對這一點深信不疑:如果富人拿走了所有的錢,那麼其他人就變得更窮了。許多成年人至今都是類似看法的信徒。每當有人提到x%的人口占有了y%的財富,他的言下之意往往就包含了這種錯誤的觀點。如果你打算創業,那麼不管你是否意識到了,你都是在著手推翻這種大餅謬論。 手工藝人

^「如果在修理舊車的過程中,你對環境造成了一些微小的破壞,那麼你可能使得每個人都變得更貧窮了一點。但是即使把環境的成本考慮在內,這依然不是一個零和遊戲,依然存在財富的淨增長。我們可以舉出這樣的例子,比如一臺壞機器裡有一個零件鬆了,你把零件擰緊,機器可以重新運作,那麼你就沒對環境造成任何破壞,並且創造了財富。」 工作是什麼

這就是為什麼如此之多的最優秀程式設計師都是自由主義者的原因。我們這個世界,你向下沉淪或者向上奮進都取決於你自己,不能把原因推給外界。許許多多不創造任何財富的人——比如本科生、記者和政客——一聽到最富有的5%人口占有全社會一半以上的財富,往往會認定這是不公平的。一個有經驗的程式設計師很可能也認為這是不公平的。因為最頂尖的5%的程式設計師寫出了全世界99%的優秀軟體。 注: 弱者總是感到不公平! 更努力地工作

^「許多人20歲出頭時惑到非常困惑和壓抑。大學生活很有趣,可是已經過去了,上班的日子為什麼會差別這麼大?不要搞糊塗了,你現在已經從顧客變成了僕人。在這種新生活中獲得樂趣是可能的。不過,你首先需要入門,門口的牌子寫著“閒人勿進”。這種轉變是一種衝擊,如果你不趕快意識到這一點,事情將變得更糟。」 注: 看來工作比上學無趣多了!人生各個階段的難度是遞進的,自己的感覺取決於自己每個階段能力進步的大小。 高科技=可放大性

回顧歷史,大多數因為創造財富而發財的人都是通過開發新技術而實現的。你不可能通過煎雞蛋或剪頭髮而致富,因為使用你的服務的人是有限的

^「VC問我們,如果另一家創業公司開發與我們同樣的軟體,需要多少時間。我們當時的回答就是,可能沒人能做到。我覺得,這樣說使得我們聽上去很幼稚,或者很像騙子。」 潛規則

一種很普遍的情況是,某個創業公司確實在開發一個很好的產品,但是開發時間太長了一點,結果資金都用完了,只好關門散夥。 注: 創業公司人一定要少,要優秀,要快,要好的產品,要難以模仿的產品。

平均數(mean)是算數平均值,會受到個別極端值的影響,中位數(median)是最中間的那個值,不受個別極端值的影響。所以,這句話的意思就是,由於存在個別極其成功的創業者,所以回報的平均值被拉到了30倍,但是大多數創業者其實都以失敗告終,所以中位數是0 注: 好厲害!

創業公司不像能經受打擊的黑熊,也不像有盔甲保護的螃蟹,而是像蚊子一樣,不帶有任何防禦,就是為了達到一個目的而活著。蚊子唯一的防禦就是,作為一個物種,它們的數量極多,但是作為個體,卻極難生存。 注: 形象的比喻! 使用者數量

潛在的買家會盡可能地拖延收購。收購這件事最難的地方就是讓買方真正拿出錢。大多數時候,促成買方掏錢的最好辦法不是讓買家看到有獲利的可能,而是讓他們感到失去機會的恐懼。對於買家來說,最強的收購動機就是看到競爭對手可能收購你。我們發現這會使得CEO們連夜行動。次強的動機則是讓他們擔心如果現在不買你,你的高速成長將使得未來的收購耗資巨大,甚至你本身可能變成一個他們的競爭對手。 技術的槓桿效應

技術的進步使得我在1985年終於可以擁有一臺自己的電腦了。只過了幾個月,我就開始接一些程式設計的零活賺錢了

蘋果公司推出了強大而且便宜的個人電腦,使得一切成為可能,這本身就是在創造財富。程式設計師馬上接了上去,使用蘋果公司的產品,再去創造更多的財富

如果富人不購買普通汽車,而是購買全手工製作、售價高達幾十萬美元一輛的豪華車,對他反而不利。因為對於汽車公司來說,生產那些銷量很大的普通汽車要比生產那些銷量很小的豪華車更有利可圖,所以汽車公司會在普通車輛上投入更大的精力和資金,進行設計和製造。如果你購買專為你一個人定製的汽車,質量反而不可靠,某個部件肯定會出問題。這樣做的唯一意義就是告訴別人你有能力這樣做。 注: 很有意思的理論~

富人與窮人之間生活差異的鴻溝正在縮小,品牌是這種差距的遺留物。

衡量收入變化的另一種方法就是,問如果你乘坐時間機器回到過去,你需要花多少錢購買同樣的東西。舉例來說,假定你回到1970年,你會發現今天價格不到500美元的CPU處理能力在那時至少價值1.5億美元。這種價格的衰變隨著時間流逝很快就會接近於零,因為一百年後,你今天需要的所有東西后人都不會想要。相反,如果你把今天可樂飲料的寶特瓶拿回到1800年,它會被認為是精美的工藝品。 公理的不同意見

現代社會的收入差距擴大是一種健康的訊號。技術使得生產率的差異加速擴大,如果這種擴大沒有反映在收入上面,只有三種可能的解釋:(a)技術革新停頓了;(b)那些創造大部分財富的人停止工作了;(c)創造財富的人沒有獲得報酬。

以上每一種情況,開啟時,財產創造活動就出現了,關閉時,財富創造活動就消失了,這就好像電扇和噪音的那種相伴關係。 8.防止垃圾郵件的一種方法

我發現只要對單個詞語進行貝葉斯判斷,就能很好地過濾大部分垃圾郵件。設定好貝葉斯過濾器(詳見後文),1000封垃圾郵件能夠被過濾掉995封,並且沒有一個誤判。

開發垃圾郵件過濾器時,統計學方法往往不是程式設計師首先想到的方法。大多數黑客的直覺是寫出一個能夠識別垃圾郵件某種特徵的軟體

相關文章