讀書 [黑客與畫家]

讀書 [黑客與畫家]

吾輩的博客原文地址 https://blog.rxliuli.com/p/f2...

簡介

黑客新想法的最佳來源,並不是那些名字裏有[計算機]三個字的理論領域,而是來自於其餘創做領域。

這是一篇讀書感悟的文章,來源於最近閱讀的書籍 黑客與畫家前端

摘抄自豆瓣
書籍簡介
    本書是硅谷創業之父 Paul Graham 的文集,主要介紹黑客即優秀程序員的愛好和動機,討論黑客成長、黑客對世界的貢獻以及編程語言和黑客工做方法等全部對計算機時代感興趣的人的一些話題。書中的內容不但有助於瞭解計算機編程的本質、互聯網行業的規則,還會幫助讀者瞭解咱們這個時代,迫使讀者獨立思考。
    本書適合全部程序員和互聯網創業者,也適合一切對計算機行業感興趣的讀者。
做者簡介:
    保羅・格雷厄姆,《黑客與畫家》一書的做者,硅谷創業之父。1964 年,出生於匹茲堡郊區的一箇中產階級家庭。父親是設計核反應堆的物理學家,母親在家照看他和他的妹妹。青少年時代,格雷厄姆就開始編程。可是,他還喜歡許多與計算機無關的東西,這在編程高手之中是不多見的。
    保羅・格雷厄姆在康奈爾大學讀完本科,而後在哈佛大學得到計算機科學博士學位。1995 年,他創辦了 Viaweb,幫助我的用戶在網上開店,這是世界上第一個互聯網應用程序。1998 年夏天,Yahoo! 公司收購了 Viaweb,收購價約爲 5000 萬美圓。
    此後,他架起了我的網站 paulgraham.com,在上面撰寫了許許多多關於軟件和創業的文章,以深入的看法和清晰的表達而著稱,迅速引發了轟動。2005 年,他身體力行,建立了風險投資公司 Y Combinator,將本身的理論轉化爲實踐,目前已經資助了 80 多家創業公司。如今,他是公認的互聯網創業權威。

書籍照片

原由

以前吾輩也曾經堅信電子書籍(Epub/PDF)要比紙質書籍更好,方便攜帶,隨時都能閱讀。直到遇到了一位 dalao 的指點 -- 只要買了書,放在那裏,總有機會去看看的。 以後,吾輩便嘗試買了一些實體書,晚上回來閒暇片刻便會看看。react

書架圖片

最近一週,吾輩便把黑客與畫家看完了。固然,以前已經看過電子版的了。做者真的很厲害,既是第一個互聯網程序的開發者,也是一個畫家,更是一個頂級黑客(非駭客)。而後,他寫完這本書以後,還變成了做者。固然,譯者也一樣是位知名人物 -- 阮一峯webpack

感想

讀這本書的時候,才發現真-大佬的想法真的很厲害,尤爲是關於創造財富那一章,有許多思想值得吾輩深思。
下面摘抄一些內容並談談吾輩的想法git

書呆子不受歡迎的真正緣由,是他們腦子裏都在想着別的事情,他們的注意力都放在讀書或者觀察世界上面,而不是穿衣打扮、開晚會上面。

嗯,吾輩想這大抵是做者的親身體會:做爲一個聰明人卻不受歡迎 #笑 不過就吾輩經歷而言,讀書好的人通常也不會太受排擠,或許這是由於國情不一樣的緣由吧 -- 國內不論如何都把成績做爲第一位,而據做者所說美國的中學生並不會特別對待學習,至少,不會拼命去學,也不會所以自殺。程序員

黑客與畫家的共同之處,在於他們都是創做者。與做曲家、建築師、做家同樣,黑客和畫家都是試圖創做出優秀的做品。他們本質上都不是在作研究,雖然在創做過程當中,他們可能會發現一些新技術(那樣固然更好)。

想一想國內的大環境,吾輩瞬間心酸得落下了眼淚。說是創做者,但實際上,開發者被稱爲碼農不是沒有道理的 -- 只是實現經理所要求的功能,而不是決定功能應該如何設計 -- 這被交給了其餘人!固然,擁有/參與開源項目能夠減小這個問題,由於能夠決定功能如何設計而非實現。但本質上仍是在代碼的圈子裏打轉,並無創造出人們真正須要用到的東西。github

