碼農書架 - Ver 2017.1

15年搬家時列了篇書單,一晃一年又過去了,當時信誓旦旦要讀的幾本經典除了Clean Code基本都沒有碰……還是堅持不懈地在圖書館薅著羊毛。16年看的書側重在Scala,數據科學等個人比較感興趣的方面,下面會分類來做推薦供大家參考。

Python

《Fluent Python》:之前有強烈推薦過《Ruby元編程》,可以說是語言進階類書籍的典範,哪怕不用Ruby都能從中借鑒不少有趣的思想。可惜Ruby在工作中能用到的機會太少了,作為曾經的Ruby粉,我也漸漸在各種項目的洗禮中被硬生生拖入了Python陣營……今年終於發現了這本非常優秀的Python進階書籍,深入細緻地介紹了Python的語言內部原理,各種常用寫法,高級技巧,對開闊眼界,提升代碼功力很有幫助,值得每一個Python使用者細心研讀!這本書非常厚,我還沒有讀完……

《Python Web開發:測試驅動方法》和《Flask Web開發:基於Python的Web應用開發實戰》:做Web開發的同學可以考慮看看,總體來說比國內的很多相關著作質量要高一些,各種套路也比較有板有眼。前者主要拿Django框架做示例,個人感覺比後者內容更全。

《High Performance Python》:一本非常不錯的Python性能相關書籍,從profiling,數據結構講起,到必不可少的Cython,pypy,並發,分散式話題,最後幾章還有許多作者的實戰案例分享,讀下來感覺乾貨滿滿,很有收穫!不過嘛Python本身設計初衷也不在高性能這塊,從profiling就能看出整體工具鏈跟JVM界有一定差距。想著寫高性能模塊的同學這幾年估計都投奔Go陣營了吧……

發現上面幾本都是OReilly出品,另外一個大出版社Packet也有不少numpy,scikit-learn之類的介紹Python數據分析,機器學習等方面的書,我也讀了一些。這個出版社貌似經常搞免費促銷,所以外面流傳的免費下載版本特別多。缺點嘛主要是內容大多是cookbook的形式,基本沒有哪本能給我留下深刻的印象,感覺不如查閱官方文檔來的實在。

Scala

今年終於開始在實際項目中使用Scala,然後就迅速沉淪其中,不可自拔了……類型推斷加編譯器檢查的感覺真好,靈活性不輸Python多少,表達能力強大,還能傍上JVM豐富生態圈的大腿,必須強勢安利一發!

《Scala程序設計》:內容非常詳盡,介紹了從基礎到Scala類型系統,隱式轉換,monad範疇論,Actor模型等各種高級話題。而且是新近出版,涵蓋了2.11新版本的各種feature。缺點嘛可能編排略有點混亂,同一個知識點可能前後都會提到,而且複雜的特性介紹並不是非常清晰,可能還需要自己去查閱一些參考資料才能很好的理解。個人認為如果已經有了Java基礎那看完這本就可以很快上手(或者放棄)Scala了哈哈。

《Scala函數式編程》:著名的Scala紅寶書,應該有很多人推薦了,這本書更接近內功心法一些,讀的時候一定要做習題來加深理解。哪怕不用Scala,讀讀這本書了解下函數式編程也是挺有幫助的。

《Scala學習手冊》:如果希望看一些更基礎的Scala入門書籍,我推薦這本。書本身也比較薄但關鍵點都覆蓋到了,很快就能讀完上手,畢竟很多高級特性是不是要在項目中採用也是有爭議的。Thinking in Java的作者也寫了本Scala的書《Scala編程思想》,內容實在有點少,我覺得還是不要買這本了……

《Play for Scala》:Scala上最流行的Web框架之一,用起來還是挺爽的嘛。這本書的內容跟最新的2.5.x還是有些區別,可以用來總體了解下框架,看看常用模式。個人覺得Play上手比起Python的一些框架來還是要複雜不少……有本示例書引入門的話會輕鬆些。

