這篇文章羅列出我今年讀過的書。所有評(píng)論均代表個(gè)人觀點(diǎn),我的目標(biāo)是——好書推薦,爛書預(yù)警。
我一直覺得所有的程序員至少要研究三個(gè)東西?一個(gè)操作系統(tǒng);一個(gè)數(shù)據(jù)庫;一個(gè)服務(wù)器(Web服務(wù)器、Nosql服務(wù)器)。
Linux &Unix

我喜歡閱讀操作系統(tǒng)方面的書,但是這方面的書一直一來被Linux Kernel的書統(tǒng)治?!渡钊肜斫釻nix系統(tǒng)內(nèi)核》這本書有些年頭了,但是內(nèi)容卻不陳舊。我在閱讀的時(shí)候結(jié)合了《4.4BSD操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》而且特意去復(fù)活了一份FreeBSD3。非常值得一提的是它還介紹了Mach(Mac OS的內(nèi)核)。一個(gè)完整的操作系統(tǒng)kernel是由進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)(VFS)、設(shè)備管理和網(wǎng)絡(luò)棧組成。也有人把文件系統(tǒng)和設(shè)備管理合并稱為——Linux I/O子系統(tǒng)?!禠inux內(nèi)核探秘》就是專門講解I/O子系統(tǒng)的,是一本這些年難得一見的“理論結(jié)合實(shí)踐”的好書(更值得一提的是“國產(chǎn)”)?!禠inux性能優(yōu)化大師》這本書的封面非常非常酷炫(裝B黑),可惜內(nèi)容一般。尤其是第二章、第三章是赤裸裸的“騙稿費(fèi)”。如果你沒有時(shí)間,只看第一章、第五章好了;如果你很窮,我推薦你看免費(fèi)的《Linux性能調(diào)優(yōu)指南》(IBM那本redbook的中文版)。《Unix內(nèi)核源碼剖析》沒有想象中的那么好,再怎么說讓一個(gè)“現(xiàn)代人”去復(fù)活“PDP”這種只聽說過沒見過的,還要學(xué)習(xí)它的指令集簡直令人發(fā)指(在Intel CPU統(tǒng)治的時(shí)代學(xué)習(xí)PDP有意義嗎?)。書里面分析的是Unix v6,如果你去查Unix族譜會(huì)發(fā)現(xiàn)它是BSD的爹,簡直是上古神器(好像只剩下進(jìn)程管理的一小部分、文件系統(tǒng)和設(shè)備管理的一小部分有意義了)。Unix的書一直很少,《4.4BSD操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》和《深入理解Unix系統(tǒng)內(nèi)核》。遺憾的是這兩本都沒有結(jié)合代碼講解,“不解渴”。
數(shù)據(jù)庫

《Mysql技術(shù)內(nèi)幕》我是看到“技術(shù)內(nèi)幕”才看的,沒想到它只是一本“Mysql標(biāo)準(zhǔn)教材”(但是作為一本教材它的個(gè)頭也太大了吧)。《MySQL管理之道》是一本MysqlDBA的工作手冊(cè),對(duì)Mysql的優(yōu)化和“潛規(guī)則”講解的非常到位。《Oracle編程藝術(shù)》這本書的新版非常貴(100多塊錢)我翻閱了一下感覺和老版區(qū)別并不是很大?!禣racle內(nèi)核技術(shù)解密》是難得一見的國產(chǎn)好書,作者解釋了很多Oracle的技術(shù)細(xì)節(jié)非常值得學(xué)習(xí)借鑒?!禣racle核心技術(shù)》要比《Oracle內(nèi)核技術(shù)解密》更有深度,作者是一個(gè)dump狂人,看到東西就是各種dump。。。?!禣racle編程藝術(shù)》全局性的介紹Oracle的技術(shù)架構(gòu)(當(dāng)之無愧的技術(shù)內(nèi)幕),后面兩本則關(guān)注Oracle的一些具體細(xì)節(jié)(比如內(nèi)存結(jié)構(gòu)、Undo、Redo的實(shí)現(xiàn)、事務(wù)的實(shí)現(xiàn))
服務(wù)器

