前幾天在公司小組內(nèi)做了一個(gè)android插件化的技術(shù)分享,然后被我們jerry大大追殺著要一篇分享,然后我就琢磨著怎么寫(xiě),難道要把這么大一個(gè)主題用一篇文章寫(xiě)完?感覺(jué)不現(xiàn)實(shí),況且本身我現(xiàn)在還在拜讀人家的代碼中,也沒(méi)這個(gè)自信能把所有細(xì)節(jié)都理解透,解釋清楚,所以再三考慮還是決定不誤人子弟了......
不過(guò)為了做這個(gè)分享,我自己倒是學(xué)到了許多。因?yàn)橐o別人分享,那肯定不能瞎扯啊,別人有疑問(wèn)那肯定得解釋到位啊,對(duì)于某些具體的細(xì)節(jié)不能全靠猜啊,咱得講證據(jù)啊,所以呢,只能逼著自己去擼別人的代碼,擼著擼著發(fā)現(xiàn)擼不動(dòng)了,一些地方看不懂,看著好像是干嘛的,但又不確定。如果是平常,可能也就這么過(guò)去了,反正大致上能明白怎么回事,但這次為了分享,得講得出個(gè)所以然,也就硬著頭皮繼續(xù)研究下去。這樣,往往會(huì)學(xué)到其他新的知識(shí),比如資源加載機(jī)制、應(yīng)用程序和系統(tǒng)服務(wù)之間的交互模式、動(dòng)態(tài)代理、activity的啟動(dòng)過(guò)程、廣播注冊(cè)細(xì)節(jié)等等,其實(shí)這些內(nèi)容即使不知道,也是能漂亮的完成一個(gè)app的開(kāi)發(fā)的,畢竟大部分時(shí)候我們用不上這些東西。但一直這么下去,也許你就一直僅限于做一些夠用的app,而不是一些好用的產(chǎn)品,而且隨便一個(gè)培訓(xùn)機(jī)構(gòu)出來(lái)的小伙就能把你替換了,完全沒(méi)有自己的競(jìng)爭(zhēng)力。
所以呢,說(shuō)的現(xiàn)實(shí)點(diǎn),為了自己的錢(qián)途,我覺(jué)得也不應(yīng)該止步于表面。關(guān)于這一點(diǎn),其實(shí)從程序員解決bug的方式就很容易看出來(lái),比如說(shuō)最常見(jiàn)的NullPointException,最簡(jiǎn)單快捷的解決辦法就是給出錯(cuò)的代碼加上非空判斷,以前我就是這么做的,然后過(guò)幾天另一個(gè)地方又出現(xiàn)空指針,那就再來(lái)一遍唄。就這樣,還在為自己解決問(wèn)題的能力和效率沾沾自喜。殊不知,也許只要把源頭找到,這一系列問(wèn)題就都不會(huì)再出現(xiàn)了,這才叫解決bug,才是有意義的代碼,而不是無(wú)謂的加判斷。當(dāng)然,這個(gè)找源頭的過(guò)程可能并不輕松,但也正是這樣才能體現(xiàn)你的能力。
這些也得感謝現(xiàn)在的老大,在不斷的被追問(wèn)導(dǎo)致這個(gè)bug的原因是什么的過(guò)程中,讓我要成了追根溯源的習(xí)慣,而且,在找原因的過(guò)程經(jīng)常會(huì)發(fā)現(xiàn)一些不知道的細(xì)節(jié)。所以,沒(méi)事多問(wèn)問(wèn)自己為什么出錯(cuò),并且找出那個(gè)罪惡之源!