學習一門技術的層次與方法
對一門技術的掌握分為下面幾個層次:
- 學會使用
- 掌握原理
- 優化改造
- 融會貫通
1. 學會使用
學習如何使用最快最有效的辦法就是傻瓜式模仿,跟著教程一步一步的去做,寫出一個可運行的demo,先有一個感性直觀的認識。然后可以試著對代碼做一些小的改動,換個參數、換個名字、調整下順序,看看結果有什么不同。
2. 掌握原理
要想掌握原理最直接的辦法就是閱讀源碼(Read the fucking code),但是很多人沒有掌握閱讀源碼的有效方法。面對龐大錯綜復雜的源碼,很多人會不知所措,無從下手。有的人從入口文件,一行一行代碼的去看,但是這樣效率很差,看著看著自己就暈掉了。
我覺得應該按照先宏觀、再微觀的順序。
先宏觀
就是先對一個系統或者一個第三方庫的大體結構和原理有個簡單的認識,就像看書先看目錄,旅游先看路線一樣,有了整體的認識之后,再后面微觀分析的時候,才不容易迷路。具體辦法有,看官方介紹,看別人總結的文章,向有經驗的人請教,當然,對于已經有了大量經驗的人來說,也可以直接去看源碼,不過要注意詳略得當,只看整體結構,先忽略實現細節。
再微觀
為什么要再微觀呢?想必大家都有這樣的經驗,看了很多別人寫得技術文章,看的時候感覺也懂了,但是讓自己去講一遍,或者去實現一下,又做不到了。研究細節,又有什么好的辦法呢?
我覺得最有效的辦法就是帶著問題去讀,這樣會更有目的性。問題是一個切入點,讓你面對源碼的龐然大物時不至于無從下手。同時它還是一條線索,抓住它,你就不容易迷失在代碼的浩海里。一個好的問題不應太大,太泛泛,就像是一根繩子不能太粗,太粗了就不容易握住。
當我們解決完一個問題,為了檢驗自己的理解是不是對的,同時加深印象,可以向其他人講解,別人也可以向你提問,如果對方的問題你都能回答上來,那么才算真的理解了。最好再把自己的理解整理成文字,發到網上,一方面鍛煉寫作能力,還能讓更多的人對你的理解進行檢驗,同時還能結交更多優秀的人。
知識之間是有依賴與聯系的,一般解決了一個問題,還會引起其他問題。通過不斷的解決問題,你會發現自己對一個系統的了解越來越深入,系統的結構在你腦海里開始展現出清晰的畫面。
3. 優化改造和融匯貫通
在理解了一個技術的原理后,我們還需要知道它有哪些優點、哪些局限,適用于哪些場景,當其不能滿足我們的需求時,則需要對其進行優化改造。
更進一步,則是對技術的融匯貫通,能將一個技術的思想應用到其他場景,做到手中無劍,心中有劍的境界。
作為一個Android工程師,我目前還處在第二階段,有許多東西要去學習,接下來我會嘗試從上層到底層,去研究一些Android方面的技術原理,包括第三方框架、Android Framework、虛擬機、操作系統等,希望和大家一塊交流學習。