計算機相關經典書籍推薦

1.Java程序設計教程實驗手冊(翻譯版)

目前爲止,《Java程序設計教程實驗手冊(翻譯版) 》這本書是我見過的最好的編程書。從第一章到第十章,裏面的所有習題都做一遍。當你做完了這些,你就對編程有了相當的掌握了。

2.代碼大全,CodeComplete

SteveMcConnell的這本書是軟件開發領域裏的《烹飪的樂趣》。如果你對這本書感興趣,說明你熱愛你現在的工作,你對你正在做的事情是認真的,並且你想不斷地提升自己。Steve在這本書裏指出,普通程序員每年所讀的技術書籍不足一本。僅僅只需閱讀這本書,你就有可能超越身邊90%的程序員。這絕對是個好主意!

3.人月神話,TheMythical Man-Month

毫無疑問,這是我們領域裏惟一的一本經典圖書。如果你還沒讀過,你應該覺得丟臉!

4.點石成金:訪客至上的網頁設計祕笈,Don'tMake Me Think

這是我曾讀過的、在“可用性”方面講得最好的一本書。儘管這本書的副標題說的是“Web可用性”,但你不要被它迷惑了。SteveKrug在這本書裏談到了“可用性”所有的重要概念,而且入木三分。這本書讀起來很有樂趣。如果“可用性”方面的書你只打算讀一本,那就選這本吧!

5.快速軟件開發,RapidDevelopment

在我們的領域裏,“惟一不變的就是變化”。這樣的領域是不多的,而我們很不幸就身處其中。因此,我們惟一能做的就是擁抱變化,並且嘗試各種不同的“快速”開發技巧。但不要走極端!我們不能假設:“自1970年以來發生的變化是如此之大,以致於跟我們最新、最熱門的技術比起來,所有的傳統軟件開發經驗都已經過時、毫無用處了。”還是那個說法:計算機已經變了,但人沒有變。在你開始做任何事之前,至少了解一下什麼是行得通的、什麼是行不通的。拿SteveMcConnell的話來說,“在開始刷漆之前要先讀一讀油漆罐上的說明。”這聽起來似乎是理所當然的,但在讀了這本書之後你就會發現,我們領域裏真正那樣做的人簡直就是鳳毛麟角。

6.人件,Peopleware

如果你曾經親眼目睹一支全明星運動隊在一個糟糕教練的帶領下表現平平,你一定會喜歡這本書。不管你有多少“編程高手”,如果他們相互之間沒有溝通,或者互不認同,結果你還是會失敗。這本書還指出,不管開發人員多麼有天賦,如果他們持續不斷地受到各種干擾(哪怕干擾很細微),沒有人能在這種情況下有效地開展工作。說白了,開發人員在人際技能方面並不見長,但具有諷刺意味的是:項目成功與否常常取決於人際的問題。如果你渴望成爲真正的“團隊領導”(而不是徒有虛名),你必須好好地讀一讀這本書。

7.設計心理學,TheDesign of Everyday Things

開發軟件可能給人帶來難以置信的挫折感,因爲過程中有太多的陷阱。我們所做的事中很多都是帶有預防性質的:在一件事情還沒出錯之前,先試想它將會出錯。這能使人心智衰弱,而且最終可能以一些負面的方式讓人“心想事成”。在向不懂技術的人解釋的時候,我有時候會說:這就像製造一塊有1000個零件組成的手錶一樣,在哪怕最輕微的震動之下,任何一個零件都可能隨機出錯。這真是一份“好差事”啊!

8.AboutFace 3:交互設計精髓,AboutFace 3: The Essentials of Interaction Design

在展現風格一致的圖形用戶界面方面,這本書和《GUI設計禁忌》一起被認爲是具有教育性質的規則手冊。但這本書滿滿地記錄了更爲通用的指導原則。在用來做範例的GUI問題中(很多都是古老的Windows95界面),評判一下哪些已經基本被解決了(使用可視化的方式來展示對話框選擇的效果)以及哪些還沒有被解決(白癡的模態對話框讓程序中止運行),這其實挺有趣的!

9.交互設計之路——讓高科技產品迴歸人性,TheInmates Are Running the Asylum: Why High Tech Products Drive UsCrazyand How To Restore The Sanity

AlanCooper就是從這本書開始給大家推介了“人物角色”這個概念:與其把用戶想象成抽象的、難以描述的、琢磨不透的一羣人,還不如用“人物角色”來促使我們談論一些具體的用戶,他們有名字、有個性、有需求、也有目標。我們的用戶想要一個打印預覽的功能嗎?誰知道呢?但如果作爲客戶經理的GerryManheim必須每週打印他的費用報告(這是他工作的一部分),你最好相信打印預覽功能是必需的。其實沒什麼神奇的;像以前一樣,歸根結底你還是要知道你的用戶是誰,以及他們真正想要的是什麼——“人物角色”這個方法用來達到那個目的是再適合不過的了。

