哪本書是對程序員最有影響且最應該讀的?

在stackoverflow上看到這個問題,現在已經被關閉,其中有一個贊成排名,取其中一部分貼在下面:

  • Code Complete (2nd edition) by Steve McConnell
  • The Pragmatic Programmer
  • Structure and Interpretation of Computer Programs
  • The C Programming Language by Kernighan and Ritchie
  • Introduction to Algorithms by Cormen, Leiserson, Rivest Stein
  • Design Patterns by the Gang of Four
  • Refactoring: Improving the Design of Existing Code
  • The Mythical Man Month
  • The Art of Computer Programming by Donald Knuth

地址:What is the single most influential book every programmer should read?

請教各位知乎的神們對這個問題的看法?或者對你讀過的感覺重要的書給出解讀或者推薦的理由?謝謝。。

8.5補充:

感謝各位,誠然頸椎康復指南、戀愛寶典這些對程序員相當重要。。。

我想各位講一下像SICP、TACP、演算法導論等等這種特別偏向理論,實際操作不強的神書,像我這種資質平平的程序員有必要去讀嗎?要知道據說裡面『顯而易見』四個字往往要研究個把月。


Computer Systems A Programmer"s perspective

一般譯作:深入理解計算機系統

我覺得 程序員所需要了解的計算機 更加合理。


CLRS


難道真的不是

RP導論 - NOCOW

中國出身OI/ACM的碼農們你們別告訴我你們當年沒有讀過


Joel on Software


「SICP」,改變我對於編程以及世界觀的書籍。

作為一個程序員,從各種途徑中都能夠聽到「SICP」是你進階不可不讀的一本書籍。

在看了 http://amazon.com 上面 PG 對於「SICP」的評論之後,覺得自己有必要去學學這本奇書的皮毛。

目前只看完了一章,做完了第一章的題目。所以就只能拿第一章的內容來說事。

改變我編程的部分:

  1. 過程可以作為第一級的元素使用。簡單地說第一級的元素能夠:一,用作變數名;二,可以提供給工程作為參數;三,可以由過程作為結果返回;四,可以包含在數據結構中。後面的三個特性能夠讓程序員在寫程序的時候,構建出表達能力強大,而且語法簡潔的過程;
  2. 逐步地構建程序。在以前只見過命令式編程的時候,覺得寫程序就是應該像流水一樣,自然而然地通過每一個順推的步驟寫。這種情況下面,往往導致自己寫出來的程序都是以坨為計量單位的。當自己看到書上類似「使用牛頓法求平方根」這種問題,通過小的過程模塊化,最後使用超級簡潔的方法呈現出來的時候,就覺得能夠這樣編程絕對是種享受。另:我覺得這部分的內容可能和「重構」那本書上講的各種重構方法是有異曲同工之妙的,只不過「重構」闡釋的方法,是從爛代碼中提取出模塊化的代碼,而「SICP」上來就告訴你,好的代碼,應該就是這麼寫的吧。

改變我世界觀的部分:

第一章開篇的序言

心智的活動,除了儘力產生各種簡單的認識之外,主要表現在如下三個方面:1)將若干簡單認識組合為一個複合認識,由此產生出各種複雜的認識。2)將兩個認識放在一起對照,不管他們如何簡單或者複雜,在這樣做時並不將它們合而為一。由此得到有關它們的相互關係的認識。3)將有關認識與那些在實際中和它們同在的所有其他認識隔離開,這就是抽象,所有具有普遍性的認識都是這樣得到的。 —- John Locke, An Essay Concerning Human Understanding

簡單來說,知識的獲得可以通過:組合,對比,抽象來獲得。這三個方法,我表示夠我一生都受益了。

我看書不多,這本書的內容到現在看的不多,但是能夠給我帶來很深感觸,讓我心甘情願花大力氣閱讀,去弄情況上面的知識,去用心做練習的,「SICP」是第一本。

願自己能夠堅持地把這本書認真地學完。

附註:個人看過覺得比較好的計算機書籍。

  1. 「Apprenticeship Patterns」。一本關於程序員職業生涯規劃的5星讀物。如果您想不斷地磨練自己的編程技術,如果您對於自己的程序員職業生涯感到迷茫,如果您是一個對於自己有要求的人,真心地建議您去看完這本書。註:書中前面幾章的理念,不光適合程序員,還適合各種和技術相關的職業。
  2. 重構。對於大部分的程序員來說,知道怎麼重構,絕對會讓你的代碼質量上一層樓。
  3. 程序員的思維修鍊。個人覺得,根本不是針對程序員的,就是針對思維修鍊的。雖然並沒有成一個體系,實用有效。
  4. 「Algorithms by Sedgewick」. 基礎的演算法入門書,有完整的 Java 代碼,在 Coursera 上長期開課,作者和授課人都是 Sedgewick,高德納的入門弟子。對於那些一開始啃不下 CLRS 或者別的演算法書的人,這本書是一本很好的入門。
  5. 「黑客與畫家」。如果你是個程序員,你應該讀它;如果你不是一個程序員,你可以讀它來讀懂程序員。

