閱讀源碼的經(jīng)驗(yàn)總結(jié)

對于一個有追求的程序員來說源碼必讀不可鉴吹,閱讀源碼是一件令人頭疼的事。閱讀別人的代碼遠(yuǎn)比自己寫代碼要難暑刃。Linus 是Linux的早期作者铲敛,一句影響深遠(yuǎn)的話是“Read The Fucking Source Code”,這句話既體現(xiàn)了閱讀源碼的重要性籽孙,也說明了閱讀源碼對于大牛來說也是一件令人頭疼的事烈评。閱讀源碼對于中級工程師尤為重要,通過代碼可以看作者的思想犯建。如果你源碼看多了讲冠,你就可以靈活應(yīng)用不同的途徑實(shí)現(xiàn)同一效果。對于一個中級Android開發(fā)者需要閱讀什么源碼适瓦,Android系統(tǒng)源碼竿开?第三方開源庫源碼?完整項(xiàng)目源碼玻熙?這些源碼學(xué)習(xí)價值都很大否彩,那我們應(yīng)該學(xué)習(xí)哪一個?首先我們要明白我們的目的:短時間提升我們編碼技能嗦随,希望在工作能體現(xiàn)出來列荔。從這個角度來看,閱讀android系統(tǒng)源碼的價值就不是很高枚尼。所以對于一個中級工程師來說贴浙,要把第三方開源庫和完整項(xiàng)目作為主要對象。下面我就講一下看第三方開源庫和完整項(xiàng)目源碼的一些方法和技巧署恍。


前期準(zhǔn)備:

如何高效的Read fuck source code崎溃,首先需要解決的是我們用什么工具看代碼,推薦使用Sublime Text看第三方開源庫锭汛,用Android studio看完整項(xiàng)目。第三方開源庫無須編譯袭蝗,直接看代碼唤殴,使用Sublime text代碼高亮整潔,看的很爽到腥。效果如下:

也許你剛開始不適應(yīng)朵逝,不要擔(dān)心,用不了幾天你就離不開它了乡范。那問題又來了配名,看代碼我習(xí)慣了這種高亮風(fēng)格啤咽,再也無法忍受Android studio默認(rèn)的黑白風(fēng)格了。沒關(guān)系渠脉,很簡單宇整,只要設(shè)置一下,Android studio就可以和Sublime text 達(dá)到同樣的效果芋膘。先來看看設(shè)置后的效果吧鳞青。

只需下載jar包,導(dǎo)入Android studio即可为朋。設(shè)置方式詳見README文件臂拓。


開始閱讀源碼:

如果你是一個閱讀源碼的新手,那我建議你首先找一些代碼量少的习寸,自己感興趣的來看胶惰。可以參考我之前寫過的一片文章2016年最值得學(xué)習(xí)的五大開源項(xiàng)目霞溪。

如何閱讀第三方開源庫

選擇一些當(dāng)下熱門孵滞、學(xué)習(xí)價值高的第三方開源庫,我認(rèn)為最值得學(xué)習(xí)的第三方開源庫是Volly威鹿,開源項(xiàng)目解析中也有對Volly的解析剃斧。

