再讀一次《黑客與畫家》

關於《黑客與畫家》

這兩週從新閱讀了這本經典,很難有這樣的機會認認真真地作一次深度的閱讀,因此把讀書的筆記發到博客上。程序員

這本書的風格很奇怪,由於你很難相信一我的能夠把有些稀鬆日常的事看得如此透徹並且富有深層的意義,那些小事在咱們日常人看來可能不值一提,然而在做者筆下你能夠跟隨他的指引接近一些獨特的視角,把這些隱祕挖掘出來,得出一些使人驚奇的結論。web

第一部分 成長和思想

黑客是如何成長的以及他們看待世界的一些觀點。編程

第一章 爲何書呆子不受歡迎

一個問題是,爲何書呆子不受歡迎呢?一個看似簡單的問題,卻在作着一層層的分析以後讓人看到一個從學生圈子直指教育體系存在的大問題。做者在這一部分大體說明了如下的觀點:安全

  • 學生獨特的圈子邏輯和社會中的成年人而言是一種徹底隔絕開的難以令成年人理解的邏輯。服務器

  • 在學生圈子裏最被看重的東西是得到吸引力,表現的受歡迎能夠贏得更多人的支持並最終在圈子裏成爲winner。網絡

  • 書呆子們每每因爲無暇顧及這些而失去吸引力,在圈子裏漸漸受到孤立,他們的精力會集中在其餘東西上。編程語言

  • 真實的成年人社會與這個學生圈子執行徹底不一樣的邏輯,它沒有古怪的遊戲規則,你的能力和聰明將帶來價值,和是否得到吸引力無關。函數

  • 學生時代由於無暇顧及吸引力的書呆子在這個真實的成年人社會裏如魚得水,用本身的能力創造的價值將令他們得到歡迎。工具

  • 教育制度裏存在的問題是成年人們每每不理解學生圈子和成年人社會的邏輯的自然隔絕而聽任其自流,最終致使學生圈子裏的遊戲越發沒法理解,書呆子們所以而苦惱。性能

  • 解決這個問題的方法也許就是告訴那些所謂的「書呆子」他們興趣所在的重要性,他們所處的圈子並未真實,像大學同樣來培養他們,讓他們明白能力創造價值的存在。

這一章做爲開篇,「黑客」們的學生時代的成長困惑 是一個關乎學習和智力的問題。

第二章 黑客與畫家

做者有着黑客與畫家的雙重身份,外似沒什麼特別關係的兩個領域在做者的重重分析後卻顯現出出奇的類似。在這一部分,做者闡述了不少新奇的觀點:

  • 黑客既不一樣於徹底癡迷於理論研究的計算機科學家,也不一樣於只擅長於完成產品經理構想的軟件工程師,而是一種極富創造力的存在。

  • 黑客的創做過程不該該是循規蹈矩地紙上談兵,更應該是在實踐中激發想法得出完美的結果,這和從完美成果出發得出原創的科學家相比大相徑庭,卻和塗塗改改的畫家相同。

  • 像畫家以畫肖像畫餬口同樣,黑客們在白天使用程序工具來餬口,像畫家在業餘時間創做同樣,黑客們在晚上創造本身完美的做品。

  • 像畫家臨摹名做和改改畫畫來學習繪畫同樣,黑客們經過查看優秀做品的源程序而且在創做過程當中不斷修正本身的代碼來學習提高本身的能力。

  • 像畫家一絲不苟追求本身做品的所有細節同樣,優秀的黑客應該追求本身代碼的完美,針對本身的心理預期去調整本身的創做節奏。

  • 畫家的合做講求每一個人負責繪製一個相對完整的小部分,而黑客們的合做與此相似的,是各自負責編寫一個獨立完整的小模塊。

  • 像畫家的做品和其人流芳百世同樣,黑客們的如今正是畫家們曾經遇到過的,經過充分探索將編程的價值發揮到極致,成爲後輩們敬仰的對象。

第三章 不能說的話