Nginx的代碼非常簡潔、干凈,作為學(xué)習(xí)的榜樣非常的合適。《深入理解Nginx》非常全,Nginx的方方面面幾乎都介紹到了,所以塊頭也比較大,幸運(yùn)的是這本書挑著看不會(huì)影響閱讀?!斗植际椒?wù)框架》和《Netty權(quán)威指南》可以結(jié)合起來看,作者是有過微服務(wù)架構(gòu)經(jīng)驗(yàn)的,所以《分布式服務(wù)框架》寫非常全面,囊括了系統(tǒng)架構(gòu)要考慮的方方面面??上?,有點(diǎn)先入為主,改名叫《跟我學(xué)做RPC》比較合適(其實(shí)分布式服務(wù)框架有多種實(shí)現(xiàn)方式,不僅僅包括RPC)?!禢etty權(quán)威指南》是難得一見的關(guān)于Netty的好書,干貨不少。如果你用Netty或者想自己開發(fā)一個(gè)服務(wù)器這本書是非常值得一看的“實(shí)踐手冊(cè)”(好了,好了,把那邊《Unix網(wǎng)絡(luò)編程》扔到一邊吧。咱們得往前看,看實(shí)際一點(diǎn)的東西。)《精通Linux內(nèi)核網(wǎng)絡(luò)》,這本書我沒看完,即便跳著看也很累。如果說《Linux內(nèi)核探秘》是介紹I/O子系統(tǒng)那么這本書就是介紹網(wǎng)絡(luò)棧,而且介紹的深度非常深,細(xì)節(jié)非常細(xì)。我不喜歡這種類型的書,太大,太累。
性能

《性能之巔:洞悉系統(tǒng)、企業(yè)與云計(jì)算》一本專業(yè)的書,它對(duì)性能問題的定義不是局限在某一點(diǎn)而是告訴你一套方法論。然后把性能歸為“操作系統(tǒng)的鍋”、“應(yīng)用程序的鍋”兩個(gè)大問題。通過分析操作系統(tǒng)的進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、設(shè)備管理、網(wǎng)絡(luò)棧來找到性能問題的原因。(現(xiàn)在明白研究操作系統(tǒng)的意義了嗎?)遺憾的是對(duì)于“應(yīng)用程序的鍋”(此處的應(yīng)用是指xx語言的運(yùn)行環(huán)境或者某個(gè)中間件,比如JVM)篇幅太小,如果有再版本希望可以增加一些案例,這樣可以講清楚“應(yīng)用程序運(yùn)行時(shí)”和“操作系統(tǒng)”之間的關(guān)系,能讓讀者很快以達(dá)到融會(huì)貫通的目的(畢竟一個(gè)性能問題不是一個(gè)人的鍋,從應(yīng)用程序、操作系統(tǒng)都有問題)?!禞ava性能優(yōu)化權(quán)威指南》,就像名字一樣——“權(quán)威”。通篇都是在“賣”O(jiān)racle的工具(快來啊,看我們的工具多么的先進(jìn))為此不惜打上Java之父的名頭(我對(duì)這老爺子沒啥好感,感覺就是個(gè)“職業(yè)站臺(tái)”的)。干貨集中在JVM部分和垃圾回收算法。但是中很尷尬,如果想學(xué)習(xí)JVM我推薦《深入理解Java虛擬機(jī)》如果是垃圾回收算法那么《垃圾回收算法手冊(cè)》這本書最“權(quán)威”(你看真正的裝B黑,機(jī)械工業(yè)出版社的這套“計(jì)算機(jī)科學(xué)叢書”的牛B是不容置疑的)。
前端之旅

這三本是關(guān)于AngualarJS的書,前面兩本是大塊頭,后面是國產(chǎn)的(所以短小精干)?!禔ngualarJS高級(jí)程序設(shè)計(jì)》實(shí)在是有愧“高級(jí)”這兩個(gè)字?!禔ngularJS深度剖析和最佳實(shí)踐》很短小,沒有廢話,但是對(duì)于初學(xué)者有些地方會(huì)顯的很突兀,所以閱讀的時(shí)候可以結(jié)合《AngualarJS權(quán)威教材》。我的前端之旅大部分是來自“網(wǎng)絡(luò)文章”,前端技術(shù)變化太快基本上等到你書寫好出版它就過時(shí)了。我的旅途學(xué)習(xí)了framework:angualarjs1、reactjs、vuejs,語言:typescript、es6,各種構(gòu)建工具:grunt、gulp、webpack還有國產(chǎn)的fis、cooking。這三本書是我在學(xué)習(xí)AngualarJS1的時(shí)候找看的。(提示一下Angualar 1已經(jīng)過時(shí)了,現(xiàn)在是2。。。另外別急著學(xué)2,因?yàn)樗踔敛恢С諭E9。。。。囧)
CCNP