熱門的第三方開源庫,網(wǎng)上會有很多源碼解析文章忽你,首先在網(wǎng)上找一些源碼解析文章來看看幼东,不要忘記,我們的宗旨之一“高效”科雳,這樣就可以快速的對項(xiàng)目的整體框架有一個大體的了解根蟹,再去看源碼具體實(shí)現(xiàn)就很快了。這里很重要的一點(diǎn)是如何找一些有價值的學(xué)習(xí)資料糟秘,我們最常有的就是搜索引擎简逮,今天就主要說說為什么選擇Google,以后有機(jī)會再總結(jié)一下我是如何篩選尿赚、找到有價值的學(xué)習(xí)資料散庶。要想成為高級工程師,需要有個合理的知識收集凌净、分類方法悲龟,建立自己的知識體系。因?yàn)楫?dāng)今互聯(lián)網(wǎng)時代不是比你現(xiàn)在會多少東西冰寻,而是比的你能不能最短的時間把他搞懂须教,再經(jīng)過加工創(chuàng)新,就可以變成更好的東西斩芭。對于搜索引擎:Google>bing>baidu.其實(shí)我不想黑百度轻腺,因?yàn)槲液芟肴グ俣壤纸热滑F(xiàn)在還不是一名百度工程師,就說一下事實(shí)吧贬养。Google是把你想要的挤土,最有價值的東西呈現(xiàn)在你面前,并且他做到了煤蚌。Google會把符合搜索結(jié)果耕挨、點(diǎn)擊量最大的、最有價值的東西排在最前尉桩,所以你很輕松就會找到你想要的東西筒占,唯一足的地方就是大陸的訪問速度太慢(如果你上不了Google可以點(diǎn)這里)。bing和Google差不多蜘犁,想法一樣翰苫,但是和Google相比,bing搜索到的有價值結(jié)果不是很多这橙,沒有Google的理想奏窑,還有一些來著百度知道。百度呢屈扎,第一眼看到的是廣告埃唯,一些內(nèi)容來著百度知道,呈現(xiàn)的搜索結(jié)果不是按價值排序鹰晨,你需要自己慢慢找墨叛。我平時是Google和bing結(jié)合著用。

在閱讀的過程中總會遇到一些看不懂的代碼模蜡,你可以先放一放漠趁,繼續(xù)往下看。這樣反復(fù)幾遍忍疾,就會對代碼的理解不斷加深闯传。閱讀第三方開源庫主要是學(xué)習(xí)他的設(shè)計思想。

如何閱讀開源完整項(xiàng)目

毋庸置疑使用Android studio閱讀完整項(xiàng)目卤妒,高效甥绿。閱讀完整項(xiàng)目涉及的東西比較多,項(xiàng)目的架構(gòu)不同则披,使用的第三方庫不同共缕,這就要求需要對項(xiàng)目中不熟悉的東西進(jìn)行學(xué)習(xí),也不需要都弄懂了再去看項(xiàng)目收叶,邊看邊學(xué)骄呼,遇到不會的就去搜資料學(xué)習(xí)共苛,這樣最快了判没。

第一步下載項(xiàng)目蜓萄,在真機(jī)或虛擬機(jī)上運(yùn)行,最直觀的體驗(yàn)app的功能澄峰。然后熟悉app的架構(gòu)嫉沽,mvc、mvp俏竞、mvvm绸硕,目前項(xiàng)目中mvvp用的比較少。然后打開build.gradle文件看看項(xiàng)目用了哪些網(wǎng)絡(luò)請求庫魂毁、圖片加載庫玻佩、其他庫。如果有不熟悉的席楚,上網(wǎng)找一些文章學(xué)習(xí)一下咬崔。然后就打開manifasts文件找的入口activity,順藤摸瓜往下看烦秩。同樣垮斯,不懂的地方放過≈混簦看完一遍兜蠕,再進(jìn)行下一步,不要指望一遍就可以搞定抛寝。這里給大家推薦我的開源項(xiàng)目LookLook(Github地址:https://github.com/xinghongfei/LookLook):mvp架構(gòu)熊杨,RxJava + Retrofit+okhttp,glide墩剖。項(xiàng)目結(jié)構(gòu)清晰猴凹,代碼量不是很大,學(xué)習(xí)價值高岭皂。

看源代碼的大體思想:1郊霎、第一遍不要糾結(jié)于具體實(shí)現(xiàn),先把程序的整體框架流程搞清楚爷绘。2书劝、不需要從頭到尾看,可以跳著看土至,因?yàn)槌绦虮緛砭褪悄K化的购对。項(xiàng)目的選擇也很重要,代碼量由少到多陶因,功能由簡單到復(fù)雜骡苞,入門的項(xiàng)目就是android的官方Demo。方法基本也就這么個方法,剩下就是靜下心跟者自己的感覺走解幽,反復(fù)反復(fù)再反復(fù)贴见。