10.GUI設計禁忌,GUIBloopers

遙想微軟的Windows95和蘋果的System7流行之時,那時候還真有一些關於GUI(圖形用戶界面)的設計準則。這本書就收錄了這些核心準則,包括菜單上的省略號、對話框上按鈕和文字的對齊方式等等。但有多少用戶能真正理解這些準則呢?這是有爭議的。不過,如果你遵循這些準則,你至少可以期望A程序的用戶界面會跟B程序的表現得很相似。現如今,網絡內容的表現形式魚龍混雜,特別是每天都會有一些Flash設計新手另起爐竈,標新立異地自創一套GUI。因此,溫故一下這門“經典的”關於GUI設計準則的課程還是很有好處的。

11.編程珠璣,ProgrammingPearls

對於是否要推薦這本書,我曾經猶豫過,因爲它包含了一些非常底層的編碼技術。但這本書裏同時也蘊藏了相當多的軟件工藝方面的“珍珠”,這使得它仍然值得所有開發者都去讀一讀。任何包含下面這種圖片的圖書都是很有價值的寶書。它就用來展示TRS-80DECAlpha之間48nn3的算法複雜度差異嗎?兄弟,拜託……沒有比那更好的了!如果你不能幸運地跟一位大師級的程序員並肩而坐,並且在一起工作大約一年的時間,那麼買一本《編程珠璣》就是退而求其次的最佳選擇了。這本書是集體智慧的結晶,凝聚了很多技能嫺熟的程序員的貢獻,並最終彙編成了一個個精粹而容易被人理解的專題欄目。

我不想騙你!其實,這本書的很多章節你都可以忽略。比如說,像第111314章談到的排序、堆或者哈希算法,當今有很多成熟的庫早已實現了這些基本技術,我想不出任何理由你需要去把它們重新實現一遍。但對於每一個枯燥的課本練習,這本書的確給出了一些實用的建議。你儘可以快速翻閱這本書,碰到有代碼的部分就跳過去……聽我的準沒錯!第7章“封底計算”是要點,那也許是我曾見過的在“估算”這個專題上最好的論述。它還用很大的篇幅去解釋了那些瘋狂的面試問題,而一些公司往往熱衷於用那些問題來考驗我們……

如果你還在猶豫,建議你到網上去讀一讀這本書的樣章。最近,我把從“珍珠字符串”那一章學到的東西付諸實踐,我在生成合成數據填入一個空數據庫的時候使用了馬爾科夫鏈——這也證明了在“封底計算”那一章談到的性能估算技術。

12.程序員修煉之道:從小工到專家,ThePragmatic Programmer: From Journeyman to Master

這本書讓我想起了《編程珠璣》裏的很多內容,但它事實上比《編程珠璣》更好,因爲它不再拘泥於代碼。作者擺脫了代碼的束縛,轉而專注於真實世界裏已經被證明切實可行的方法,並把它們統統都收錄進了這本書。嚴格來說,不是所有的事情都跟編程有關係。比如,自問“我爲什麼要做這件事?它究竟值得去做嗎?”並不算是創意性思維,你恰恰應該每天都這麼問問自己,以使你和你的同事始終保持清醒的頭腦。這也正是這本書的可貴之處!

13.Web可用性設計,DesigningWeb Usability

JakobNielsen因爲創辦了關於“可用性”的網站(http://www.nngroup.com)而名噪一時。自從他在1989年出版了第一本書以來,他便開始了可用性專家的職業生涯。這是一本不折不扣的關於Web可用性設計的初級讀本,因此跟AlanCooper專注於GUI的圖書還是有些不一樣的。

14.精通正則表達式,MasteringRegular Expressions

15.軟件開發者路線圖ApprenticeshipPatterns: Guidance for the Aspiring Software Craftsman

現在的互聯發達了,我們真的要放棄人帶人的“落後”文明傳承方式了麼。這本書不但徹底否定了上述命題,還告訴我們如何去尋覓導師,如何嚮導師學習。說真的,我對作者說的每一個字都非常贊同。現在互聯網是發達了,但是那種發自內心的交流慾望是誰也不能授予的。資源再多,不去利用,不會利用,到頭來也是虛無。這又是一本Thoughtworks系的書。爲什麼說又呢?哈,市面上的Thoughtworks的書籍我基本上都看過,質量非常高。

16.深入理解計算機系統(原書第2版),ComputerSystems: A Programmer's Perspective

豆瓣評分9.7

CMU是全美以至全球公認的CS最猛的大學之一,沒辦法,作爲CS的發源地,再加上三位神一樣的人先後在此任教:AlanPerlisCS它祖宗+第一屆Turing獎獲得者)、AllenNewellAI締造者+Turing獎獲得者)和HerbertSimonAI締造者+Turing獎獲得者+Nobel經濟學獎獲得者,當代的Leibniz,偶佩服到死的一個天神下凡級的人物,他的自傳Modelsof mylife偶特意珍藏了兩本),三位巨頭培養出一大攤小神級別的人物,這一大攤小神級的人物又培養出一大坨天才級人物(其中就有跳槽猥瑣男開復哥)。 
     
