節選自:
上面說的太抽象,接下來就介紹一些我學習時候運用的一些小技巧,當然每個人都有自己的學習習慣,大家可以選擇性參考,我也只列舉了我使用的一些典型技巧。
看書絕對不是一件容易的事情,有大量的技巧在其中,其中最讓我感受深刻的就是:
不要從第一頁開始翻
不要一頁一頁的翻
我介紹一些我個人看書的技巧
如果開始看**,一定要記住,自己已經站在乙個非常底層的高度度了,能夠有能力閱讀**,就意味著你必須對整體的結構有比較清晰的認識,如果你都不知道這個結構,那看**為時太早。
無論是什麼樣的**,其實思路都很類似,即使linux核心是用c這種面相過程的語言編寫,但是這麼多年發展下來,linux核心已經帶有了大量面對物件程式設計的特點。
在看**的時候也是有兩種不同的高度可以選擇,我先解釋其中最細緻的一種:
乙個函式寫下來經常上百行,但是你需要一行一行的看麼?肯定不能,那清晰認識乙個函式的結構就很重要。
乙個函式就是為了解決乙個問題,函式名基本都能說明其功能,函式引數是輸入,返回值就是輸出,函式體就是整體的執行邏輯。在函式體內部,也基本都是類似的邏輯,先是對各種輸入引數進行檢查,然後書寫功能邏輯,然後構造輸出的結果。所以乙個函式寫下來總是這樣的一種結構。
輸出結果 函式名(輸入)
準備引數
功能邏輯
構造輸出結果
返回輸出結果
}乙個函式其實就是乙個方法,閱讀的難度比書寫的難度要低,書寫**需要考慮的問題非常多,但是在閱讀**的時候問題就簡單很多,很多書寫**過程中需要考慮的問題在閱讀**的過程中就不需要考慮
閱讀**還有很多技巧,例如如何在帶有goto語句的**中快速理解邏輯,如何界定那些注釋是可以忽略的,如何將一些**邏輯看成一塊整體內容,何時應該跳到更深的一層函式閱讀等等。這些都需要平時的經驗積累。
看**有乙個粒度問題,我們不能一行一行的看,也不能乙個乙個函式的看,我之前提到了,linux核心有大量物件導向程式設計的影子,所以在看大量**的時候,必須學會物件導向程式設計的思維模式。這樣對自己在大量**閱讀中提供大量參考意見。
或許有人會告訴你,物件導向程式設計就是弄明白什麼是物件、如何寫乙個class就可以了。確實,學習物件導向程式設計,弄明白物件是基礎,不過我覺得可以再拔高一點,理解一些更抽象的概念,在這些抽象概念的指導下去學習,可以有更多的指導意義。
如果能夠理解上述的這幾個抽象,那在大量**中如何游刃有餘就相對容易了,有乙個簡單的套路:
(1) 在較高的角度,弄明白乙個系統為了解決什麼問題,應該有哪些抽象
(2) 在對整體結構有所了解以後,花心思看看這些抽象對應的領域模型,因為一般情況領域模型很龐大,所以看的時候也需要有步驟的進行拆解學習。
(3) 在對領域模型有所了解後,開始看領域驅動類,想明白為什麼會有這些操作。
(4) 在上述準備好後,就可以花費一些時間去看各個函式的具體實現,並且在看的過程中多思考領域模型為什麼這麼設計。
文中的內容就是我個人的一些學習linux核心的心得,這個心得其實不僅僅可以用於學習linux核心,在大量場景下也適用。還有很多內容可以談,限於能力有限,很多東西沒辦法用文字表達出來,等什麼時候能力足夠了,再繼續把後續內容補上。
談談如何學習Linux核心
參考 學習核心的好處很多,在學習過程中不僅可以夯實大量理論基礎,還可以學習到很多編碼慣用法,提公升學習能力和分析能力。一 確立高度,明確目標 在學習核心過程中最容易犯的錯誤,也是非常難掌握的其實是你站在乙個什麼樣的高度上去學習。站什麼樣的高度去學習也與自身的能力相關,所以這個問題其實更多是在新開始學...
談談如何學習Linux核心
原文 學習核心的好處很多,在學習過程中不僅可以夯實大量理論基礎,還可以學習到很多編碼慣用法,提公升學習能力和分析能力。一 確立高度,明確目標 在學習核心過程中最容易犯的錯誤,也是非常難掌握的其實是你站在乙個什麼樣的高度上去學習。站什麼樣的高度去學習也與自身的能力相關,所以這個問題其實更多是在新開始學...
談談新手如何學習PHP
文章開頭就列舉了那麼多 難免會讓大家感覺有點ad的意味,但是不容質疑的是,默默的確有那麼丁點的表現慾 雖然有時候過於細緻會被人說婆媽,但是幸好這種細緻對於程式設計來說,還是蠻有益的!從默默自己向別人問怎麼學php開始,到後來不少人又來問默默怎麼學php,不管默默是新手,還是老鳥,似乎總是感覺摸不出一...