如果你的項(xiàng)目看多了之后你會發(fā)現(xiàn)每個項(xiàng)目可以分為以下幾個模塊:

1. UI(activity ,fragment)

2. adapter

3. 數(shù)據(jù)實(shí)體

4. 第三方開源庫的使用躲株,網(wǎng)絡(luò)片部、圖片、其他工具

5. 一些工具類

6. 項(xiàng)目配置類

7. 自定義View

8. 其他(數(shù)據(jù)庫霜定,activity档悠、fragment的基類,API等)

任何事情都可以熟能生巧望浩,在看了一些開源項(xiàng)目后辖所,自己最好開發(fā)一個∧サ拢看項(xiàng)目源碼是一個很費(fèi)腦子的事情奴烙,不能急于求成,我之前就有點(diǎn)著急剖张,看了很多項(xiàng)目切诀,高強(qiáng)度的進(jìn)行了20多天后,精力消耗很大搔弄,掉頭發(fā)很嚴(yán)重幅虑,大腦嚴(yán)重勞累過度,休息了一個星期才緩解過來顾犹。所以建議大家制定一個合理的學(xué)習(xí)時間倒庵,做好打持久戰(zhàn)的準(zhǔn)備,不要讓自己強(qiáng)度太大炫刷。最后的感覺就是擎宝,看似不可思議的事情,只要自己靜下心來浑玛,按部就班绍申,堅持下來,最后發(fā)現(xiàn)都不過如此嘛顾彰。

最后需要記住的是如果你被龐大的源碼打敗极阅,不是因?yàn)槟惚浚且驗(yàn)槟慵痹暾窍恚蚴悄氵x擇的項(xiàng)目不對筋搏。編程就像寫小說一樣,不僅要多看厕隧,還要多練奔脐《碇埽總有一天你也會成為一個優(yōu)秀的“作家”。

小伙伴們開始 趕快Read The Fucking Source Code 吧髓迎。

后記

針對小伙伴們普遍提出的問題——代碼看不下去栈源,說說我自己的看法。

1.要有決心竖般,要有一個成為高級工程師的決心。這一點(diǎn)誰也幫不了你茶鹃,完全靠自己涣雕。可以提前暢想一下成為高級工程師后的自己闭翩,挑女朋友挣郭、買HHKB,高清顯示屏疗韵,人工力學(xué)座椅兑障、降噪耳機(jī),漂亮的房子蕉汪、汽車流译、人生贏家......

2.循序漸進(jìn),任何事情需要一個過程者疤,由易到難福澡。很多小伙伴一開始不知道看什么開源項(xiàng)目,我這里給大家列順序驹马。第一階段android的官方Demo革砸,90%都不難,有一些技術(shù)我們不常用到糯累,可以直接略過算利。第二階段2016年最值得學(xué)習(xí)的五大開源項(xiàng)目,可以挑自己感興趣的看泳姐,也可以在完整項(xiàng)目(泡在網(wǎng)上的日子)找一些效拭。首先看項(xiàng)目src文件夾大小,在500kb以下都可以接受胖秒。第三階段第三方熱門開源庫允耿,Volly,Universal Image loader等。第四階段看自己感興趣的扒怖,融會貫通较锡,擴(kuò)充知識廣度,最好自己再做一個開源項(xiàng)目盗痒,放在Github上蚂蕴。第五個階段Android系統(tǒng)源碼低散,擴(kuò)充知識的深度和廣度,成為大牛骡楼。

