03.02 特別爛的代碼到底是什麼樣的?

王潮濤


工作也十多年了,爛代碼見過不少,也寫過不少(慚愧慚愧),那就盤點一下這些年我見過的爛代碼。

編譯不通過的代碼就不在這裡提了,只討論一下可以運行的代碼:


讓別人看不懂的

  • 變量命名沒有含義的:String a;int b;

  • 不寫註釋的

  • 改了代碼不改註釋的,比上一點更過分

  • 一個類/方法能寫幾千行的,跟蹤代碼那叫一個累

  • 使用版本控制工具,提交的時候亂寫提交日誌的


不考慮性能的

功能實現了不見得就是好代碼,常見問題:

  • 最常見的問題:寫sql的時候不考慮效率,測試環境一跑沒有問題,上了生產,數據量一大就跑不出來結果了

  • 為了保險起見,做兩次update的(見過麼?看到那段代碼的時候我都服了)

  • 還有莫名其妙sleep(3000),難道是為了下一次改成sleep(2000),就說自己優化程序了?


改動起來很費勁兒的

功能實現了,效率也沒問題,也不見得是好代碼:

  • 該抽象的不抽象出來,明明可以只改一行代碼,但是需要改動很多地方

  • 代碼分層不明確,或者明明是controller層非要寫點兒業務邏輯

  • 過度耦合


改動起來無從下手的

  • 見沒見過一種很神的代碼:很重要,運行的很穩定,但是你看不懂,稍微改動一小處,整個代碼就不能用了。

還有一種“爛代碼”相信大多數人都寫過,就是剛學到一個算法/設計模式/新技術什麼的,非得想方設法寫到代碼裡面,並沒有考慮合適不合適。


你還見過什麼“神奇”的代碼,不妨分享一下,歡迎留言!


會點代碼的大叔



Java實戰技術


作為編程開發來說,每個人都有自己的編碼習慣。拋開設計和項目結構來說,我覺得特別爛的代碼有以下這些特點:

  • 不寫註釋。不光是方法和常量等沒註釋,連文件頭都沒註釋!這樣的代碼估計很多人都很頭疼吧。

  • 命令混亂。文件名、方法名、常量、變量您起碼起個有點含義的名字啊,你以為你是在做加密混淆嗎。遇到代碼沒寫註釋還命名不規範的代碼,估計打死對方的心都有了吧。

  • 臃腫的代碼。寫文章人家還講究個分段和排版呢,寫個方法幾百行代碼的人是要鬧哪樣,什麼東西都往裡面扔,你當你是收破爛呢?

以上這三點是我個人覺得特別討厭的代碼。不知道大家是怎麼想的呢?

互聯網排頭兵


目前為止,我見過最爛的代碼是這樣的。

主要需要實現的功能一個沒有實現,但是代碼200多號行。點編輯運行的時候又佔內存,什麼都沒有反應。

好的代碼,用最省內存的函數,直接實現實際想要的功能,連空格都不用直接用tab。高效快捷省地兒。


jalex


本人做了十多年軟件開發,爛代碼和神代碼都見過不少,這裡分享一個印象比較深刻的爛代碼的經歷。


有一次部門重組,接手了一個由印度團隊開發的項目。拿到手後,我和我的小夥伴們都驚呆了,心想他們一定是按代碼行數發工資的,寫得繁瑣無比,數據庫裡的存儲過程各個都上千行,質量非常低下。


但令人驚訝的是,這一堆在我們眼裡看來隨便拎起一個片段都到處是bug代碼,雖然性能極差,但運行結果居然總是對的…這就讓人百撕不得其姐(解)了 。然後我們嘗試仔細去分析,發現往往一個地方犯了錯,後面某個地方會有一段代碼把中間結果強制修正一下,藍翔挖掘機般的神技能。😂



一段時間後,一個數據庫存儲過程突然運行時開始報錯,我不得不一臉厭惡的深入去研究。毫無例外,這個上千行的存儲過程,代碼質量也是非常差,讀取多個數據表,用循環的方式一行一行計算,根據結果進行增刪改查。一般而言,在存儲過程中,應該儘量通過表關聯和集合操作來批量處理數據,避免CPU密集性的計算。雖然寫得爛、性能差,但仔細研究邏輯,貌似也沒錯。一番調試後,發現居然兩個循環塊共用了一個循環變量,反覆加一之後,循環變量溢出了?!!! 這種事情通常只發生在傳說裡,居然在有生之年被我碰到了😂!


看懂了數據處理邏輯後,我把存儲過程的代碼直接全刪掉,一條SQL語句搞定(是的,他們的上千行代碼,價值就等同於一條語句!!!…),執行速度也由半個小時縮短到了幾秒鐘…幾秒鐘…幾秒鐘…, 而這家公司居然是…微軟!微軟!微軟!😂(雖然代碼是外包員工寫的)。


碼農半生仍少年


我沒見過什麼太爛的,倒是我的老師和我說過一個他以前工作時看到的代碼。

登錄系統中,先 select * from t_user,然後for循環遍歷每一個元素,判斷user.getName === name


踏劍而來


我是上班自學軟件後剛轉入行的程序員,在一家幾個人小公司,主要做機械設備的軟件,現在接手一個10萬行的上位機程序,vb.net寫的,這代碼看的我醉了,定義了一個模塊,裡面放了1000個全局變量,然後幾十個form各種調用全局變量,噁心的是一半的變量沒寫註釋,更噁心的是整個程序每幾百行才有一行註釋,最噁心的是還定義了幾百個定時器,n個定時器同時修改全局變量,有的定時器裡兩千行代碼,有幾百個if else,已經連續盯著這個代碼看了一個禮拜,而且整個公司就我一個搞軟件的,都沒有人問,怎麼破


若時間逆流


我也來說一點。實驗室一個師姐寫代碼,不喜歡把代碼抽取出來等裝成函數。全部for if嵌套,到最後把她的模塊整合成一個項目的時候,那個整合的哥們都快哭了(´•̥ ̯ •̥`)


WIND0火3


1、不註釋;

2、魔數一堆,不知道含義;

3、變量、函數命名沒有有效規則;

4、完全不封裝,同樣的邏輯到處拷貝,無法維護;

5、不分行不縮進,屎一樣堆在一起,一個文件幾萬行代碼;


沒落通信客


記得以前剛接手一個項目維護的時候,其中一個核心的類庫源代碼被刪了(總是有原因的,反正找不回來了),當時心想反正是C#的而且其他代碼都有,應該問題不大,但當真正接手了,老闆需要我改功能了,忙活一下午,看到打開的那一堆反混淆後又反編譯出來的代碼,就知道風中凌亂是什麼樣的感覺了


分享到:


相關文章: