代碼極簡(jiǎn)主義

我是代碼極簡(jiǎn)主義者。

1:寫代碼禽炬,能夠用簡(jiǎn)單語句寫的涧卵,絕對(duì)不用復(fù)雜語句。

簡(jiǎn)單語句腹尖,不管什么水平的人都能閱讀柳恐,在讀代碼的過程中,會(huì)很順暢热幔。而復(fù)雜語句乐设,水平不夠的人,不一定能看懂绎巨。試想一個(gè)場(chǎng)景近尚,項(xiàng)目時(shí)間很緊,我今天要把這段代碼看懂场勤,然后爭(zhēng)取把這個(gè)bug解決掉戈锻。可是突然來了這么一個(gè)復(fù)雜語句和媳,以前都沒有見過格遭,都不知道是什么意思?你說討厭不討厭?為了弄懂它,我得擺渡一下留瞳,擺渡如果沒有結(jié)果拒迅,那谷還得谷歌一下,如果還是看不太懂她倘。那沒辦法了璧微,問一下大牛吧。抬頭一看帝牡,大牛都下班了往毡。于是今天要把這個(gè)bug解決的希望徹底破滅,你說鬧心不鬧心靶溜,多耽誤時(shí)間?

所以懒震,我從不用復(fù)雜語句罩息。你可以說我水平不夠,也可以說我沒見過世面个扰,無所謂瓷炮。只要功能實(shí)現(xiàn)了就好,只要代碼容易維護(hù)就好递宅,其他的我不care娘香。

你也可能會(huì)說苍狰,寫這種復(fù)雜的代碼,執(zhí)行效率高烘绽。但是淋昭,我覺得,以犧牲代碼的易讀性和易維護(hù)性來得到這一點(diǎn)點(diǎn)的性能安接,不太值得翔忽。而且現(xiàn)在的硬件性能都很高,這點(diǎn)性能提升根本就是杯水車薪盏檐。寫這種復(fù)雜代碼歇式,我覺得一般都是酸腐程序員的個(gè)人技能秀,沒有多大的實(shí)用意義胡野。

有人說材失,一個(gè)手機(jī),80%的功能是沒有用的硫豆,我覺得龙巨,一門語言,也有很多語法是沒用的够庙,我們沒必要一定要用它們恭应。

2:我從不愿意保留無用的代碼。

記得有一次耘眨,我們公司的項(xiàng)目上線運(yùn)行的時(shí)候出了個(gè)大bug昼榛。同一時(shí)間點(diǎn)所有業(yè)務(wù)進(jìn)程集體重啟了。業(yè)務(wù)團(tuán)隊(duì)查了很久剔难,都沒有查出原因胆屿,因?yàn)闆]有發(fā)現(xiàn)任何異常的日志文件。然后就把我叫過去偶宫。說他們發(fā)現(xiàn)這些集體重啟的業(yè)務(wù)進(jìn)程有一個(gè)共同特點(diǎn)非迹,就是都包了我提供的一個(gè)庫(kù),所以他們懷疑是不是我這個(gè)庫(kù)的問題纯趋,希望我查一下這個(gè)庫(kù)憎兽。

因?yàn)闆]有經(jīng)歷過,所以我理所當(dāng)然地認(rèn)為吵冒,這次集體重啟事情跟我的庫(kù)應(yīng)該沒什么關(guān)系纯命。就算是我的庫(kù)有問題,那也只可能影響單個(gè)的業(yè)務(wù)進(jìn)程痹栖,而不可能同時(shí)影響其他的業(yè)務(wù)進(jìn)程亿汞。因?yàn)檫@個(gè)庫(kù)之前不是我做的,我也是剛接手過來沒多久揪阿,正在整理代碼疗我。所以回來后咆畏,雖然我不太相信是我的庫(kù)的問題,但還是把代碼仔細(xì)走讀了一遍吴裤。這不走讀不要緊旧找,一走讀才發(fā)現(xiàn)還真的是我這個(gè)庫(kù)代碼的問題。

事情是這樣的嚼摩,這個(gè)庫(kù)代碼是從以前老的庫(kù)代碼修改過來的钦讳。老的庫(kù)代碼里面有一段邏輯,如果這個(gè)庫(kù)連接服務(wù)器失敗枕面,那么就會(huì)開啟一個(gè)72小時(shí)的定時(shí)器愿卒,如果72小時(shí)還沒有重連成功,那么庫(kù)就會(huì)自殺潮秘,使用的自殺手段是kill -9 進(jìn)程pid琼开。如果72小時(shí)內(nèi)重連成功,那么就會(huì)把定時(shí)器停掉枕荞。

