日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > strongerHuang
[導(dǎo)讀]關(guān)注星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容來(lái)源|cnblogs寫(xiě)爛代碼很容易,但是就算寫(xiě)成一坨屎,能用即可,你同意這種觀點(diǎn)嗎?程序員剛?cè)胄薪?jīng)常聽(tīng)到一些觀點(diǎn)你要把精力放在需求文檔/功能設(shè)計(jì)/架構(gòu)設(shè)計(jì)/理解原理(ABCD)上,寫(xiě)代碼只是把想法翻譯成編程語(yǔ)言而已,是一個(gè)沒(méi)什么技術(shù)含量的事情。當(dāng)時(shí)的...


來(lái)源 | cnblogs



寫(xiě)爛代碼很容易,但是就算寫(xiě)成一坨屎,能用即可, 你同意這種觀點(diǎn)嗎?
程序員剛?cè)胄薪?jīng)常聽(tīng)到一些觀點(diǎn)


你要把精力放在需求文檔/功能設(shè)計(jì)/架構(gòu)設(shè)計(jì)/理解原理(ABCD)上,寫(xiě)代碼只是把想法翻譯成編程語(yǔ)言而已,是一個(gè)沒(méi)什么技術(shù)含量的事情。
當(dāng)時(shí)的我在聽(tīng)到這種觀點(diǎn)時(shí)會(huì)有一種近似于高冷的不屑:你們就是一群傻子,根本不懂代碼質(zhì)量的重要性,這么下去遲早有一天會(huì)踩坑。
可是幾個(gè)月之后,他們似乎也沒(méi)怎么踩坑。而隨著編程技術(shù)一直在不斷發(fā)展,帶來(lái)了更多的我以前認(rèn)為是傻子的人加入到程序員這個(gè)行業(yè)中來(lái)。
語(yǔ)言越來(lái)越高級(jí)、封裝越來(lái)越完善,各種技術(shù)都在幫助程序員提高生產(chǎn)代碼的效率,依靠層層封裝,程序員真的不需要了解一丁點(diǎn)技術(shù)細(xì)節(jié),只要把需求里的內(nèi)容逐行翻譯出來(lái)就可以了。
很多程序員不知道要怎么組織代碼、怎么提升運(yùn)行效率、底層是基于什么原理,他們寫(xiě)出來(lái)的是在我心目中爛成一坨屎一樣的代碼。但是那一坨屎一樣代碼竟然能正常工作。



即使我認(rèn)為他們寫(xiě)的代碼是坨屎,但是從不接觸代碼的人的視角來(lái)看(比如說(shuō)你的boss),代碼編譯過(guò)了,測(cè)試過(guò)了,上線運(yùn)行了一個(gè)月都沒(méi)出問(wèn)題,你還想要奢求什么?
所以,即使不情愿,也必須承認(rèn),別人寫(xiě)的代碼能正常運(yùn)行,且不出錯(cuò),那就是牛x。
爛代碼終究是爛代碼


但是偶爾有那么幾次,寫(xiě)爛代碼的人離職了之后,事情似乎又變得不一樣了。

想要修改功能時(shí)卻發(fā)現(xiàn)程序里充斥著各種無(wú)法理解的邏輯、改完之后莫名其妙的bug一個(gè)接一個(gè),接手這個(gè)項(xiàng)目的人開(kāi)始漫無(wú)目的的加班,并且原本一個(gè)挺樂(lè)觀開(kāi)朗的人漸漸的開(kāi)始喜歡問(wèn)候別人祖宗了。
總結(jié)幾類(lèi)經(jīng)常被罵娘的爛代碼:

? 意義不明

