目前我大約看完了CSAPP,MIT的演算法導論看了前800多頁和後面小幾百頁,餘下的部分不多。300多頁的密碼學書《Understanding Cryptography》,當時的《離散數學及其應用》也都基本看完了。目前讀完頁數最多的書是CSAPP。600多頁的《經濟學原理》當然還有一些其他不知名的CS書籍。
首先說必要性。如果你真的想瞭解CS的一個領域,那麼讀這個領域的經典教科書是一定需要的,而且盡量讀完。如果想了解計算機組成原理,那麼大衛的那本書一定要讀。如果想學好離散數學,那麼《離散數學及應用》也基本是必讀。如果想成為一名合格的軟體工程師,那麼CSAPP也是必讀。如果想用C開發UNIX相關,那麼APUE也是必讀的。如果想了解演算法、可計算性等議題,那麼《演算法導論》也是必讀的。
其次是題主需要克服看到這些厚書的心理問題。這個問題的最主要原因還是面對這些厚書產生了心理上的恐懼、畏懼,但是其實一本900頁的書,你如果能養成習慣,靜下心來,一天讀30頁,30天就讀完了。一天讀15頁,那麼60天,一天讀10頁,90天,也就三個月。我之前看書也是非常害怕的,但是後來發現當養成習慣后,有大把自己的時間看書時,書真不抗讀,就怕你用這時間天天跟出去玩了。即使你只是明白了其中的6成,也是500多頁的知識。
提高看書效率的建議:
1、對於有難度的書籍,比如物理、數學、計算機這些學科,可以試著在Youtube和B站上找對應的課程視頻。CSAPP有CMU的,《Understanding Cryptography》也有Youtube對應的視頻,離散數學的視頻就更多了。看書其實更累更耗精神,而聽別人講則輕鬆很多,而且可以暫停與反覆看,如果覺得容易可以加速視頻播放,加快進度。
2、試著記錄自己的學習的進度,並且計劃自己的讀書進度,我有一個資料夾,記錄自己學習看書的進度,哪本書什麼時候看到哪裡了,一目了然,回頭一看,一個月沒看書了,我自己就羞愧了。下面是我看密碼學的進度記錄,我就是邊看視頻邊學的。
# 密碼學
Book 20190701 Christof Paar & Jan Pelzl 《Understanding Cryptography》 29
20200209 Christof Paar 《Introduction to Cryptography》2/24 modulus operation, groups and rings
20200305 Christof Paar 《Introduction to Cryptography》3/24 stream ciphers, random number gneerators, unconditionally
20200306 Christof Paar 《Introduction to Cryptography》4/24 stream ciphers, linear feedback shift register (LFSR)
20200307 Christof Paar 《Introduction to Cryptography》5/24 看書到61頁 DES 完成1半
20200307 Christof Paar 《Introduction to Cryptography》5/24 看書到65頁 DES 完成
20200318 Christof Paar 《Introduction to Cryptography》6/24 看書到65頁 DES 解決與破解 但是對於IP SBox還是有疑問
20200319 Christof Paar 《Introduction to Cryptography》7/24 AES 完成第一部分,群、環、域,有限域:素數域與擴張域
20200320 Christof Paar 《Introduction to Cryptography》7/24 AES 完成,GF的多項式,域上的乘法,除法,與乘法逆
20200321 Christof Paar 《Introduction to Cryptography》8/24 書至106頁 AES 內部 完成,Byte Substitution 以及 SBox 的構造(confusion),Shift Rows,Mix Column用到了矩陣乘法,所以,如果一個Byte中的bit被改,結果會通過矩陣乘法影響所有的(diffusion)
20200322 Christof Paar 《Introduction to Cryptography》9/24 AES 的模式 完成,ECB(electronic code book)、CBC(cipher block chain)、OFB (output feedback),但是GCM要自己看
20200329 Christof Paar 《Introduction to Cryptography》10/24 暴力破解,3DES安全性,書到144頁,沒完全懂,但是GCM大約明白
20200330 Christof Paar 《Introduction to Cryptography》11/24 egcd,phi function,Euler Theorem 書到170頁,過於簡單,egcd還可以,但歐拉定理證明沒有
20200402 Christof Paar 《Introduction to Cryptography》12/24 RSA 公鑰加密,還需要看剩餘定理CRT、大素數的生成
20200404 Christof Paar 《Introduction to Cryptography》12/24 看書到204頁,但是他沒能講出CRT的精神,但是素性測試與Padding還是有必要瞭解的
20200415 Christof Paar 《Introduction to Cryptography》13/24 書到216頁,primitive element(generator) 迴圈群,子群
20200428 Christof Paar 《Introduction to Cryptography》15/24 書到238頁,DHKE, Elgamal Encryption and protocol
20200430 Christof Paar 《Introduction to Cryptography》17/24 書到255頁,ECC, ECDH
20200501 Christof Paar 《Introduction to Cryptography》18/24 DSA, RSA signatures algorithm
20200614 Christof Paar 《Introduction to Cryptography》19/24 RSA signatures algorithm, Elgamal Digital Signatures Algorithm, Existential Forgery Attack,, 從簽名偽造原文的攻擊方法。
20200621 Christof Paar 《Introduction to Cryptography》19/24 書到293頁 RSA signatures algorithm,RSA可以加入固定的padding來解決。ECDSA與DSA類似都是用一個群與子群,只是ECDSA是在曲線上的群擔任
20200623 Christof Paar 《Introduction to Cryptography》21/24 書到302頁 Hash function SHA1
Hash functions. preimage resistance, second preimage, collision resistance, birthday attack, collision resistance.攻擊碰撞hash次數與hash function結果位數(bits)的關係
20200624 Christof Paar 《Introduction to Cryptography》22/24 書到331頁 MAC,只有authentication,沒有repudiation,repudiation需要公鑰簽名
20200705 Christof Paar 《Introduction to Cryptography》23/24 書到341頁Key Establishment
20200705 Christof Paar 《Introduction to Cryptography》24/24 書到351頁 Man in the middle attack, CA
你看,這300頁的書,讀了5個月斷斷續續,也讀完了。
另外還看了曼昆的經濟學原理,北京大學出版社出的,主要在學CS以外找點樂子,同時也瞭解一下這個社會的經濟運行,不要讓自己總陷入一個領域。2019年開坑,2021年才看完。所以,你看,能夠衡量你自己的看書的進度其實是非常重要的。我讀的慢一些,因為已經平時需要工作。
20191228 曼昆《經濟學原理》7 前言
20191231 曼昆《經濟學原理》17 第1章完成 十大經濟學原理
20190104 曼昆《經濟學原理》42 第2章完成 像經濟學家一樣思考
20190114 曼昆《經濟學原理》56 第3章完成 貿易的好處
20190114 曼昆《經濟學原理》76 第4章完成 供給與需求
20190127 曼昆《經濟學原理》94 第5章完成 供給與需求的彈性
20190131 曼昆《經濟學原理》111 第6章完成 供給、需求與政府政策 工資供給與勞動供給,利用第5章與第4章
20190201 曼昆《經濟學原理》130 第7章完成 生產者、消費者與市場效率 生產者剩餘、消費者剩餘,效率,平等
20190203 曼昆《經濟學原理》143 第8章完成 供給、需求與稅收,稅收的代價,無謂損失
20190203 曼昆《經濟學原理》162 第9章完成 國際貿易 關稅
20190209 曼昆《經濟學原理》179 第10章完成 外部性,對社會有正或負的收益即不索取或支付的行為
20190210 曼昆《經濟學原理》193 第11章完成 公共資源
20190212 曼昆《經濟學原理》213 第12章完成 稅收的設計
20190213 曼昆《經濟學原理》228 第13章完成 生產與成本
20190223 曼昆《經濟學原理》246 第14章完成 市場競爭中的企業
20190303 曼昆《經濟學原理》271 第15章完成 壟斷,價格歧視有利於社會福利
20190323 曼昆《經濟學原理》287 第16章完成 壟斷競爭
20210322 曼昆《經濟學原理》306 第17章完成 寡頭oligopoly
20210324 曼昆《經濟學原理》325 第18章完成 勞動市場經濟學
20210326 曼昆《經濟學原理》340 第19章完成 收入與歧視
20210326 曼昆《經濟學原理》356 第20章完成 收入不平等與貧困
20210418 曼昆《經濟學原理》398 第22章完成 微觀經濟學前沿
微觀經濟學完結,開啟巨集觀經濟學
20210423 曼昆《經濟學原理》398 第23章完成 一國收入的衡量
20210501 曼昆《經濟學原理》433 第24章完成 生活費用的衡量
20210501 曼昆《經濟學原理》457 第25章完成 生產與增長
20210502 曼昆《經濟學原理》475 第26章完成 儲蓄、投資和金融體系
20210522 曼昆《經濟學原理》499 第27章完成 金融學的基本工具,貨幣量,利率,市場有效、無效性,理性與非理性
20210522 曼昆《經濟學原理》511 第28章完成 失業,有的人不想工作,或者退出了勞動隊伍
20210523 曼昆《經濟學原理》511 第29章完成 貨幣,主要講美聯儲,貼現率,聯邦基金利率
20210530 曼昆《經濟學原理》550 第30章完成 傾向增長與通貨彭脹
20210605 曼昆《經濟學原理》573 第31章完成 開放經濟的巨集觀流經學:基本概念
20210625 曼昆《經濟學原理》573 第32章完成 開放經濟的巨集觀流經學
20210724 曼昆《經濟學原理》666 第35章完成 短期經濟波動
20210725 曼昆《經濟學原理》688 第36章完成 最後的思考
記錄進度可以讓你自己知道自己在讀什麼書,以及讀的節奏大約什麼樣,要記錄才能有效對自己的行為進行量化的評估。
3、記筆記。學習是一個積累的過程,隨年齡生長,記憶力下降,很多時候,如果不時常回去看看很多東西會忘記。我有200多篇,2W多行的筆記。放在git上和好朋友分享,在程式設計中解決了什麼問題,在書上看了什麼有價值的內容,我都會有意識地記下來。也不限於技術,心理學、金融、炒股、生活技巧,無一不包。
4、一本書裡遇到一小部分讀不明白的東西,可以跳過,不要糾結,不要卡住,可以先把結論記住,比如RSA中的剩餘定理和歐拉定理,可以不要關心怎麼來的,如果證明沒有看懂可以先試著帶著這些結論向後讀,後面的內容也不一定強依賴於前面,一個RSA沒看明白,不影響看後面的其他演算法。學習是螺旋上升的,我在讀《演算法導論》的時候,其實的RSA就死活沒看明白死磕很久,作用不大,這還是演演算法發明者寫的書。後面我把數論和密碼學看了,回頭看看只能說《演算法導論》的RSA加密寫的不算太好。
5、以一本書為主,結合多種資料。如果一定要搞明白某一章,但是比較吃力,可以暫時停下來,看看維琪百科相關的內容,找找其他的資料來輔助。如果實在讀不下去,說明自己沒有到達這本書的水準,比如CSAPP,你如果連C語言和基本的x86彙編都不會,讀這本書就會相當的吃力。此時你應該放下這本書,找本C語言和x86彙編的書或者視頻看看。
6、多動手實踐,試著把《演算法導論》的演算法用python實現實現寫個二項堆、Fibonacci堆、AVL tree和RB tree試試,把CSAPP的作業和練習做一做,學網路的時候,玩玩Wireshark,看看HTTP是怎麼搞的,不要只一味地讀書。要實踐與讀書結合好,操作一遍你會加深你對這些內容的理解,計算機科學很多方向不是純理論的,需要大量實踐的,高手和普通人很大一部分就在於是不是真的自己動手做了,對於細節是不是清楚。