新的庫(kù)代碼不需要這個(gè)邏輯柜候,但是相關(guān)的代碼并沒有完全刪除。重連成功的時(shí)候躏精,停止定時(shí)器的代碼被刪除了渣刷,但是網(wǎng)絡(luò)連接失敗的時(shí)候,開啟定時(shí)器的代碼沒有刪除矗烛,定時(shí)器回調(diào)函數(shù)也沒有刪除辅柴。所以一旦在業(yè)務(wù)的運(yùn)行過程中,出現(xiàn)過網(wǎng)絡(luò)連接失敗的情況瞭吃,那么72小時(shí)定時(shí)器就會(huì)被開啟碌嘀,即使后面重連成功了,定時(shí)器也不會(huì)被刪除歪架,所以72小時(shí)一到股冗,所有業(yè)務(wù)進(jìn)程就集體自殺了。

所以這次事故的根本原因就是沒有把老代碼刪除干凈和蚪!大家應(yīng)該都有這樣的經(jīng)歷止状,維護(hù)老代碼的時(shí)候,里面經(jīng)常會(huì)有很多注釋的代碼攒霹。有時(shí)候更夸張的是导俘,你會(huì)發(fā)現(xiàn)有用的代碼還沒有注釋掉的代碼多,有用的代碼都被淹沒在注釋代碼里剔蹋,看到這樣的代碼,你會(huì)覺得爽么辅髓?還有的情況是泣崩,代碼沒有被注釋掉少梁,但是根本沒有什么用處,因?yàn)闆]有地方調(diào)用他們矫付,或者是已經(jīng)是沒有用的邏輯凯沪。這樣的代碼多了,你可能會(huì)迷失在這些無用的代碼中买优,而忽略真正有用的代碼妨马。

所以,我一般接手一份老代碼后杀赢,第一件事情就是把這些廢代碼刪除烘跺。首先是把注釋掉的代碼刪除,然后就是把代碼從頭到尾走讀一遍脂崔,把沒有注釋掉滤淳,但是已經(jīng)明顯沒用的代碼都刪除。這樣做的好處一方面是減少代碼量砌左,另外一方面就是避免了老代碼里面隱藏的bug脖咐。你只有對(duì)每一行代碼的用處都有清晰的認(rèn)知,才能在出bug的時(shí)候精準(zhǔn)定位汇歹。

之前有個(gè)同事跟我說屁擅,代碼為什么要?jiǎng)h除,放在那里产弹,說不定以后還有用呀派歌。這應(yīng)該就是大多數(shù)廢代碼殘留的原因。我不排除這種可能性取视,但是經(jīng)常的情況是這種可能性出現(xiàn)的機(jī)會(huì)很少硝皂。即使真的出現(xiàn)了,我再重新寫一次作谭,又有什么關(guān)系呢稽物?

3:我不愿意做超前的設(shè)計(jì)

很多人在設(shè)計(jì)一個(gè)新系統(tǒng)的時(shí)候,會(huì)進(jìn)行過度的設(shè)計(jì)折欠。

什么叫過度設(shè)計(jì)贝或?打個(gè)比方,本來計(jì)劃只是要造一個(gè)一層樓的小房子锐秦,但是設(shè)計(jì)人員認(rèn)為以后這個(gè)一層的小房子可能會(huì)加到十層咪奖,所以地基被設(shè)計(jì)成能支持十層樓的地基。因?yàn)橐院罂赡軙?huì)加到十層酱床,所以羊赵,房子的周圍應(yīng)該要設(shè)計(jì)一些停車位,以滿足以后住戶的停車需求。那既然以后這里會(huì)住那么多人昧捷,那相關(guān)的門衛(wèi)闲昭,便利店,菜場(chǎng)靡挥,健身產(chǎn)所序矩,幼兒園,小學(xué)跋破,中學(xué)等等都要考慮起來簸淀。