最後提一下雷區,有兩本不錯的書《Scala並發編程》和《響應式架構》,前者的作者是Scala並發collection的作者,同時也在Coursera上開了相應的課,可以看看不一樣的並發處理方式(Future,Actor之類之於經典的線程池)。後者主要介紹了Akka和聽起來很牛逼的領域驅動設計模式。之所以說是雷區,當然就是翻譯問題了。兩本書還是同一個譯者,以後買書都要注意了……

(新的一年,是不是可以學習下Haskell了)

Spark

作為大數據領域的當紅炸子雞,Spark相關的書也是鋪天蓋地而來,光源碼解讀之類的就有好幾本……列一下我看過幾本比較好的:

《Spark高級數據分析》:循序漸進介紹了如何用Spark做數據分析,偏重應用,案例都很詳盡,很值得推薦!

《Spark核心技術與高級應用》:科大訊飛的同學寫的,基礎部分寫的比較紮實,字裡行間可以看出作者豐富的實戰經驗(話說美團技術博客上的幾個Spark分享也很不錯)。高級部分有點精簡,可以展開多寫一點就更好了。

《Spark最佳實踐》:騰訊的同學出品,同樣也是經驗豐富,內容比較靠譜,不知為啥在豆瓣上被黑的有點慘……實戰還用了淘寶作為例子有點喜感,總體來說很接地氣。每一章篇幅都不大,有幾個精簡的代碼剖析其實寫的不錯,如果能多展開一點說不定還能成為本很不錯的「深入Spark源碼分析」類書籍啊。

其它還讀了幾本國人寫的Spark源碼剖析,都沒留下什麼深刻印象。作為一個發展極其迅猛的開源項目,大多數相關的書基本上很快就顯得內容過時了……還是多關注DataBricks在YouTube上的各種分享,官方博客,結合自己拉代碼下來閱讀來得靠譜。

數據科學

這方面的書也是泛濫成災,圖書館TP27x系列的書架直接因此擴容了……總體來說質量高的書並不多,列幾本我認為還值得一讀的:

《命令行中的數據科學》:這本書的名字看起來就有點奇怪,尤其是在這個人人都搞Hadoop的年代略有些違和感。不過內容其實相當實用,很多數據探索分析清洗工作都可以用命令行快速完成,非常適合沒怎麼打過Linux基礎的數據業務從業人員,能掌握一個很不錯的日常快速工具箱哦。

《數據科學實戰》:難得一見的女性作家寫的技術書,從行文組織到內容,文筆,包括翻譯都是相當不錯!兩個作者都是數學背景的數據科學家,從行文中可以看出都是在這行浸淫多年,經驗豐富,尤其是軟技能/影響力方面相比我們普通碼農會有更深入的理解,可以在閱讀過程中細心體會揣摩下。

《大數據演算法》和《零基礎學大數據演算法》:這兩本差不多是同一本書,前一本可能看起來門檻有點高,所以又出了本新版加了點基礎知識和時髦的Hadoop,Spark介紹。書的內容很不錯,形式上有點像那本《Mining of Massive Datasets》,感覺講解上比mmds還要更細緻些,介紹了很多在數據量非常大情況下進行處理的特殊演算法(亞線性,外存演算法之類)。而且還有配套的在線課程,值得推薦!

《大數據架構商業之路》:又是一本國人寫的書,循序漸進講了各種大數據時代的架構設計方案及分析,跟那些QCon分享架構演進的有些類似,非常適合沒有接觸過這塊業務的同學在做方案設計,技術預研(大數據方面的各種輪子實在是有點多……)時進行參考學習。作者主要是eBay的背景,所以內容上偏向搜索與推薦系統,書名看起來略大了一些,如果要購買可以注意下這點。

(書中給出了很多類似的架構圖)

《寫給程序員的數據挖掘實踐指南》:一本風格很像Head First系列的入門書,初學者友好指數5星,但技術背景深厚的同學看這個估計會覺得不夠過癮……看完之後就知道怎麼跟老闆通俗易懂地解釋演算法技術問題了哈哈。國人有本類似的《白話大數據與機器學習》,內容上更全一些,也可以一讀。

