計算機相關專業學生必讀書單
如果你是計算機相關專業的學生(包括電腦科學與技術、軟體工程等等),那麼下面十本書應該成為你的案頭書。網路上各種大牛都給出了自己的推薦書單(我會在本文最後列出幾個廣為流傳的書單),而下面這些書之所以入選我的書單(至少滿足下面幾個條件中的一個):1)幾乎被所有(或大部分)這些大牛推薦過;2)曾經拿過各種大獎並經久不衰的熱銷;3)我個人曾很認真的研讀過並且在對比篩選之後仍然覺得是最值得推薦的。
特別說明:這些書基本上屬於“專業通識”的範疇,我們並不就某一專業方向而討論,所以如果你是搞影象處理的那麼下面並沒有這方面的書;這些書的讀者物件並不限定階段,也就是說無論你本科還是研究生,甚至博士還是已經工作的人都可以看也應該去看;此外,它們可以成為你某些課程的教材或參考讀物(例如程式設計方面的),但更多的是作為課外讀物的一種不可錯過的選擇。
1、編碼:隱匿在計算機軟硬體背後的語言
英文名:Code:The Hidden Language of Computer Hardware and Software
[美] Charles Petzold 著
永不褪色的電腦科學經典著作。本書是一本解釋計算機執行原理的神作。全書不見任何晦澀生硬的概念,相反卻是平常生活中用到的燈泡、電池、手電筒等穿梭其中。而流行歌手、歷史人物、影評劇作等內容更是信手捏來且運用地毫無違和感。不經意間,讓你將計算機組成原理、數位電子技術、計算機基礎等內容徹徹底底合成一氣,豁然頓悟。
本書作者Charles Petzold是Windows程式設計界的一位大師,當今世界項級技術作家。1994年5月,Petzold被《視窗雜誌》和Microsoft公司聯合授予Windows Pioneer獎(全世界只有7人獲此殊榮,
本書曾多次再版,豆瓣上有超過1600個點評,總評分為9.2,此外曾經推薦過這本書的名人包括(但不限於):劉未鵬(暗時間作者)、啊哈磊(《啊哈!演算法》作者,http://www.ahalei.com/book-book.html)、洪強寧(豆瓣技術總監)、Joel Spolsky(Stackoverflow聯合創始人)以及知乎大V 輪子哥(vczh)。
2、電腦科學叢書:深入理解計算機系統(原書第2版)
英文名:Computer Systems: A Programmer's Perspective
[美] Randal E. Bryant,David R.O Hallaren 著
卡耐基梅隆大學計算機學院院長、IEEE、ACM和美國工程院院士傾力之作。超過120所美國和世界一流大學計算機專業選用本書為教材。讓你對計算機系統的認識深入無人之境,計算機專業不可不讀的金玉之作。
3、C++程式設計思想 (包含1、2兩卷,現在也有兩卷合訂本)
英文名:Thinking in C++
[美] Bruce Eckel 著
本書第一版曾獲得1996年度,美國圖書震撼大獎(Jolt Award),該獎是對技術書籍內容的頂級認可。我個人認為這本書的最大好處就在於充分體現了“循序漸進”的思想,作者引導讀者學習完全是經過系統的設計與思考的,是逐步引導讀者的一個有效過程,這本書最初主要是從C中的一些內容講起的,對於那些學過C的人來說,進而學習C++,這部作品可謂不二首選。作者Bruce Eckel 同樣是《Thinking In Java》的作者,他的這兩部作品在全世界範圍內都非常暢銷。
4、C++ Primer(中文版 第5版)
[美] Stanley B. Lippman,Josée Lajoie,Barbara E. Moo 著
這是C++領域另外一本重磅的超級暢銷書。風靡全球,經久不衰。眾多資深專家力薦。這本書討論的內容非常廣泛,修訂版還增加了C++中的許多新特性相關內容。我的意見是C++ Primer和Thinking in C++二者可以選擇一本來讀,程式語言的書,同一種語言不必讀多本,畢竟會有很多內容相互重疊。
5、演算法導論(原書第3版)
英文名:Introduction to Algorithms, third edition
[美] Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein 著
號稱是超過50萬人閱讀的演算法聖經(其實內容亦包含資料結構),被國內外1000餘所高校採用的經典教材。四位出自MIT的教授合力編寫。內容涉及相當廣泛。但相對其他演算法或資料結構的書來說,本書更加challenging。需要相當的勇氣與恆心才能啃下。
6、人月神話(40週年中文紀念版)
英文名:The Mythical Man-Month: Essays on Software Enginee
[美] Frederick P. Brooks Jr. 著
不要被名字唬住了,這不是一本科幻著作,而是一部軟體工程經典,由圖靈獎得主Brooks親自操刀的傳奇著作!該書內容源於作者在IBM公司任System計算機系列以及其龐大的軟體系統OS專案經理時的實踐經驗。探索了達成一致性的困難和解決的方法,並探討了軟體工程管理的其他方面。其中,既有很多發人深省的觀點,又有大量軟體工程的實踐,為每個複雜專案的管理者給出了自己的真知灼見。
7、程式碼大全(第2版)
英文名:Code Complete
[美] Steve McConnell 著
不可逾越的軟體開發寶典,軟體開發世界的地圖,經典中的經典。本書作者Steve McConnell是兩屆 Jolt Award震撼大獎得主。除程式碼大全之外,他的另外一部獲得 Jolt Award震撼大獎的作品是《Rapid Development: Taming Wild Software Schedules》。
8、重構——改善既有程式碼的設計
英文名:Refactoring: Improving the Design of Existing Code
[美] Martin Fowler 著
世界知名軟體開發大師Martin Fowler的不朽經典,普通程式設計師進階到程式設計高手必須修煉的祕笈。該書清晰揭示了重構的過程,解釋了重構的原理和實踐方式,並給出了何時以及何地應該開始挖掘程式碼以求改善。書中給出了 70 多個可行的重構,每個重構都介紹了一種經過驗證的程式碼變換手法的動機和技術。其中提出的重構準則將幫助你一次一小步地修改你的程式碼,從而減少了開發過程中的風險。
9、程式設計師修煉之道:從小工到專家
The Pragmatic Programmer: From Journeyman to Master
[美] Andrew Hunt,David Thomas 著
該書由一系列獨立的部分組成,涵蓋的主題從個人責任、職業發展,直到用於使程式碼保持靈活、並且易於改編和複用的各種架構技術,利用許多富有娛樂性的奇聞軼事、有思想性的例子及有趣的類比,全面闡釋了軟體開發的許多不同方面的較佳實踐和重大陷阱。無論你是初學者,是有經驗的程式設計師,還是軟體專案經理,本書都適合你閱讀。
10、編譯原理(第2版)
英文名:Compilers:Principle,Techniques and Tools
[美] Alfred V.Aho,Monica S.Lam,Ravi Sethi 著
號稱龍書,編譯原理領域的扛鼎力作。美國國家工程院院士親自執筆。理解程式的編譯過程相當於是走完你對計算機程式認識的最後一里路。但是,普遍認為編譯原理是計算機本科階段最難的課程!這本龍書自然又號稱天書。我把它放在書單的最後一位,供學有餘力的同學閱讀,如果感覺自己修為還不夠還是建議深入此書,以免走火入魔。
最後附上網上廣為流傳的其他版本的書單(著色的為我上面亦推薦過的),注意某些書單我做過二次篩選,主要出於下面幾個原因的考慮:1)有的人推薦的書單過長,有二三十個,我希望能儘量控制在十本以內;2)因為有些書單比較舊,有些技術已經過時了,或者某些書的方向比較偏,例如《Lua程式設計》。
劉未鵬(暗時間作者)
以下同一條目下用“/”隔開的表示任選,當然也可以都讀。
- 編碼:隱匿在計算機軟硬體背後的語言
- 深入理解計算機系統 / Windows核心程式設計 / 程式設計師的自我修養
- 程式碼大全 / 程式設計師修煉之道
- 程式設計珠璣 / 演算法概論
- C程式設計語言
- C++程式設計語言 / C++程式設計原理與實踐 / Accelerated C++
- 計算機程式的構造與解釋
- 程式碼整潔之道 / 實現模式
- 設計模式
- 重構
雲風(中國遊戲程式設計先行者,前網易遊戲部門資深程式設計師,簡悅創始人)
- C++程式設計思想
- Effective C++
- C陷阱與缺陷
- 程式設計師修煉之道
- 程式碼大全
- UNIX程式設計藝術
- 設計模式
- 程式碼優化:有效使用記憶體
- 深入理解計算機系統
- 深入理解LINUX核心
洪強寧(豆瓣技術總監)
- 程式碼大全
- 人月神話
- 編碼:隱匿在計算機軟硬體背後的語言
- 程式設計師修煉之道
- 設計模式
- 計算機程式的構造與解釋
- 重構
- C程式設計語言
- 演算法導論
張崢(微軟亞洲研究院副院長)
- 演算法概論
- Data Structure and Algorithms
- C程式設計語言
- UNIX作業系統設計
- 編譯原理
- 計算機體系結構:量化研究方法
Jeff Atwood(Stackoverflow聯合創始人)
- 程式碼大全
- 人月神話
- 快速軟體開發
- 程式設計珠璣
- 程式設計師修煉之道
Joel Spolsky(Stackoverflow聯合創始人)
- 人月神話
- 程式碼大全
- 程式設計師修煉之道
- 編碼:隱匿在計算機軟硬體背後的語言
- C程式設計語言
(本文完)