附註2:個人認為一些好的書籍。這裡就不詳細寫原因了,因為自己還沒有讀過,但是在自己的書單當中,以後一定會讀的。

  1. 「Concrete Mathematics」。其實這本書我也讀了一章,因為各種原因,暫時擱置的。第一章,關於遞歸的描述以及書中的解題思路,簡直太美了
  2. 「Concepts, Techniques, Models of Computer Programming」
  3. 「CLRS」
  4. 「Essential of Programming Language」
  5. 「The Art of Unix Programming」
  6. 「How to Solve It」。註:這不是一本計算機書籍,但還是推薦了
  7. 「Agile Software Development. Principles, Patterns and Practices」
  8. 「GEB」,奇書

還有很多好書是自己想看的,哎,能努力多看幾本算是幾本吧。

讀書少,見識短,可恥地匿了。


  • New Programmer"s Survival Manual: Navigate Your Workplace, Cube Farm, or Startup / 程序員修鍊之道:專業程序員必知的33個技巧

  • The Passionate Programmer: Creating a Remarkable Career in Software Development

  • Soft Skills:The Software Developer"s Life Manual

  • Pragmatic Thinking and Learning: Refactor Your Wetware / 程序員思維修鍊

  • Joel on Software / 軟體隨想錄

  • Coders at Work: Reflections on the Craft of Programming / 編程人生15位軟體先驅訪談錄

  • Practices of an Agile Developer: Working in the Real World / 圖靈程序設計叢書:高效程序員的45個習慣:敏捷開發修鍊之道

  • The Effective Engineer

  • Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman

  • The Healthy Programmer: Get Fit, Feel Better, and Keep Coding

  • Team Geek: A Software Developer"s Guide to Programming Well with Others

  • ReWork / 重來:更為簡單有效的商業思維

  • Becoming Technical Leader

  • Peopleware: Productive Projects and Teams / 人件

  • The Art of Agile Development

  • Elements of Programming Interviews: The Insiders" Guide


鑒於和題主一樣是即將入學的研究生,分享一下我自己的入學書單:

1. 心理準備類:無論是Ph.D.研究生還是Master研究生,無疑都是和本科的學習完全不同,個人認為提前了解即將面對的學習和科研的生活是十分必要的。

The Ph.D Grind

這篇長文的作者Philip J. Guo從Stanford的computer science繫念完Ph.D.以後寫的,按照他博士研究生的時間順序敘述他的痛苦和收穫,看完以後不得不對他心生敬仰,作為一個剛剛踏足科研的菜鳥來講,從一開始的心理狀態就是完全不同的,於是深刻反省自己是多麼被動,自主學習的動力也嗖嗖的提升,好像有了一個很真實的彷彿就在自己身邊的時刻提醒自己前進的榜樣的感覺。

2. 數學類:數學的重要性不用多說

Numerical Recepes in C++ The Art of Scientific Computing

C++數值演算法(中文版) 電子工業大學出版社

這本書有很多版本,C/C++都有,很系統很全面,如果看起來感覺有一些難度可以先選擇一本國內的數值計算相關的教材學習一下,我看的是清華大學出版社的數值計算方法(第二版),然後再讀這本,收穫很大。

3. 語言類:對程序員來說編程語言就像是真正的自然語言一樣流淌在血液中一樣,每種語言都有很多經典的著作可以學習,這裡我推薦的是C++相關的經典。

1)Accelerated C++

這本書寫的很實在,用例也很經典,沒有花里胡哨的語言也不說廢話,從標準庫開始寫程序,逐漸深入,一一講解相關的基礎概念,很適合編程生手練習。

2)C++ Primer

紅寶書,從入門到精通,十分全面!

3)The C++ Programming Language

Bjarne Stroustrup,C++之父,他是最了解C++的人,我認為這本書是讓人了解C++本質的最好的著作,但前提是你必須已經和C++很熟悉了。

4. 演算法類:至於題主說的

像SICP、TACP、演算法導論等等這種特別偏向理論,實際操作不強的神書,像我這種資質平平的程序員有必要去讀嗎?

有必要讀,只有讀了以後,你才知道它在實際操作中是多麼重要。所以不用多說,這些自動列入書單。

既然已經要念研究生,很多本科的基礎課程就不用再多提了,這些也很重要,都是應該讀的。

比如:數據結構、操作系統、編譯原理、離散數學等等等。


只選一本的話:Code Complete


  • The Art of Computer Programming by Donald Knuth
  • 這書真看不懂。。。我不會推薦我自己看。。。


