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

面對枯燥的源碼,如何才能看得下去?

開發 后端
一個軟件開發人員,工作到了一定的年限(一般是3、4年左右),如果他還沒學會閱讀源碼,那么他就會遇到瓶頸。因為到了這個時候的開發,他應該不僅僅只會做那些 CURD 的業務邏輯,而應該會根據公司的實際情況去寫框架。

 一個軟件開發人員,工作到了一定的年限(一般是3、4年左右),如果他還沒學會閱讀源碼,那么他就會遇到瓶頸。因為到了這個時候的開發,他應該不僅僅只會做那些 CURD 的業務邏輯,而應該會根據公司的實際情況去寫框架。

而基本上沒有誰能像天才一樣從零寫出一個框架,很多人寫框架其實都是從模仿開始的。而你要模仿,那么你首先得看得懂框架源碼才行。所以說閱讀源碼才顯得那么重要。

我在工作一兩年的時候有嘗試去看過 JDK 的源碼,那時候感覺就跟看天書一樣,看一點都覺得痛苦。一直到工作三年左右,因為同事都在看源碼,我也開始看一些源碼。

我看的***個框架的源碼是 dubbo,雖然說沒有完全搞懂它。但是通過閱讀 dubbo 源碼,我弄懂了 JDK 的 SPI 機制,知道 SPI 在框架開發中的作用。一直到最近閱讀公司的一個網關框架,我才慢慢有一點閱讀源碼的經驗和套路。正好趁熱打鐵,把這些經驗寫下來,希望你們也能早日踏上源碼閱讀之路。

搜索網上資料

閱讀一個框架的源碼,最基礎的操作肯定是掃一遍網上的各種分析文章。通過這個操作,你可以對這個框架有個大致的了解。站在巨人的肩膀上,少走許多彎路。但如果你看的項目是公司內部的框架,那么你只能找公司內部的文檔了,更甚者,有些連文檔都沒有。那么你可以略過這一步。

掃一遍源碼

當你拿到框架的源碼的時候,你可以大致把源碼的每個包,以及每個包下面的文件掃讀一遍。掃讀并不需要你弄清楚每一行代碼的意思,只需要讓你知道源碼每一部分的作用。

如果一個開源框架足夠標準,那么他的命名是非常語義化的。所以我們掃讀的時候,通過包名、文件名就可以判斷出這個包是用來干嘛的。

例如 util 包是工具類,那我們可以直接跳過。vo 包是存放實體模型的,同樣可以跳過。protocol 包是存放協議相關的等等。通過這么一個步驟,你會對整個項目有一個基本的印象,知道這個項目大概有哪些東西,哪些相對比較重要。

找到入口

閱讀任何一個框架的源碼,首先就是要找到框架的入口。通過上面掃讀源碼,你應該能夠發現一些入口的跡象,例如對于 Dubbo 來說,你會發現它有一個名為 dubbo-demo 的子模塊,那么我們肯定重點看它。

進一步發掘需求你會發現它的入口就是 dubbo-demo 中的 Provider 類、Consumer 類。我們可以直接接運行這兩個類的 main 方法,并一步步跟蹤代碼的執行情況。

通讀源碼

找到入口之后,下一步就是通讀所有源碼了,就是把源碼的每個文件每一行都看一遍。在這個階段不求完全弄懂細致的業務邏輯,但是要形成一個大概的框架,知道這個框架是如何設計的,有哪些大致的模塊,這些模塊是如何設計的。

在通讀源碼這個階段是最枯燥無味的,也是最容易放棄的。一方面因為源碼實在過于多,另一方面因為沒有一個目標,所以看著看著心里沒有底,所以容易放棄。我一開始也是如此,但之后我想出了一個比較好的辦法,通過數字化的方式讓自己知道閱讀進度。這樣自己就不會覺得心里沒底,不知道要多久才能看完了。

我的方法是給我的 IDE 裝一個代碼統計插件:Statistics。這個插件能夠統計項目中的源碼行數。例如下面是我統計 dubbo 項目源碼的截圖,它會列出每個 java 文件的源碼行數,以及總共的行數。

從上面的截圖我們可以看到 dubbo 項目里,源碼的行數有 11 萬行。這樣一來,自己心理也有個大致的預期了。接下來,我會把這些數據拷貝出來,放在一個 Excel 表格里,就像下面這樣子:

在 Excel 表格中,我只會存放每個源碼文件的名字、其源碼行數、源碼行數占比。接下來我會按著入口,一個個去看源文件,把每個方法看過一遍,看過的方法我會寫一個注釋,例如:csy mark,并寫上我的注釋。

