時(shí)間:2019-06-24 00:00:00 來源:信盈達(dá) 作者:信盈達(dá)
對(duì)于一個(gè)有追求的程序員來說,源碼可謂是必讀不可。但是事實(shí)上,閱讀源碼卻是一件令人頭疼的事情,尤其是閱讀別人寫的代碼,往往比看自己的還要犯愁。
IT界有一句影響深遠(yuǎn)的話是:Read The Fucking Source Code,這句話既體現(xiàn)了閱讀源碼的重要性,也說明了閱讀源碼對(duì)于程序員來說確實(shí)是一件令人頭疼的事。
然而,閱讀源碼又是十分重要的。通過閱讀別人的代碼我們可以看出作者的實(shí)現(xiàn)途徑,方法,思想,經(jīng)常看優(yōu)秀的源碼,你也可以靈活應(yīng)用不同的途徑實(shí)現(xiàn)同一效果。
閱讀源碼的重要性,大家可以從前端工程師的等級(jí)分類來理解,大概可以分以下幾種:
1、新手:關(guān)注任務(wù)本身,調(diào)包俠,只知道怎么用;
2、高級(jí)新手:開始進(jìn)行任務(wù)相關(guān)的數(shù)據(jù)分析,數(shù)據(jù)預(yù)處理,以及參數(shù)調(diào)優(yōu);
3、勝任者:注重特征工程,總結(jié)各種算法的適用條件;
4、精通者:深入理解算法的原理,熟悉開源項(xiàng)目的源碼;
5、專家:提出算法改進(jìn)的建議,創(chuàng)造新的算法。
很多人說“選擇大于努力”,小渡認(rèn)為“認(rèn)知決定選擇”,不同程序員的認(rèn)知層次不同,也導(dǎo)致了技術(shù)水平不同。
如果想要持續(xù)進(jìn)步,就要學(xué)習(xí)更高層次的認(rèn)知,提前關(guān)注和儲(chǔ)備相應(yīng)的內(nèi)容。他山之石,可以攻玉,閱讀源碼最大的好處就是可以開拓思維,程序員想更好地提升自己,這篇高效閱讀源碼的干貨可要認(rèn)真閱讀哦。
那么我們?cè)撊绾伍喿x源碼呢?
首先是要明確目的
比如想研究某個(gè)算法的實(shí)現(xiàn),抑或想?yún)⒖紝?shí)現(xiàn)并用其他語言二次開發(fā),這個(gè)最初的動(dòng)機(jī)會(huì)幫助你持續(xù)下去,直到實(shí)現(xiàn)目的。
在這個(gè)過程中,你還需要學(xué)會(huì)深挖源碼。當(dāng)你第一次深入成熟的代碼庫時(shí),你可能感覺自己不像開發(fā)人員。你可能更像是考古學(xué)家、私人調(diào)查員或圣經(jīng)學(xué)者。這很好,因?yàn)槟阌幸淮蠖咽虑樾枰幚怼?/span>
如果你有幸能夠從一開始就接觸使用版本控制的代碼庫,那么就該慶祝一下。你可以訪問豐富的元數(shù)據(jù),這將使你理解的不僅僅是代碼,還包括上下文,都會(huì)容易很多。
其次是合理的步驟
還是“先走通再細(xì)究”的思路,比如一讀文檔、二寫demo、三熟悉使用。具體的算法源碼調(diào)試呢,在自頂向下地理清代碼組織關(guān)系后,可以先從main函數(shù)入手,然后打斷點(diǎn),搞清楚重點(diǎn)函數(shù)的流轉(zhuǎn)過程。
這個(gè)環(huán)節(jié)中注意閱讀規(guī)范十分重要,規(guī)范是新的注釋。閱讀單元規(guī)范,以確定什么功能和模塊是被支持的以及哪些邊界情況要被處理。閱讀集成規(guī)范,以了解用戶如何與應(yīng)用程序進(jìn)行交互,以及應(yīng)用程序支持哪些工作流程。
最后是能堅(jiān)持不懈
很多人最開始都是決心很大,并制定計(jì)劃,但在閱讀源碼過程中,難免會(huì)出現(xiàn)代碼看不下去,心情煩躁的情況,這個(gè)時(shí)候,更要堅(jiān)持,日拱一卒,功不唐捐。
在閱讀源碼中,你可能會(huì)發(fā)現(xiàn)一些永遠(yuǎn)不會(huì)使用的函數(shù),或者你可能會(huì)發(fā)現(xiàn)從未使用過的整個(gè)文件。你可能會(huì)發(fā)現(xiàn)在幾年來沒有被碰過的注釋掉的代碼(gitblame)。不要遲疑,不要花太多時(shí)間去思考,不要害怕去掉這些東西。
如果代碼是由于某種原因出現(xiàn)的,會(huì)有人在代碼評(píng)審中標(biāo)記該代碼。你的行為還會(huì)減少下一個(gè)讀者的心理開銷。
最后的最后,小渡再啰嗦一句,你看源碼不要一直抓著細(xì)節(jié)不放。
這一點(diǎn),你搞不懂,跳過,看一下段內(nèi)容。先把架構(gòu)搞熟。看懂其他的后,在反過來看前面的。你會(huì)恍然大悟,原來是這樣設(shè)計(jì)的!實(shí)在不行,還可以多畫點(diǎn)類圖。在結(jié)合注釋,英文注釋看不懂,就百度翻譯。沒注釋,就看方法名字??床欢畣卧~,同樣的翻譯。根據(jù)一個(gè)方法的名字,應(yīng)該就能看出來它的作用。
很多時(shí)候你看不懂源碼的原因很簡單,其實(shí)就是因?yàn)槟銓W(xué)習(xí)的知識(shí)少,比如,你經(jīng)常使用的ifelse等,別人可能包裝成了設(shè)計(jì)模式。本來幾行代碼搞定的,變成設(shè)計(jì)模式后,多了好幾個(gè)類。沒辦法,好的架構(gòu)就是容易擴(kuò)展,為了高度可定制化而生的。作為程序員,你應(yīng)該盡早放下那種只為完成功能的思想。
記住這些事情,當(dāng)你發(fā)現(xiàn)自己周圍一片荒蕪時(shí),不要感到不舒服。閱讀源碼,不要指望它是一個(gè)線性過程,并且不要期望理解全部的100%。注意重要的細(xì)節(jié),知道如何挖掘你的問題的答案,你會(huì)發(fā)現(xiàn)自己能很快理解。
千里之行,始于足下,讓我們追隨大牛的腳步,一起奮斗吧!
轉(zhuǎn)自:公眾號(hào)duing
免費(fèi)領(lǐng)取試聽卡
申請(qǐng)已經(jīng)提交
老師會(huì)馬上給您安排試聽課程!
申請(qǐng)出錯(cuò)了
您可以加老師QQ:914865590報(bào)名咨詢!