能力差的程序員容易寫(xiě)出意義不明的代碼,他們不知道自己究竟在做什么。
就像這樣:
void Save(void){ int x; for(x=0; x<100; x ) { //防止保存失敗,保存100次 Flash_Write(); }}
對(duì)于這類(lèi)程序員,我一般建議他們轉(zhuǎn)行。

? 不說(shuō)人話

不說(shuō)人話是新手最經(jīng)常出現(xiàn)的問(wèn)題,直接的表現(xiàn)就是寫(xiě)了一段很簡(jiǎn)單的代碼,其他人卻看不懂。
比如下面這段:
很多程序員喜歡簡(jiǎn)單的東西:簡(jiǎn)單的函數(shù)名、簡(jiǎn)單的變量名,代碼里翻來(lái)覆去只用那么幾個(gè)單詞命名;能縮寫(xiě)就縮寫(xiě)、能省略就省略、能合并就合并。
這類(lèi)人寫(xiě)出來(lái)的代碼里充斥著各種g/s/gos/of/mss之類(lèi)的全世界沒(méi)人懂的縮寫(xiě),或者一長(zhǎng)串不知道在做什么的連續(xù)調(diào)用。
還有很多程序員喜歡復(fù)雜,各種宏定義、位運(yùn)算之類(lèi)寫(xiě)的天花亂墜,生怕代碼讓別人一下子看懂了會(huì)顯得自己水平不夠。
簡(jiǎn)單的說(shuō),他們的代碼是寫(xiě)給機(jī)器的,不是給人看的。

? 不恰當(dāng)?shù)慕M織

不恰當(dāng)?shù)慕M織是高級(jí)一些的爛代碼,程序員在寫(xiě)過(guò)一些代碼之后,有了基本的代碼風(fēng)格,但是對(duì)于規(guī)模大一些的工程的掌控能力不夠,不知道代碼應(yīng)該如何解耦、分層和組織。
這種反模式的現(xiàn)象是經(jīng)常會(huì)看到一段代碼在工程里拷來(lái)拷去;某個(gè)文件里放了一大坨堆砌起來(lái)的代碼;一個(gè)函數(shù)堆了幾百上千行;或者一個(gè)簡(jiǎn)單的功能七拐八繞的調(diào)了幾十個(gè)函數(shù),在某個(gè)難以發(fā)現(xiàn)的猥瑣的小角落里默默的調(diào)用了某些關(guān)鍵邏輯。
這類(lèi)代碼大多復(fù)雜度高,難以修改,經(jīng)常一改就崩;而另一方面,創(chuàng)造了這些代碼的人傾向于修改代碼,畏懼創(chuàng)造代碼,他們寧愿讓原本復(fù)雜的代碼一步步變得更復(fù)雜,也不愿意重新組織代碼。當(dāng)你面對(duì)一個(gè)幾千行的類(lèi),問(wèn)為什么不把某某邏輯提取出來(lái)的時(shí)候,他們會(huì)說(shuō):
“但是,那樣就多了一個(gè)類(lèi)了呀。”

? 假設(shè)和缺少抽象

相對(duì)于前面的例子,假設(shè)這種反模式出現(xiàn)的場(chǎng)景更頻繁,花樣更多,始作俑者也更難以自己意識(shí)到問(wèn)題。比如:文件路徑變更的時(shí)候,會(huì)把代碼改成這樣:需要加載的內(nèi)容更豐富的時(shí)候,會(huì)再變成這樣:之后可能會(huì)再變成這樣:這類(lèi)程序員往往是項(xiàng)目組里開(kāi)發(fā)效率比較高的人,但是大量的業(yè)務(wù)開(kāi)發(fā)工作導(dǎo)致他們不會(huì)做多余的思考,他們的口頭禪是:“我每天要做XX個(gè)需求”或者“先做完需求再考慮其他的吧”。
這種反模式表現(xiàn)出來(lái)的后果往往是代碼很難復(fù)用,面對(duì)deadline的時(shí)候,程序員迫切的想要把需求落實(shí)成代碼,而這往往也會(huì)是個(gè)循環(huán):寫(xiě)代碼的時(shí)候來(lái)不及考慮復(fù)用,代碼難復(fù)用導(dǎo)致之后的需求還要繼續(xù)寫(xiě)大量的代碼。
一點(diǎn)點(diǎn)積累起來(lái)的大量的代碼又帶來(lái)了組織和風(fēng)格一致性等問(wèn)題,最后形成了一個(gè)新功能基本靠拷的遺留系統(tǒng)。