3.計劃熔号,給自己設(shè)定一個計劃,一個自己想完成的計劃鸟整。如幾天之內(nèi)看完這個項(xiàng)目引镊。我一般會制定周計劃、月計劃篮条,這個月學(xué)些什么內(nèi)容弟头,這個星期學(xué)一些什么內(nèi)容,不需要太詳細(xì)涉茧,簡要的內(nèi)容就可以赴恨,我會把他以便簽的形式放在電腦桌面上。一個月下來伴栓,學(xué)的東西比計劃里的東西要多伦连,但是不一定會完成全部計劃,計劃可以作調(diào)整钳垮。

4.其他惑淳。根據(jù)自己的習(xí)慣選擇。我的習(xí)慣:編程前把手洗干凈饺窿,干凈整潔的桌面汛聚,一個舒服的椅子或靠墊護(hù)腰,累了再加點(diǎn)輕音樂短荐,不定期跑步倚舀、打球,每天傍晚一個人散步忍宋。對于我來說一個人去散步很重要痕貌,去不會碰就熟人的地方,可以專心致志想很多事情.....糠排。最后剩下的就是日復(fù)一日的堅持舵稠。

如果文章對您有幫助,歡迎準(zhǔn)高級工程師歡樂打賞....

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末入宦,一起剝皮案震驚了整個濱河市哺徊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乾闰,老刑警劉巖落追,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涯肩,居然都是意外死亡轿钠,警方通過查閱死者的電腦和手機(jī)巢钓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疗垛,“玉大人症汹,你說我怎么就攤上這事〈螅” “怎么了背镇?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長泽裳。 經(jīng)常有香客問我瞒斩,道長,這世上最難降的妖魔是什么诡壁? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮荠割,結(jié)果婚禮上妹卿,老公的妹妹穿的比我還像新娘。我一直安慰自己蔑鹦,他們只是感情好夺克,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嚎朽,像睡著了一般铺纽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哟忍,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天狡门,我揣著相機(jī)與錄音,去河邊找鬼锅很。 笑死其馏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爆安。 我是一名探鬼主播叛复,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扔仓!你這毒婦竟也來了褐奥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤翘簇,失蹤者是張志新(化名)和其女友劉穎撬码,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體版保,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耍群,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年义桂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹈垢。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡慷吊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出曹抬,到底是詐尸還是另有隱情溉瓶,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布谤民,位于F島的核電站堰酿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏张足。R本人自食惡果不足惜触创,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望为牍。 院中可真熱鬧哼绑,春花似錦、人聲如沸碉咆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疫铜。三九已至茂浮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間壳咕,已是汗流浹背席揽。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谓厘,地道東北人驹尼。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像庞呕,于是被迫代替她去往敵國和親新翎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評論 25 707
  • 子節(jié)點(diǎn)和兄弟節(jié)點(diǎn)的操作 childNodes 屬性 只讀屬性住练,子節(jié)點(diǎn)列表集合 其他瀏覽器(標(biāo)準(zhǔn)下):包含了文本和元...
    卓小生閱讀 1,571評論 0 0
  • 對于婚姻地啰,真的不能太隨便做決定!朋友一臉苦逼的跟我說道讲逛。 廢話亏吝!婚姻又不是兒戲,當(dāng)然不能太草率盏混。 他的對象蔚鸥, 我只...
    郵差小布閱讀 286評論 0 0
  • 人生要想贏惜论,就不要格局太小,只考慮當(dāng)下止喷,眼光要放長遠(yuǎn)馆类。家庭小事,同事的小摩擦弹谁,細(xì)細(xì)想來乾巧,其實(shí)都是無所謂的小事,分出...
    稀奇安安閱讀 258評論 0 0
  • 這幾年也靠投稿賺了一點(diǎn)點(diǎn)小錢了。來說一下我投稿的經(jīng)歷植康。我主要是寫散文和一些旅行旷太、留學(xué)相關(guān)的文章,所以只針對寫這些文...
    中年失業(yè)自救指南閱讀 1,215評論 2 10