程序寫出來是給人看的,附帶能在機器上運行。

這不是吾輩第一次看見這句話了,但在工做過程當中,吾輩發現實際上這句話並無多少開發者真的在乎過 -- 包括一些 dalao。爲了性能死扣算法,沒錯吾輩就是在吐槽一些公司任何職位都要面試算法,簡直成 leetcode 算法面試公司了。大部分場景實際上並不須要開發者手寫算法進行優化,由於如今的計算機已經足夠快了。手寫算法再加上耦合業務,只會讓代碼變得無比醜陋,難以維護 -- 僅僅是爲了在某個地方稍微快一點。web

在某些地方,自行其道,徹底不替讀者着想,被當作是高水平、高智商的表現,甚至都發展成了一種風尚。

是的,有些人就是爲了炫技而寫出來各類奇葩的代碼,致使其餘人再看代碼時,紛紛驚呼:「這是什麼神仙代碼?!」。在他們看來,寫出來的代碼讓別人看不懂,本身說的話讓別人聽不懂,是一種高水準的表現,甚至於說:「這下降了 SB 來煩個人機率」。甚至於刻意不寫註釋,而後辯解說:「類型系統就是最好的註釋
關於這點,做者也在後面進一步評論了。面試

可是,我不以爲 「換位思考」 與智商之間存在任何聯繫。在數學和天然科學領域,你用學習怎麼向別人表達本身,也能卻得很好的成就。而那些領域的人廣泛很聰明,因此人們很天然地就把 「聰明」 與 「不懂得換位思考」 聯繫了起來。可是,世界上還有許許多多很笨的人,也一樣不懂得 「換位思考」。

最後一句真是說出了大實話 -- 僞-大佬算法

我家附近,一輛汽車的保險槓貼着一張粘紙,上面寫着 「太麻煩,不如死」(death before inconvenience)。大多數人,在大多數時候,老是選擇最省事的作法。若是互聯網軟件可以擊敗桌面軟件,必定是贏在更方便這一優點上。不管從用戶的角度仍是從開發者的角度來看都是如此。

是的,如今瀏覽器已經擊敗了客戶端軟件,甚至在本來必需要使用客戶端的地方使用 Web 技術進行了入侵(ElectronReact Native)。但這並不意味人們知道這件事就會真的對用戶更友好,尤爲是對於免費的開源程序而言。用戶再也不是首位要素,動輒要求使用者去看源碼,吐槽就會被說 「愛用用不用滾,You can you do?」。你敢相信?但這就是國內開源現狀。typescript

開發軟件須要的程序員人數減小,不只意味着省下更多的錢。正如《人月神話》一書中所指出的,向一個項目增長人手,每每會拖慢項目進程。隨着參與人數的增長,人與人之間須要的溝通呈現指數式增加。人數愈來愈多,開會討論各個部分如何協同工做所須要的時間愈來愈長,沒法預見的互相影響越多越大,產生的 bug 也愈來愈多。幸運的是,這個過程的逆向也成立:人數愈來愈少,軟件開發的效率將指數式增加。

因此說這就是小公司能生存下來的緣由麼?#笑 想到以前項目實際上只有 3 我的全職開發就發現,其實也不是那麼奇怪呢

桌面軟甲迫使用戶變成系統管理員,互聯網軟件則是迫使程序員變成系統管理員:用戶的壓力變小了,程序員的壓力變大了。

唉,小公司別說系統管理員了,就連前端,後端,運維,測試都要會一點才行,必須是 多面手/萬金油 才能生存下去。

許多人從小就認定世界上的財富總額是固定不變的,這樣想的人數多的驚人。
小時候我就對這一點深信不疑:若是夫人拿走了全部的錢,那麼其餘人就變得更窮了。許多成年人至今都是相似見解的信徒。每當有人提到 x% 的人口占有了 y% 的財富,他的言下之意每每就包含了這種錯誤的觀點。