? 還有嗎?

爛代碼還有很多種類(lèi)型,沿著功能-性能-可讀-可測(cè)試-可擴(kuò)展這條路線走下去,還能看到很多匪夷所思的例子。那么什么是爛代碼?個(gè)人認(rèn)為,爛代碼包含了幾個(gè)層次:? 如果只是一個(gè)人維護(hù)的代碼,滿足功能和性能要求倒也足夠了。? 如果在一個(gè)團(tuán)隊(duì)里工作,那就必須易于理解和測(cè)試,讓其它人員有能力修改各自的代碼。同時(shí),越是處于系統(tǒng)底層的代碼,擴(kuò)展性也越重要。所以,當(dāng)一個(gè)團(tuán)隊(duì)里的底層代碼難以閱讀、耦合了上層的邏輯導(dǎo)致難以測(cè)試、或者對(duì)使用場(chǎng)景做了過(guò)多的假設(shè)導(dǎo)致難以復(fù)用時(shí),雖然完成了功能,它依然是坨屎一樣的代碼。

? 夠用的代碼

而相對(duì)的,如果一個(gè)工程的代碼難以閱讀,能不能說(shuō)這個(gè)是爛代碼?很難下定義,可能算不上好,但是能說(shuō)它爛嗎?如果這個(gè)工程自始至終只有一個(gè)人維護(hù),那個(gè)人也維護(hù)的很好,那它似乎就成了“夠用的代碼”。
很多工程剛開(kāi)始可能只是一個(gè)人負(fù)責(zé)的小項(xiàng)目,大家關(guān)心的重點(diǎn)只是代碼能不能順利的實(shí)現(xiàn)功能、按時(shí)完工。
過(guò)上一段時(shí)間,其他人參與時(shí)才發(fā)現(xiàn)代碼寫(xiě)的有問(wèn)題,看不懂,不敢動(dòng)。需求方又開(kāi)始催著上線了,怎么辦?只好小心翼翼的只改邏輯而不動(dòng)結(jié)構(gòu),然后在注釋里寫(xiě)上這么實(shí)現(xiàn)很ugly,以后明白內(nèi)部邏輯了再重構(gòu)。
再過(guò)上一段時(shí)間,有個(gè)相似的需求,想要復(fù)用里面的邏輯,這時(shí)才意識(shí)到代碼里做了各種特定場(chǎng)景的專(zhuān)用邏輯,復(fù)用非常麻煩。為了趕進(jìn)度只好拷代碼然后改一改。問(wèn)題解決了,問(wèn)題也加倍了。
幾乎所有的爛代碼都是從“夠用的代碼”演化來(lái)的,代碼沒(méi)變,使用代碼的場(chǎng)景發(fā)生變了,原本夠用的代碼不符合新的場(chǎng)景,那么它就成了爛代碼。
重構(gòu)不是萬(wàn)能藥


程序員最喜歡跟程序員說(shuō)的謊話之一就是:現(xiàn)在進(jìn)度比較緊,等X個(gè)月之后項(xiàng)目進(jìn)度寬松一些再去做重構(gòu)。
不能否認(rèn)在某些(極其有限的)場(chǎng)景下重構(gòu)是解決問(wèn)題的手段之一,但是寫(xiě)了不少代碼之后發(fā)現(xiàn),重構(gòu)往往是程序開(kāi)發(fā)過(guò)程中最復(fù)雜的工作?;ㄒ粋€(gè)月寫(xiě)的爛代碼,要花更長(zhǎng)的時(shí)間、更高的風(fēng)險(xiǎn)去重構(gòu)。
曾經(jīng)經(jīng)歷過(guò)幾次忍無(wú)可忍的大規(guī)模重構(gòu),每一次重構(gòu)之前都是找齊了組里的高手,開(kāi)了無(wú)數(shù)次分析會(huì),把組內(nèi)需求全部暫停之后才敢開(kāi)工,而重構(gòu)過(guò)程中往往哀嚎遍野,幾乎每天都會(huì)出上很多意料之外的問(wèn)題,上線時(shí)也幾乎必然會(huì)出幾個(gè)問(wèn)題。
從技術(shù)上來(lái)說(shuō),重構(gòu)復(fù)雜代碼時(shí),要做三件事:理解舊代碼、分解舊代碼、構(gòu)建新代碼。而待重構(gòu)的舊代碼往往難以理解;模塊之間過(guò)度耦合導(dǎo)致?tīng)恳话l(fā)而動(dòng)全身,不易控制影響范圍;舊代碼不易測(cè)試導(dǎo)致無(wú)法保證新代碼的正確性。重構(gòu)之后能提升多少效率?能降低多少風(fēng)險(xiǎn)?很難答上來(lái),爛代碼本身就不是一個(gè)可以簡(jiǎn)單的標(biāo)準(zhǔn)化的東西。
總結(jié)