偶估計那個鋼鐵猥瑣男和銀行經管男在投資時肯定不會想到,這個以他們名字命名的破爛學院在未來會如此NB,尤其還是在CS這個上如此NB。 
     
NB
學校,自然用NB教材,更何況是CS裏非常重要的計算機導論,而CMU的計算機導論教材就是CMU計算機系主任的作品:CSAPP。 

17.C程序設計語言,TheC Programming Language

這是一本programmer寫給programmer看的書。世界真是不公平,與這本書的簡潔和實用相比,我們可以看到多少技術作者。或醉心於細節不能自拔,或缺少實際經驗而只能紙上談兵。他們的一切殫精竭慮和嘔心瀝血,也只能毀人無數而已。

本書的習題集相當強大,令人受益匪淺。

18.Linux內核設計與實現,LinuxKernel Development

LDK很適合在你係統地學習了OS理論之後,直接看代碼詳解又覺得暫且還不夠功力的學習者,它可以帶你由理論學習階段逐漸過渡到實踐階段。對於這樣一部書,要是太厚就有點騙錢的嫌疑,要是太深入又會讓人覺得作者故意顯擺自己的學識。LDK算得上是恰到好處。

19.深入理解Linux內核,Understandingthe Linux Kernel

爲了徹底理解是什麼使得Linux能正常運行以及其爲何能在各種不同的系統中運行良好,你需要深入研究內核最本質的部分。內核處理CPU與外界間的所有交互,並且決定哪些程序將以什麼順序共享處理器時間。它如此有效地管理有限的內存,以至成百上千的進程能高效地共享系統。它熟練地統籌數據傳輸,這樣CPU不用爲等待速度相對較慢的硬盤而消耗比正常耗時更長的時間。

20.LINUX設備驅動程序,LinuxDevice Drivers

內核的這個版本針對常見任務完成了合理化設計及相應的簡化,如即插即用、利用sysfs文件系統和用戶空間交互,以及標準總線上的多設備管理等等。要閱讀並理解本書,您不必首先成爲內核黑客;只要您理解C語言並具有Unix系統調用的一些背景知識即可。

21.算法:C語言實現,Algorithms in C

比起學習算法分析,學習算法實現的相關知識要來得更有用和更實用。 然而,不幸的是,市面上銷售的大部分算法書籍,以及人們推薦得最多的算法書籍,基本都是以算法分析爲主,在這類算法書中,一個個優美的算法被分解成支離破碎的數學研究對象,在這些書裏面,你會看見嚴謹的數學論證,完整的數學分析和(數學家寫算法書賺外快時最喜歡用的難看的)僞代碼,但是卻看不見從低效算法逐步向高效算法推進的求精過程,看不見不同算法/數據結構之間的相似性和差異性,因爲它們都被小心地隔離開來了。 

22.數據結構與算法分析:C語言描述,Data Structure & Algorithm Analysis in C

這種程度的書確實很少能見到了。 它不在簡單的地方無謂的浪費筆墨,恰到好處的把初學者帶入算法和數據結構的世界。 它基本上涉及了數據結構基礎的“方方面面”。很難想象這書的厚度,居然能講這麼多內容(你看看算法導論有多厚就知道我在說什麼了)。 

23.具體數學:計算機科學基礎Concrete Mathematics A Foundation for Computer Science

令人興奮的就是這本書的主要作者正是泰斗Donald.E.Knuth以及他的同事Ronald L.Graham.書稿是他們在1970年的時候在計算機系教授研究生本門課程的基礎上整理出來的教材.內容上是Knuth的鉅著TAOCP第一部的擴展,有些比TAOCP中談及地又深入了許多.重點放在高級計算機程序設計話題以及算法分析上,涉及了計算機科學領域內幾乎所有可能遇到的數學知識.具體數學是離散數學和連續數學的綜合,書中這點做得極爲出色,介紹的內容涉及到書中許多經典問題的解答比目前廣泛流傳的解法更易懂.對於提高大家的計算數學修養有很大幫助.之所以TAOCP有的時候讀者們讀不懂就是因爲計算數學基礎不是十分紮實,但以我個人經驗,若能對本書中內容有一個比較好的理解,會給你閱讀如TAOCP這樣的曠世鉅著帶來很大的方便.

以下非計算機類:

1.商業秀

Scott MaKain就是《商業秀》一書的作者,其實我覺得這本書的英文名字更好、更直接一些:“All Business Is SHOW Business”,即所有的行業都是娛樂業。他認爲所有的行業都應該向娛樂業一樣,最重要的不是銷售產品,而是銷售用戶體驗。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章