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

王潮濤

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

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

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

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

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

互聯網排頭兵

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

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


讓別人看不懂的

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

  • 不寫註釋的

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

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

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


不考慮性能的

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

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

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

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


改動起來很費勁兒的

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

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

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

  • 過度耦合


改動起來無從下手的

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

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


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


會點代碼的大叔


Java實戰技術

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


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


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


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


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


碼農半生仍少年

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


若時間逆流

簡單點說就是單純為了實現功能而實現功能

1.把所有東西寫到一個類裡面

2.不使用任何設計模式

3.命名隨便猜不懂意思

4.基礎不牢固原本很簡單的邏輯卻要寫的很複雜

5.大量重複代碼

6.沒有註釋


firefly的零光片羽

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


專業寫BUG

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

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


jalex

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

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


踏劍而來

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


分享到:


相關文章: