程序員如何高效讀代碼?
網(wǎng)友解答: 相信每一個(gè)程序員都有讀別人代碼的經(jīng)歷,尤其是半路加入項(xiàng)目組,或者是半路接手同事未完成的項(xiàng)目。同時(shí)我也相信每個(gè)程序員都有過(guò)贊嘆別人代碼的經(jīng)歷,也有過(guò)鄙視別人代碼經(jīng)歷,但是不管怎
相信每一個(gè)程序員都有讀別人代碼的經(jīng)歷,尤其是半路加入項(xiàng)目組,或者是半路接手同事未完成的項(xiàng)目。同時(shí)我也相信每個(gè)程序員都有過(guò)贊嘆別人代碼的經(jīng)歷,也有過(guò)鄙視別人代碼經(jīng)歷,但是不管怎么說(shuō)讀別人代碼總歸是程序員繞不開(kāi)的一件事情。
讀別人代碼分為幾種情況,一種情況是讀整體代碼,另一種情況是讀某個(gè)模塊,這主要取決于你參與項(xiàng)目的階段和參與的程度。通常情況下,讀別人代碼都有一個(gè)基本的思路,我以自己的經(jīng)驗(yàn)來(lái)描述一下這個(gè)過(guò)程。
了解項(xiàng)目整體功能
在讀別人代碼之前首先要了解一下項(xiàng)目的整體功能,通常情況下項(xiàng)目都有比較詳細(xì)的方案規(guī)劃,要先把方案看一下。這個(gè)步驟是建立自己代碼實(shí)現(xiàn)思路的過(guò)程,程序員在閱讀方案的時(shí)候會(huì)有自己的一系列常規(guī)解決方案,如果待讀的代碼是其中的一種方案,那么恭喜你,你可能很快就能完成代碼的梳理。
方案有的寫的比較詳細(xì),有完整的設(shè)計(jì)圖和流程圖,那么這個(gè)時(shí)候再讀代碼就比較容易了,因?yàn)橹懒巳肟诤统隹?,?xì)節(jié)看起來(lái)就比較好理解。而有的方案寫的比較籠統(tǒng),或者是中間經(jīng)過(guò)多次調(diào)整,這些調(diào)整可能并沒(méi)有體現(xiàn)在方案中(實(shí)際項(xiàng)目中比較常見(jiàn)),這個(gè)時(shí)候需要做很多標(biāo)記,必要的時(shí)候要跟項(xiàng)目經(jīng)理或者架構(gòu)師做一個(gè)詳細(xì)的溝通。
了解項(xiàng)目的功能模塊劃分
現(xiàn)在的程序開(kāi)發(fā)基本上都是按照角色進(jìn)行任務(wù)劃分的,所以程序員在讀別人代碼的時(shí)候大部分情況下不存在技術(shù)上的障礙,也就是說(shuō)基本上采用的編程語(yǔ)言和框架都是統(tǒng)一的。這種情況下讀代碼實(shí)際上就是讀思路,而思路是建立在功能模塊劃分上的,所以了解項(xiàng)目的功能模塊劃分就比較重要了。
通常情況下方案并不會(huì)把每個(gè)實(shí)現(xiàn)模塊都完整描述清楚,這個(gè)時(shí)候需要讀代碼的程序員自己完成功能標(biāo)記。專業(yè)的程序員會(huì)寫注釋,有的注釋寫的非常清晰,這個(gè)對(duì)讀代碼的人來(lái)說(shuō)絕對(duì)是件賞心悅目的事情。所以說(shuō)寫代碼的時(shí)候?qū)懞米⑨寣?duì)程序員非常重要,開(kāi)玩笑的說(shuō)這是一個(gè)積攢人品的過(guò)程。
標(biāo)記代碼
這個(gè)階段就是開(kāi)始進(jìn)行代碼的細(xì)節(jié)分析了,有的代碼量比較小的程序可以直接進(jìn)行這個(gè)步驟。當(dāng)讀到每個(gè)類實(shí)現(xiàn)的階段時(shí),我比較喜歡為每個(gè)方法加一個(gè)標(biāo)注,然后讓程序跑一下,這樣基本上就知道核心參數(shù)的變化過(guò)程以及輸出的結(jié)果了。
當(dāng)然,讀完代碼之后一定要把標(biāo)注去掉的,也不要輕易的去修改看似有問(wèn)題的部分,因?yàn)槿魏我粋€(gè)不合理的設(shè)計(jì)背后都有可能是萬(wàn)不得已而為的,你改了其中一個(gè)問(wèn)題可能會(huì)引發(fā)一系列連鎖問(wèn)題,一定要謹(jǐn)慎。
總之,讀別人代碼有的時(shí)候是個(gè)學(xué)習(xí)的過(guò)程,有的時(shí)候是個(gè)郁悶的過(guò)程(大部分的情況),不管怎么說(shuō)這就是程序員工作內(nèi)容的一部分。
關(guān)注我,了解更多關(guān)于軟件開(kāi)發(fā)的內(nèi)容。
網(wǎng)友解答:
第一步前期知識(shí)儲(chǔ)備:前期知識(shí)的儲(chǔ)備對(duì)每一個(gè)程序員來(lái)說(shuō)很重要,只有準(zhǔn)備好了,后面學(xué)習(xí)才能事半功倍;技術(shù)方面我們需要知道這份源碼采用了哪種語(yǔ)言,利用了哪些框架;接下來(lái)就是文檔,盡可能來(lái)根據(jù)文檔來(lái)理解源碼;
第二步對(duì)待源碼需要有分層的概念:如果遇見(jiàn)一份優(yōu)秀的代碼,我們可能會(huì)更加容易去讀懂。但是如果遇見(jiàn)一份差的或者是不堪入目的代碼,我們更多時(shí)候能夠更好去為了理解代碼,需要在腦子里建立起源代碼背后的層次和結(jié)構(gòu)映射。
第三步找出主干內(nèi)容:有點(diǎn)像是閱讀文章時(shí)找出這篇文章的中心句,對(duì)待代碼也是一樣,提綱挈領(lǐng),對(duì)做很多事情都是提高效率的方式,很多代碼是用來(lái)做一些瑣碎的,事務(wù)性的事情的。要高效理解和把握代碼,就必須抓住主干。