不會(huì)配交換機(jī)的軟件工程工程師不是一個(gè)好架構(gòu)。這三本書是Cisco CCNP的三本標(biāo)準(zhǔn)教材。CCNA的教材太簡單所以直接無視了,CCIE的教材太扯淡幾乎只會(huì)吹牛B。另外H3C出版的《路由與交換》四本書也不錯(cuò),原理性的東西非常多?!队?jì)算機(jī)網(wǎng)絡(luò)》只能算是網(wǎng)絡(luò)入門,如果想深入的了解計(jì)算機(jī)網(wǎng)絡(luò)學(xué)會(huì)配置、理解網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)協(xié)議是必不可少的。(網(wǎng)絡(luò)可不僅僅是操作系統(tǒng)“網(wǎng)絡(luò)?!蹦敲春唵?,眼光要長遠(yuǎn)、寬一些~~~)
SDN

我喜歡《云計(jì)算網(wǎng)絡(luò)珠璣》非常短小沒有廢話,尤其是最后去吐槽Neutron讓我有了“共鳴”(我是OpenStack職業(yè)黑,看到我就黑,嘿嘿嘿嘿,嘿嘿嘿)。《軟件定義網(wǎng)絡(luò)》(我買的是第一版,圖中是第二版)對(duì)SDN原理性講解非常到位,后面的“實(shí)踐”可以快速翻翻,其中OpenFlow部分可以結(jié)合《圖解OpenFlow》一塊看。
OpenStack

《深入淺出Neutron》通篇內(nèi)容你都可以在“網(wǎng)文”中找到。大塊截圖、大塊配置、玩命的貼代碼,篇幅本身就少再加上一折騰——沒干貨了?!禣penStack設(shè)計(jì)與實(shí)現(xiàn)》是唯一一本靠譜的OpenStack書,原理性的解釋配合文字比較到位??上penStack太“臃腫了”沒人能講清楚里面的細(xì)節(jié)所以只能從架構(gòu),全局的角度扯談一番。(有意思的是OpenStack的架構(gòu)怎么看都沒有問題,而實(shí)現(xiàn)就是一坨狗屎)
KVM

《深度實(shí)踐KVM》名副其實(shí),比較有深度。除了“KVM虛擬化管理平臺(tái)”很扯淡之外,其他的內(nèi)容都是干貨?!禟VM虛擬化技術(shù)實(shí)戰(zhàn)與原理解析》也有很多干貨?!禠inux KVM虛擬化架構(gòu)實(shí)戰(zhàn)指南》(看名字,你看名字。。牛B吧,還有這裝B黑)通篇沒有干貨,截圖,全是截圖。另外還有一本原版的《Mastering KVM Virtualization》也非常不錯(cuò)。
其他

