成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

閱讀大型開源軟件的四個技巧

開源
最近的一段時間里,我在研究 Android 配套工具和 Android Studio 相關的實現,以及它們如何配合完成一個 APK 的構建。因為整個系統各個模塊之間的關系過于復雜,除此,不同模塊之間也包含了大量的代碼 —— 無論是從行數上,還是從函數長度上來說。

[[339183]]

最近的一段時間里,我在研究 Android 配套工具和 Android Studio 相關的實現,以及它們如何配合完成一個 APK 的構建。因為整個系統各個模塊之間的關系過于復雜,除此,不同模塊之間也包含了大量的代碼 —— 無論是從行數上,還是從函數長度上來說。

從總體的思路上來說,在進入代碼閱讀之前,我們需要:

  1. 理解代碼背后的業務流程
  2. 理解架構設計的思想

從而我們才能理解主流程(脈絡)。針對于此,我們會發現一些不同的模式:

  1. 借鑒他人。從他人的學習筆記中,理解整體的思路和過程。如 Android APK 的構建,Android 資源如何優化,從中理清代碼閱讀的思路。
  2. 源碼學習。
  3. 借助測試調試。
  4. fork 主流程。

它們并不是互相獨立的,往往是結合一起使用的。

借鑒他人

這種模式,可以實現快速地學習。它存在的一些明顯的缺點是:

  • 學到的東西是二手加工過的。
  • 部分的代碼可能與真實的情形脫節。

所以,它適用于你想快速了解某一部分的功能,從而了解全貌,隨后我們就可以深入某一部分進行了解。

在這種模式之下,我推薦:通過購買、閱讀書籍的方式來學習。如果能買到書便是一件幸運的事,因為它已經經過了系統性的加工。唯一的問題可能是上面的代碼有些老舊。但是,它更加的系統化、完整,方便我們理解,并減少搜索資料的成本。

為什么不是網上找資料?:

  1. 找資料需要投入時間成本
  2. 資料不一定詳細

如果你能直接找到詳細的資料,畢竟花費的時間足夠短的話,那么也是沒問題的。

源碼學習

源碼學習是一個需要花費大量時間和精力的事情,除非萬不得已,否則我也不想用這種方式。因為,我們會缺少大量的上下文,這些上下文可能導致我們理解出現一些誤差。

前期準備:

  1. 合適的工具。最好是~~收費的(🐶)~~能用上的。
  2. 合適的存儲空間。像 Android 這樣的系統,clone 下來就要 120G,編譯的話,估計得達到 200G 吧;而像 Android Studio 的源碼,clone 下來也要 60G。
  3. 尋找閱讀的模式。
  4. 嘗試去構建應用。它不一定可行,但是如果可以的話,會節省你大量的時間。

源碼學習是一個非常重的學習模式。我們要花費大量的時間:

  1. 在代碼間跳轉
  2. 梳理業務邏輯

所以,還有一些不錯的犯懶的姿勢:

通過書籍來加強。我一直覺得對于學習來說,閱讀書籍是最理想的方式。因為尋找資料需要成本,而多數的書都會起到一個索引的目的。

尋找相似的輪子。一個有意思的技術,必然有很多公司、很多人都研究過。他們都會嘗試去創造類似的輪子。唯一的問題是,我們要學習到什么程度,如果只是理解的話,那么看看別人重復的輪子也是可以的;如果是為了深入的話,那么還得回過頭去看看源碼

借助測試調試

對于調試來說,我們還會面臨的一個挑戰是:諸如我這樣的入門級 MBP 配置,對于大型系統來說編譯根本不夠用。應對這種問題的一個比較良好的姿勢是:通過 IDE 調試測試來完成對部分代碼的調試。(PS:這種方式也適用于業務代碼的開發)

如果我們可以在應用的入口中創建某一模塊對應的測試,那么我們就可以快速調試整個應用了。

fork 主流程

對于我來說,我覺得只閱讀源碼是一種只為了解決一時問題的方式。同時,像我這樣的凡人,對于某些知識和內容,只要不使用,我可能隔個十天半個月,我就忘光了(雖然我一直覺得這是一件好事)。