這一部分做者提出了一些關於得到正確思想的方法論,這些方法論對規避道德規範上的被強制輸入有很強的實踐意義。這些方法論歸納起來就是:

  • 咱們須要去判斷所聽到的言論的真僞,那些看起來是真的話是否確實是真的。

  • 關注那些極富爭議性的話,那些被貼着標籤的話真的符合那些標籤嗎?

  • 將當代的觀點和不一樣時期的古代的觀點或者同一時期的不一樣地點作個對比,可能就會發現當代的某些觀點也許並非不可接受。

  • 看看對於不可言說的話的捍衛者的動機,他們究竟在捍衛什麼,捍衛的目的又是爲了什麼。

  • 觀察一種言語禁忌背後的造成機制,負責言語禁忌的團體到底是怎樣的一種力量。

至於說爲何咱們要去尋找這些不能說的話,做者這樣認爲:

  • 訓練咱們思考問題的方法,這種看起來沒有什麼太大意義的思考每每能夠訓練獨特意思惟方式。

  • 發現的不能說的話的態度,應該是在沒有必要所以而爭執的時候就守口如瓶,不然將會陷入沒必要要的麻煩之中。

第四章 良好的壞習慣

這一部分做者向咱們展現了什麼是黑客追求的自由精神,自由查看全部可以認清事物運行原理和機制是黑客們發展新技術的基礎。然而隨着法律和版權保護的起色的出現,這種自由被大大限制,黑客們這種良好的壞習慣難覺得繼,而這種良好的壞習慣每每也就是美國精神的源泉。

第二部分 成果和影響

黑客怎樣作出本身的成果,這些成果又是怎樣對全世界產生了影響。

第五章 另外一條路

這一部分,做者借本身開發viaweb這一互聯網軟件服務的經從來闡述了本身對於新一代的軟件服務的見解,這些見解總結起來以下:

  • 和桌面軟件留給用戶的複雜和麻煩相比,互聯網軟件把這些複雜的管理過程留給了幕後的開發人員,留給用戶的只是方便的操做,這會大大減少用戶的壓力。

  • 對於開發互聯網軟件的開發人員來講,龐大的軟件系統和硬件設施能夠按照他們想要的方式靈活地運行。

  • 快速迭代的互聯網軟件能夠更快發現更早解決各類bug,並且會大大減小bug出現的可能性,和桌面軟件相比在bug的處理方面更具優點。

  • 客戶使用互聯網軟件的過程其實也就是爲這個系統做出測試和找到bug的過程,這個過程還可以大大促進客戶、客服和開發人員之間的合做交流,每每這些爆出的bug也可以及早地解決掉。

  • 全身心投入開發的開發人員們會情不自禁地把本身的想法快速實現,長遠的計劃會在一次次的迭代後成爲功能。

  • 小而美的團隊是互聯網軟件團隊的最佳搭配,快速響應的團隊可以最大限度地減少複雜會議帶來的溝通弊端。

  • 用戶的行爲產生的價值遠遠好過模擬的測試結果,關注用戶的行爲可以產生更符合他們內心預期的產品。

  • 好的互聯網軟件服務的策略應該是訂閱模式而不該該是一次性的受權,這種模式將會帶來一個持續的現金流。

  • 互聯網軟件服務提供公司應該比接受他們服務的公司自己更注重安全和服務的質量,只有這樣才能讓後者可以放心地接受這樣的服務。

  • 圍繞桌面電腦,早起的黑客自此發展起本身的軟件,而如今的黑客則能夠圍繞家家戶戶的我的電腦和網絡搭建起他們的互聯網軟件服務,並且這個過程和操做系統自己無關。

  • 微軟和創業公司,對於前者,互聯網軟件可能會是對它的一個重大挑戰,這將大大地挑戰它的商業模式和技術基礎,而對於後者,這將是一個大大的機會,他們將有機會以更小的力量創造更偉大的產品。

  • 互聯網軟件構建技術自己有着重重的問題,和功能更爲強大的桌面軟件工具相比有很大劣勢,但這偏偏是一個提供給創業公司的一個機遇。

  • 運做一家創業公司沒有黑客們想象的那們困難,保證營收的收支平衡,技術和產品最終帶來的用戶產生的價值將會使產品走向正軌。大公司和創業公司相比,也許會更有資產,可是缺少新技術自己帶給產品的開發效率和靈活過程。

第六章 如何創造財富

