程式設計師垃圾程式碼分類指南

純潔的微笑發表於2019-07-25

上一篇文章《程式設計師垃圾分類圖鑑》和大家聊了聊程式設計師的垃圾分類,有的程式設計師直呼太真實,有的程式設計師覺得太諷刺,不應該給程式設計師進行這樣的分類。

其實每個行業都會存在各種各樣糟糕的情況,娛樂性的分類會將問題放大,讓我們能站出來用另一個視角來看看,什麼型別的程式設計師是我們應該避免的。

做為一名老程式設計師,誰還沒有寫過幾行垃圾程式碼,我到現在還記得在第二家公司離職時,寫的那段超過 600 行一個方法的程式碼,可以想象後面接手我工作的同事,看到那段程式碼是什麼樣的感受。

那段程式碼已經過去了6年多,我現在仍然記得,可見有多痛。那 600 行程式碼真的巨複雜,巢狀了至少四個 for 迴圈,處理了思科 IP 話機最複雜的話費解析功能。為什麼會出現這樣的情況,因為時間!

那是我快離職的時候,領導仍然堅持讓我工作到最後一分鐘,就是寫這段邏輯,害怕我走了之後,短期內沒人搞的懂這塊邏輯,所以只留了夠寫程式碼的時間,優化估計沒考慮。

在距離拿到離職證明還剩最後一個小時,我還改了最後一個 bug,其實那家公司和領導真的很不錯,只是離職交接這件事情,確實搞的有點小匆忙。

我一直都認為:好的程式碼是不斷優化出來的,而不是一次敲出來的。正常情況下程式碼編寫應該只佔用30% 的工作,後面 70% 的工作就是不斷的去優化它。

可惜的是,在中國網際網路目前的情況下,後面 70% 的時間被不斷壓縮到了極致。很多程式設計師寫完程式碼的時候,工期就到了,急匆匆的提交測試、上線投產。

在這樣的情況下,程式碼質量完美、生產不出問題那就是世界第九大奇蹟。中國很多網際網路公司老闆都相信這種奇蹟,這個事情本身也挺奇蹟的。

有什麼的環境,就會產生什麼樣的產物,有時候這也是一種現實。

所以工作中有一些垃圾程式碼也是正常的,但出現”虎軀一震“的程式碼就比較少見了,對”虎軀一震“的程式碼進行分類那就更有趣了。

程式設計師垃圾程式碼分類指南

有人說,垃圾程式碼也是有價值的,不置可否,只是這個價值用在哪裡。

還有補充一句,文中案例均為虛構,如有巧合,請來打賞!

程式設計師垃圾程式碼分類指南

幹垃圾 | 虎軀一震程式碼

虎軀一震?被嚇一跳算不算?反正我再看到那段程式碼,我的表情大概是這樣的:

程式設計師垃圾程式碼分類指南

有一次我開了一個網站,網頁半天沒有反應,頁面的右下面有一個”清理快取“的超連結,於是就好奇的點了一下,沒想到它立刻就彈出了清理完成!

作為一名老司機,習慣性的按下了:Ctrl+Shit+I 快捷鍵,就發現了下面這段牛X的程式碼。

<a href="javascript:alert('清理完成!')">清理快取</a>

仔細檢視了程式碼還發現有這樣一個函式,del_yeye(); 一時看不出來這是要幹嘛,跟著程式碼查過去發現是:

parent().parent().remove(); 

合著是要刪除爺爺,方法命名很形象、很具體,給五星好評!心中升起一片由衷的佩服,果然乃我輩之將才!

當然我們後端程式設計師也不能示弱,就比如下面這段示例,程式碼簡潔,命名規範,沒個三五年經驗寫不出來這種程式碼。

程式設計師垃圾程式碼分類指南

這是一名資深程式設計師的素養。

當我在知乎看到這個分享,才明白我國的程式設計大任,已經順利的傳遞到了祖國的花朵。以下是小咔的經歷:

我曾經在我們學校辦公室裡看見一個六年級小學生熟練的在文字文件裡敲出三行

:start
start cmd
goto start

我當時就震驚了

程式設計師垃圾程式碼分類指南

然後再看他熟練的放到c盤裡,改字尾為bat,然後在桌面上新建個快捷方式,更改圖示,重新命名為“六年級教案大全”?!

當我下次再見到他時,他竟然帶著兩個人一起把整個辦公室的電腦都建立了這個鬼東西???

程式設計師垃圾程式碼分類指南

可以想象的是,這位小朋友前途一片光明。

幹程式碼建議處理措施:不建議、不倡導,但可以在自己家的電腦試用!

溼垃圾 | 風騷程式碼

寫這麼騷的程式碼,你們領導知道嗎?

比如這個程式設計師,寫了一段自動呼叫電話的程式,是這樣的:

char a;
printf (“請輸入您要呼叫的號碼\n”);
scanf(“%char”,&a);
printf(“error!\n”);
printf (“系統異常,自動轉呼!\n”);
printf (“正在撥號:110”);

