91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

降低代碼可讀性,增加維護(hù)難度的12個(gè)編碼“技巧”

jf_ro2CN3Fa ? 來(lái)源:稀土掘金 ? 2023-11-27 11:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

下面細(xì)數(shù)一下 降低代碼可讀性,增加維護(hù)難度的 12 個(gè)編碼“技巧”。

假設(shè)一個(gè)叫”二狗“ 的程序員,喜歡做以下事情。

1 二狗積極拆分微服務(wù),一個(gè)表對(duì)應(yīng)一個(gè)微服務(wù)

二狗十分認(rèn)可微服務(wù)的設(shè)計(jì)思想。認(rèn)為微服務(wù)可以獨(dú)立開(kāi)發(fā)和發(fā)布,每次改動(dòng)不會(huì)影響其他系統(tǒng)。大大提高了開(kāi)發(fā)人員的效率和線上穩(wěn)定性。還可以在新服務(wù)里使用新的技術(shù),例如JDK 21

于是狗哥把微服務(wù)的思想發(fā)揮到極致,每一張表都是一個(gè)服務(wù)。系統(tǒng)的應(yīng)用架構(gòu)圖十分壯觀。狗哥自豪的跟新同學(xué)講解自己設(shè)計(jì)的系統(tǒng)。新同學(xué)看著十幾個(gè)服務(wù)陷入了思考,不停地問(wèn)著每個(gè)服務(wù)的作用,干了什么。狗哥很滿足。

新同學(xué)第一次開(kāi)發(fā)需求,表現(xiàn)很差。雖然他要改10個(gè)服務(wù),但是每個(gè)服務(wù)只改動(dòng)了一點(diǎn)點(diǎn)。并且由于服務(wù)之間都是Rpc調(diào)用,需要定義大量的接口,他需要發(fā)布好多的 jar,定義版本號(hào),解決測(cè)試環(huán)境版本沖突,測(cè)試和上線階段可把他忙壞了。

光是梳理上線順序,新同學(xué)就請(qǐng)教了狗哥 三次。最后還是狗哥幫他上線了3 個(gè)服務(wù),新同學(xué)才趕在 凌晨 3 點(diǎn)前把所有的服務(wù)發(fā)完??粗峦瑢W(xué)買了奶茶的份上,狗哥這次才沒(méi)有和領(lǐng)導(dǎo)吐槽,“這個(gè)同學(xué)不行啊,上個(gè)線都這么費(fèi)勁”

微服務(wù)過(guò)多,也困擾著狗哥。雖然線上流量不高,但是由于 “微服務(wù)太多,系統(tǒng)架構(gòu)復(fù)雜",接口性能不行。

于是狗哥開(kāi)始進(jìn)行重構(gòu),他重新加了一個(gè)開(kāi)關(guān),新邏輯可以減少Rpc,調(diào)用提高性能。狗哥在代碼中加了注釋 "新邏輯"。

狗哥把代碼上線了,但是在線上環(huán)境不敢放開(kāi),只在測(cè)試環(huán)境打開(kāi)了開(kāi)關(guān)。

2 二狗積極重構(gòu)代碼,但是線上不放量

狗哥喜歡對(duì)代碼進(jìn)行重構(gòu),狗哥和領(lǐng)導(dǎo)吹牛,說(shuō)“ 重構(gòu)后的代碼性能更強(qiáng),更穩(wěn)定”。狗哥還添加了注釋 ”這是新邏輯 “。

但是狗哥在線上比較謹(jǐn)慎,并沒(méi)有進(jìn)行放量。只是在測(cè)試環(huán)境,放開(kāi)了全量。

新接手的同學(xué)不知道線上還沒(méi)放量,看到“這是新邏輯” ,他就在狗哥的“新邏輯”上改代碼。測(cè)試環(huán)境驗(yàn)證一切正常,到了線上階段卻怎么也跑不通。