當我把一個文件都看過之后,我會把 Excel 表格中對應的文件最右邊一列,寫上其百分比。***我會在下邊有一行,統計我所看完文件的百分比。

我每看完一個方法,我就寫一個 csy done 來鼓勵下自己。每看完一個文件,我就在 Excel 中把它標記為完成,最下邊的已讀百分比也會跟著不斷升高。通過這種方式,我讓枯燥無味的源碼閱讀,有些一點趣味,有了一些目標。

通讀源碼是最枯燥的,最容易沒有方向和目標的。有了數字化的記錄,你可以知道自己現在的進度是怎么樣,看了多少的源碼。很多時候我們看了很久,發覺沒什么進度的樣子,又不想看了。

這時候你可以給自己定一個目標,例如:一天看完 5% 的源碼就可以休息。那當你想偷懶的時候,看看 Excel 下方的已讀百分比,還沒到 5%,繼續看吧。

這種方式對于我來說,還是有一定作用的。但對于你們不知道有沒有作用,你們可以嘗試一下。如果有用的話,就來評論告訴我吧。

梳理框架

在通讀源碼的過程中,你就會對框架有許多新的認識,會知道這個框架大致分為哪幾個部分,每個部分的作用是什么,這個模塊用了什么設計理念等等。

如果說上個階段是通讀源碼,那么這個階段就是要把你在通讀源碼過程中的收獲整理出來。在整理的過程中,你肯定會有更多的疑問,你會不斷地細化,不斷地精讀。

批判性思考

通過了上面幾個階段,你會發現你對這個框架有了整體的認識,并且對每個模塊的實現細節都有了比較深刻的認識。這個時候,你可以想一想為什么它要這么做,這么做有什么好處,那能用另一種方式做得更好嗎?

總結

上面幾個階段是我閱讀幾個框架源碼之后的一些體會,相信會是一個不錯的源碼閱讀指南。如果你有更好的源碼閱讀經驗或方法,歡迎留言與我交流。

責任編輯:龐桂玉 來源: Java技術棧
相關推薦

2024-10-11 12:37:12

2013-01-05 09:44:30

年終總結項目管理

2022-08-16 21:01:56

runAsyncreload數據

2021-12-29 11:51:15

Linux 內核源碼Linux 系統

2022-06-06 08:02:21

ahooks架構hooks

2020-03-17 19:39:50

區塊鏈區塊鏈技術

2015-12-24 18:07:18

創業改變世界技術創業

2024-12-18 18:53:48

2017-11-03 22:23:30

劉磊

2017-06-18 16:01:57

2009-09-25 15:15:17

算法

2020-02-21 09:58:55

復工疫情互聯網企業

2018-12-05 16:00:32

MongoDB數據庫NoSQL

2011-10-25 10:07:54

2021-12-06 07:09:45

數據業務語言

2021-02-26 07:56:31

數據業務Sql

2011-10-25 09:58:01

2016-09-22 13:42:45

用友

2013-03-15 10:35:17

編程語言編程笑話
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产中文字幕 | 香蕉久久网 | 久在线视频播放免费视频 | 精品视频一区二区在线观看 | 日韩欧美在 | 国内精品久久久久 | 91视频88av| 蜜臀久久99精品久久久久久宅男 | 欧美一级久久 | www.久久99 | 亚洲精品中文字幕在线观看 | 国产精品久久一区二区三区 | 国产精品久久久久久久免费观看 | 国产 日韩 欧美 在线 | 亚洲 精品 综合 精品 自拍 | 81精品国产乱码久久久久久 | 成人精品久久日伦片大全免费 | 国产高清视频 | 91欧美精品成人综合在线观看 | 欧美不卡 | 欧美精品久久久久 | 在线观看中文字幕av | 国产欧美精品一区二区色综合朱莉 | 久久综合久色欧美综合狠狠 | 国产成人av一区二区三区 | 呦呦在线视频 | 欧美精品一区三区 | 秋霞电影一区二区三区 | 日本福利视频 | 精品国产乱码一区二区三 | 99热99 | 91亚洲精品久久久电影 | 一区二区三区日韩精品 | 亚洲一区二区三区四区五区中文 | 久久久久网站 | 成人精品一区二区三区中文字幕 | 欧美精品一区二区三区四区 在线 | 久久天天躁狠狠躁夜夜躁2014 | 精品一区国产 | 亚洲视频观看 | 艹逼网 |