不知道使用者看到這段提示的時候,內心是不是這樣:

程式設計師垃圾程式碼分類指南

當然在我們這行,沒有最騷只有更騷,據說下面這段程式碼是 AI 最核心的程式碼,價值1個億!!

程式設計師垃圾程式碼分類指南

其實我只想拿它試試能不能拿它融到一個小目標!

溼程式碼建議處理措施:發揚光大!

有害垃圾 | 毀滅性程式碼

三行程式碼教你做人:

drop database
rm -rf /
shutdown -h now

程式設計師垃圾程式碼分類指南

竟然有程式設計師找到了更牛逼的玩法,比如

sudo chmod -R 000 /

這些程式碼看了不止會虎軀一震,心裡還會一揪,這是在誘導犯罪呀。

網上流傳著一段【C++黨】變數定義

#define int double
#define true false
#define max min
#define min max

果然是奇才,這種牛逼的方案完全可以推廣到 Python ,Java ,PHP ,Golang...,並且把它打成元件包的時候,不知道會發生什麼。

程式設計師垃圾程式碼分類指南

真正的程式設計師都是要給自己留後路的,比如上線後甲方突然說程式執行效率太低了,突然要求專案響應速度提升十倍!作為一名年輕的程式設計師,可會能哭暈在甲方爸爸的辦公室。

但是對於一個資深的程式設計師來講,這個都不是事兒!一行程式碼搞定所有效能優化問題,並且可以按照百分比進行定製!

程式設計師垃圾程式碼分類指南

這就是一名資深程式設計師的價值!

有害程式碼建議處理措施:建議啟動垃圾回收機制!

可回收垃圾 | 可回收程式碼

一個關於for迴圈的悽美愛情故事

男孩

for(;;)printf("I LOVE YOU\n");

女孩回覆

for(;;)printf("I LOVE YOU\n");

個人覺得,迴圈一百次的時候,應該一個 Thread.sleep() 或者 break,不然看著好像有點累。

還有一名網友的經歷:

我原話和他說,你判斷一下這些引數是否為空,不為空,就存庫,懂嗎?

他答,懂。

後來,我轉過來看他程式碼

String A = parm.get("A");
String B = parm.get("B");

上頭是我接的引數(不是原始碼)

以下是他寫的,除了引數名不一樣,完全沒改

if('A'=='空'){
}else{
    System.out.println("存入A");
}
if('B'=='空'){
}else{
   System.out.println("存入B");
}

我看完愣了一下,問,寫完了麼?

他說,差不多了。。。

然後我啥也沒說,默默接過來,把程式碼寫完,然後給頭說了

第二天,這小夥就接到HR通知,明天不用來了。

其實這個程式設計師還是可以在培養的,也就錯了兩個地方而已,這個老程式設計師太認真了。

程式設計師垃圾程式碼分類指南

可回收垃圾建議處理措施:回收加工再利用。

牛逼的程式碼

其實人生中最牛逼的程式碼是:

public class Hello{
    public static void main(String[] args){
        System.out.println(“Hello World”);
    }
}

當輸出了 Hello World 的時候,18歲的我感覺到了自己與同齡人的不同,那種自豪感,那種快樂油然而生。彷彿那不是一段冷冷的程式碼,而是我人生的方向標。至此,紀念我程式生涯的開始。

在我 22 歲的時候,又通過一段程式碼,成功脫單........,程式碼執行後的效果圖如下:

程式設計師垃圾程式碼分類指南

當然為了大家的單身事業,我在網上尋找了很久,找到一份成品,需要的朋友可以在公號內回覆:表白,即可獲取。

結束語

其實各個公司都存在一定的祖傳程式碼,這些程式碼就是一個垃圾寶庫,有時候你根本不知道它是在幹嘛,甚至覺得它幾百年可能都沒有使用過,但最關鍵是不敢動!

別問我怎麼知道的!

程式設計師垃圾程式碼分類指南

自此以後,遇到一些看著很奇怪的程式碼壓根兒碰都不敢碰。

有時候心血來潮改點東西……程式碼從頭錯到尾……

有時候當你只刪了一行程式碼時,可能會發生下面這種情況

程式設計師垃圾程式碼分類指南

你說哪家公司完全沒有垃圾程式碼,我是不信的!如果有,那就是剛成立的。

警告:文中所有程式碼均收集於網路,文中故事皆為虛構,如果雷同,請來讚賞。

請勿將文中程式碼應用於任何場景中,個人娛樂謹慎嘗試!!

參考連結:

https://www.zhihu.com/question/287421003
https://www.zhihu.com/question/20402322


作者簡介:純潔的微笑,一個有故事的程式設計師。曾在網際網路金融,第三方支付公司工作,現為一名自由職業者,和你一起用技術的角度去看這個世界。我的個人微訊號 puresmile2,歡迎大家找我聊天,記錄你我的故事。

相關文章