做者所說的財富並不簡單的是指金錢,對於一個公司而言,財富是他們所創造的那些可以知足他們的用戶的須要的產品所蘊含的價值,這種價值一旦被創造,傳統意義上的財富就會隨之而來。關於財富的創造,做者提出了這些觀點:

  • 創業公司高速創造財富的背後是全部員工可以高效率辛苦的長期工做,巨大的壓力和高強度的工做使員工可以得到高額的報酬。

  • 財富的總價值並非一成不變的,爲社會創造出的價值將會變成公司的財富來源,公司裏的員工們經過辛苦的工做創造的財富將會爲社會帶來總價值的增長。

  • 工做的本質和目的就是在一個組織中和人合做創造財富的過程,重點在於作出人們須要的東西而非簡單的勞動。

  • 做者說起了兩個很是重要的公司運行過程當中的特徵:可測量性和可放大性:一個小的團體更能對團體中每一個個體的可測量性做出評估,由於每一個人的行爲對整個團隊的影響都會清晰地顯現;可放大性體如今採用高技術方法產生的產品將會帶動整個行業,同時高技術將會拉開與競爭對手的距離。然而創業公司正好符合這兩個特徵,一個小而精 的團隊最終將靈活高效地運做,同時可以經過高技術使得遲緩行動的大公司難以追擊。

  • 創業背後的潛規則就是:真正成功地運做一個創業公司困難重重,可以存活下來的創業公司少之又少,若是想要保險,那麼作法可能就是賣掉它。

  • 用戶的態度和使用習慣事最重要的,解決他們的問題是公司創造財富的最終目的。

  • 高回報的激勵最終會使得創業公司去解決過去看起來困難重重的問題,而技術革新帶來的財富是致富的範例。最終,黑客們經過本身的努力得到了財富的積累,良性的循環將產生更大的財富造福社會。

第七章 關注貧富分化

這一部分做者討論了社會總體出現貧富分化差別的緣由和可能會產生的意義,以及貧富分化將給社會發展注入的動力。下面是這一部分做者的一些觀點:

  • 父輩們理解的財富應該是一成不變的總量不會變化的東西,因此他們會很容易認爲財富分配出現不均,然而事實上財富是不一樣人根據不一樣能力創造出來的,所以它就天生具備不公平性。

  • 偷竊在財富轉移上是個廣義的概念,經過非創造的、不義的形式達到財富轉移的過程都該算是偷竊,然而隨着財富創造的人們的出現,偷竊沒有真正創造財富的過程富有競爭力,因此社會向着正義和有價值的方向發展。

  • 經過技術的進步和掌握技術,創造財富帶來的價值和爲社會帶來的影響更大,同時技術在大多數方面可以使得貧富分化和社會地位看起來變得不那麼嚴重。

  • 貧富分化和收入差別帶來的社會問題並不全都是壞事,由於創造財富的人收穫的巨大收入將吸引他們繼續完成更偉大的創造,同時使得整個社會快速發展。

第八章 防止垃圾郵件的一種方法

這一部分做者提到了本身經過技術思惟解決垃圾郵件的過濾問題。這裏做者提供了幾個頗有意思的辦法,後面的比要比前面的更具技術思惟:

  • 惡意關鍵字過濾器:經過掃描郵件裏出現的是否頻繁一些看起來像是具備垃圾郵件特徵的標記來對郵件做出判斷 。

  • 統計學過濾器:經過大樣原本讓系統學習什麼樣的標誌符意味着着郵件是垃圾郵件的高几率,經過大樣本的分析,系統最終會動態修正以完成判斷。

  • 貝葉斯方法:對郵件進行分析,全部的線索都有對應的得分,分析結束後得到的總分將會說明它是垃圾郵件的肯能性高低。同時,加入郵件頭和主動關鍵字省略,將會使這種方法的可靠性大大增長。

最後,做者提到了垃圾郵件過濾的目的:過濾的最終目的就是讓發送這些郵件的商家意識到效果並很差以最終放棄。

第九章 設計者的品味