《圖解機器學習》:日本人寫的圖解系列向來是各種簡明易懂,深入淺出的,但這本就有點扮豬吃老虎了……這本書里的圖基本就是出來活躍氣氛的,對理解演算法沒有什麼幫助。除去這點的話其實內容還是相當精幹紮實,各種演算法介紹都深入到了一定層次,感覺跟《統計學習方法》有點相像。那些覺得各種入門書太粗淺的同學可以讀一下這本,把裡面的Matlab實現都翻譯成Python之類的做一遍,加深思考和理解,絕對會很有收穫。

(感受下所謂的「圖解」)

《程序員的數學2》和《程序員的數學3》:這個系列的第一本太基礎,感覺不需要看,第二本講概率統計,第三本講線性代數,前者幫助複習鞏固,後者對於當年根本沒理解線性代數的我來說還是挺有啟發的。數學學霸們請忽略此條推薦。

《Bayesian Reasoning and Machine Learning》:相比PRML,MLAPP,ESL,這本書顯得名氣小了很多……不過相比PRML,這本書對初學者的友好度實在提升太多,令人感動。而且作者一直在更新書的內容,並免費發布,這是什麼樣的精神……總體來說是一本深入介紹機器學習原理的書,如果覺得PRML看不下去的可以來這裡尋找一些人間溫暖……

(買了本印刷版,方便在咖啡館優雅地裝逼)

《Deep Learning》:今年最火的機器學習新書之一,可以在線直接讀原版,另外也可以關注正在進行中的翻譯引進。形式內容上很像一本教科書,相比PRML,ESL感覺對初學者友好很多,一開始都會幫你複習基礎數學知識,然後逐漸深入到新近研究的介紹。目前市面上應該還沒有可以與之媲美的深度學習書籍,看了看Bishop和吳恩達的新書貌似也沒有打算專門寫Deep learning,所以估計很長一段時間內都會難有敵手了哈哈。

《機器學習》:今年最火的機器學習新書之二,周志華老師出品,被大家親切地稱為「西瓜書」。作為一本非常偏技術的書,竟然上了豆瓣讀書的年度熱榜,此等情景真是平生未見。這也是一本對初學者友好的教科書,我還沒有系統地通讀。從平時的翻閱來看整體的深度難度適中,可以幫助讀者快速建立知識體系,為後續深入研究學習打好基礎,書中給出的推薦閱讀也是相當給力!順帶一提此書去年一月上市我就買了第一版印刷,現在都十四次重印(16年12月)了……其火爆程度可見一斑。國人在機器學習領域的大牛還是有不少的,期待以後有更多類似的優秀國產技術讀物的湧現。

(把酒調參,人生幾何)

軟體設計

代碼寫的多了,不免會開始思考怎麼把代碼寫的更清爽美觀,把軟體模塊組織的井井有條,怎麼能在業務邏輯越來越複雜的情況下仍然保持開發效率以及整體項目的可維護性。於是就有了各種設計模式,代碼重構方面的書。看了幾本感覺這方面的內容都大同小異,有好些年沒有激動人心的新進展了。關鍵還是在於平時寫代碼做項目時養成多反思改進的習慣,不斷加深這些方法論的實戰應用能力。

《浮現式設計》:這本書我很喜歡,看了兩遍……內容上沒有很新奇的東西,也都是那些軟體設計的指導思想,設計模式,重構,測試之類,但是整體讀起來感覺組織很好,就跟標題所說的那樣,很多設計都是慢慢「浮現」出來,而不是一上來就去套用某個「模式」的。文中的舉例也很生動形象,相比起來《Clean Code》更像是一本cookbook……當然這也是個人品味區別了,應該有不少人更喜歡密集乾貨型技術書。

《冒號課堂》:這本書讀起來相當震撼,讀完之後有種自己沒穿褲子上了幾年班(不懂面向對象設計寫了幾年代碼)的奇妙感覺……整本書把各種編程範式的內涵(側重OOP)上升到了一定高度,可以說是更新「元知識」的上佳之作。豆瓣上已經有milo大神的詳細書評,我就不多贅述了。總之強烈推薦!

《用戶故事地圖》:非常適合產品/項目經理讀的一本書,可操作性很強,圖文並茂讀起來也很輕鬆愉悅。程序員也可以了解一下產品構建的流程,反思下自己是不是在做設計和實現時思維容易局限在技術層面,而沒有更多地從終極目標出發去思考問題。

