原創(chuàng):微信公眾號(hào) 【阿Q說(shuō)代碼】,歡迎分享曹仗,轉(zhuǎn)載請(qǐng)保留出處榨汤。
之前寫過(guò)一篇名為《看了同事寫的代碼,我竟然開(kāi)始默默的模仿了怎茫。收壕。」旄颍》的文章啼器,今天偶然間看了下后臺(tái)數(shù)據(jù),大吃一驚俱萍。該文章的閱讀量在微信公眾號(hào)內(nèi)竟然達(dá)到了驚人的5W+ 。對(duì)于沒(méi)見(jiàn)過(guò)市面的我來(lái)說(shuō)已經(jīng)相當(dāng)滿足了告丢。
當(dāng)然枪蘑,能達(dá)到這樣的數(shù)據(jù)離不開(kāi)各位大佬的垂青,在此再次感謝各位大佬岖免。
于是我又抱著好奇的態(tài)度去其他平臺(tái)看了下數(shù)據(jù)岳颇,感覺(jué)也不錯(cuò),大體算了一下全網(wǎng)竟然達(dá)到了10W+ ——此處應(yīng)有掌聲颅湘,為自己鼓個(gè)掌话侧。
后面如果還有大佬想轉(zhuǎn)載這篇文章,可以第一時(shí)間聯(lián)系我闯参,謝謝瞻鹏。
閱讀感受
有趣的是大家對(duì)“閱讀同事代碼”這件事展開(kāi)了熱烈討論,來(lái)兩張圖體會(huì)下鹿寨。
對(duì)于我來(lái)說(shuō)新博,也有些體會(huì)和感悟,分享給大家脚草。
初出茅廬
“在座的各位都是垃圾赫悄,小丑竟是我自己” ——這是我剛剛參加工作時(shí)閱讀同事代碼的感受。
作為初級(jí)程序員的我馏慨,剛參加工作不久埂淮,只會(huì)簡(jiǎn)單的編程知識(shí),對(duì)于設(shè)計(jì)原則写隶、設(shè)計(jì)模式倔撞、代碼規(guī)范等一竅不通,卻“盲目自信”樟澜,認(rèn)為編程也就那么回事误窖。
閱讀同事寫的代碼時(shí)叮盘,由于本身眼界有限,認(rèn)為過(guò)于繁瑣霹俺、晦澀難懂柔吼,有裝X的嫌疑,總想著能不能給他優(yōu)化一下子丙唧。你別說(shuō)還真有"膽大"的同事給老員工優(yōu)化代碼的案例愈魏,還好在測(cè)試階段把Bug
測(cè)出來(lái)了,要不然上線之后追悔莫及想际。
在此建議別輕易修改別人的代碼培漏,代碼的“混亂”不是一蹴而就的,是經(jīng)過(guò)多個(gè)版本迭代或者需求的變更遺留下來(lái)的胡本,是經(jīng)得住推敲的牌柄。如果非得重構(gòu)代碼,建議讓編碼者親自操刀侧甫。
當(dāng)廢了九牛二虎之力把同事的代碼看懂之后珊佣,突然覺(jué)得同事真的太牛了。他當(dāng)時(shí)是怎么想到用這么巧妙地方法來(lái)實(shí)現(xiàn)該功能的披粟?崇拜之情溢于言表咒锻。要是跟他拜師學(xué)幾年,豈不是大業(yè)可成守屉。
從容不迫
“進(jìn)可攻退可守”——是我對(duì)閱讀同事代碼第二階段的感受惑艇。
工作幾年之后,對(duì)代碼的編寫和工作的流程有了進(jìn)一步的理解拇泛,對(duì)閱讀別人代碼這件事也就有了更多的感受滨巴。俗話說(shuō)“吃虧是福”碰镜,在工作中也一樣兢卵,不親自來(lái)踩一下項(xiàng)目中的坑,你永遠(yuǎn)也不知道“社會(huì)的險(xiǎn)惡”绪颖。
經(jīng)歷過(guò)閱讀別人的代碼甚至修改別人的代碼之后秽荤,年輕的沖動(dòng)和對(duì)垃圾代碼的憤怒也被緊急的項(xiàng)目以及莫名的Bug
給磨平了,少了些青蔥的激昂柠横,多了些老練的從容窃款。
為什么總結(jié)為“進(jìn)可攻退可守”呢?是因?yàn)橛辛斯ぷ鞯某恋碇箅狗眨瑢?duì)之前的設(shè)計(jì)原則晨继、設(shè)計(jì)模式等有了基本的了解,再遇到垃圾代碼時(shí)總想大展身手搬俊,為項(xiàng)目做點(diǎn)“貢獻(xiàn)”紊扬,將垃圾代碼重構(gòu)一翻蜒茄,故而稱之為“進(jìn)”。
當(dāng)我們想大刀闊斧的為項(xiàng)目改進(jìn)時(shí)餐屎,卻發(fā)現(xiàn)項(xiàng)目的弊病根深蒂固檀葛,改造起來(lái)并不容易,然而隨著工期的逼近腹缩,我們不得不向時(shí)間妥協(xié)屿聋。利用版本控制工具默默的回滾代碼,繼續(xù)往垃圾代碼中添加“垃圾”藏鹊,我把它稱之為“退”润讥。
當(dāng)項(xiàng)目上線無(wú)Bug
之后,意味深長(zhǎng)的來(lái)一句:垃圾代碼還是有垃圾代碼的好處呀盘寡。當(dāng)下次開(kāi)項(xiàng)目重構(gòu)需求討論會(huì)時(shí)楚殿,心里默默的來(lái)一句:要不你還是把我殺了吧!
久經(jīng)沙場(chǎng)
“寬猛并濟(jì)竿痰,不過(guò)度設(shè)計(jì)”——這是我現(xiàn)在閱讀同事代碼的感受勒魔。
并不是說(shuō)我的技術(shù)有多牛或者說(shuō)我的境界有多高菇曲,主要是我扎根于“搬磚”一線,工作時(shí)間長(zhǎng)了抚吠,看的代碼也比較多而已常潮。
從我身邊的同事或朋友來(lái)看,他們的個(gè)人技術(shù)能力都比較過(guò)硬楷力,對(duì)業(yè)務(wù)對(duì)架構(gòu)的熟練程度也比較到位喊式。他們對(duì)各種設(shè)計(jì)規(guī)則、代碼規(guī)范了然于胸萧朝,但卻不執(zhí)著于此岔留。能簡(jiǎn)單解決的問(wèn)題一筆帶過(guò),該注意的設(shè)計(jì)規(guī)范也能駕輕就熟检柬。
在與朋友的交談中提及到閱讀代碼的問(wèn)題献联,他們也是毫不避諱的說(shuō):每個(gè)項(xiàng)目中都會(huì)存在垃圾代碼,當(dāng)然也不缺乏好的設(shè)計(jì)何址。對(duì)于垃圾的代碼里逆,在不影響全局的情況下可以適度重構(gòu),當(dāng)然對(duì)于重要的環(huán)節(jié)完全重構(gòu)成本太高,試錯(cuò)成本有點(diǎn)大。而對(duì)于精致的代碼万细,平時(shí)遇到了也會(huì)研究一番尼酿,從設(shè)計(jì)思路到代碼編寫都會(huì)虛心學(xué)習(xí)蛔钙,畢竟人無(wú)完人笨农,代碼更是這樣就缆。
要做到寬猛并濟(jì)也就是要做到:對(duì)自己要嚴(yán)格要求,盡量減少垃圾代碼的輸出與添加磁餐,盡量做到設(shè)計(jì)的規(guī)范與合理;對(duì)別人要以寬容并包的心態(tài)來(lái)看待羞延,每個(gè)人的風(fēng)格不同,對(duì)同一業(yè)務(wù)的理解不同脾还,實(shí)現(xiàn)方式自然不同伴箩。
當(dāng)然如果想更上一層樓,那就需要把公司的成本與軟件的開(kāi)發(fā)結(jié)合起來(lái)鄙漏,適度設(shè)計(jì)、適度重構(gòu)怔蚌,畢竟盈利才是公司的終極目標(biāo)。
如何閱讀
至于該如何閱讀別人的代碼椅野,我也來(lái)談?wù)勎业南敕瑁诖藪佫D(zhuǎn)引玉竟闪,大家評(píng)論區(qū)見(jiàn)杖狼。
優(yōu)秀的評(píng)論可以獲取文末技術(shù)書籍一本炼蛤。
在閱讀代碼之前可以查看一下項(xiàng)目原型蝶涩、規(guī)劃流程、《設(shè)計(jì)文檔》等暗挑,如果公司開(kāi)發(fā)需求比較急或者沒(méi)有對(duì)文檔編寫的習(xí)慣斜友,找開(kāi)發(fā)同事了解下開(kāi)發(fā)邏輯流程或者找產(chǎn)品同事了解下項(xiàng)目的需求也是不錯(cuò)的選擇。
一定要先了解需求與項(xiàng)目流程鲜屏,這是代碼的靈魂国拇。
我們還可以跟同事“嘮嘮嗑”酱吝,了解下他的實(shí)現(xiàn)方案土思、實(shí)現(xiàn)方式、關(guān)鍵技術(shù)等己儒,待到看源碼時(shí)崎岂,便可以了然于胸闪湾,有的放矢。
如果一頭深深扎于代碼之中江醇,對(duì)于有經(jīng)驗(yàn)的“老者”能了解代碼的層次結(jié)構(gòu)何暇,但是對(duì)于經(jīng)驗(yàn)欠缺尤其是對(duì)框架或者結(jié)構(gòu)不明確的“年輕人”就會(huì)一頭霧水,哪怕最后將代碼搞懂了律适,可能也事倍功半遏插。
讀代碼時(shí)可以先根據(jù)流程圖捋順整體邏輯,然后再去深入研究每一個(gè)函數(shù)的功能及實(shí)現(xiàn)胳嘲。在研究的過(guò)程中扣草,可以像讀Spring
或者Mybatis
等編碼清晰的源碼那樣,養(yǎng)成隨手畫流程圖或者思維導(dǎo)圖的習(xí)慣鹰祸,下次再看時(shí)就一目了然了密浑,畢竟好記性不如爛筆頭嘛。
如果不善于畫圖尔破,當(dāng)然可以在本子上畫個(gè)草圖呀浇衬,不要拘泥于形式餐济。
如果還不擅長(zhǎng),那就將代碼檢出本地分支醉冤,在本地分支上做注解篙悯、打標(biāo)記、寫疑問(wèn)辕近,盡你所能“迫害”本地代碼移宅,為所欲為,直到便于自己理解漏峰,千萬(wàn)別客氣。
當(dāng)然代碼的理解也可以在Debug
模式下進(jìn)行倔喂,實(shí)踐出真知靖苇。看十遍不如跑一邊贤壁,讓程序動(dòng)起來(lái),你的思緒也就飛起來(lái)了馒索,變得活絡(luò)了名船,也就便于理解了。
以上是我淺顯的觀點(diǎn)渠驼,評(píng)論區(qū)留下你的觀點(diǎn)吧!
小結(jié)
無(wú)論是從讀別人的代碼那種煎熬的程度疯趟,還是從如何閱讀才能提高效率,無(wú)一不體現(xiàn)出代碼的可讀性對(duì)開(kāi)發(fā)效率的影響倦青,因此我們?cè)谄綍r(shí)開(kāi)發(fā)過(guò)程中一定要寫注釋盹舞、寫注釋、寫注釋踢步!
好的注釋不光可以把流程顯示清楚,更可以將解決問(wèn)題時(shí)存在的“坑”寫出來(lái)述雾,讓后者少走彎路兼丰。畢竟前人挖坑,后人也不會(huì)管埋的黍翎!
阿Q將持續(xù)更新java實(shí)戰(zhàn)方面的文章艳丛,感興趣的可以關(guān)注下,也可以來(lái)技術(shù)群討論問(wèn)題呦氮双!