大型項目工程程式碼快速上手指北
最近入職新公司,在學習產品業務文檔的時候,發現團隊內部沒有業務文檔沉澱;雖說師兄能培訓一些業務知識,但這些都是「面」層面的內容,掌握核心業務,必須了解核心業務知識以及易踩坑點。沒有業務文檔怎麼辦呢?那就必須扒項目程式碼中業務的實現邏輯了。當然程式設計師在工作過程中,會遇到很多需要閱讀程式碼的場景,比如學習技術框架源碼、review他人的程式碼、維護老產品等等。毫無疑問,閱讀程式碼是程式設計師的基本功,這項基本功是否紮實,會在很大程度上影響一個程式設計師在技術上的成長速度。
啃了將近兩周的項目程式碼,本人也總結出來一些快速吃透項目程式碼的套路,下面就給大家分享一下我的經驗。
目的
凡事預則立,不預則廢;帶著目的性做事情更容易成功,讀程式碼也是一樣。當我們需要閱讀程式碼時候,一定要明確自己的目的,無非有以下兩種目的:
計劃
明確目的後,必須給自己制定完成這件事情的過程中各個節點應達到的目標。主要是為了check你的學習品質。比如:學習Kafka項目源碼,你的目的是為了在新的項目中更加遊刃有餘使用Kafka解決業務問題;那麼針對你投入的學習時間,可以制定三個階段的學習計劃以及要達成目標;各個目標建議給自己制定一個需要實踐的任務,這樣通過項目檢驗自己的學習品質。
上下文
什麼是上下文呢?舉個例子:高考,我們參加高考基本上務必需要掌握小學、初中、高中各個年級的基礎知識,這樣我們在考場做題時候就可以將這些知識應用於解題,那麼這些基礎知識就是上下文。回到我們源碼學習場景中,上下文可以分為 通用技術、業務基礎。
- 業務基礎:每一份有實際意義的源碼都離不開業務,必須先對業務有基本的概念。
- 通用技術:每個複雜的項目肯定是運用了各種保證業務實現的技術框架。就Java語言實現的項目而言,Spring框架、分散式框架、消息隊列框架、分表分庫框架等這些基本都會涉及到。學習項目程式碼前,如果不懂這些框架,那麼看程式碼的過程就像看天書一樣。
- 其他資源:能幫你解決看程式碼過程中遇到問題的人或工具都可以稱之為資源。
工具
工欲善其事必先利其器。利用工具可以讓我們事半功倍,我在學習過程中用到的工具如下:
- PlantUML,這是一款IDEA 插件,即安裝即用,非常方便。可以讓你隨時繪製各種圖(類圖、時序圖、流程圖等),而且語法也相當簡單。傳送門
- 飛書雲空間、石墨文檔、幕布等,記錄閱讀源碼過程中的關鍵點、心得體會、分析過程
- Visual Paradigm,用於繪製簡單的框圖,表述源碼的模組劃分、層次結構等.
- xmind 8, 畫思維導圖,可以將學習的內容鋪成一個面。
筆記
在閱讀源碼的過程中,做筆記是必須的。因為程式碼不是自己寫的,很難很快在腦子裡刻下印記,經常是看著這裡忘了那裡,早上覺得弄懂了數據流向,但是中午吃個飯,下午開始幹活的時候又忘了原先的鏈路。所以,多記筆記就顯得尤為重要。
- 建議用軟體(飛書雲空間、石墨文檔)記錄,這樣可以將文檔整理成冊,將來也可以給團隊增加文檔產出。
- 關鍵action儘可能詳細記錄,但不必看到什麼記錄什麼。比如弄明白了某個子模組的邏輯、某個類的作用、某些函數的調用關係時再記錄,否則記錄這個動作本身會打斷思考。
- 每天工作結束,記錄學習進度,記錄疑問(以及明天找誰進行諮詢),明日計劃等。
總結
下面的一些經驗供大家參考:
- 將業務模型和數據模型建立映射關係。
- 理清模組間的依賴關係。
- 找出關鍵action程式碼,並畫出時序圖、流程圖。
- 如果能運行程式碼,強烈建議調試程式碼,核心方法打斷點,這樣可以更清楚調用鏈路。
- 讀不懂才要讀,想不明白才要想,這是進步和成長的開始。