1. 程式人生 > >觀千劍而後識器——讀原始碼的感受

觀千劍而後識器——讀原始碼的感受

觀千劍而後識器——讀原始碼的感受
總想在網上買本講gnu coreutils原始碼的書,但沒有。類似於linux,gcc,spark之類的原始碼太複雜,我吃不消,為此,只能自己慢慢啃。
如果說沒有感受,那是不可能的。你一個人在黑暗中爬,肯定有害怕的時候。
我現在有一些小的心得。
第一、買一款新的筆記本。如安裝好win10正版系統的筆記本,因為win10的微軟商店裡有ubuntu linux的應用。在ubuntu中可以任意折騰。我學rails時,就下一個,玩廢了,就重新下一個,docker我不會玩,感覺不要花太多時間在安裝系統,配置上。
第二、用vim+ctags之類工具輔助讀,另外make,gcc肯定是要安裝的。
我的想法時,儘量安裝低版本的gcc,因為我讀coreutils4.5.1是低版本的,然後進入scr目錄,試著修改某個.c檔案後,
sudo make
把全部程式碼編譯一次,再在src下執行命令。
這種效果是最好的,我的想法是,盡情的修改,把程式碼弄亂了,就重新解壓一份。
第三、讀某個命令的程式碼之前,儘量掌握命令的用法。如果命令你都不會用,C的語法不熟悉,再加上對一些系統呼叫沒用過,涉及到的演算法又不懂,那就真如看天書了。
一般,當知道某個命令的用法後,先把檔案從頭到頭快速的過一遍,你總能從中找到熟悉的用法 ,發現就,以此為根據地,再慢慢展開。
第四、快速讀程式碼
第五、讀程式碼時,如同陶潛說的,不求甚解。不要全部搞懂。能理解一部分也是勝利。第六、重複讀程式碼。同一段程式碼,每天都讀一遍。程式碼讀100遍,其義自現。
第七、在讀程式碼時,若遇到不理解的用法,就寫測試程式碼。如我看到作者寫程式碼時,把函式名和括號分隔開,覺得奇怪,於是自己寫測試程式碼,果然能通過。如比給陣列傳值時,
int a[10]={1,2,3,};
看到沒,最後一個逗號是多餘的,這種程式碼也能通過。反正自己寫測試程式碼,驗證自己的想法。
第八、平時多寫程式碼。程式碼要多寫才熟悉。我只喜歡看,不喜歡動手,後來發現這不好。事倍功半。如果寫得多,讀程式碼也就快了。換句話說,大師們的程式碼我們寫不出來,連讀都讀不懂嗎?不可能的。
第九、多讀演算法、資料結構、編譯器相關書。我原來看awk,發現自己心急了,對nfa實現正則表示式的演算法不懂,程式碼根本看不懂的。讀ruby0.45時,自己對編譯原理沒有深刻的理解,如何讀?沒辦法的。讀diff之類命令的原始碼時,對那個最長公共子串的演算法也要懂。總之,讀程式碼時,若對演算法理解清楚了,你會發現程式碼寫得真美。真是象珍珠一樣。字字珠磯。
第十、少上網。發現看程式碼時,可以聽聽音樂,但最好不上網。而且在網上也基本不能解決你的問題。既然選擇了讀原始碼,就是立志成為一流的人物,試想,如果網上能輕易找到資料,那一流人物豈不滿天下了。
今天先寫到這裡。