于是乎,本來只需要幾百行代碼就能搞定的系統(tǒng)毒返,被這么一過度的設(shè)計(jì)租幕,變成了幾千上萬行的代碼。各種封裝饿悬,各種泛型令蛉,各種繞。設(shè)計(jì)人員自己還沾沾自喜狡恬,看我設(shè)計(jì)了一個(gè)多么牛逼的系統(tǒng)珠叔,以后的擴(kuò)展性多么地好。而目前真正用到的代碼弟劲,只是那幾百行而已祷安。如果這個(gè)系統(tǒng)一直是這個(gè)設(shè)計(jì)人員自己維護(hù),那也就罷了兔乞,愛咋整咋整汇鞭。不幸的是,后來這個(gè)設(shè)計(jì)人員離職了庸追,然后系統(tǒng)被移交給了一個(gè)并不熟悉這個(gè)系統(tǒng)的同事霍骄。

這個(gè)同事傻眼了,這個(gè)系統(tǒng)原來這么復(fù)雜啊淡溯,我都快繞暈了读整?這里為什么要用泛型?直接定義一個(gè)類不就行了咱娶?這里為什么要封裝米间,封裝類里面什么都沒有做呀?是不是里面有什么玄機(jī)我還沒有參透膘侮?是不是我能力有限呀屈糊?

所以,我總不建議在設(shè)計(jì)的時(shí)候考慮太多“以后”這種可能性∏砹耍現(xiàn)在軟件更新?lián)Q代那么快逻锐,以后的事情誰知道呢?你的這種可能性可能還沒有出現(xiàn)呢,你設(shè)計(jì)的模塊可能就已經(jīng)被淘汰了谦去。但是你的那些過度的設(shè)計(jì)卻花費(fèi)了后續(xù)維護(hù)人員太多的時(shí)間和精力慷丽。

以我的經(jīng)驗(yàn),一個(gè)軟件在初期規(guī)劃的時(shí)候是什么樣子鳄哭,以后基本上就是什么樣子,可能會(huì)有些小功能的添加纲熏,一般不會(huì)在結(jié)構(gòu)上有大的調(diào)整妆丘。如果真的需要在結(jié)構(gòu)上進(jìn)行大的調(diào)整,基本上就需要重新規(guī)劃一個(gè)新的軟件了局劲。所以代碼滿足現(xiàn)在的需求就行了勺拣,不需要做過多超前的設(shè)計(jì)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鱼填,一起剝皮案震驚了整個(gè)濱河市药有,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苹丸,老刑警劉巖愤惰,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赘理,居然都是意外死亡宦言,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門商模,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奠旺,“玉大人,你說我怎么就攤上這事施流∠炀危” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵瞪醋,是天一觀的道長(zhǎng)忿晕。 經(jīng)常有香客問我,道長(zhǎng)趟章,這世上最難降的妖魔是什么杏糙? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蚓土,結(jié)果婚禮上宏侍,老公的妹妹穿的比我還像新娘。我一直安慰自己蜀漆,他們只是感情好谅河,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般绷耍。 火紅的嫁衣襯著肌膚如雪吐限。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天褂始,我揣著相機(jī)與錄音诸典,去河邊找鬼。 笑死崎苗,一個(gè)胖子當(dāng)著我的面吹牛狐粱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胆数,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼肌蜻,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了必尼?” 一聲冷哼從身側(cè)響起蒋搜,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎判莉,沒想到半個(gè)月后豆挽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骂租,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年祷杈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渗饮。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡但汞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出互站,到底是詐尸還是另有隱情私蕾,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布胡桃,位于F島的核電站踩叭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏翠胰。R本人自食惡果不足惜容贝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望之景。 院中可真熱鬧斤富,春花似錦、人聲如沸锻狗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至油额,卻和暖如春叠纷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背潦嘶。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工涩嚣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衬以。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓缓艳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親看峻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,791評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理衙吩,服務(wù)發(fā)現(xiàn)互妓,斷路器,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)坤塞、插件冯勉、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評(píng)論 4 62
  • 石榴這種水果,真的很難搞摹芙。吃起來也很麻煩灼狰,又愛又恨吖,舌頭都爛掉了浮禾。 很難過交胚,兩年時(shí)間也很容易過的吧。 想到自己交...
    豬悟能閱讀 272評(píng)論 0 0
  • 文章來源于:中國(guó)信保廣東分公司微信訂閱號(hào)
    外貿(mào)小tips精閱讀 80評(píng)論 0 0