《領域專用語言實戰》:DSL方面的佳作,實戰性很強,給了各種語言(Ruby,Clojure,Scala等)的最佳實踐,順便還可以比較下各家在元編程,抽象表達能力上的差別。學完之後就可以在項目中各種策馬奔騰,搞些高大上的ast,parser之類的僅用N行代碼就酷炫地實現了複雜多變的業務邏輯。激動澎湃之情,必須發個朋友圈裝個逼了!

其它

《性能之巔》:Brendan Gregg大神相信做軟體性能這塊的同學都不會陌生,可以說是工程領域的標杆人物了。當年就是讀了他的博客學到了各種高大上的性能分析方法論和工具集,而這本書則是作者多年經驗的集大成之作!從基礎的vmstat到屠龍之技dynamic tracing,從排隊論到網路/操作系統原理,書中都有詳細介紹。對於那些有興趣了解軟體性能監控,分析,優化方面知識的同學,強烈推薦精讀此書。

(這張圖應該很多人見過吧!原作者就是Gregg哦!)

《Docker——容器與容器雲》:Docker這塊看過最好的一本書,內容對我來說有些超綱,信息量很大,適合需要深入研究Docker及容器編排系統的同學閱讀。不過容器技術日新月異,業內也是各種撕逼,風向變幻莫測……估計後面還會出新版吧 :)

《從Paxos到Zookeeper》:最近Paxos,Raft之類的介紹文章好多,想了下讀過的各種分散式系統理論介紹方面的書,貌似也沒有印象特別深刻的……這本總體上來說寫的還不錯,zk本身在項目中的應用也是非常廣泛,值得一讀。如果有更好的作品推薦歡迎大家留言推介。

《鳳凰項目》:雖然是本小說書,但寫的比很多技術書「技術」多了,非常值得一讀。其中描寫的很多工作場景,無論是小碼農還是技術總監的經歷,相信大家都會深有感觸。讀完之後多多反思琢磨,一定會提升對DevOps相關理念,工作方法的認識程度。配合《SRE》食用,風味更佳。

(鳳凰項目與Ted Chiang,拍攝於浙圖)

非技術類

除了技術類書,這一年還讀了幾本金庸小說,《三體》,毛姆的《月亮與六便士》,東野圭吾的《解憂雜貨店》之類耳熟能詳的作品,偶爾休閑放鬆下。下面主要列一些不那麼有名的:

《美洲豹陽光下》:卡爾維諾未完成的小說集,偶然在圖書館讀到這本,第二篇尤其出色。本人是卡爾維諾的腦殘粉,《看不見的城市》,《如果在冬夜,一個旅人》,《瘋狂的奧蘭多》,《宇宙奇趣全集》,《樹上的男爵》等等都是精彩紛呈。他寫出了很多超乎想像的作品,謎一般的大腦,令我無比欽佩。

《你一生的故事》:一名擁有cs學位的軟體從業者寫的科幻小說集,同名的這篇算是他的代表作之一,內容非常特別。此人相當低產,但一出手基本都是雨果,星雲獎……喜歡他的人會很喜歡,但不習慣這個風格的人應該也有不少吧。16年這篇小說還被翻牌成了電影,不知國內何時會引進?

《永恆的終結》:阿西莫夫大師作品,可以排進我心目中科幻小說前三(另外兩名還沒想好……)。劇情邏輯複雜交織,但還是寫的非常流暢,引人入勝。看到結尾真是各種熱血沸騰啊!

(《加德納藝術史》,我家最重的一本書,Koller的《概率圖模型》排名第二。充分感受到了知識的……重量)

寫完總結,展望下新的一年,要靜下心來好好啃一下那幾本經典的大部頭,提升內功心法。另外盡量多抽點時間出來看看非技術類的好書,享受生活,陶冶情操……人生是長跑,不要太急功近利嘛!

推薦閱讀:

深度學習概述與發展歷史-花書第一章解讀(上)
「2017 知乎 · 看山杯機器學習挑戰賽」結束,誰獲獎了?知乎還會做什麼?
為什麼LR要使用sigmod函數
Teaching Machines to Read and Comprehend

TAG:大数据 | 计算机科学 | 机器学习 |