天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

養(yǎng)成重構(gòu)的習(xí)慣有多重要

身為一個(gè)維護(hù)人員,我每天的工作就是研究產(chǎn)品的代碼,修正各種bug,或者添加各種新功能。Kent Beck在《重構(gòu)》一書(shū)中使用了一個(gè)隱喻,“壞味道(bad smell)”。用這個(gè)隱喻來(lái)形容我目前的處境,那就是我正在糞坑里掙扎。這里充斥著“Copy/Past/Modify”而來(lái)的代碼。為了實(shí)現(xiàn)一個(gè)功能而隨心所欲添加的成員變量。長(zhǎng)達(dá)一兩千行的函數(shù)。幾萬(wàn)行的類。到處都是public的成員變量。豐富多彩的編程風(fēng)格。

這個(gè)程序運(yùn)行起來(lái)很漂亮,用戶也很滿意(據(jù)說(shuō))。我想作為用戶,是不需要關(guān)心代碼如何如何的。作為老板也是不需要關(guān)心代碼如何如何的(雖然他聲稱他很在乎)。那么正真關(guān)心代碼的人是誰(shuí)呢,我想來(lái)想去就是我自己,如果想改善生存環(huán)境只能靠自己。我先強(qiáng)調(diào)一下,這套代碼不是我寫(xiě)的,我見(jiàn)到它時(shí)它已經(jīng)是這個(gè)樣子了,并且當(dāng)我提出要進(jìn)行整改時(shí),所有人都是“能跑起來(lái)就不錯(cuò)啦,用戶又沒(méi)提,工時(shí)怎么算”。我只能作罷。我在這里不是發(fā)牢騷,牢騷我已經(jīng)在項(xiàng)目經(jīng)理那里發(fā)過(guò)了。我只是想討論一下這個(gè)“糞坑”是如何形成的,有沒(méi)有辦法避免。

先描述一下我見(jiàn)過(guò)的比較普遍的新增功能的過(guò)程。我們拿到用戶的修改需求后會(huì)做一個(gè)簡(jiǎn)單的評(píng)估,一般是比較有經(jīng)驗(yàn)的程序員參加,然后給出一個(gè)簡(jiǎn)單的修改方案,就會(huì)由一個(gè)程序員(不一定是比較有經(jīng)驗(yàn)的程序員)根據(jù)設(shè)計(jì)修改代碼。等程序員完成修改并且測(cè)試以后就會(huì)提交到項(xiàng)目經(jīng)理那里。項(xiàng)目經(jīng)理還會(huì)找人,一般是他自己,再測(cè)試幾遍。都通過(guò)了就會(huì)發(fā)送給用戶。當(dāng)然,用戶還會(huì)測(cè)試。最后是上線。

Bug修改也是差不多的流程。可以看到整個(gè)過(guò)程都在控制之中,項(xiàng)目經(jīng)理和用戶完全可以通過(guò)充分的測(cè)試來(lái)控制質(zhì)量。顯然,在這個(gè)過(guò)程中代碼的質(zhì)量并不是問(wèn)題的關(guān)鍵。代碼糟糕,修改難度增加并不會(huì)導(dǎo)致用戶給更多的錢(qián)和時(shí)間,相反他們會(huì)說(shuō):“這本來(lái)就是你們的責(zé)任”。對(duì)于管理層,他們并不會(huì)去修改代碼,他們只需要驅(qū)使手下的程序員加班加點(diǎn)的“努力工作”。所以真正有切身厲害的是程序員自己,而造成這種局面的恰恰也是程序員自己。現(xiàn)在讓我們回到上面描述的流程中,好好看看最簡(jiǎn)單的(項(xiàng)目經(jīng)理們的原話)環(huán)節(jié),代碼修改。