此時(shí)新同學(xué)才發(fā)現(xiàn) ”新邏輯“ 的開(kāi)關(guān)沒(méi)有打開(kāi),你猜,他敢打開(kāi)這個(gè)開(kāi)關(guān)嗎?于是他只能刪代碼,在舊邏輯上重新開(kāi)發(fā)。等到改完代碼,再上線時(shí),已經(jīng)天亮了。

由于這次上線問(wèn)題,大家一起熬夜加班,需求上線被推遲。新同學(xué)被產(chǎn)品和測(cè)試一頓騎臉輸出。新同學(xué)委屈的想要離職。

3 二狗喜歡挑戰(zhàn)自我,方法長(zhǎng)度一定要超過(guò)1000行

二狗寫(xiě)代碼天馬行空。二狗認(rèn)為提煉新方法會(huì)打斷自己的編碼思路,代碼越長(zhǎng),邏輯越連貫,可讀性越高。二狗還認(rèn)為 優(yōu)秀的程序員寫(xiě)的方法都是 非常長(zhǎng)的。這能體現(xiàn)個(gè)人的能力。

二狗不光自己寫(xiě)超長(zhǎng)的方法,在改別人的代碼時(shí),也從不提煉新的方法。二狗總是在原來(lái)的方法中添加更長(zhǎng)的一段代碼。

新同學(xué)接手代碼時(shí)速度很慢,即使加班到凌晨,也不理解狗哥代碼設(shè)計(jì)的藝術(shù)。狗哥還向領(lǐng)導(dǎo)抱怨,”你最近招的人不行啊,一個(gè)小需求開(kāi)發(fā)這么久,上線還出了bug?!?/p>

4 二狗喜歡挑戰(zhàn)自我,一個(gè)方法 if/try/else 要嵌套10層以上

二狗寫(xiě)代碼十分認(rèn)真,想到哪里就寫(xiě)哪里。if/else/try catch 層層嵌套。狗哥的思路很快,并且思考全面, 嵌套十幾層的代碼一點(diǎn)bug都沒(méi)有,測(cè)試同學(xué)都夸贊狗哥 ”代碼質(zhì)量真高啊 “,一個(gè)bug都沒(méi)有。

新同學(xué)接手新代碼時(shí),看到嵌套十幾層的代碼,大腦瞬間就要爆炸。想要罵人,但是看到代碼作者是狗哥……

無(wú)奈之下,自己實(shí)在看不懂這段代碼,于是點(diǎn)了一杯奶茶,走到了狗哥工位旁,”狗哥,多喝點(diǎn)水,給你點(diǎn)了一杯奶茶。…………這段代碼能給我講講嗎?“

狗哥過(guò)幾天和領(lǐng)導(dǎo)閑聊天,“新來(lái)的同學(xué)人不錯(cuò),還給我點(diǎn)奶茶喝”

5 二狗認(rèn)為變量命名是藝術(shù),要隨機(jī)命名,不要和業(yè)務(wù)邏輯有關(guān)系

二狗覺(jué)得寫(xiě)代碼是藝術(shù),就好像畫(huà)畫(huà)一樣?!蹦阋?jiàn)過(guò)幾個(gè)人能看懂 梵高的畫(huà)?” 狗哥曾經(jīng)和旁邊人吹牛。

二狗寫(xiě)代碼思路十分奇特,有時(shí)候來(lái)不及想變量如何命名,有時(shí)候是懶得想變量命名。狗哥經(jīng)常隨便就命名了,例如 str1,str2,list1,list2等等。不得不說(shuō),狗哥的思維還是敏捷的,這么多變量命名都能記住,還不出bug。

但是狗哥記性不大行,過(guò)一兩個(gè)月就不太記得這些變量的意義了。

6 二狗積極寫(xiě)注釋,但是寫(xiě)了錯(cuò)誤的注釋

