一、前言
前幾天有同事過來,讓我推薦一本 Linux 系統的書籍。
我就問他 2 個問題:
你想學習 Linux 哪一個層次:核心層?驅動層?應用層?
你的目標是什麼:是學習 Linux 系統的設計架構?某個模組的驅動開發?還是僅僅想系統學習一下應用程式程式設計?
最後,給他推薦了下面這本書:
後來我又想了一下自己的選書、讀書過程,索性總結一下,給需要的小夥伴參考一下。目的是拋磚引玉,如果您有更好的實踐方法,還請多多分享!
二、選書
1. 重視選書的過程
在現在的市場上,無論是哪個領域的技術書籍,都是一抓一大把,其中就一定存在質量、講解水平參差不齊的情況。
我們作為學習者來說,一定要擦亮眼睛,多花一點時間來選書,要重視選書這個過程。
如果隨便選了一本書,學習到一半的時候才發現內容不對自己的胃口,那就是在浪費時間、浪費生命。
如果在剛開始就能夠花點心思和時間,學習起來能進入心流的狀態,對於個人的知識理解絕對是事半功倍的效果。
換句話說,選書的時間絕對不能節省。
2. 如何選書
我一般選書的途徑有三個步驟:
Step1:廣撒網
根據想看的技術主題,在 google 搜尋引擎中,搜尋相關的關鍵字。
有時候我會特意加上 CSDN、知乎等關鍵字,這兩個平臺中,推薦的技術性書籍質量都是比較高的。
另外,需要注意推薦者的一些背景資料,你可以瀏覽一下他的一些文章,從文章內容中如果能判斷出作者的專業深度、廣度都比較厲害,那麼他的推薦權重就比較高。
基本上看了十幾篇推薦文章,就可以梳理出這個技術主題排名靠前的幾本書了。
Step2:看評價
針對梳理出來的幾本書,到豆瓣、噹噹網上找一下對這幾本書的評價。
我們們都知道,現在的購物網站上刷好評的比較多,但是好在對於書籍這樣的商品,我感覺刷單的很少,也就是說別人對一本書的評價,基本上可以認為是客觀的、基於事實的。
大家一般都會從書籍的覆蓋範圍、難易程度、自己從中的收穫,這幾個角度來對一本書進行評價。
在這個步驟中,我們就可以對基本候選的書籍在心中有個分數的排序。注意這個排序不是絕對的按照內容的深淺,而是根據自己的專業水平,來確定哪一本書與目前的自己最匹配。
這個時候千萬不要高估自己,選擇最難的那一本,如果這麼做了,不僅僅是浪費時間的問題,更重要的是會導致自己一知半解、嚴重打擊自信心。
經過這個步驟之後,其實已經能夠決定要買哪一本書了。
如果排在第一和第二位置的這兩本書,在我的心中評分差距比較大,我會直接選擇評分最高的第一本書。
如果它倆感覺差不多,那麼我會繼續下一個步驟,翻一翻樣張,看哪一本書的風格更適合自己的胃口。
我之前在學習 C++ 的時候,下面這兩本書最後作為候選:
後來在搜尋對它倆的評價時發現,第一本書的理論性更強一些,而當時我的主要目的就是系統的把 C++ 11 版本的語法掌握好,因為腦袋裡理解的 C++ 已經快變成老古董了,11 版本中的很多語言讓 C++ 幾乎快變成一門新的語言了。第一本書與我的目的更匹配,所以我就選擇了這一本。
Step3:對胃口
在很多賣書的網站上,都會提供目錄以及一些樣張;如果找不到,那就搜尋一下是否可以找到 PDF 檔案來瀏覽一下。
主要的目的就是看作者的寫作風格是否對自己的胃口。兩本難分伯仲的書籍中,選擇自己喜歡的風格,學習起來也會更帶勁一些,因為情緒的力量是無法估計的。
注意:不要貪多,只要以其中的一本作為精讀的教程就可以了。如果兩本你都喜歡,可以都買回來,以其中的一本為主要學習目標,其他作為交叉參考。
另外,我個人還有一個感覺比較不錯的選書途徑,那就是 B 站的視訊評論區。
現在的 B 站,真的是如日中天,從中年油膩大叔到各種二次元,都可以在這裡找到自己感興趣的視訊內容。而且 B 站也是我們技術開發人員的福地:越來越多的高質量視訊課程都可以找得到,例如:李治軍老師的作業系統,侯捷老師的 C++...
在看這些視訊的時候,你不妨多看一眼後面的評論,與這個視訊相關的其他視訊、書籍、部落格等等,都有可能被推薦,而且推薦的內容質量一般都比較高。
3. 電子書 or 紙質書
每個人的看書習慣都是不同的,有些人喜歡看視訊教程,有些人喜歡看 PDF 電子書,有些人喜歡看紙質書籍,每一種都各有優缺點。
我看書比較喜歡做筆記,如果是 PDF,就在學習過程中畫思維導圖;如果是紙質書籍,我就會在樹上寫寫畫畫、記錄自己的理解。
根據個人的經驗,如果是很厚的書籍(超過 500 頁),我會盡量選擇紙質書。
因為在學習的過程中,難免會回過頭去參考前面的內容,用紙質書籍就比較方便了,只要記住頁號,或者放一些書籤,很快就可以找到。如果是 PDF 的話,那麼得用滑鼠下拉、滾動多次才能定位到前面的內容,很不方便,特別是需要多次來回參考的時候。
如果只能選擇 PDF 的話,那麼就推薦你多用一些螢幕截圖工具來幫助你閱讀,例如:Snipast、Quicker,我之前推薦過第一款軟體,的確很好用,特別是在看文章、寫程式碼的時候。
三、讀書
1. 不要怕弄髒書
我是比較喜歡買二手書籍的,有的時候買回來一看,除了前幾張有少許的劃線和筆記之外,其他部分就跟新書一樣,真的是糟蹋了一本好書。
但是到了我手裡之後,如果是作為精讀教材的,我大概率會把這本書弄得“滿目瘡痍”。這不是說不愛惜書本,只有做了大量筆記之後,才能記錄下自己的學習過程。
如果認為某一本書是經典想收藏,那完全可以買 2 本,一本用來學習,另一本用來收藏。
下面這張圖是 C++ Primer 裡的塗鴉,這算是很整潔的了(請忽略醜陋的字型):
2. 消滅模糊性、不確定性
在學習的過程中,如果是已經理解的部分就快速讀過去;如果是經過自己的思考之後,才理解的部分,就把思考過程中的關鍵節點資訊記錄下來;如果自己思考之後還是不理解,這時候千萬不要放過自己,除了這本書之外,還可以求助谷歌、求助其他相關書籍。
我個人的經驗是這樣子:如果某一個知識點總是模稜兩可,沒有一個確定的理解,總是感覺如鯁在喉。如果經過查詢其他資料之後,仍然不能得到讓自己信服的理解,那麼我就會按照其中可能性最大的那個方向去理解。
隨著學習的深入,當發現這個強加給大腦的理解,與其他的知識點矛盾的時候,再回過頭來對各種可能性進行再次梳理。經過這樣的幾個來回,就可以把那些模糊性徹底消滅掉。
3. 一定要做筆記
不知道你是否有這樣的體驗,在看書的時候,眼睛對大腦說:嗯,這部分內容我掌握了。但是如果讓你立刻離開書本,你的手可能又會對大腦說:我寫不出來。
做筆記就是強化自己的理解過程,某些知識點現在可能理解了,但是過一段時間極有可能又忘記了。
有些人說書要越讀越薄,也有人說書要越讀越厚,這其實是從不同的角度來看的。
對於我來說,做筆記就是一個讓書越來越薄的過程。
在第一遍看書的時候,可能有 50% 的內容是已經理解的,剩下 40% 的內容是經過自己思考之後理解的(這部分的筆記是重點),餘下的 10% 是仍然沒有理解的。
那麼在第二遍看書的時候,就可以重點看自己的筆記了,把 40% 經過思考後理解的部分再次複習一遍,加深印象,這樣就相當於書本變薄了一半。
如果以後還想看第三遍,很可能就只剩下 1/3 -- 1/4 的內容是需要看的,這個時候,你就可以明顯的感覺到自己在進步,有很強的成就感。
下面是在學習 Linux 核心內容時做的筆記,以後當我想再複習的時候,只要看這些小卡片就可以了。
4. 怎麼確認自己真的懂了
首先,你可以參照解 bug 時的“小黃鴨除錯法”,把書本上的內容講給自己聽。注意:是用嘴巴說出聲音來給自己聽,而不是在大腦裡自言自語。
其次,把自己理解的過程總結成文章,這應該是更好的方式。別人通過閱讀你的文章,從不理解變成理解了,那就說明你自己是真的懂了。
以上就是我個人的一些學習心得,希望能夠對您有一絲絲的幫助。
最後還有一句話送給你:欲速則不達!
星標公眾號,能更快找到我!
1. C語言指標-從底層原理到花式技巧,用圖文和程式碼幫你講解透徹
2. 原來gdb的底層除錯原理這麼簡單
3. 一步步分析-如何用C實現物件導向程式設計
4. 都說軟體架構要分層、分模組,具體應該怎麼做(一)
5. 都說軟體架構要分層、分模組,具體應該怎麼做(二)