不寫(xiě)代碼的人認(rèn)為應(yīng)該重構(gòu),重構(gòu)很簡(jiǎn)單,無(wú)論新人還是老人都有責(zé)任做重構(gòu)。
寫(xiě)代碼老手認(rèn)為應(yīng)該遲早應(yīng)該重構(gòu),重構(gòu)很難,現(xiàn)在湊合用,這事別落在我頭上。
寫(xiě)代碼的新手認(rèn)為不出bug就謝天謝地了,我也不知道怎么重構(gòu)。
? 寫(xiě)好代碼很難與寫(xiě)出爛代碼不同的是,想寫(xiě)出好代碼有很多前提:? 理解要開(kāi)發(fā)的功能需求。? 了解程序的運(yùn)行原理。? 做出合理的抽象。? 組織復(fù)雜的邏輯。? 對(duì)自己開(kāi)發(fā)效率的正確估算。? 持續(xù)不斷的練習(xí)。
寫(xiě)出好代碼的方法論很多,但我認(rèn)為寫(xiě)出好代碼的核心反而是聽(tīng)起來(lái)非常low的“持續(xù)不斷的練習(xí)”。
很多程序員在寫(xiě)了幾年代碼之后并沒(méi)有什么長(zhǎng)進(jìn),代碼仍然爛的讓人不忍直視,原因有兩個(gè)主要方面:
1、環(huán)境是很重要的因素之一,在爛代碼的熏陶下很難理解什么是好代碼,知道的人大部分也會(huì)選擇隨波逐流。
2、還有個(gè)人性格之類(lèi)的說(shuō)不清道不明的主觀因素,寫(xiě)出爛代碼的程序員反而都是一些很好相處的人,他們往往熱愛(ài)公司團(tuán)結(jié)同事平易近人工作任勞任怨–只是代碼很爛而已。
而工作幾年之后的人很難再說(shuō)服他們?nèi)ヌ岣叽a質(zhì)量,你只會(huì)反復(fù)不斷的聽(tīng)到:“那又有什么用呢?”或者“以前就是這么做的???”之類(lèi)的說(shuō)法。
那么從源頭入手,提高招人時(shí)對(duì)代碼的質(zhì)量的要求怎么樣?
前一陣面試的時(shí)候發(fā)現(xiàn)了一個(gè)現(xiàn)象:
一個(gè)人工作了幾年、做過(guò)很多項(xiàng)目、帶過(guò)團(tuán)隊(duì)、發(fā)了一些文章,不一定能代表他代碼寫(xiě)的好;反之,一個(gè)人代碼寫(xiě)的好,其它方面的能力一般不會(huì)太差。


悲觀的結(jié)語(yǔ)


說(shuō)了那么多,結(jié)論其實(shí)只有兩條,作為程序員:? 不要奢望其他人會(huì)寫(xiě)出高質(zhì)量的代碼? 不要以為自己寫(xiě)出來(lái)的是高質(zhì)量的代碼
參考地址:
https://www.cnblogs.com/huya-edu/p/15002012.html
------------ END ------------





本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