一個(gè)成熟穩(wěn)重的程序員改別人代碼時(shí)會(huì)十分慎重,如果有代碼注釋,他們一定會(huì)十分認(rèn)真閱讀并嘗試?yán)斫馑?/p>

二狗喜歡把注釋引入錯(cuò)誤的方向,例如 “是” 改成 “不是”,“更好”改成”更差“,把兩處不相干的注釋交換一下位置 等。

新接手的同學(xué)點(diǎn)了一杯奶茶,虛心求助二狗,“狗哥,你寫(xiě)的這段注釋有什么深意啊,我看了三天,也不理解啊”。

到時(shí)候狗哥就可以給新同學(xué)一邊裝B,一邊講代碼了。當(dāng)然還要看心情,要是不口渴,可以講講。

7 二狗改代碼很認(rèn)真,但是注釋從來(lái)不改

二狗改代碼真的非常認(rèn)真,但是他不喜歡改注釋。最終代碼大改特改,注釋紋絲不動(dòng)。最終代碼和注釋不相干,部分正確,部分錯(cuò)誤。

新接手的同學(xué)研究了兩天也沒(méi)搞明白。于是求助了狗哥

到時(shí)候狗哥就可以大展神威了 。”那段注釋是錯(cuò)的,你別管,就當(dāng)沒(méi)有!“

狗哥順便還說(shuō)了一句,”優(yōu)秀的代碼不需要寫(xiě)注釋,也不知道是哪個(gè)XX 寫(xiě)的注釋“,成功收割新同學(xué)的"欽佩"之情。

8 二狗喜歡復(fù)制代碼

狗哥寫(xiě)代碼十分著急,根本來(lái)不及重構(gòu)。他總是想到一段代碼,就復(fù)制過(guò)來(lái)。神奇的是,狗哥經(jīng)常這么寫(xiě),但是也沒(méi)出什么問(wèn)題。

但新同學(xué)就慘了,在改完狗哥的代碼后,總被測(cè)試同學(xué)背地里吐槽,“一點(diǎn)小需求咋這么多bug,跟狗哥比差遠(yuǎn)了”。原來(lái)新同學(xué)改了一處,忘了改另外幾處,代碼被復(fù)制了好多遍,他實(shí)在無(wú)法全面梳理。

于是每次代碼寫(xiě)完,新同學(xué)都要不停的研究代碼,總是害怕自己少改了哪些地方,下班時(shí)間越來(lái)越晚。并且新同學(xué)也不敢把雷同的代碼重構(gòu)到一起。(“你們猜猜他為什么不敢?)

慢慢的,組里的人都被迫向狗哥學(xué)習(xí),狗哥成功輸出了自己的編碼習(xí)慣。

9 二狗積極寫(xiě)技術(shù)方案,但是最終代碼實(shí)現(xiàn)不按照技術(shù)方案來(lái)

二狗非常喜歡寫(xiě)技術(shù)方案,大部分時(shí)間都花在技術(shù)方案上,總是把技術(shù)方案打磨的 滑不留手。但是在寫(xiě)代碼時(shí),狗哥總覺(jué)得按照方案設(shè)計(jì)寫(xiě)代碼,時(shí)間上根本來(lái)不及啊,還是簡(jiǎn)單來(lái)吧,湊活實(shí)現(xiàn)吧。

例如狗哥曾經(jīng)設(shè)計(jì)了一套復(fù)雜的Redis秒殺庫(kù)存系統(tǒng),但是實(shí)現(xiàn)時(shí)選擇了最Low的 數(shù)據(jù)庫(kù)同步扣減方案。

狗哥寫(xiě)的流程圖和實(shí)際代碼也沒(méi)什么關(guān)系。但是流程圖旁邊加滿了注釋和說(shuō)明,讓人覺(jué)得 ”這個(gè)技術(shù)方案很權(quán)威“。