嘛,吾輩也曾經是這樣想的人之一(一個普通的不能再普通的人)。但這個觀點在看完本書後刷新了,財富在淨增加 -- 代價是地球自己。

確實有一些 CEO 的收入過高,不合理,可是有沒有 CEO 的收入不足以體現他所創造的財富的呢?喬布斯就是這樣的例子。他拯救了瀕臨崩潰的蘋果公司,扭轉了危機,削減了成本,成功決策了下一代產品。他的收入就低於他的工做所創造的價值。

是的,這點確實很厲害,尤爲是吾輩正在看的 浪潮之巔 一書也談及了他,確實是個 真-大佬

在垃圾郵件業中,若是發送銷售類垃圾郵件受到限制,那麼整個行業將不可避免地受到重創。「行業」這個詞是很準確的,發送垃圾郵件的人其實都是商人,他們這麼作只是由於這招頗有效。雖然垃圾郵件的迴應率低到不能再低了(不超過百萬分之 15,相比之下,傳統的郵寄商品目錄的迴應率是百萬分之 3000),可是發送垃圾郵件的成本實際上爲零,因此它仍是有效的。可是對於收到垃圾郵件的人來講,成本卻很高昂,假定有 100 萬人分別收到一封垃圾郵件,每人花一秒鐘刪除,累計起來就至關於一我的 5 個星期的工做量,而發送人連一分錢也不用付出。
不過,雖然接近於零,發送垃圾郵件仍是有成本的^。因此,只要咱們把垃圾郵件的迴應率降得很低(無論手段是直接過濾,仍是讓垃圾郵件被迫掩蓋它們的銷售意圖),商家就會發現,發送垃圾郵件是一件經濟上不值得的事情。

這讓吾輩想到了如今的廣告過濾行業,嗯,沒錯是行業 -- Adblock Plus 把這事作成了生意。廣告屏蔽插件流行了起來以後,廣告受益者就會煩惱,會提示讓用戶關閉廣告過濾以支持網站,或者,直接關閉頁面拒絕使用 -- 直到關閉了廣告過濾爲止。後來,開始出現了屏蔽那些網頁上檢測廣告的腳本 -- 反屏蔽廣告腳本。這個鬥爭其實能夠一直進行下去,終究是收益與代價的權衡罷了。

好設計是簡單的設計。從數學領域到繪畫領域,你均可以聽到這種說法。在數學中,它表示簡短的證實每每是更好的證實。特別是對於數學公理來講,少便是多。在編程中,這種說法也基本適用。

少便是多,能知足這一點的庫/框架並很少,Lodash 是一個正例,React 某種程度上來講是個反例。無論是程序(三國殺),仍是庫(rx-util),開發者老是喜歡增長功能,逐漸提升複雜度,最後讓人難以接受。這裏吐槽一下國產程序,只會逐漸增長功能,永遠學不會什麼叫減法

高級語言比彙編語言更接近人類語言,而某些高級語言又比其餘語言更進一步。舉例來講,C 語言是一種低層次語言,很接近硬件,幾乎堪稱可移植的彙編語言,而 Lisp 語言的層次則是至關高。

Lisp 以前一直有聽聞過,但吾輩還從未真正使用過。在編程語言領域,吾輩接觸過 Java, JavaScript, Scala, C#,然而他們都不能支持 Lisp 中一些很是高級的功能(宏)。

