閱讀691 返回首頁    go 阿裏雲 go 技術社區[雲棲]


程序員都不讀書,但你應該讀

Jeff-Atwood

問答網站stackoverflow.com的一個主要功能體現就是:軟件開發人員無需再從書本上學習編程,就像Joel所說的

程序員看起來都不再讀書。市場上編程方麵書籍的數量和編程從業人數相比來少的可憐。

2004年在《The Shlemiel Way of Software》一書中Joel也表達了相同的觀點:

大部分的人都不讀點什麼或寫點什麼。大部分的程序員都不讀軟件開發方麵的書籍,他們不去軟件開發方麵的網站,他們不去Slashdot參與討論。

既然現在的程序員都不讀書,他們如何學習編程?他們用最原始的方式:捋起袖子就寫代碼——同時開啟第二個窗口來從互聯網收集經驗和知識。互聯網是一部百科全書。獲取知識信息更快,更高效,從網上獲取編程知識明顯是一種更聰明的方法。Doug McCune在Why I Don’t Read Books這篇文章裏貼切的寫出了他的感受,我相信他描述的這種心情是相當普遍的。

我認為技術圖書出版業應該為此承擔主要責任:

  1. 大部分編程書籍都寫得很爛。寫書出版的門檻,就我個人發現,已經基本上不存在了。圖書出版業雖然很熱鬧,但這並不能說明它能提供比你在廣袤的互聯網上找到的更好的內容。雖然每年都有成百上千的編程圖書上市,但也許可能隻有2、3本是值得你花時間去讀的。
  2. 編程書論斤買,而不是論知識量。我們會有這樣一種感覺,編程書籍的厚度跟它的內容質量似乎成反比。書的部頭越大,裏麵所承載的有用信息越少。那些動輒上千頁的參考書究竟有什麼用?你真的會用它來查找嗎?拿著都費力。
  3. 都是麵向新手的速成編程書籍。我絲毫沒有反對新人進入編程領域的意思。但我從來都是認為“24小時[某種編程語言]速成教程”這類書對我們的這種職業是有害的。這種書都灌輸著一種短視的思想,求快,求最簡單的省事的做事方法,這導致初學者誤入歧途——或就像我喜歡提到的,“PHP”。玩笑!玩笑!
  4. 編程書籍色情化。有些人認為把一大摞厚厚的,看起來很重要的編程書放在案頭——基本上沒看過——會映襯出是一個水平很高的程序員。正如David Poole曾經有一次在郵件中跟我說的,“這種事情我是絕對不會做的”,說的正是這些編程書籍色情化的現象。這也是我經過思考決定拒絕購買Knuth寫的《計算機程序設計藝術》一書的原因。我們應該去買有實踐價值的書,你真正會去讀的書,更重要的,你能拿來實用的書。

作 為一名書作者,我很慚愧。我和別人也合寫了一本編程書,而且我並不認為你應該買它。我不是在說反話。我想說的就是字麵上的意思。但不管怎樣,那並不是一本 很糟糕的書。我對我的書合作者懷有最大的敬意。但你能從網上找到比這本書更豐富的信息。抱著一本死書不放是最不可取、最浪費生命的事。

互聯網無疑正加速編程書籍的死亡,但有一些證據顯示,甚至早在互聯網誕生之前,很少有程序員遍讀大量編程書籍。我很吃驚的在《代碼大全》一書中看到了這樣的段落:

你可以炫耀一下了,因為你在讀這本書。你已經學到了比軟件產業裏大部分人都要多的知識,因為大部分的程序員一年都不會讀一本書(DeMarco and Lister 1999)。每天讀一點,堅持不懈,你就能成為專業高手。如果你能每兩個月讀一本好的編程書,大概一周35頁,你很快就能對業內的知識有堅實的掌握,能很快讓你從周圍所有的人中脫穎而成。

我相信早在《Code Complete》1993年第一版時裏麵就有這樣的原話,但我們無法證實,因為沒有那一版的書。經過這網上的搜索,發現了Steve McConnell在《人件》中引用的段落:

關於讀書情況的統計數字讓人非常的泄氣:比如,大部分的軟件開發人員手頭上都沒有一本關於他們的工作方麵的書籍,更不用說讀過一本。這事實讓人對這個領域裏的工程質量感到擔憂。而對於我們這些寫書的人,那更是悲劇。

我很痛心的讀到reddit上的這些評論,看到人們把stackoverflow.com網站的宗旨使命理解為對編程書籍的否定。懷著一種對當前編程書籍市場複雜的心情,我要說,我喜歡編程書!我這個編程博客就起始於一篇推薦程序員必讀書籍的文章開始的。很多我的文章都是在講述我對於一些經典編程書籍裏的核心思想淺顯的理解。

如何讓這看似矛盾的語句能夠調和,如何能統一這動態的愛與恨?你看到了沒有,處處都有編程書籍,處處都有編程書籍。

優秀的編程書是沒有時間限製的。它們會超越語言的限製,IDE的限製和平台的限製。它們是解釋how,而不是why。如果你五年都不想清掃一下你的書架,那請相信我,你買錯了編程書。

我的編程書櫃是任何東西都換不去的。我無時不刻都在使用它他們。事實上,我寫這篇文章時就翻閱了它們數次。

我的書架

我不想再複述我的這些推薦的讀物,因為這些年我一直在拿它們炫耀。

可我必須要號召的是:我最喜愛的五本最重要的編程書,你們每個正在從事編程工作的程序員都應該有擁有——並且要讀。這些種子讀物,極富實用價值,年複一年,不論我做什麼樣的編程工作,它們從未貶值。它們值得一讀再讀,每次我有了更多年的經驗,回來重新閱讀它們,都會讓我對軟件工程獲得更深更明銳的認識,如果你還沒有擁有這些書,那你在等待什麼?

最後更新:2017-04-03 18:52:02

  上一篇:go 基於lucene搜索引擎的Hibernate Search,官方文檔翻譯
  下一篇:go layout、layout-land和layout-port的區別