我曾開(kāi)發(fā)過(guò)非常復(fù)雜的系統(tǒng),系統(tǒng)總代碼量超過(guò)千萬(wàn)行, 還是有資本回答一下這個(gè)問(wèn)題的。
從代碼邏輯來(lái)理解業(yè)務(wù)邏輯確實(shí)是一個(gè)比較難的事情,特別是代碼量非常大的情況下。這就好比把一個(gè)人扔到原始森林里面,讓他分析一下這個(gè)森林的外輪廓是什么形狀一樣。
如果我們身陷其中,那么可能就會(huì)有一種非常無(wú)助,摸不到頭緒的感覺(jué)。如果代碼量有數(shù)百萬(wàn),甚至千萬(wàn)行,那將是一個(gè)極大的挑戰(zhàn)。甚至讓人進(jìn)入一種絕望的境地。正所謂,“不識(shí)廬山真面目,只緣身在此山中”。所以,這個(gè)時(shí)候我們應(yīng)該跳出來(lái)。
怎么跳出來(lái)呢?其實(shí)就是所謂的上帝視角,如果我們站的更高一些,那么我們就很容易搞清楚。比如對(duì)于原始森林的輪廓,如果我們能在飛機(jī),或者空間站來(lái)觀察,那么就很容易知道其輪廓。
閱讀代碼也是如此。如果我們先了解業(yè)務(wù)邏輯,知道短代碼是做什么的,然后再去理解代碼的實(shí)現(xiàn)邏輯就輕松的多了。所以,不要因?yàn)榭戳藘芍艽a沒(méi)有頭緒就喪失信心,覺(jué)得不能勝任工作。
總體來(lái)說(shuō),閱讀代碼還是要講究一些方法的,只用通過(guò)正確的方法,才能達(dá)到事半功倍的效果。這里我們總結(jié)一下基本思路。
由具體到抽象人類認(rèn)識(shí)事物的規(guī)律是具體的事情容易理解,抽象的事情不容易理解。比如一個(gè)做Web前端的程序員,看到結(jié)果后馬上就能清楚與期望的差異,但是你讓他根據(jù)CSS和JS來(lái)判斷跟期望的差異將非常困難。
其它代碼也是如此,如果我們先理解業(yè)務(wù)邏輯,或者先運(yùn)行代碼知道代碼的運(yùn)行過(guò)程及結(jié)果。那么再去理解代碼將變得比較容易了。
輔助方法有些代碼純靠閱讀是很難理解的,這個(gè)時(shí)候可以借助一些輔助的方法來(lái)理解。最為有效的方法自然是運(yùn)行和調(diào)試代碼。比如在代碼中添加一些日志,或者通過(guò)調(diào)試工具,分子流程的理解代碼。這樣我們就能夠各個(gè)擊破的理解整體代碼。
輔助工具一個(gè)好用的工具能夠起到事半功倍的效果。因此,如果你還沒(méi)有一個(gè)比較好的開(kāi)發(fā)或者閱讀代碼的工具,可以選擇一個(gè)。這方面的工具很多,比如C/C++用的source insight,Python的PyCharm,Java的Eclipse等等,類似的工具太多了。
如果你對(duì)代碼有了非常清晰的理解,再去開(kāi)發(fā)就非常容易了。
當(dāng)然,其實(shí)在大型項(xiàng)目中是不可能理解所有代碼的。通常你只需要理解你負(fù)責(zé)的那部分就像。可以先小范圍,然后再擴(kuò)大范圍。
最好,加油吧,要有信心,一定可以勝任的!!!