可以是計算機任何方向的書籍,歡迎推薦~相關話題:2019 年你讀了哪些覺得比較好的計算機書籍??www.zhihu.com2016年你讀了哪些覺得比較好的計算機書籍??www.zhihu.com2017 年,你看了啥很好的計算機的博客/書/視頻??www.zhihu.com
可以是計算機任何方向的書籍,歡迎推薦~
相關話題:
2019沒寫,這次把大概2019和2020看的書小總結一下 (主要是2019看的,2020遇到了一個很有意思的項目,主要在看相關的論文和思考設計,別說利用上班時間看書,把個人時間都搭上了。。。
( i _ i ))
資料庫分散式系統類 (推薦度自上而下是: 強力推薦 =&> 可以不看 )
第一排五神書, 強力推薦, 在想法裏都寫過:
剩下的Jim Gray的Transaction Processing (2排左一的黑書)也很不錯, 不過看了一排左一的話,不看也罷。
"Guide to Reliable Distributed Systems" 這本的作者其實算是第一批解決了consensus問題的人,並結合實踐去建設了很多系統,而Lamport則是用更理論化和更容易理解的方式把consensus這個問題單獨剖析出來,所以這本書總有一點點「遺憾」且「不服」Lamport收穫了大多數解決consensus問題美譽的味道。但是資料庫分散式系統從業者都很清楚,從Paxos到一個真正能解決問題的系統其實還很遠,比如怎麼reconfig機羣。而這本書則是從理論結合實踐,不侷限於資料庫和consensus,來講解一個雲供應商所面臨的挑戰和可以採取的解決方案,內容涉及很廣,它並不把問題單獨拿出來討論,而是把consensus結合在實際問題中去討論trade-off, 畢竟分散式系統設計不是鐵板一塊。但是問題是這樣讓這本書更難讀,不過有時間且工作和雲計算息息相關的話,強力建議閱讀, 因為這不是在介紹一個理論玩具,而是實實在在的從全方位來思考怎麼解決實際問題(比如client的request是怎麼才能從自己的主機被路由到雲服務公司的機房的,這其中又有什麼選擇) 雖然各個大公司的內部核心解決方案有所不同,但是這本書所討論要解決的實際問題絕對是每個雲服務商公司都要去思考並解決的,且作者的解和我所知道的某些公司的核心解類似 (這裡不能再說更多)。
Database Internal: 前半本還行,可以看看,如果你看了5神書那麼你的領悟應該是遠超它的後半本的.
Relational Theory for computer professionals: 比它樓上那本Applied Mathematics for Database Professionals要容易讀一些, 不過樓上那本也不是很難啦,所以還是強推樓上,如果看過樓上那本,這本不讀也罷。這兩本關於relational model的書是由於最近一年的工作涉及到設計一門新的數據規約語言,於是去詳細研究了relational model背後的數學思想,Applied Mathematics for Database Professionals真的讓我大開眼界,比如closed world assumption… 沒讀這本之前的我對關係資料庫可以說是「只知其形而不知其神」,relational model真的是一個很「優美」的模型,Jim Gray賽高!
2本Stream的書如果對stream有興趣都可以看看, Flink和Kafka對stream的處理代表了兩種不同的態度,因為Flink比較火,所以較為推薦一些,但是Kafka Stream的high level概念上的一些設計我覺得更有意思一些,比如table和stream的相互轉化。
MongoDB這本算是使用手冊,並沒有我期待的對於理論的很多討論,比如怎麼解決consistency問題,用的什麼解決Transaction的ACID問題, 等等, 不過它倒是把怎麼解決問題的一些論文鏈接出來了,所以對如何使用DB本身感興趣的同學可以讀這本,而對MongoDB怎麼處理實際資料庫設計問題的同學去看MongoDB的2篇論文即可.
Kubernetes這本也還不錯,基於K8S和容器的領域發展的非常快,新東西層出不窮,畢竟分散式系統上的OS,社區也都是開足馬力提供新的工具。這本書在這方面給了我不少新認知,比如Kubernetes Operator是我覺得非常有意思的東西。
兩本關於Knowledge Graph的書是由於有一個相關的項目,所以看了這兩本瞭解一下,也是很有意思的領域呀,不過項目無疾而終,所以這方面也沒有繼續跟進。不太清除現在是否有更好的書來介紹這個領域。
最下4本 ... ummmmmm ... 要麼是對我來說太淺了(Spark, Mesos, K8S Operator),要麼就是書寫的不好(Istio). 對Spark新人來說可能Spark In Action這本可以看看, Mesos和K8S Operator這兩本就坑了(且Mesos也沒什麼人用了把?). Istio是關於Service Mesh的,貌似也沒有什麼別的好書來介紹這個,所以如果想了解Service Mesh,可能。。。去google些好文章會更好?這書是寫的有點讓人費解...
概率統計數據分析機器學習類
統計數據分析ML,DL這些我還是在慢慢學,所以我只能以初學者的角度來評價他們對我的幫助。
上邊4本我能看懂而且也強烈推薦,中間的我能看懂,但是一般推薦。下邊四本則比上邊都要難。
其中特別要說一下第一排右邊三本, 它們拯救了我讓我沒有放棄繼續學習這個領域(作者把很難的東西解釋的淺顯易懂,真的救了命了),並且利用這些學到的知識去弄明白了更多的東西。
大概就是如此了。2018的推薦在這邊:
2018 年,你看了啥很好的計算機的博客/書/視頻??www.zhihu.com
再link一個我的讀書方法論吧
我覺得快樂的讀書是最重要的,從中獲取樂趣而不是痛苦,如果目標不是讀書和獲取知識本身,而是其他的什麼,那麼恐怕讀書有時候是痛苦的。 很簡單的評判標準是,如果學到的這個知識以後沒有一點用的上,你會後悔花費這段時間去學習麼? 好比說很多人喜歡旅行,但是如果旅行的經歷對以後沒有什麼用處,你會後悔花費時間去過某個地方麼?當然我們可以說旅行的過程是對我們自身的塑造,那麼讀書又何嘗不是呢? 暢遊在人類思維和文明塑造的「宇宙」中,領悟這千奇百怪的思想,理論,對我來說,這本身就是足夠的回報了。
2020年其實沒怎麼看書,宅家的日子主要是不務正業。要說真的算瞄了一下的話,我可以給大家推薦兩本比較小眾的。
先是這本automated machine learning (Automated Machine Learning),開源可以通過link免費下載。簡單來說,AutoML可以被粗淺的理解為一個尋優問題,無論是模型尋優、參數尋優、還是網路結構尋優。在這個目標下,各種演算法其實都有優化那邊的影子。這本書本身只是個簡單的介紹,並沒有涉及複雜的演算法,也沒有實現。我覺得可以當做一個大型綜述來看,最重要的是美帝亞馬遜只要9美元,對於Springer來說簡直是良心。書也挺薄的,基本都是點到為止,看得快不需要太長時間。
向更多瞭解相關的背景信息,可以看「在Auto ML的衝擊下,ML演算法人員是否會在前者成熟後失業的情況?」 和 「為什麼基於貝葉斯優化的自動調參沒有大範圍使用?」
另一本是華人團隊(周志華,俞揚、錢超)寫的(南京大學),Evolutionary Learning (演化學習)。先說我是怎麼接觸到這個主題的,一般來說演化學習一般都是在機器學習課程或者優化課程上簡單的提到一下,比如genetic algorithm,蟻羣演算法等。我以前做過一陣子的模型選擇的問題,比如有一大堆基學習器,怎麼從裡面進行尋優,這其實就是個很好的演化學習的案例。
和我們常用的算gradient來尋優不同,演化學習往往可以黑盒的處理類似的問題,主要是啟發式的(heuristic-based)。這帶來的核心問題就是難做理論,這也是一直不太受到重視的原因之一。這本書的特定是從理論出發,感覺適合做集成學習、優化問題的人看看,可以啟發一些思路。總體而言門檻比較高,適合要做研究的人來讀。
現在很少會有時間看一本書了,更多都是挑著翻一下感興趣的部分。最近看了一些深度學習文章,很多不少其實老演算法拿出來回鍋。最近看到某篇ICLR的解耦文章用某種集成的方法來評估解耦的效果,這個操作做法在數據挖掘領域可能是十年前就有的了。所以大部分創新本身就是老方法重新應用,所以讀點新的和舊的內容都不錯,不知道啥時候就能用上
這幾本書,是我今年看過覺得最棒的書,強烈推薦大家都去看下:
有些書是以前也看過,今年只是偶爾翻幾章,比如csapp,有些書是今年纔看的,比如ddia,都非常棒:
第一本:
《深入理解計算機系統》
這是我第三次翻開這本書了,第一次是在大一下,那時候只學了 C 語言基礎,翻了幾章,根本看不懂。第二次是大三,當時上《系統級編程》課程,這一次有了操作系統、彙編等基礎,讀起來順暢很多,也順帶著做了Lab
這本書的英文名字叫《Computer Systems A Programmers perspective》,其實是站在一個程序員的角度,帶你領略整個軟體世界,非常巧妙的把數字電路基礎、二進位與指令集體系、彙編語言、程序設計及優化、存儲器體系結構、鏈接與裝載、進程、虛擬內存這一堆來自各不同的計算機學科的核心知識點串在一起,並以程序員的視角呈現。
第二本:
《Designing Data-Intensive Applications》
簡稱,DDIA,也是被很多大 V 推薦過的一本書,全書以數據為核心,這本書從抽象層次上詳細論述了各種數據存儲模型,包括傳統關係型資料庫、NoSQL、大數據存儲、流式數據存儲等等,由淺入深。雖然這些方面平時或多或少都接觸過一些,但是說實話很多內部機制、各種數據存儲的利弊、如何取捨都理解得非常粗淺,這本書讀下來有一種讓人豁然開朗的感受。
正所謂數據是架構的核心,推薦所有後臺開發工程師都讀一下,因為現在的互聯網業務,本質上就是一個數據處理系統:一個淺應用層包裹著的複雜的數據系統,充分理解數據系統的運作和設計非常必要。
第三本:
《程序員的自我修養--鏈接、裝載與庫》
別被這本書的名字欺騙了,這不是教你養生的,而是學了會掉頭髮的硬核知識。
程序員自我修養重在講解鏈接、目標文件、裝載、庫與運行時,看完這本書你會瞭解到一個 C/C++ 程序是如何被編譯成目標文件的,以及 Linux 下目標文件的格式,不同目標文件又是如何被鏈接成一個可執行程序,在鏈接時如何處理符號、重定位、地址解析等,以及靜態鏈接、動態鏈接區別等等,最後可執行文件又是如何被載入進內存,如何和虛擬內存空間映射的。
總之,是一本瞭解系統知識不可多得的好書。
這裡推薦一本很棒的刷題筆記,對於提高演算法能筆試面試很有效果:
編程指北:看完這本谷歌師兄的Leetcode刷題筆記,可以直接秒殺 80% 的 Leetcode 題目!?zhuanlan.zhihu.com
還有其它很多非常好的書,不一定是2020年看的,經典的書可以穿越時間,這裡都一併列舉:
學習計算機,我認為最好的方式就是多寫多練,然後多看經典的書籍,做到編程技法和內功同步修鍊,大家加油!
覺得不錯的話,記得關注我 @編程指北,給我點個贊喲,筆芯~
Disclaimer: 這些書我都沒看&過&完
現在美刀便宜希望大家都去買正版
Type-Level Programming in Haskell, 應該是第一本系統講 Haskell Type-Level Programming 的書, 至少比直接啃 GHC 文檔系統多了 (當然還是要看的). 雖然 Haskell 沒有大規模地在生產環境中使用, 但是學習 Haskell 相關的內容還是日常開發還是能有幫助的, 例如一旦瞭解了 Haskell Type-Level Programming 的姿勢(類型體操)就可以馬上可以應用到 TypeScript 裡面: ts 能實現根據正則表達式定義對應的類型嗎?
Optics By Example, 應該是第一本系統講 Functional Optics 的書, Functional Optics 應該算在函數式編程裏存在挺久, 但依然沒有廣為人知的概念. 一般引入 "Lens" 都是為瞭解決不變數據結構嵌套太深不好更新的問題, 但其實 Functional Optics 有著很多強大的功能: Haskell的Lens是一個怎樣的庫?, 如何使用ramda.js讓這段代碼可讀性最高?, 為什麼很多語言的pattern matching能力有限?, 是否能以類似 jQuery 的方式操作語法樹?, 寫編譯器 pass, 怎麼用 Haskell 寫命令式演算法 簡直是 CRUD 程序員的恩物. 看過 Optics By Example 這本書之後就像掌握了一個新的鎚子看到問題就想一頓敲, 而且 Functional Optics 能夠讓你體驗到函數式編程裏十分強調的可組合性!
Algebra-Driven Design, Sandy Maguire 同場加映(封面很 GEB hhh). 我理解對於何如寫「正確」的程序有兩種途徑: 一種是把程序寫出來然後寫程序化證明/測試它是"正確「的, 另外一種是在構造程序的時候就直接能證明它是對的(所謂 Correct By Construction), 對於第二種方法我們如何找到合適的 Construction 或者 Property 去構造我們的程序? 答案一般都是從數學裡找或者利用數學結構, 如何從程序問題裏發現到問題相關的數學結構? 當然是靠猜! Algebra-Driven Design 這本書就是教你怎麼用 QuickSpec 這個工具去"猜", 然後用經典的 QuickCheck 去"證明".
多圖預警
1.C語言系列
1.1 C Primer plus
非常好的入門編程書,我認為要好於裏奇的書了。因為這本書吸納了很多經典書的有點而成。
1.2C專家編程
這本書名氣很大但是讀完之後我認為不太適合現代的人讀了,一部分原因是上面一本吸取引用了這本書的精華,而且這本書太老了,不推薦再去讀這本書了
2.C++系列
2.1 Boost程序庫完全開發指南
這本書簡單介紹了一些boost裡面常用的庫的一些用法,包含的庫只是boost裡面很小一部分,感興趣的話可以去查官方文檔,我用boost主要是pcl裡面有用到,所以大致學習了一下,可以當做工具書查閱用,感興趣可以看一看
2.2Effective C++
這本書很經典了,書裡面大部分目前仍然有借鑒意義,不過有一些由於cpp引用新特性,不見得很適用了。
要批判的看,不過值得一讀,尤其對於沒有實際工程經驗的學生在剛開始工作的時候,非常推薦
2.3Effective Mordern c++
這本書繼承於上一本,更新到14版本
Mayers的書還是挺良心的,這裡面結合新特性,教你如何更高效使用C++
彩色版,我在之前的回答中對書中的一些錯誤做了校正。一邊學習它,一邊批判它。
非常推薦讀一下
2.4 C++11/14高級編程
這不是入門書,是高階版本了,前面的幾本算進階吧。這本就開始涉及模板元編程了,C++裡面最玄的東西。這種代碼寫起來不熟悉的花很燒腦,知乎上有一個華為的員工老喜歡用模板元來寫答案,我感覺有點炫技的成分,因為工作中大部分開發者到不了這個層次,這東西是專門用來寫庫用的,實際工作不是特別推薦除非整個開發團隊水平都很高,否則會影響整體效率,感興趣可以看一看。
2.5 QT5.9c++開發指南
qt入門書,講的是非常基本的qt特性。今年做一個項目開發嵌入式上位機用到了,不過這本書非常淺,只是用來入門的,很多框架的功能api需要查文檔或者源碼。感興趣可以看一下。qt自帶了一些示例,不過細節講的不如這種書全面,尤其對新手。qt都出6了......
2.6 C++代碼簡潔之道
這本書更新到17版本了,裡面一些編程原則跟前面書籍有所重合,不過也比較驗證的介紹了c++的開發,測試,一些軟體工程原則。停值得做項目開發的工程師借鑒的
2.7 C++並發編程實踐
這本書英文版還是好的。中文版嘛,一度讓我懷疑是不是中國人。
這本書的四個翻譯,中國人民銀行it部門有你們四個臥龍鳳雛顏良文丑,還沒到底真是奇蹟。
機器翻譯的都可能比他們四個翻譯的好。裡面好幾個都是中科大軟院碩士畢業的,讓我對科大軟院有了全新認識。以後碰到那兒出來的,一定要謹慎小心。
中文版沒法看,一點都沒法看,不推薦看中文版。白瞎這書了
3.PYTHON
3.1Python學習手冊
很基礎的python語法知識。這本書稍微有點老了,不過python的基本內容到變化不大。學完之後要是感興趣新特性,可以去官網查,這樣學起來也比較快
3.2 Python編程
講用python標準庫實現一些功能。系統編程,界面ui客戶端啊,郵件,網路服務啥的。都比較基礎,是學習完理論實踐參考的一本不錯的書。
這本書跟上一本是一個作者,按照學習順序寫的,很不錯。不過這本書除了要跪python語法,還要掌握操作系統網路之類的一些理論知識,學習起來才比較容易。否則就得回去補
3.3 流暢python
這是進階書不適合入門看
這本書的作者同時也是一些就行python框架的作者,作者在python方面造詣比較高。所以一定要熟悉使用python很多特性之後,有一些經驗再看。切記。這三本python書籍按順序讀就行,將近3000頁
加上coding,反覆調試修改程序,還是需要花點時間的。一兩個星期不見得讀的完。
4.軟體工程系列
4.1 軟體工程
我們真正取業界寫代碼,尤其是比較高的平臺,實際上,不是像刷leetcode那樣寫代碼的,是有完整工程範式的。真正設計大型軟體,可靠性啊,是敏捷開發還是其他方法,情況不一樣原則有很多,尤其團隊大了之後,還需要組織,如何更高效發揮團隊作用。介面怎麼設計。有很多工程上的講究和說道的。不是寫千八百行代碼那回事兒。這對於缺乏業界經驗的學生是值得讀的。但是需要注意,軟體工程很多東西最好跟實際幾個起來,因為這東西本身就是純工程。
4.2 Head first 設計模式
四人 bang的那本經典書很薄,但是有點抽象。這本書設計模式講的少了一點,但是很形象。很適合入門
4.3設計模式 可復用面向對象軟體基礎
非常經典的書,不過這本書裡面的事例是比較舊的cpp。
我看的時候順手自己重新寫的事例,都用現在風格,智能指針啥的設計的。這裡面所有的設計模式必須全會,任何大型軟體都會以各種形式出現這本書裡面的設計模式。而且不見得以書中標準格式出現,很野德那種。
當然設計模式有很多種,這本書還不算,尤其沒有並發設計模式,需要其他書籍補充
4.4程序員修鍊之道-從小工到專家
這是一本神書
非常經典。裡面涉及的很多日常軟體開發的建議雖然如果僅僅按照書中字面內容事過時的,但是稍微結合實際變通一下,比如腳本從perl改成python直接就能用起來。本來我之前打算把裡面一些過時的說法從新修訂一下,出個現代版。奈何沒時間
4.5 並發設計模式與應用實踐
什麼線程池之類的並發設計模式
當然很多設計模式啊,到底怎麼設計,尤其大型軟體系統。光看書事不夠的,我查了很多論文,包括演算法理論分析和實驗分析。這就有點考驗程序員成色了
5.系統
5.1 深入理解計算機系統csapp
我在其他回答講過這本書。cs入門基礎書
5.2 操作系統概念
目前紙質中文版事第九版。不過英文版更新到第10班了。建議直接看第十版。因為舊版本裡面wondows不是10最新版本已經同步到win10了。而且arm也更新到比較近的版本了
直接看這個
5.3程序員的自我修養
我在csapp的回答裡面講過,csapp在鏈接那塊感覺講得不是特別清楚,這本書比較清晰,但是有點老32位的。那部分應該屬於編譯器的部分不過我沒看過編譯器得教材,一點也不懂了。
5.4 UNIX系統環境變成
這本書有點老了,但是也能用,介面變化不大,就是系統編程,調操作系統api完成一些事情。
對系統編程不熟悉的可以看一下。前面python的書裏也能系統編程,不過做了更上層封裝,保證可移植性。
這本書的姐妹篇還有好幾本,感興趣可以看,這是底層系統工程師必備技能了。沒啥好說的。
5.5操作系統精銳於設計原理
很經典的書,適合入門用。而且可以和上面的操作系統互補著看。最新的版本也出來了。中文版裡面不是win10,最新版是win10了,也有一些其他更新,建議直接看最新版。
5.6ARM嵌入式linux系統開發簡介
組成原理跟caspp有重合,linux系統調用編程跟apue有重合,原理跟操作系統教材有重合,不過有一些交叉編譯驅動啥的,別的書沒看到,算新的吧,工具書,不怎麼講原理,看了代碼迅速上手的。
5.7 計算機網路自頂向下設計
這本書已經出最新的英文版了,很經典。就是有點雜。TCPIP的話這裡直接調python標準庫了。如果想更多細節,就去看斯蒂文斯的書,自己從頭到尾實現一下協議。我自己沒寫過不知道工作量有多大。當時看完書本來想自己實現一個定製版tcpip協議。無奈學習效率比較低,雜事又多。就耽誤了。不清楚工作量有多大,知道的歡迎大佬提個醒。
6.機器人
6.1視覺SLAM14講
高翔博士vslam入門書
那可是真入門,連命令行都手把手教你,尤其不是計算機軟體出身的同學,如果缺乏計算機知識,一上來就整一堆代碼的確有點頭疼。所以很適合入門,非常推薦入門看
6.2 機器人學中的狀態估計
這塊內容算slam中的核心。包括卡爾曼濾波演算法啊,矩陣李羣之內的數學關係,隨機一致性採樣演算法啊,3d位移估計等全都是cv機器人這塊比較熱的東西。不過這本書比較經典,不涉及目前前沿的基於深度學習的3d重建,位移估計那些演算法。
6.3 計算機視覺種的多視圖幾何
基本上算slam的核心數學框架。搞slam非常值得看一看
6.4 點雲pcl從入門到精通
市面上介紹點雲處理的書就不多,這本書算入門書吧,工具書類型。裡面的例子基本就是官方文檔的代碼,沒改多少。出書想賺錢賺瘋了。全是官方教程漢化版吧。版本稍微有點低,不過api介面變化不算大。
pcl這個路啊,搞機器人視覺的ros基本避不開,但是這個庫坑不少。
6.5 機器人學導論
這本書雖然叫機器人,實際上就講機械臂的一些基本概念。差值運動規劃控制之類的。入門書,各個方向想深入,機械電氣控制嵌入式演算法都是深坑。
7.圖形學
7.1計算機圖形學原理與實踐
非常經典的入門書
裡面涉及大量經典演算法,作者也給了參考文獻。復現一些siggraph的論文我覺得比leetcode有成就感多了。從cpp開始擼自己寫庫代碼是越寫越熟練。不過中文版只有基礎班,精華都在後半部分居多,有英文版可以參考
7.2計算機圖形學
這是opengl版
上面那本書是使用微軟的庫,還是opengl這種直接c++ 介面,一邊學習一邊做一些圖形學應用。這兩本書可以結合看。
7.3 計算機圖形學幾何體 數據結構
其實不僅圖形學會用這些數據結構,pcl裡面一些點雲也這些數據結構
如果不看的話直接查論文也行。稍微系統一點概述
8.異構計算
8.1 cuda高性能並行計算
入門cuda並行計算的書籍。有一些代碼示例,零基礎入門。其實還不錯。更多的示例代碼可以去官網找。
8.2並行計算導論
hpc入門書講mpi,openmp編程模型的。pcl裡面有openmp加速
9.數學
9.1 矩陣計算
數值線性代數,非常經典的教科書。如果寫高性能數學庫可以參考演算法
9.2 matrix cookbook
推公式看論文工科必備。裡面有矩陣微積分很多公式還有張量計算的。當工具書用。
9.3數值計算聖經
其實跟一些機器學習的書還有數值線性代數得書有不少部分重合。主要是這本書是按照C++寫的,比較符合我的口味。我肯定不會直接去調用一個函數解方程,自己去實現
9.4強化學習
這個看了一部分,還沒完全看完。這塊發展的比較快,而且我目前也不搞強化學習,完全擴充一下視野。看看大綜述論文也行。沒法評論,不過聽坊間傳聞還不錯。
感覺去年成長的有點慢。得保持專註了。而且還熱衷看哲學書政治學著作歷史小說,"做個碼農不務正業了"。而且還心心念想去搞生物。