邊閱讀代碼,邊 fork 項目,我們還會有一些挑戰:

  1. 語言的熟練度和模式。對于熟悉的語言來說,比如日常編寫業務代碼的時候,我們并不需要理解于諸如類加載器、元編程、字節碼這一類的復雜模式。
  2. 新的框架、工具或語言的學習成本。比如,我在過程中就遇到需要理解和學習 Gradle 插件的一些構建機制。
  3. 代碼中大量的、無用的異常處理的代碼。
  4. 別人的代碼都是 💩。(PS:一個月后自己的代碼也是屎)

所以,還有一些模式:

  1. 劃分模塊邊界。尋找架構圖,通過架構圖來劃分模塊。
  2. 切片化運行。一個模塊,一個模塊來理解整個系統。如 IDEA 插件的編寫、IDEA 插件與 Gradle 如何交互,Gradle 插件的原理與編寫,Gradle 如何調用其它命令行工具,命令行工具的原理與編寫。
  3. 通過測試運行。如針對于 ApkAnalyser 這樣的工具,我們可以通過單元測試而非構建一個 CLI 的方式來運行。
  4. 選擇另外一門語言。因為別人用 Java、Groovy、Kotlin 編寫的應用,如果你用 Rust、Go 再寫一遍的話,那么你就能一次學到兩個東西了:一個是新的編程語言,一個是這個開源項目的代碼。

README 輸出

為了方便我們查閱和其他/她人使用,我往往會把相關的內容記錄到項目的 README 上。

  • 相關的文檔資料
  • 相似的開源項目
  • 過程中的內容產出
  • 代碼簡要說明
  • ……

這樣一來,其他/她人在學習的過程中還能 GET 到相似的思路。

結論

最后,簡單做一些成本對比:

模式 成本 性價比 主要場景
借鑒他人 學習
閱讀源碼學習 理解思想
fork 主流程 理解、模仿
借助測試調試 較高 理解、模仿

一些結合模式:

閱讀二手資料,根據二手資料理解主脈絡

編寫主流程調用鏈,理解架構設計理想

借助開源軟件的測試調試,理解參數及流程

 

……

本文轉載自微信公眾號「phodal」,可以通過以下二維碼關注。轉載本文請聯系phodal公眾號。

 

責任編輯:武曉燕 來源: Phodal
相關推薦

2021-03-08 15:42:54

數據庫Apache Iceb開源

2022-05-04 12:44:57

Python編程語言

2023-02-19 15:22:22

React技巧

2023-11-13 10:00:09

數據中心服務器

2011-07-25 14:39:06

組策略

2021-09-27 08:56:36

Python代碼函數

2023-10-26 07:47:35

JavaScript代碼變量

2021-10-19 09:53:38

智能建筑數據中心邊緣計算

2014-10-16 09:50:41

2022-10-08 15:32:24

Python開發技巧

2024-11-14 09:00:00

Python編程元編程

2022-07-15 14:54:00

DockerLinux技巧

2018-11-02 08:53:28

開源Android郵件客戶端

2019-11-04 06:08:48

云計算成本云計算遷移

2020-05-20 15:27:44

智慧城市數據技術

2024-06-26 11:08:46

2022-10-21 10:22:30

網絡網絡容量網絡資源 Tech

2022-04-07 09:34:39

技巧云服務費用

2009-03-03 11:41:14

數據庫表表分區

2011-08-29 18:37:47

Ubuntu11.04
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91看片在线 | 淫片一级国产 | 精品国产欧美一区二区三区不卡 | 玖操| 成人一区二区三区视频 | 99精品国产一区二区三区 | 最新91在线| 久久99精品久久久久久秒播九色 | 在线色网 | 91xxx在线观看| 日韩欧美网 | 欧美一级网站 | 久色| 国产亚洲精品综合一区 | 91免费入口 | 国产精品污污视频 | 久久天天 | 午夜影院在线观看视频 | 国产欧美在线视频 | 国产成人精品一区二区三区在线 | 97精品国产手机 | 狠狠的干狠狠的操 | 一区二区在线不卡 | 欧美成视频 | 国产高清视频一区 | 一区二区三区欧美 | 夜夜撸av | 在线精品亚洲欧美日韩国产 | 一区二区三区视频在线观看 | 激情的网站| 亚洲日本欧美日韩高观看 | 欧美成人精品一区二区男人看 | 精品国产一区二区在线 | 宅男伊人 | 国产91久久精品一区二区 | 久久久精品网 | 精品亚洲一区二区三区四区五区高 | 精品在线一区二区三区 | www.色53色.com| 一区二区av在线 | 久久国产精品精品 |