北京2022年10月19日 /美通社/ -- 10月18日,北京市經(jīng)濟(jì)和信息化局發(fā)布2022年度第一批北京市市級(jí)企業(yè)技術(shù)中心創(chuàng)建名單的通知,諾誠(chéng)健華正式獲得"北京市企業(yè)技術(shù)中心"認(rèn)定。 北京市企業(yè)技...

關(guān)鍵字: BSP ARMA COM 代碼

實(shí)際上函數(shù)指針本質(zhì)也是一個(gè)指針,只不過(guò)這個(gè)指針指向的不是內(nèi)存中的一段數(shù)據(jù)而是內(nèi)存中的一段代碼

關(guān)鍵字: 指針 數(shù)據(jù) 代碼

蘇州2022年10月17日 /美通社/ -- 開(kāi)拓藥業(yè)(股票代碼:9939.HK),一家專(zhuān)注于潛在同類(lèi)首創(chuàng)和同類(lèi)最佳創(chuàng)新藥物研發(fā)及產(chǎn)業(yè)化的生物制藥公司,宣布其自主研發(fā)、潛在同類(lèi)首創(chuàng)的福瑞他恩(KX-826)治療痤瘡的中國(guó)...

關(guān)鍵字: ST FDA 代碼 ADI

在智能汽車(chē)時(shí)代,保障智能汽車(chē)數(shù)據(jù)安全已成為一項(xiàng)新的重要課題。

關(guān)鍵字: 豐田 代碼 信息安全

南京2022年9月16日 /美通社/ -- 說(shuō)到"世界清潔地球日",恐怕很多人都一頭霧水。作為全球最重要的環(huán)境保護(hù)活動(dòng)之一,該節(jié)日"致力于通過(guò)影響人類(lèi)行為模式的改變以應(yīng)對(duì)世界上的垃圾問(wèn)題&q...

關(guān)鍵字: 電熱水器 BSP 溫度 代碼

芝加哥2022年9月17日 /美通社/ -- 采用尖端微應(yīng)答器技術(shù)徹底改變實(shí)物產(chǎn)品與材料跟蹤的公司P-Chip Corporation,今日推出最新突破性p-Chip Code?安全跟蹤標(biāo)簽。p-Chip代碼跟蹤器將基于...

關(guān)鍵字: CHIP 代碼 應(yīng)答器 矩陣

東京2022年9月6日 /美通社/ -- 電通集團(tuán)(Dentsu Group Inc.,東京證券交易所股票代碼:4324;國(guó)際證券識(shí)別代碼:JP3551520004);(總裁兼首席執(zhí)行官:Hiroshi Igarashi...

關(guān)鍵字: OS 代碼 BSP GROUP

(全球TMT2022年8月25日訊)8月22-24日,2022中國(guó)國(guó)際智能產(chǎn)業(yè)博覽會(huì)在重慶開(kāi)幕。藍(lán)卓受邀參加本次盛會(huì),展示新一代工業(yè)操作系統(tǒng)supOS4.0的新能力。 本次智博會(huì),藍(lán)卓重點(diǎn)展示supOS4...

關(guān)鍵字: POS 操作系統(tǒng) APP 代碼

最新發(fā)布的2022年《中國(guó)新富人群財(cái)富健康指數(shù)》表明: 金融素養(yǎng)與投資風(fēng)險(xiǎn)意識(shí)呈正相關(guān),投資者教育勢(shì)在必行 新富家庭財(cái)務(wù)需求多樣,共同協(xié)商可助家庭克服理財(cái)盲點(diǎn) 新富人群期待投顧服務(wù)為財(cái)富管理保駕護(hù)航...

關(guān)鍵字: BSP ADVANCED INA 代碼

浙江湖州2022年8月24日 /美通社/ -- 近日,森赫電梯與建業(yè)集團(tuán)達(dá)成戰(zhàn)略合作,成為其電梯設(shè)備設(shè)計(jì)、供應(yīng)及安裝維保服務(wù)集采供應(yīng)商。森赫電梯與建業(yè)集團(tuán)成功攜手,未來(lái),雙方將繼續(xù)展開(kāi)多元化的深入合作。...

關(guān)鍵字: 電梯 BSP 代碼 數(shù)字化

strongerHuang

689 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