這一部分做者談了談一個很學術的問題,好設計是什麼?好設計的特徵是什麼?好的設計是美,是有品味的,公認的好設計應該有這些特徵:

  • 簡單。當設計只直視本質、忽略無關的時候,設計者會加倍認真地進行創做。

  • 永不過期。不管過去、如今仍是將來的人們都認同的設計可以避開風潮、充滿永恆的吸引力。

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

  • 啓發性。使用者能夠在設計的原基礎上充分拓展實現他們本身的想法。

  • 些許趣味。幽默的設計反映了一種特別的力量。

  • 艱苦和看似容易。通過努力艱苦的層層磨可貴到的結論擁有簡潔和看似容易的結果,而這樣的結果每每具備難以被打破的完美。

  • 對稱。這每每意味着結構的簡潔和美妙。

  • 對大天然的模仿。大天然的演化趨向於成就完美的設計,追隨大天然的設計無疑就是找到完美設計的一個途徑。

  • 再設計。在原有很差的設計上從新設計,把這些問題解決使之成爲好設計的一部分。

  • 可以被複制。優秀的部分具備複用的價值。

  • 奇特。奇特每每意味着聰明、思惟和風格。

  • 成批出現。優秀的人們會聚在一塊兒造成好設計的造成中心並造成好設計的新趨勢。

  • 大膽。今天看似大膽甚至錯誤的結論頗有多是明天的新理論。

第三部分 工具和方法

解釋了黑客的工具(編程語言)和工做方法,這是黑客文化的基礎和核心。

第十章 編程語言解析

這一章做者開始介紹黑客們手中的利劍--編程語言。從編程語言從底層到應用分別介紹了它的前世此生。

  • 機器語言和彙編語言更像是直接對機器的操縱,程序員們須要從很機器的層面編寫程序。

  • 高級語言是對機器語言的高度封裝,經過編譯器或者解釋器這一將高級語言翻譯成機器語言的助手,程序員的工做難度大大下降,他們只須要關注功能而非複雜的指令自己。

  • 開放源碼的措施可以讓全部有能力編程的用戶及早發現解決問題,提高軟件的可靠性。

  • 編程語言孰優孰劣的問題自己就像一場戰爭,語言之間巨大的差別註定很難去判斷誰是最好的語言。

  • 底層的語言可以最大限度地直接和機器交流,所以能夠得到最大的效率,同時,封裝後對於程序員友好的高級語言的效率就低得多了。

  • 靜態語言可以有效地解決類型錯誤帶來的bug,讓絕大多數的程序員避免這種問題,而動態語言自由的特性決定了使用者須要更強的掌控能力。

  • 面向對象編程改變了以往過程化語言的程序結構組織,這種風格一方面可使得程序的結構性更易讀,同時也限制了編程的風格。

  • 如今的時代就像是編程語言的文藝復興,大批的編程語言冒了出來,不少語言的內核設計也許並不完善,可是在社區力量的驅動下有足夠有效的第三方庫的支持使得這些語言在解決問題時變的有效。

第十一章 一百年後的編程語言

一個有趣的設想是編程語言進化到一百年後會是什麼樣子?抓到編程語言的發展主幹是預測的基礎。做者看來,具備最乾淨內核的語言最終將有更強的生命力。

  • 將來計算機自己具備的更強大計算能力將爲編程語言帶來更多的機會。

  • 更高的速度帶來的優點頗有可能會被更消耗硬件資源的編程語言所「浪費」,由於語言實現的效率每每是對計算資源的消耗,看似友好的背後每每意味着更多的處理。

  • 設計編程語言應該嘗試對實現少作限制加大靈活性,雖然這樣作可能具備很低的效率,可是對於語言內核簡潔的實現大有好處。

  • 採用多層設計會影響這種語言的性能,可是會很利於修改。應用程序的多層開發也是一種很常見的技巧,會給系統帶來可重用性,對於企業軟件來講,加上面向對象編程,多層設計很是有利於軟件的迭代和持續性。

  • 關於並行計算,做者認爲在大多數領域並不會成爲主流,由於若是過早使用並行計算頗有可能產生過早優化的問題。

  • 新語言將會更多地以開源項目的形式出現,並且做者們可能只是這些語言的使用者而非這些語言的編譯器的做者。

  • 若是想要創造出屬於將來的更好的編程語言,咱們應該摒棄那些舊有語言帶來的定勢,突破這些去創造全新的習慣,在今天就能夠在不考慮編譯器的狀況下創造新的編程語言。

第十二章 拒絕平庸

這一章做者用本身的經歷講述了在技術領域使用不日常的工具和編程語言將帶來什麼樣的意義。做者的創業項目使用了普通開發者並不會常使用的Lisp,這一技術方案最終可以使做者的項目可以快速開發以打倒競爭助手的新功能最終制勝。

  • Blub困境,通常的程序員很容易知足本身長期使用的編程語言,所以會陷入再也不瞭解新技術、新語言的困境。

  • 使用功能強大的語言可以出其不意地削弱競爭對手的優點,由於他們深陷於Blub困境中不思進取。

