高質(zhì)量的工程代碼為什么難寫

之所以想起寫這篇文章,是因?yàn)樽罱吹降囊粋€(gè)著名的開源項(xiàng)目在內(nèi)部使用時(shí)的各種問題,不得不說警儒,很多的開源的東西思想是不錯(cuò)的竿奏,但離真正工程化都有不小的距離袄简,所以沒什么商業(yè)公司采用的開源產(chǎn)品如果要引入的話一定要慎重,通常會(huì)有N多的坑等著你去填泛啸,而比較成功的開源項(xiàng)目的背后多數(shù)都會(huì)有商業(yè)公司在背后不斷的改進(jìn)绿语。
  遙想我2000年開始學(xué)習(xí)寫asp代碼時(shí),覺得寫代碼也不難呀候址,無非就是學(xué)學(xué)語法規(guī)則吕粹、庫就可以寫出來,記得有一次我實(shí)習(xí)面試的時(shí)候是讓我在一個(gè)下午左右的時(shí)間寫一個(gè)完整的留言板岗仑,那也就是刷刷刷就寫好了匹耕,但隨著后來工作,尤其是加入阿里以后荠雕,越來越明白高質(zhì)量的工程代碼為什么難寫稳其。
  在寫代碼初期,最關(guān)注的是如何用代碼實(shí)現(xiàn)需求炸卑,如果是僅僅實(shí)現(xiàn)業(yè)務(wù)需求的話既鞠,即使是剛上手的程序員,只要解題能力還OK盖文,基本上都是可以寫出代碼來的损趋。所以我自己一直認(rèn)為數(shù)學(xué)成績是程序員的一個(gè)非常重要的要求,數(shù)學(xué)好的人通常解題和邏輯思維能力是還不錯(cuò)的椅寺。
  上面的這個(gè)基本的寫代碼的過程中浑槽,寫的更好的同學(xué)的體現(xiàn)會(huì)在對(duì)業(yè)務(wù)的深刻理解以及抽象上,寫出的代碼會(huì)具備一定的復(fù)用能力返帕,這個(gè)在這里不多加探討桐玻。
  但代碼是不是實(shí)現(xiàn)了業(yè)務(wù)需求就結(jié)束了呢,其實(shí)遠(yuǎn)沒有荆萤,這其實(shí)只是寫代碼的開始镊靴,除了正向的邏輯實(shí)現(xiàn)外铣卡,任何一個(gè)點(diǎn)的異常的分支邏輯怎么處理才是工程化的代碼中更難處理的部分,這個(gè)問題在單機(jī)式的系統(tǒng)中會(huì)相對(duì)還好處理偏竟,在分布式的環(huán)境會(huì)變得非常的復(fù)雜煮落,例如調(diào)用其他機(jī)器的功能超時(shí)了,出錯(cuò)了踊谋,到底該怎么處理蝉仇,這也是為什么有了那么多的分布式的理論的東西出來,在增加了異常分支的處理邏輯后殖蚕,通常會(huì)發(fā)現(xiàn)這個(gè)時(shí)候正向邏輯的代碼在整個(gè)代碼的占比中會(huì)大幅下降轿衔。
  異常分支邏輯處理好后,通常還需要增加必要的日志信息睦疫,以便在出問題時(shí)方便排查害驹,而不是到了要排查問題的時(shí)候,一點(diǎn)目前系統(tǒng)的狀況都搞不清楚蛤育,所以吃掉重要的異常信息不拋出這種行為在寫代碼中是非惩鸸伲可恥的。
  在處理好上面異常的相關(guān)動(dòng)作后瓦糕,代碼的健壯性也要處理好摘刑,這個(gè)主要指:
  1. 自我保護(hù)能力
  對(duì)外提供的接口是否具備足夠的自我保護(hù)能力,就是即使使用的人沒仔細(xì)看API文檔隨便亂用也不會(huì)導(dǎo)致系統(tǒng)出問題刻坊,這種案例非常的多枷恕,例如對(duì)外提供了一個(gè)批量查詢接口,結(jié)果用戶一下傳了一個(gè)里面有上千個(gè)用戶id的數(shù)組谭胚,查詢一下直接把內(nèi)存耗光徐块,像這種情況下不能怪使用的人,而應(yīng)該怪實(shí)現(xiàn)API的這一端的保護(hù)做的不夠好灾而,按照這樣的標(biāo)準(zhǔn)去看胡控,會(huì)發(fā)現(xiàn)開源的很多東西的API都不太合格。
  還有一種就是能力保護(hù)旁趟,如果超出了處理的并發(fā)量的能力昼激,這個(gè)時(shí)候會(huì)發(fā)生什么。
  2. 對(duì)資源的使用限制
  這也是代碼新手或一些開源產(chǎn)品中做的比較差的地方锡搜,很容易出現(xiàn)規(guī)模一上去橙困,資源使用量也一直漲,沒有限制耕餐,然后導(dǎo)致系統(tǒng)掛掉凡傅,很常見的案例是對(duì)線程池的使用,例如像Java中的Executors.newCachedThreadPool肠缔,這個(gè)接口很多人會(huì)用到夏跷,但很多用的人都沒有仔細(xì)想過會(huì)不會(huì)在某種情況下這里創(chuàng)建出巨多的線程哼转;還有例如用Map做cache,也沒考慮大小限制的問題槽华,結(jié)果就是隨著數(shù)據(jù)量增長壹蔓,某天突然就掛了。
  健壯性是代碼中比較復(fù)雜的部分猫态,通常也是比較展現(xiàn)代碼能力的部分佣蓉,可能看起來就幾行代碼,但其實(shí)背后反映的差距是巨大的懂鸵。
  開源產(chǎn)品除了在健壯性上的差距外偏螺,通常還會(huì)出現(xiàn)的一個(gè)巨大差距就是整個(gè)系統(tǒng)的設(shè)計(jì)的伸縮能力行疏,伸縮能力不夠的話通常會(huì)導(dǎo)致結(jié)構(gòu)性的重構(gòu)匆光,另外常見的就是在并發(fā)的處理上不夠高效,例如鎖的合理使用酿联、無鎖算法的引入等等终息,而這些需要非常強(qiáng)的系統(tǒng)設(shè)計(jì)和代碼功底能力。
  除了上面說的這些外贞让,高質(zhì)量的工程代碼還需要考慮可維護(hù)(例如監(jiān)控信息暴露)周崭、安全性等,對(duì)我而言喳张,我一直認(rèn)為所謂的工程化其實(shí)就是把一些玩具性質(zhì)的代碼變成可在商業(yè)系統(tǒng)中真正健壯運(yùn)行的代碼续镇。
  上面的內(nèi)容寫的比較簡(jiǎn)略,不過應(yīng)該也能看出销部,對(duì)于高質(zhì)量的工程代碼而言摸航,其實(shí)實(shí)現(xiàn)業(yè)務(wù)邏輯只是其中占比很小的一部分,甚至花的時(shí)間是相對(duì)最少的一部分舅桩,所以我確實(shí)非常贊同面試的時(shí)候讓同學(xué)寫代碼酱虎,這個(gè)時(shí)候很容易看出同學(xué)寫代碼的功力;有些時(shí)候?yàn)榱丝疾焱瑢W(xué)寫代碼的熟練程度擂涛,我會(huì)問問IDE的快捷鍵读串,或者讓手寫一段不是太復(fù)雜的代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撒妈,一起剝皮案震驚了整個(gè)濱河市恢暖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狰右,老刑警劉巖胀茵,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異挟阻,居然都是意外死亡琼娘,警方通過查閱死者的電腦和手機(jī)峭弟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脱拼,“玉大人瞒瘸,你說我怎么就攤上這事∠ㄅǎ” “怎么了情臭?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赌蔑。 經(jīng)常有香客問我俯在,道長,這世上最難降的妖魔是什么娃惯? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任跷乐,我火速辦了婚禮,結(jié)果婚禮上趾浅,老公的妹妹穿的比我還像新娘愕提。我一直安慰自己,他們只是感情好皿哨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布浅侨。 她就那樣靜靜地躺著,像睡著了一般证膨。 火紅的嫁衣襯著肌膚如雪如输。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天央勒,我揣著相機(jī)與錄音不见,去河邊找鬼。 笑死订歪,一個(gè)胖子當(dāng)著我的面吹牛脖祈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刷晋,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盖高,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了眼虱?” 一聲冷哼從身側(cè)響起喻奥,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捏悬,沒想到半個(gè)月后撞蚕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡过牙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年甥厦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纺铭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刀疙,死狀恐怖舶赔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谦秧,我是刑警寧澤竟纳,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站疚鲤,受9級(jí)特大地震影響锥累,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜集歇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一桶略、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鬼悠,春花似錦删性、人聲如沸亏娜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽维贺。三九已至它掂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溯泣,已是汗流浹背虐秋。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垃沦,地道東北人客给。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像肢簿,于是被迫代替她去往敵國和親靶剑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,140評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫池充、插件桩引、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,104評(píng)論 4 62
  • 北京的楓葉又紅了吧。 去年到北京探望你收夸,你一身單薄的衣服出現(xiàn)在車站坑匠。我心疼你,你卻滿臉堆笑說北京還不冷卧惜。我知道你是...
    郁輪袍_a8f6閱讀 153評(píng)論 0 0
  • 今天是母親節(jié),大家都在朋友圈訴說著對(duì)媽媽的甜言蜜語设凹,而我捷凄,這一天都沒有再看朋友圈。 我知道自己是在逃避围来,就像十幾年...
    度厘喵兒閱讀 2,270評(píng)論 3 3
  • 素顏皮膚很差怎么辦? 化妝會(huì)導(dǎo)致皮膚變差嗎胀蛮? 醒醒醒醒院刁,化妝本身不會(huì)導(dǎo)致皮膚變差, 而妝后卸除不干凈才會(huì)7嗬恰退腥! 再不...
    星享加閱讀 774評(píng)論 0 2