《Mesos:大數(shù)據(jù)資源調(diào)度與大規(guī)模容器運(yùn)行最佳實(shí)踐》我以為這是一本講解Mesos的書沒想到是一本吹牛B的書。好不容易忍受了他教我如何“下載Mesos”,經(jīng)歷了“如何在Mesos上跑Hadoop”,“如何在Mesos上跑Spark”的扯淡話題后進(jìn)入正題——第七章。看了兩頁我就哭了——一個(gè)大表格羅列API、一堆代碼羅列例子。100多頁的書居然沒有一點(diǎn)干活~~~年度最差。《Scala程序設(shè)計(jì) 第2版》Scala是一個(gè)我瘋狂吐槽的語言,但是這不影響我學(xué)習(xí)它(哥就是這么“大度”)。這本書要比《Scala函數(shù)式編程》接地氣,比《Scala編程實(shí)戰(zhàn)》(這本是Cookbook)更像一本教材。建議每個(gè)想要學(xué)習(xí)Scala的人詳細(xì)閱讀它,希望你讀完它后可以掌握Scala的語法(哎呦,我又想到它那蛋疼的“隱式”了,容我平息一下“憤怒”。)《Erlang趣學(xué)指南》原版《Learn You Some Erlang for Great Good》,且不說內(nèi)容如何“萌萌的配圖”都值得好好收藏。和《Erlang程序設(shè)計(jì)》的篇幅差不多但是干貨多了不少。今年還有一本OTP的新書——《Designing for Scalability with Erlang OTP》
不務(wù)正業(yè)
除了寫代碼哥最大的愛好是搞“哲學(xué)”(看公眾賬號(hào)的名字就知道了),這部分內(nèi)容我稱之為——不務(wù)正業(yè)。
如果你想學(xué)哲學(xué)我推薦的第一本書應(yīng)該是——《大問題》,每一章作者都會(huì)拋出一個(gè)問題,然后引導(dǎo)你去思考,介紹歷史上著名的哲人的思考。哲學(xué)沒有對(duì)錯(cuò),所有的哲人都是對(duì)的,哲學(xué)就是要引導(dǎo)你去思考。生死、宗教、社會(huì)契約、自由、美,每一個(gè)你以為自己得到答案的問題其實(shí)都是哲學(xué)問題?!段鞣秸軐W(xué)史》已經(jīng)第二版了。作者是鄧曉芒教授和趙林教授。哲學(xué)沒有對(duì)錯(cuò),不是說黑格爾就比亞里士多德高明,所有的哲學(xué)觀點(diǎn)都值得深思。所以學(xué)習(xí)哲學(xué)就是學(xué)習(xí)整個(gè)哲學(xué)史,去學(xué)習(xí)哲人如何思考。康的哲學(xué)是三大批判,純粹理性批判是基礎(chǔ)?!段磥硇味蠈W(xué)導(dǎo)論》就是濃縮版的純粹理性批判。(《純粹理性批判》你要一個(gè)字一個(gè)字的讀才能弄懂,這個(gè)濃縮版你要一個(gè)字一個(gè)字的反復(fù)讀才能看懂)。這本100頁書就像“意式濃縮”特別刺激,絕對(duì)不可能一口悶。很多人以為康德僅僅是一個(gè)哲學(xué)家,其實(shí)他的本職工作是——自然科學(xué)家,如果他不是去研究哲學(xué)估計(jì)"自然科學(xué)一哥"這個(gè)位置就不是“牛頓”的了?!队钪姘l(fā)展史概論》這本書之前商務(wù)印書館引進(jìn)過,這次的版本重新校對(duì)過包裝更加精美可以留作收藏?!禨. 忒修斯之船》是本年度最適合裝B的一本書,沒有買的同學(xué)趕快去買。買到的同學(xué)你就不會(huì)在乎內(nèi)容是什么了而會(huì)感嘆——這要是每天都帶著,裝逼如風(fēng)?。。。?/p>
如何閱讀
不談目的的閱讀都是耍流氓,我把自己的閱讀分為兩個(gè)目的
修內(nèi)功,這種閱讀是長期的、持續(xù)性的。閱讀的書籍也集中在一些“知名的”書,比如《4.4BSD操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》、《深入理解計(jì)算機(jī)系統(tǒng)》之類的。這種類型的書有個(gè)最非常有名氣的系列——機(jī)械工業(yè)出版社的計(jì)算機(jī)科學(xué)叢書。內(nèi)功不是說就死抱著不放,而是要時(shí)刻清楚自己的目的。比如都說《深入理解計(jì)算機(jī)系統(tǒng)》經(jīng)典,難道需要我們從頭到尾為認(rèn)認(rèn)真真的讀嗎?其實(shí)大可不必,如果你覺得自己已經(jīng)掌握了計(jì)算機(jī)體系結(jié)構(gòu)對(duì)操作系統(tǒng)有了一點(diǎn)感性認(rèn)識(shí)就可以不必閱讀。
修招式,這種閱讀是短期的以實(shí)踐為目的。比如學(xué)習(xí)交換機(jī)的配置,學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的各種協(xié)議,學(xué)習(xí)SDN之類的?;旧鲜悄愎ぷ髦行枰蛘邆€(gè)人對(duì)某個(gè)技術(shù)感興趣讓你去閱讀,它會(huì)持續(xù)一段時(shí)間而不是適合作為長期閱讀。比如你學(xué)會(huì)了配置交換機(jī)還會(huì)每天看CCNP教材嗎?你已經(jīng)掌握了TCP/IP協(xié)議還會(huì)去有板有眼的看《TCP/IP詳解》嗎?這種閱讀也是沒有必要的。
閱讀的目的是為了獲取知識(shí),如果你覺得“不自信”那么不應(yīng)該閱讀而應(yīng)該實(shí)踐。(比如你對(duì)自己是不是要閱讀《深入理解計(jì)算機(jī)系統(tǒng)》有疑問,很簡單做一下課后題或者做一下里面的實(shí)驗(yàn)。)