第十三章 書呆子的復仇

這一部分做者向咱們展現了使用高級並且出色的工具將爲黑客在工程上帶來如何優秀的表現。以Lisp爲例,做者表達了這一先進的語言在當今軟件行業的競爭中制勝的奧祕:

  • 和其餘編程語言以機器發展相關的特性,Lisp是一個數學模型轉變來的語言,優秀的理論特性最終使得Lisp在發展中從理論上的完美變成實踐中的完美。

  • 先進而古怪的Lisp特性是與生俱來的,和其餘語言在發展中才逐漸加入新的特性相比,Lisp誕生之初就具備理論和數學上的完備。

  • Lisp在互聯網應用程序的服務器上的表現更能體現它的優越之處,這就是在苛刻條件下利用高級工具的結果。

  • Lisp可能會帶來不少問題,當Lisp能夠跑在你可以控制的服務器上時協同就不是問題;當函數庫不如構建規模龐大的系統重要時就沒必要去理會現成的函數庫;小而美的團隊能夠解決很大的問題,所以並不須要找到不少精通Lisp的黑客。

  • 隨大流的公司們最終會由於選擇了大流的工具而陷入困境,選擇了更想的工具的他們的競爭對手會用更小的代價得到更好的效果並最終戰勝他們。

  • 遠離所謂的「業界最佳實踐」其實是讓你遠離平庸技術的訣竅,由於頂尖的技術每每就是最小衆的。

第十四章 求之不得的編程語言

這一章做者向咱們描述了成就一門優秀的編程語言的特性,結合這些特性做者向咱們展現了可能會是求之不得的編程語言的存在條件。

  • 成就編程語言流行程度的祕訣包括專業黑客們的見解、達到「臨界數量」的使用人數,把握了最初的高級黑客、塑造了成功的產品,最終將推進這門編程語言的發展。

  • 可以依附在一個優秀的平臺上同時擁有一個好的實現是編程語言取得成功的外部條件。

    • 保持編程語言語法和表達上的簡潔將會使得追求簡潔表達的黑客們喜歡上這門語言。

  • 向黑客們敞開胸懷讓他們可以充分理解和改造的編程語言將使其更便於應用,這個特性將使這門編程語言解決問題的能力充分體現。

  • 具備良好互動性的「一次性」語言容易裝備且同時很易於完成任務,長此以往,大規模的使用將很容易使得這種語言成爲主流。

  • 優秀的語言若是配上衆多通過認真設計的函數庫將給使用者帶來實際使用上的巨大便利。

  • 好的性能分析器將會使得使用者很是容易注意到代碼運行的瓶頸處,甚至和編譯器的做用不相上下,同時使用者創造出的代碼和應用最終將會得到很高的效率。

  • 經受時間考驗的編程語言每每是默默天然成長起來的,新事物得到承認所需的一個長時間段一樣適用於編程語言。

  • 可以讓使用者再設計是好的編程語言變得更好的一個絕佳方法,語言的推進者們若是可以在小而精的範圍內提出再設計的反饋將使得語言良性地發展。

第十五章 設計與研究

這一章做者爲咱們闡釋了軟件設計的細節,某些軟件工程中真正起做用的東西就是軟件設計的技巧。

  • 設計和研究相比,前者求好,後者求新,做者向咱們提出了設計好的編程語言而非研究新的編程語言更爲重要。

  • 軟件設計的起點應該是抓對使用最終產品的人,找準他們須要的而非要求的需求。

  • 編程語言的設計要注重的不只是程序的表達方式,更應該把它當作是可以促進使用者思考過程的媒介,所以恰到好處的設計尤其重要。這裏做者再度提到了動態語言的優勢,加入了「交互式頂層解釋器」的幫助,變量的類型聲明得以解放出來,爲使用者的思考過程帶來更多便利。

  • 貼近用戶就是儘快給用戶一個產品的模型,一個總體的模型創建出來後再添磚加瓦、逐代更替,最終會使一個完整的形象始終呈如今設計者面前,這樣不只可以得到用戶評估的支持,同時也會使得設計者因逐步變化帶來的進步而得到鼓勵。

本文屬於博主在拉勾網二進制club讀書會活動中對這本名做的再讀感悟。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息