到現(xiàn)在已經(jīng)工作兩年了,這兩年讀了很多計算機方面的經(jīng)典書籍,非常受益匪淺;下面向大家推薦下。
計算機入門類:
Behrouz Forouzan的《計算機科學導論》:這是一本計算機的絕佳入門書籍,書中內容包括:“計算機原理”、“計算機組成”、“計算機網(wǎng)絡”、“操作系統(tǒng)”、“數(shù)據(jù)庫”、“算法與數(shù)據(jù)結構”、“軟件工程”、“人工智能”等;不過都沒有深入講解,看完這本書后你會了解到計算機的各個方面,然后就可以去深入學習了。
算法類:
Mark Allen Weiss的《數(shù)據(jù)結構與算法分析 java語言描述版》:這是一本講解算法和數(shù)據(jù)結構的經(jīng)典書籍;雖然它所介紹的絕大部分數(shù)據(jù)結構與算法都能在《算法導論》中找到,并且沒有《算法導論》介紹得那么深入,但是它還是值得每位java程序員買上一本;因為它不僅介紹了算法,還介紹了tiger的新特性,而當你開始研究java API源碼時,你會發(fā)現(xiàn)它和這本書的很多實例都是很接近的;另外,這本書還介紹了一些《算法導論》中沒有提及的數(shù)據(jù)結構和算法,比如跳躍表。
Thomas H.Cormen的《算法導論》:這是一本算法寶典,它幾乎涵蓋了算法和數(shù)據(jù)結構的所有方面,并且深入地去講解和分析,《算法導論》值得每位程序員都買上一本,建議把它擺在電腦桌旁作為參考書。
Jon Bentley的《編程珠璣》:Jon是一位算法大師,被評為影響算法發(fā)展的十位大師之一,大家都知道James Gosling和Joshua Bloch吧,他們都曾是Jon的學生。《編程珠璣》可以說是一套算法的智力題,它總會帶給讀者意外和驚喜,這是本翻開后就會欲罷不能的書;另外它的習題和正文一樣有趣,一定不要錯過。相信我,這本書值得讀上好幾遍。
可能精通算法的你會抱怨說算法類的書籍怎么能沒有Donald E.Knuth的《計算機程序設計藝術》;TAOCP確實是本偉大的書籍,但因為我沒有讀過,所以沒有列出來;不過還是向希望對算法有深入研究的程序員推薦下。
軟件工程類:
Freeman的《Head First設計模式》:這是一本java程序員學習設計模式的絕佳入門書籍,它并沒有涵蓋GoF的《設計模式》中所有的23種設計模式,但是它還是有自己的獨特一面,比如它介紹了幾種在GoF的《設計模式》中沒有提到的模式:簡單工廠和空對象;而且它還會給出一些編程時十分優(yōu)秀的建議。如果在讀GoF的《設計模式》時感覺不好理解,建議先讀讀這本書;它就像一杯下午茶,能讓你愉快地、輕松地進入設計模式的世界。
Martin Fowler的《重構 改善既有代碼的設計》:重構可以說是程序員編程時做得最多的一件事,而這本書則是重構領域的王者之作;或許你會認為自己已經(jīng)對重構十分熟悉了,不再需要任何書籍了;但是這本書還是非常值得讀一讀的,它給出了非常詳細的重構的方法及過程,還介紹了如何去嗅出代碼中的壞味道。
GoF的《設計模式 可復用面向對象軟件的基礎》:設計模式領域的王者之作,這本書詳細地講解了23種經(jīng)典的設計模式及其應用場景;這本書絕對值得讀好幾遍。
Frederick P.Brooks的《人月神話》:這本書在軟件工程領域的影響十分深遠,它的內容來自于Brooks在IBM的OS/360的項目管理經(jīng)驗。Brooks在這本書中提出了兩個十分經(jīng)典的觀點:1)向一個時間上已經(jīng)落后的項目投入更多人力只會使得這個項目更加落后;2)沒有銀彈。其中第二個觀點到現(xiàn)在還被大家熱議。
Tom DeMarco的《人件》:這本書和《人月神話》并稱為軟件圖書“雙子星”;如果說《人月神話》介紹的是如何管理“軟件”,那《人件》介紹的就是如何管理“人”;這本書思想前衛(wèi),觀點深入,舉例詳細,是一本管理者必看的書籍;如果你的團隊很低效,離職率高,創(chuàng)新能力差,那你一定要翻翻這本書,因為你很有可能從中找到解決之道。
Steve McConnell的《代碼大全》:這本書涵蓋了軟件生命周期的每一個階段,它不僅是寫給開發(fā)人員看的,同時還適合需求和測試人員閱讀;《代碼大全》介紹的內容太多太全面了,我就不一一列舉了;這里我簡單提下它在“個人性格”一章中給出的幾點建議:1)做一個謙虛誠實的程序員;2)如果你確信你是對的,那么要敢于和你的上司說不;3)每周堅持讀幾十頁經(jīng)典的書籍或技術文章,一段時間以后你會發(fā)現(xiàn)自己和身邊的人不一樣了(如果他們不這樣做的話)。
j2se類:
Horstmann Gay S.的《Java核心技術》:這是一本絕佳的java入門書籍。有人說《Java編程思想》是java的最佳入門書籍,我可不贊同;個人認為《Java編程思想》更適合那些有編程經(jīng)驗的人來學習java;而對于沒有任何編程經(jīng)驗的人來說,這本通俗易懂的書是最佳選擇。另外這本書有上下兩卷,第一卷介紹基礎知識,第二卷介紹高級特性;我只看了第一卷,不敢對第二卷有任何評價;不過還是推薦大家去讀一讀第二卷;相信它不會讓大家失望的。
Bruce Eckel的《Java編程思想》:這是一本全面、深入地介紹java特性的優(yōu)秀書籍。因為這本書Bruce一度被評為影響java世界的十大人物之一。
Joshua Bloch的《Java解惑》:你可能在工作時掉入了一些java的陷阱,而這本書可以幫你走出來;《Java解惑》非常適合你感覺無所事事時拿出來翻翻,一旦打開它,你會發(fā)現(xiàn)它十分有趣。
Joshua Bloch的《Effective Java中文版》:當你讀完這本書,你就會明白為什么Joshua能帶領java走向輝煌。這本書給出了70多條java編程時的優(yōu)秀建議;每位java程序員都應該買上一本并把它放在電腦桌旁作為參考書。下面這段話來自James Gosing的書評:“我很希望10年前就擁有這本書??赡苡腥苏J為我不需要任何Java方面的書籍,但是我需要這本書”。
Bill Venners的《深入Java虛擬機》:和前面幾本書不一樣,這本書介紹的并不是java特性,而是java實現(xiàn)機制和jvm。你可能知道怎么正確地去使用java,但是卻不清楚為什么這么用,而這本書正能給你答案;強烈推薦大家去細細品味它。
Tim Lindholm的《Java虛擬機規(guī)范(Java SE 7版)》:這是一本介紹虛擬機規(guī)范的書籍,oracle官方發(fā)布的書籍(書籍封面是這么說的);它和《深入Java虛擬機》不同之處在于這本書介紹的內容比《深入Java虛擬機》要新,另外這本書是本介紹純理論的書籍(幾乎沒有示例),所以需要耐心來閱讀(建議先了解下匯編相關知識)。買一本吧(當然是作為參考書啦)。
Charlie Hunt的《Java性能優(yōu)化權威指南》:這是一本介紹Java SE和Java EE性能調優(yōu)的書籍,本書前幾章介紹了JVM的一些特性、優(yōu)化和垃圾回收機制(非常詳細)等,中間幾章介紹Java SE方面的調優(yōu),主要是圍繞Windows、Llinux、和Solaris三種操作系統(tǒng)來介紹的,最后幾章介紹了Java EE方面的調優(yōu),主要介紹了web應用、Web Service、EJB等方面的調優(yōu)。本書被奉為java性能調優(yōu)的圣經(jīng),James Gosling是這么評價這本書的:“本書是Java性能優(yōu)化的圣經(jīng)!如果你是一個細節(jié)控,那么這本書正適合你。”。
j2ee類:
Marty Hall的《Servlet與JSP核心編程》:這本書是學習servlet和jsp的絕佳書籍,它繼承了優(yōu)秀書籍的一貫傳統(tǒng):簡單易懂和全面。這本書分為兩卷,第一卷講的是servlet和jsp的基礎知識,第二卷講的則是實戰(zhàn)方面的知識。雖然這邊書并沒有介紹j2ee的主角EJB,但是它仍是java web開發(fā)的優(yōu)秀參考書。
Rod Johnson的《expert one-on-one J2EE Development without EJB》:這本書客觀地批評了傳統(tǒng)的j2ee架構,更是把矛頭指向了大名鼎鼎的EJB;它指出了EJB的幾大缺點,比如學習周期長、可測試性差、實體bean的性能問題等等;他還介紹了EJB的替換框架:spring。
Ricbard Monson-Haefel的《Enterprise JavaBeans》:這是一本講解EJB的優(yōu)秀書籍,它填補了《Servlet與JSP核心編程》的空白;這本書十分詳細而全面地講解了EJB,是一本十分優(yōu)秀的EJB入門書籍。
Michael Girdley的《J2EE應用與BEA WebLogic Server》:這是一本講解J2EE的絕佳書籍,它涵蓋了j2ee的所有方面,并給出了j2ee各個部分的最佳實踐;推薦每位j2ee的開發(fā)人員都買上一本作為參考書。
Deepak Alur的《J2EE核心模式》:這是一本講解j2ee架構的書籍,它把j2ee模式分為了三類:表現(xiàn)層模式、業(yè)務層模式和集成層模式;并且詳細講解了各種模式的設計技巧。很多公司的核心軟件架構都是按照這本書的介紹來設計的(你以為我會告訴你我現(xiàn)在這家公司的整體架構就是按照這本書的介紹來設計的?)。每位j2ee程序員都應該買上一本作為參考書。
Linux:
Richard Blum的《Linux命令行與Shell腳本編程大全》:這是一本介紹linux和shell的絕佳入門書籍,它由淺入深地講解了Linux和shell編程,非常適合初學者學習;然而書中還有大量的shell腳本示例,非常適合作為demo學習,當然也可以用于日常工作之中。
web前端類:
Andy Budd的《精通CSS 高級Web標準解決方案》:這是本講解css的完美書籍,十分易讀和全面,每位前端開發(fā)人員都應該買上一本作為參考書。
Dave Shea的《CSS禪意花園》:當你讀完這本書,你會發(fā)現(xiàn)css是一門藝術,細細去品味它吧。
Nicholas C.Zakas的《JavaScript高級程序設計》:這是一本講解js的經(jīng)典書籍,你在js編程時遇到的問題幾乎都能在這本書上找到答案。每位js程序員都應該買上一本作為參考書。
Ryan Asleson的《Ajax基礎教程》:雖然這是一本講解ajax的基礎書籍,但不能掩蓋它的經(jīng)典。它的后端實例代碼都是用servlet和jsp實現(xiàn)的,非常適合java程序員閱讀。
我的學習重點是在后端,對前端研究不是很深,有些經(jīng)典的書籍可能沒有接觸過,歡迎大家補充。Viaweb
非技術類:
Paul Graham的《黑客與畫家:硅谷創(chuàng)業(yè)之父paul graham文集》:這并不是一本介紹技術的書籍(除了文末介紹的過濾垃圾郵件的方法),但它的吸引力十分驚人:下載完它的pdf文件后我花了兩個通宵去讀完了它(以至于我都沒有時間去買這本書)。你是否有過創(chuàng)業(yè)的想法?如果有,一定要去閱讀這本書;Paul在這本書中詳解地介紹了Viaweb的創(chuàng)業(yè)過程以及其中遇到的困難,你一定會從中找到共鳴并受益匪淺。
個人認為,讀書是程序員成長的一條捷徑,但請不要變成“書呆子”:不要試圖去記住書中的每一個知識點,而是應該在讀懂一本經(jīng)典的書籍后把它擺在電腦桌旁,有需要時再去查閱它。
有了一定基礎后,推薦大家能多去看看一些開源軟件的源碼,這對自己的技術成長十分有利;然后可以嘗試去為開源社區(qū)做些貢獻:比如修復開源軟件的一些bug或者共享自己的代碼。