閱讀原始碼---與高手對話
最近公司組織基層員工學習android方面的知識。(包括閱讀framework部分的原始碼) 在周例會上大家都普遍反映出了對於閱讀原始碼方面的疑惑(公司開發人員大都是工作一年左右新生代).
歸納起來主要有以下兩點:
1.讀不懂程式碼,不知道原始碼裡面都要做什麼。(這部分也包含了對原始碼程式設計風格的不熟悉以及閱讀原始碼方面的經驗積累)。
2.沒有讀原始碼的動力,喜歡自己去寫一些程式碼而不是去花時間和精力去閱讀其他人的程式碼。針對以上
出現的問題在這裡也想總結一下閱讀原始碼的重要性:
1.閱讀原始碼就好比與高手對話,可以學到不少新鮮的東西。眾所周知,幹軟體開發這行當的大多都是自學成才,沒有人有時間和精力去手把手的教你如何編寫高效,美觀的程式碼(有這方面的書籍單大多也都是集中在理論部分)。那麼閱讀高質量的原始碼就應該算是一個比較好的捷徑了。
2.閱讀原始碼並不是一蹴而就的。隨著自己技術經驗的增長(所經歷過的專案,遇到過的實際問題等),對同一段原始碼的理解都有所不同。我把整個的對原始碼的理解過程分為“what”,"how","why"三個階段或者說是三個方面。“what”即瞭解基本概念,程式碼都完成了哪些功能。"what"涉及到閱讀原始碼的入門部分。這部分可以通過google等去了解。不過有些也沒有那麼簡單了(像一些網路協議,驅動程式等)。"how"即瞭解其程式碼內部的運作機理,能夠繪製出原始碼的流程圖和架構圖。那麼這部分內容就算是工作量最大的一部分了,也是閱讀原始碼的最直接的目的。"why"即瞭解這部分程式碼為什麼這麼設計?其實現和想法有何優缺點等。這部分屬於提高內容了。如果能以這種角度將程式碼分析總結出來,我想可以在你的簡歷裡涉及到這部分的內容標註上“精通”了O(∩_∩)O~。這樣細分下來,我們就明確了每個階段需要完成的任務。
3.現在開源的專案特別多,尤其是一些成功的,具有實戰意義的大規模專案原始碼(例如android,webkit等)。客觀上也提供給我們良好的學習環境和機會。
4.如果僅僅是滿足於按照自己的思維想法去寫程式,那麼就等於一直是自己與自己下棋,總不會有大幅度的提高(個人的能力和智慧畢竟受限)。閱讀程式碼猶如同高手過招,可以學習到很多程式設計方面的實戰技巧(很多是書本上學不到的)。
5.不僅僅限於整個專案或者程式碼的理解。分散在原始碼中各處的一些有用的函式或者工具類也是我們閱讀原始碼的動力。你閱讀的程式碼越多,見識越多,那麼今後處理問題的能力就越強。而且有很多程式碼也要有選擇的去精讀和泛讀。
以上是我最近在工作學習中的一些感想,可能有詞不達意的地方,歡迎大家指點。
相關文章
- 【原始碼閱讀】AndPermission原始碼閱讀原始碼
- 【原始碼閱讀】Glide原始碼閱讀之with方法(一)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之into方法(三)原始碼IDE
- Appdash原始碼閱讀——Annotations與EventAPP原始碼
- Appdash原始碼閱讀——Recorder與CollectorAPP原始碼
- 【原始碼閱讀】Glide原始碼閱讀之load方法(二)原始碼IDE
- ReactorKit原始碼閱讀React原始碼
- Vollery原始碼閱讀(—)原始碼
- NGINX原始碼閱讀Nginx原始碼
- ThreadLocal原始碼閱讀thread原始碼
- 原始碼閱讀-HashMap原始碼HashMap
- Runtime 原始碼閱讀原始碼
- RunLoop 原始碼閱讀OOP原始碼
- AmplifyImpostors原始碼閱讀原始碼
- stack原始碼閱讀原始碼
- CountDownLatch原始碼閱讀CountDownLatch原始碼
- fuzz原始碼閱讀原始碼
- HashMap 原始碼閱讀HashMap原始碼
- delta原始碼閱讀原始碼
- AQS原始碼閱讀AQS原始碼
- Mux 原始碼閱讀UX原始碼
- ConcurrentHashMap原始碼閱讀HashMap原始碼
- HashMap原始碼閱讀HashMap原始碼
- PostgreSQL 原始碼解讀(3)- 如何閱讀原始碼SQL原始碼
- basictracer-go原始碼閱讀——SpanRecorder與wireGo原始碼
- JDK原始碼閱讀:String類閱讀筆記JDK原始碼筆記
- JDK原始碼閱讀:Object類閱讀筆記JDK原始碼Object筆記
- 如何閱讀Java原始碼?Java原始碼
- buffer 原始碼包閱讀原始碼
- 使用OpenGrok閱讀原始碼原始碼
- express 原始碼閱讀(全)Express原始碼
- Kingfisher原始碼閱讀(一)原始碼
- 如何閱讀框架原始碼框架原始碼
- 如何閱讀jdk原始碼?JDK原始碼
- ArrayList原始碼閱讀(增)原始碼
- snabbdom 原始碼閱讀分析原始碼
- Appdash原始碼閱讀——reflectAPP原始碼
- React原始碼閱讀:setStateReact原始碼
- 如何快速閱讀原始碼原始碼