下面做者列出了 Lisp 的創新功能

  1. 條件結構(即 if-then-else 結構)。如今你們都以爲這是理所固然的,可是 FortranI 就沒有這個結構,它只有基於底層機器指令的 goto 結構。
  2. 函數也是一種數據類型。在 Lisp 語言中,函數與整數或字符串同樣,也屬於數據類型的一種。它有本身的字面表示形式(literal representation),可以存儲在變量中,也能看成參數傳遞。一種數據類型應該有的功能,它都有。
  3. 遞歸。Lisp 是第一種支持遞歸函數的高級語言^。
    ^「Lisp 語言的許多特性(好比,把程序寫成列表形式以及實現某種形式的遞歸)都在 20 世紀 50 年代的 IPL-V 語言中出現過。可是,IPL-V 更像是彙編語言,它的程序中充滿了操做碼/地址對。參見 Alien Newell 等人編著的《IPL-V 語言操做手冊》(Information Processing Language-V Manual),Prentice-Hail,1961 年出版。」
  4. 變量的動態類型。在 Lisp 語言中,全部變量實際上都是指針,所指向的值有類
    型之分,而變量自己沒有。複製變量就至關於複製指針,而不是複製它們指向的數據。
  5. 垃圾回收機制。
  6. 程序由表達式組成。Lisp 程序是一些表達式樹的集合,每一個表達式都返回一個值。這與 Fortran 和大多數後來的語言都大相徑庭,它們的程序由表達式和語句組成。區分表達式和語句在 Fortran I 中是很天然的,由於它不支持語句嵌套。因此,若是你須要用數學式子計算一個值,那就只有用表達式返回這個值,沒有其餘語法結構可用,不然就沒法處理這個值。
    後來,新的編程語言支持塊結構,這種限制固然也就不存在了。可是爲時已晚,表達式和語句的區分已經根深蒂固。它從 Fortran 擴散到 Algol 語言,接着又擴散到它們二者的後繼語言。
  7. 符號類型。符號其實是一種指針,指向存儲在散列表中的字符串。因此,比較
    兩個符號是否相等,只要看它們的指針是否同樣就好了,不用逐個字符地比較。
  8. 代碼使用符號和常量組成的樹形表示法。
  9. 不管何時,整個語言都是可用的。Lisp 並不真正區分讀取期、編譯期和運行期。你能夠在讀取期編譯或運行代碼,也能夠在編譯期讀取或運行代碼,還能夠在運行期讀取或者編譯代碼。

Lisp 確實開創了許多功能,成功引發了吾輩的興趣,之後有機會會去看一下做者寫的 Lisp 的書籍吧

大多數程序員也許沒法分辨語言的好壞。可是,這不表明優秀的編程語言會被埋沒,專家級黑客一眼就能認出它們,而且會拿來使用。雖然他們人數不多,但就是這樣一小羣人寫出了人類全部優秀軟件。他們有着巨大的影響力,他們使用什麼語言,其餘程序員每每就會跟着使用。老實說,不少時候這種影響力更像是一種命令,對於其餘程序員來講,專家級黑客就像本身的老闆或導師,他們說哪一種語言好用,本身就會乖乖地跟進。
編程語言的最高境界一直在發展之中。雖然語言的核心功能就像大海的深處,不多有變化,可是函數庫和開發環境之類的東西就像大海的表面,一直在洶涌澎湃。

是啊,因此如今流行 react,流行 webpack,流行 typescript,甚至曾經有人吐槽 2016 年裏作前端是怎樣一種體驗。各類各樣的框架和庫,說不定過不了一段時間就死掉了(前車可鑑),這些都是浪潮的表面。不過總有人喜歡折騰代碼,而不是完成一個真正能夠給其餘人用的東西。瘋狂造一堆沒人用的輪子,美其名曰不作調參工程師。固然,嘗試實現便於瞭解深層原理,然而若是不加節制什麼東西都以爲本身造纔好就是典型的浪費時間。

先作出原型,再逐步加工作出成品,這種方式有利於鼓舞士氣,由於它使得你隨時均可以看到工做的成效。開發軟件的時候,我有一條規則:任什麼時候候,代碼都必須可以運行。若是你正在寫的代碼一個小時以後就能夠看到運行結果,這比如讓你看到不遠處就是唾手可得的獎勵,你所以會受到激勵和鼓舞。
跟你說實話吧,畫家之間甚至流傳着一句諺語:「畫做永遠沒有完工的一天,你只是再也不畫下去而已。」這種狀況對於第一線的程序員真是再熟悉不過了。

是啊,能看到效果的原型很重要,看不到效果的開發是艱苦而煩躁的。並且出現錯誤了都沒法進行調試,實在是不能更糟糕了。有些開源項目目標很大,花費的時間過長,長期作不出來一個可用版本,長此以往,就半路放棄了。

總結

總而言之,上面是一些看書的想法以及吐槽,這本書籍吾輩強烈推薦 -- 即使不是 IT 行業。

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