這個(gè)程序員會(huì)先在代碼里確定功能的起點(diǎn)也就是啟動(dòng)功能的地方,一般會(huì)從菜單入手。然后他會(huì)在代碼里尋找相似的功能,看看有沒(méi)有什么可以借鑒的。如果沒(méi)找到,就只能從頭開(kāi)始編碼,但是一旦找到了(大多數(shù)情況下是可以找到的,從這一點(diǎn)就可以看出這套代碼的可怕),造糞運(yùn)動(dòng)就開(kāi)始了。他會(huì)把那個(gè)函數(shù)整個(gè)拷過(guò)來(lái),仔細(xì)研究,慢慢修改,邊改邊運(yùn)行測(cè)試效果。這種方法收效甚偉,熟練工會(huì)以飛也似的速度進(jìn)行修改。再加點(diǎn)班,一般都能在用戶要求的期限內(nèi)完成。皆大歡喜。

稍微復(fù)雜的功能就需要有點(diǎn)經(jīng)驗(yàn)的程序員上了。但是操作過(guò)程與上面相仿,其實(shí)上面的操作就是這么代代相傳的。只不過(guò)有經(jīng)驗(yàn)者速度會(huì)更快,成功率會(huì)更高。但是我不得不說(shuō)一句,這種方式讓人作嘔,畢竟這需要極大的耐心和細(xì)致,而且在成千上萬(wàn)行代碼里上下移動(dòng)滾輪很容易迷失,一天下來(lái)身心都是很疲倦的。有人搞軟件搞到猝死也就不足為奇了。

這種代碼基本上不可能自動(dòng)測(cè)試,只能手動(dòng)測(cè)試,測(cè)試起來(lái)非常繁瑣,對(duì)于程序員來(lái)說(shuō)是很繁重的工作。很容易讓人煩躁,尤其是在加班趕進(jìn)度的時(shí)候。這種代碼會(huì)引起bug的爆炸,試想一處的bug被到處復(fù)制,而且還會(huì)引入新的Bug,后果之嚴(yán)重可想而之。這種代碼破壞了幾乎所有OO開(kāi)發(fā)的原則,無(wú)法擴(kuò)展,只能修改。通過(guò)他衍生出來(lái)的項(xiàng)目變得更加無(wú)法維護(hù)。

說(shuō)了這么多,現(xiàn)在說(shuō)今天的重點(diǎn),我認(rèn)為造成這種局面的原因如下:

1、 管理層不重視代碼書(shū)寫(xiě),認(rèn)為是體力勞動(dòng);

2、 項(xiàng)目經(jīng)理疲于應(yīng)付進(jìn)度,無(wú)心且無(wú)力;

3、 程序員水平參差不齊,缺乏正確的指導(dǎo)。

  我不是老板,不能要求老板像我一樣看問(wèn)題,其實(shí)想想看老板雇傭我就是讓我來(lái)給他照顧代碼的,所以我不能要求老板來(lái)幫我。項(xiàng)目經(jīng)理的職責(zé)應(yīng)該是控制項(xiàng)目進(jìn)度,協(xié)調(diào)各方關(guān)系,像代碼這種小問(wèn)題也不應(yīng)該勞煩他。剩下的就是開(kāi)發(fā)人員了,作為每天都在和代碼打交道的人實(shí)在沒(méi)有理由不關(guān)心代碼,實(shí)在不應(yīng)該給本來(lái)就一團(tuán)亂麻的代碼添亂。其實(shí)只要不滿足于只是完成功能(當(dāng)然對(duì)很多人來(lái)說(shuō)這已經(jīng)很了不起了),完成功能之后多想一下,嘗試尋找違反“DRY”原則的地方,嘗試把平時(shí)學(xué)習(xí)的OOP知識(shí)印證到代碼里,代碼也許就能有極大提高,自己的水平也會(huì)提高。這種對(duì)代碼進(jìn)行反復(fù)批判調(diào)整的過(guò)程就叫“重構(gòu)”,前面我們提到的那本書(shū)就是對(duì)這些方法的總結(jié)和提升。當(dāng)然,要想正真掌握它并不容易,需要不斷學(xué)習(xí),實(shí)踐和總結(jié)。但是我以為,最重要的是把重構(gòu)變成習(xí)慣。只有當(dāng)你養(yǎng)成了重構(gòu)的習(xí)慣你才算是掌握了這個(gè)工具。

養(yǎng)成重構(gòu)的習(xí)慣先要從訓(xùn)練對(duì)代碼的審美開(kāi)始。經(jīng)常看到人們提到“代碼之美”,我很贊同這種觀點(diǎn),但是對(duì)美的欣賞是一種比較高的層次。并不是每個(gè)初學(xué)者都能做到的。所以不如先學(xué)什么是“代碼之丑”。辨別代碼的丑俊有一個(gè)很簡(jiǎn)單的辦法,尋找重復(fù)。代碼的重復(fù),數(shù)據(jù)的重復(fù),配置信息的重復(fù),甚至測(cè)試發(fā)布步驟的重復(fù)反復(fù),都是丑惡的,都要清除。其次是簡(jiǎn)單。簡(jiǎn)單不是直接,不是把功能代碼寫(xiě)到菜單事件里就叫簡(jiǎn)單。一開(kāi)始可以這樣寫(xiě),但是要時(shí)刻提醒自己這里的代碼其他地方可能會(huì)用到,要想辦法提煉成功能明確的函數(shù)(Extract Method)。從習(xí)慣養(yǎng)成這個(gè)角度上講,我認(rèn)為程序員應(yīng)該有代碼潔癖。

在代碼品味提高之后,很自然的就會(huì)對(duì)“不美的代碼”產(chǎn)生“整容”的沖動(dòng)。但是不能亂來(lái),重構(gòu)是講求方法學(xué)的。Kent Beck說(shuō)過(guò):“我不會(huì)對(duì)無(wú)法自動(dòng)測(cè)試的代碼進(jìn)行重構(gòu)”。但是現(xiàn)實(shí)并不理想,我們也不是大師,而且生活所迫,所以有時(shí)候我們只能對(duì)“無(wú)法自動(dòng)測(cè)試的代碼”進(jìn)行重構(gòu)。建議大家都去讀一讀Kent Beck的《重構(gòu)》這本書(shū)。他先從方法學(xué)的角度對(duì)重構(gòu)進(jìn)行闡述,然后總結(jié)出許多實(shí)用的重構(gòu)技巧。有了思想上的武裝,重構(gòu)就會(huì)有的放矢了。

養(yǎng)成一種習(xí)慣并不容易,需要外界的壓力,需要自身的毅力,最重要的是足夠的渴望。只要你是一個(gè)想把程序員作為終身職業(yè)的人,都應(yīng)該嘗試養(yǎng)成重構(gòu)這個(gè)習(xí)慣。

it知識(shí)庫(kù)養(yǎng)成重構(gòu)的習(xí)慣有多重要,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 激情欧美日韩一区二区 | 国产毛片视频网站 | 色欲AV色欲AV久久麻豆 | 野花视频在线观看免费最新动漫 | 久久精品亚洲AV高清网站性色 | seba51久久精品 | 小伙无套内射老女人 | 特黄AAAAAAA片免费视频 | 伊人久久综在合线影院 | 秋霞伦理高清视频在线 | 国产成人精品免费视频下载 | h版动漫在线播放的网站 | 人妻超级精品碰碰在线97视频 | WWW国产无套内射久久 | 日本女人bbb | 热九九99香蕉精品品 | 无罩看奶禁18 | 2021扫黑风暴在线观看免费完整版 | 成人国产精品免费网站 | 变态露出野外调教 | 成人国产亚洲精品A区天堂蜜臀 | 日韩欧美一区二区三区免费观看 | 中文字幕人成乱码熟女APP | 日韩欧美一区二区三区在线视频 | 免费精品一区二区三区AA片 | 欧美成人无码视频午夜福利 | 国产乱码一区二区三区 | 午夜免费国产体验区免费的 | 国产综合91| 青青草狠狠干 | 神马电影我不卡国语版 | 国产美女视频一区二区二三区 | 古代荡乳尤物H妓女调教 | 年轻的女职工在线观看 | 香蕉精品国产自在现线拍 | 国产午夜亚洲精品一区 | 男gv纯肉免费视频 | 变形金刚7免费观看完整 | 久久精品一卡二卡三卡四卡视频版 | 中文字幕日本在线mv视频精品 | 日韩精品欧美亚洲高清有无 |