我是做工程的,說本接地氣的《代碼整潔之道》,工作之初看的,感覺重新確立了「代碼觀」。

另外 對什麼頸椎,戀愛之類回答點反對+沒有幫助,凈化空氣。


作為一個半途從自動化轉到CS的人, 我推薦一些書吧(雖然很多沒看完):

剛開始接觸的是一些演算法書籍:

1.CLRS 大家都推薦的, 我個人覺得這本書從頭到尾讀一遍是很有必要的, 但是因為裡面牽扯到的證明太多, 而且書也太厚, 可以選擇性的讀幾章重要的, 以後有時間再來細讀也不錯(反正我是只看了一部分)

2.演算法競賽入門經典 + 演算法藝術與信息學競賽 搞過ACM的都知道這兩本書, 我覺得不管搞不搞競賽, 這兩本都很有價值。 第一本內容淺顯一點, 第二本就是需要你有很強的能力才能看懂(我是很多沒看懂的那種, 而且沒看完)

後來轉工程, 大概接觸了這麼一些書:

1.C#方面:

(1)C# 入門經典, 這本書對於剛剛接觸C#的人算是一本不錯的入門書籍,裡面從C#基本語法, 到一些類似委託, 事件這樣稍微高級的東西, 再到對windows桌面APP, web編程等介紹, 讓你對C#能做的事情能有大概的了解

(2)C#捷徑教程, 這本書其實是我看的第一本C#書籍, 但是書的內容要比入門經典難不少, 導致我沒有全部理解, 而且沒有完整看完。 不過說實話, 這本書很細, 討論的知識點也很全面, 如果要深究可以去看。

(3)我沒看過的:C#本質論, 之前有人推薦過, 我沒有看過。

.NET設計規範:NET約定、慣用法與模式, 了解C#最重要的就是了解.NET, 所以我不是一個好的C#開發人員。。

2.WEB方面:

(1)html + css: 我基本上都是看的w3school 在線教程學的,

(2)javascript:JavaScript基礎教程第8版

(3)http:我是胡亂搞的,但是推薦:http權威指南

(4)鋒利的jquery

(5)還有一本:高性能網站建站指南

3.計算機基礎方面:

這些書才是真正的經典:

(1)TAOCP(計算機程序設計藝術) 這本書我想能讀懂的人沒幾個吧, 對數學要求太高了, 作者本身是一位炒雞神牛, 專門搞一些常人難以理解使用的東西(TeX等), 不過你要是覺得自己數學夠強那就去看吧

(2)CSAPP,譯名為深入理解計算機系統, 這本書也非常經典, 而且難度也沒那麼可怕, 完全可以通過它了解計算機內部硬體與軟體的運行過程

(3)SICP(計算機程序構造與解釋) 這是一本奇書, 難度也是相當變態。不過在豆瓣看到的評價特別高, 通過這本書你可以學到如何真正的設計代碼, 而不是寫一坨沒有價值的東西

(4)編程珠璣

(5)人月神話 這本書作為軟體工程的巨著, 每個做軟體工程的人都應該仔細研讀

(6)編譯原理 簡稱龍書 同樣難以理解, 但是也非常重要

(7)黑客與畫家 這本書是矽谷創業之父的著作, 他從一個黑客的角度來闡述作為一個優秀的程序員應該如何去設計,如何創業,如何看待這個世界, 以及如何看待編程語言

4.一些雜書:

(1)大話設計模式 相對設計模式這本經典的書來說, 這本書更加適合入門。

(2)python基礎編程第二版

(3)Linux程序設計第四版

(4)浪潮之巔

......

有不妥之處, 請包涵。

感覺很多書都沒看完啊。。T_T, 加油去了, 各位加油!


The Healthy Programmer

講程序員如何養生...

The Healthy Programmer: Get Fit, Feel Better, and Keep Coding/Joe Kutner-圖書

之前看到微博上說, 這本書的中文版應該快出了.


頸椎康復指南,不謝。


Introduction to Algorithms by Cormen, Leiserson, Rivest Stein

Design Patterns by the Gang of Four

CODE by Charles Petzold


代碼大全 第2版。



《Java 與模式》


上面的書都挺好,不過個人認為漏了一本: &<&<程序設計實踐&>&>,這本書在教導我寫好代碼的方面起了很大幫助.


頸椎康復指南


都研究生了。。。CLRS這種論文集你想不看都不行了


推薦閱讀:

有哪些書的內容和標題都很奇怪的書值得推薦?
如果給致力於成為樂評人的年輕人推薦書目,你會推薦什麼?
《人性的弱點》這本書有沒有傳說中的那麼好?
推薦、點評一些你所使用的思維導圖軟體和有關思維導圖的好書?
機器學習,數據挖掘的書有哪些?

TAG:書籍推薦 | 閱讀 | 程序員 | 書籍 | 編程 |