在下是一個碼農,也號稱是一個老濕,平生閱碼農無數(吹牛的 ^-^)。經由大量的案例,我能夠理解了為什么很多碼農學了很多年Linux,還是感覺沒有掌握要領,仍然內心崩潰,最終對Linux吐血而亡,正所謂:人世間最大的痛苦,莫過于,碼農落花有意,而Linux流水無情.......
在這個2018農歷七夕之夜,我決定寫一點什么,來緬懷很多童鞋在Linux世界里逝去的青春,撫慰你內心的失落、彷徨、迷茫乃至絕望。
很多為Linux吐血而亡的程序員都犯了一個通病,那就是一開始就陷入無窮無盡的細節(jié),比如一開始就陷入源代碼情景分析。情景分析這樣的書,無疑是好書,但是你把《新華字典》從第一個單詞,背到最后一個單詞,你仍然寫不出一篇作文。
若言琴上有琴聲,放在匣中何不鳴?
若言聲在指頭上,何不于君指上聽?
《琴詩》
蘇軾
我建議的學習方法是,反復迭代螺旋上升法。如下圖:
下面我們來論述學習Linux內核的各個階段
第一階段: 先形成整體輪廓,比如對Linux的進程、內存、I/O、驅動模型有一些基本的認識,開始寫一些簡單的內核模塊,比如hello-world模塊、globalmem、globalfifo這樣的字符驅動,你一定要動手。這個時候你可以看的書是《Linux內核設計與實現》,還有驅動的書。
第二階段:從事具體的工作,在某個子系統(tǒng)(無論是進程、內存、IO還是驅動)從事工作,加新的功能,修bug,發(fā)patch,加深對知識的理解。這階段你如果有興趣,也有耐心,可以讀《深入理解Linux內核》、《深入Linux內核架構》這樣的書,不過懶得看也沒有關系,因為你工作的時候,會自然而然地自己進行代碼分析。
第三階段(回歸第一階段):你已經工作了一段時間,寫了一些代碼,修復了一些bug,提交了一些patch,然后你重新回來迭代整體的知識框架,搞清楚各個子系統(tǒng)內在的聯系。這階段你如果有興趣可以讀《深入理解Linux內核》、《深入Linux內核架構》這樣的書,不過懶得看也沒有關系,因為你的工作讓你自己有了分析的能力。
第四階段(回歸第二階段):從事具體的工作,在某個子系統(tǒng)(無論是進程、內存、IO還是驅動)從事工作,加新的功能,修bug,發(fā)patch,加深對知識的理解。這階段你如果有興趣可以讀《深入理解Linux內核》、《深入Linux內核架構》這樣的書,不過懶得看也沒有關系,因為你的深入的工作,會讓你自己具備了理清脈絡和深入細節(jié)的能力。
接下來怎么辦?不停地循環(huán)!生命不息,循環(huán)不止?。汕槿羰蔷瞄L時,又豈在朝朝暮暮。
你千萬不要倒著學,先跑進去細節(jié),跑進去一行行,總共2000萬行地擼代碼,這樣量太大,整體性太弱,各個組件的關聯很難建立。且中間無法用前期的成就感,來催生后期學習的動力,只會強擼灰飛煙滅。你不從外圍看Linux,橫著看,豎著看,你是看不到Linux的真面目的。
橫看成嶺側成峰,遠近高低各不同。
不識廬山真面目,只緣身在此山中。
據我個人所知,也有極少量的人,一開始就以情景分析的方法,逐行解釋代碼,最后也學有所成,但是這樣的人,都具有非凡的毅力,不是一般人可以去模仿的。
一般的人,類似我這樣的懶惰分子,需要用整體帶動部分的方法。正如我們看一個別人的.c文件,你不可能傻到從第一行讀到最后一行。你肯定是先搞清楚這個.c的整體功能,對外接口API,再深入到static的內部函數,由外及內,繼而由內及外。
下面我們用一個球來比如Linux,最外圈的球是整體的Linux,球內的小球是Linux的某個組件。最開始你這樣看Linux:
接下來你把其中的某些子系統(tǒng)放大,整個Linux這個氣球也隨著變大:
隨著掌握的越多,這個球越來越大:
然后,某個領域成為你的專業(yè)領域(比如你文件系統(tǒng)牛逼,比如你內存優(yōu)化牛逼),這個球里面這個專業(yè)領域就凸起了:
-
內核
+關注
關注
3文章
1383瀏覽量
40434 -
Linux
+關注
關注
87文章
11350瀏覽量
210460 -
源代碼
+關注
關注
96文章
2946瀏覽量
66973
原文標題:宋寶華: 迭代螺旋法——關于Linux學習方法的血淚建議
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論