新同學(xué)熟悉項(xiàng)目時(shí),從公司文檔中搜到了很多技術(shù)方案,本以為可以很快熟悉系統(tǒng),但是發(fā)現(xiàn)技術(shù)方案和代碼不太一樣。越看越迷惑。

于是點(diǎn)了奶茶再次走向了狗哥,狗哥告訴他,“那個(gè)技術(shù)方案太復(fù)雜,排期緊張,開(kāi)發(fā)來(lái)不及。你就當(dāng)沒(méi)那個(gè)技術(shù)方案?!?/p>

10 二狗十分自信,從不打日志。

二狗對(duì)自己的代碼十分自信,認(rèn)為不會(huì)出現(xiàn)任何問(wèn)題,所以他從來(lái)不打日志。每次開(kāi)發(fā)代碼時(shí),狗哥的思維天馬行空,但是從來(lái)不想加個(gè)日志會(huì)有助于排查問(wèn)題。

直到有一天,線上真的出問(wèn)題了,除了異常堆棧,找不到其他有效的日志。大家面面相覷,不知道怎么辦。狗哥挺身而出,重新加了日志,上線。故障持續(xù)了不知道有多久……,看著狗哥忙碌,領(lǐng)導(dǎo)不停地詢問(wèn)還需要多久才能上線。

復(fù)盤會(huì)上,有人對(duì)狗哥不寫(xiě)日志的行為進(jìn)行批判,狗哥卻在 狡辯 “加了日志,就能避免這次故障嗎?出問(wèn)題還不是因?yàn)槟銈兿到y(tǒng)出了bug,跟我不打日志有啥關(guān)系?!?雙方陷入了無(wú)限的扯皮之中……

11 二狗積極學(xué)習(xí),引用一個(gè)高大上的框架 解決一個(gè)小問(wèn)題

二狗非常喜歡學(xué)習(xí),學(xué)習(xí)了很多高大上的框架。最近二狗學(xué)習(xí)了規(guī)則引擎,覺(jué)得這是個(gè)好東西,恰好最近在進(jìn)行重構(gòu)。于是二狗把 drools、avatior、SPEL等規(guī)則引擎、表達(dá)式求值 等框架引入系統(tǒng)。只是為了解決策略模式的問(wèn)題。即何種條件下使用哪種策略。狗哥在系統(tǒng)架構(gòu)圖里,著重講了規(guī)則引擎部分,十分自豪。

新同學(xué)熟悉系統(tǒng)后,光是規(guī)則引擎部分就看了足足一周。但是還是不知道怎么修改代碼。于是向狗哥請(qǐng)教。狗哥告訴他說(shuō)," 你在這個(gè)地方 加一行代碼 rule.type == 12 ,走這個(gè) CommonStrategy 策略類就可以了?!?/p>

新同學(xué)恍然大悟,原來(lái)這就是規(guī)則引擎啊。但是為什么不用策略模式呢?好像策略模式不費(fèi)事??!狗哥技術(shù)就是強(qiáng)啊,殺雞用核彈。

12 二狗積極造輪子,能造輪子的程序員才是牛掰的程序員

二狗非常喜歡造輪子,他對(duì)開(kāi)源軟件的大神們心向往之,覺(jué)得自己應(yīng)該向他們學(xué)習(xí)。狗哥認(rèn)為 造輪子才能更快地成長(zhǎng)。

于是在狗哥的積極學(xué)習(xí)下,組里的 分布式鎖 沒(méi)有使用 redission,而是自己用setnx搞的。雖然后面出了問(wèn)題,但是狗哥的技術(shù)得到了鍛煉。

總結(jié)

降低代碼可讀性的方式方法 包括但不限于以上12種;

像二狗這樣的程序員包括但不限于二狗。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3958

    瀏覽量

    142733
  • RPC
    RPC
    +關(guān)注

    關(guān)注

    0

    文章

    114

    瀏覽量

    12266
  • SPEL
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    6238

原文標(biāo)題:降低代碼可讀性,增加維護(hù)難度的 12 個(gè)編碼“小技巧”,地位穩(wěn)了!

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Google軟件工程中主要的過(guò)程部分

    代碼風(fēng)格指南只能解決一些很基本的可讀性問(wèn)題,如代碼縮進(jìn)、函數(shù)命名風(fēng)格、代碼行數(shù)限制等。但代碼可讀性
    的頭像 發(fā)表于 09-23 11:50 ?1598次閱讀

    《圖解運(yùn)算放大器電路》輔以大量插圖,有較強(qiáng)的可讀性...

    集成運(yùn)算放大器構(gòu)成的電路實(shí)例以及集成運(yùn)算放大器的電路構(gòu)成與原理及使用時(shí)的注意事項(xiàng)等。《運(yùn)算放大器電路》內(nèi)容簡(jiǎn)潔、重點(diǎn)突出、實(shí)用強(qiáng),輔以大量插圖,有較強(qiáng)的可讀性及參考。   《運(yùn)算放大器電路》既可供工科院校相關(guān)專業(yè)師生參考,亦
    發(fā)表于 08-10 10:05

    吐槽這本書(shū)的代碼實(shí)在晦澀難懂,代碼風(fēng)格的可讀性也較差

    `不得不吐槽一下,這本書(shū)的代碼實(shí)在晦澀難懂,代碼風(fēng)格的可讀性也較差`
    發(fā)表于 03-02 23:42

    Verilog HDL代碼書(shū)寫(xiě)規(guī)范

    1. 目的本規(guī)范的目的是提高書(shū)寫(xiě)代碼可讀性、可修改性、可重用,優(yōu)化代碼綜合和仿真的結(jié)果,指導(dǎo)設(shè)計(jì)工程師使用VerilogHDL規(guī)范代碼
    發(fā)表于 12-08 14:36

    注釋那些事兒:前端代碼質(zhì)量系列文章(一)

    (包括我們自己,也可能包括機(jī)器,如 jsdoc)看,幫助讀者閱讀理解代碼并進(jìn)行維護(hù)?!溉鐭o(wú)必要,勿增注釋」是指注釋要避免過(guò)多過(guò)濫,不要為了注釋而注釋。多余的注釋等價(jià)于冗余的代碼,除了對(duì)增加
    發(fā)表于 04-27 16:21

    優(yōu)先提高代碼可讀性的必要

    什么阻礙了開(kāi)發(fā)者閱讀代碼 好吧,我們一致認(rèn)為,我們應(yīng)該讓代碼更易于閱讀,這樣可以節(jié)約時(shí)間和金錢,對(duì)吧?但這究竟意味著什么? 有跡象表明,下面兩個(gè)基本方面極大地降低了開(kāi)發(fā)者閱讀
    發(fā)表于 09-26 14:55 ?0次下載

    你了解Linux平臺(tái)相關(guān)代碼的C++解決方案

    由于程序中不可避免的存在平臺(tái)相關(guān)代碼(系統(tǒng)調(diào)用等),軟件研發(fā)人員為了保證自己的產(chǎn)品在各個(gè) Linux 平臺(tái)上運(yùn)行順暢,一般都需要在源代碼中大量使用預(yù)編譯參數(shù),這樣會(huì)大大降低程序的可讀性
    發(fā)表于 05-16 14:47 ?652次閱讀
    你了解Linux平臺(tái)相關(guān)<b class='flag-5'>代碼</b>的C++解決方案

    嵌入式代碼之編寫(xiě)規(guī)范

    嵌入式代碼編碼規(guī)范,用于規(guī)范自己的代碼,增強(qiáng)可讀性,非標(biāo)準(zhǔn)規(guī)范。最好能強(qiáng)制自己形成良好的編碼風(fēng)格,有利于開(kāi)發(fā)
    的頭像 發(fā)表于 04-26 15:21 ?6111次閱讀

    如何編寫(xiě)可讀性代碼

    編寫(xiě)可讀性代碼作者:極鏈科技 湯紅燕什么叫可讀性代碼?簡(jiǎn)單來(lái)說(shuō),就是易于理解、耗腦時(shí)間少、可維護(hù)性較高的
    的頭像 發(fā)表于 08-16 18:13 ?1802次閱讀
    如何編寫(xiě)<b class='flag-5'>可讀性</b><b class='flag-5'>代碼</b>

    科普一下Verilog代碼命名規(guī)范

    命名規(guī)范包括模塊命名規(guī)范和代碼命名規(guī)范,代碼命名需要有確定的含義,提高代碼可讀性和可維護(hù)性。
    的頭像 發(fā)表于 11-17 09:54 ?4876次閱讀

    如何寫(xiě)出易維護(hù)的嵌入式代碼怎么寫(xiě)?

    面向?qū)ο蟮恼Z(yǔ)言更接近人的思維方式,而且在很大程度上降低代碼的復(fù)雜,同時(shí)提高了代碼可讀性和可維護(hù)性
    發(fā)表于 08-23 09:42 ?543次閱讀
    如何寫(xiě)出易<b class='flag-5'>維護(hù)</b>的嵌入式<b class='flag-5'>代碼</b>怎么寫(xiě)?

    python如何換行而不運(yùn)行代碼

    Python程序中的換行是指在代碼中使用特定的語(yǔ)法來(lái)表示換行,以使代碼更易讀。換行的目的是為了讓程序更具可讀性并提高代碼的可維護(hù)性。然而,換
    的頭像 發(fā)表于 11-24 09:50 ?4373次閱讀

    如何提升嵌入式C語(yǔ)言代碼可讀性

    接口是面向?qū)ο笳Z(yǔ)言中的一個(gè)比較重要的概念,接口只對(duì)外部承諾實(shí)現(xiàn)該接口的實(shí)體可以完成什么樣的功能,但是不暴露實(shí)現(xiàn)的方式。這樣的好處是,實(shí)現(xiàn)者可以在不接觸接口使用者的代碼的情況下,對(duì)實(shí)現(xiàn)進(jìn)行調(diào)整。
    發(fā)表于 04-11 11:30 ?761次閱讀
    如何提升嵌入式C語(yǔ)言<b class='flag-5'>代碼</b><b class='flag-5'>可讀性</b>

    深入淺出系列之代碼可讀性

    ”,這是對(duì)我最大的鼓勵(lì)。 一、老生常談,到底啥是可讀性 一句話:見(jiàn)名知其義。有人說(shuō)好的代碼必然有清晰完整的注釋,我不否認(rèn);也有人說(shuō)代碼即注釋,是代碼簡(jiǎn)潔之道的最高境界,我也不否認(rèn)。但我
    的頭像 發(fā)表于 08-09 16:00 ?935次閱讀

    Linux內(nèi)核編碼風(fēng)格權(quán)威總結(jié):從縮進(jìn)到底層設(shè)計(jì),讓你的代碼更“內(nèi)核味”

    作為全球最龐大的開(kāi)源項(xiàng)目之一,Linux 內(nèi)核的代碼量早已突破千萬(wàn)行。要讓來(lái)自世界各地的開(kāi)發(fā)者高效協(xié)作,一套統(tǒng)一、嚴(yán)謹(jǐn)?shù)?b class='flag-5'>編碼風(fēng)格必不可少 —— 這不僅是 “代碼顏值” 的要求,更是可讀性
    的頭像 發(fā)表于 02-09 16:29 ?141次閱讀
    Linux內(nèi)核<b class='flag-5'>編碼</b>風(fēng)格權(quán)威總結(jié):從縮進(jìn)到底層設(shè)計(jì),讓你的<b class='flag-5'>代碼</b>更“內(nèi)核味”