1. 程式人生 > >這是我見過的最糟糕的程序代碼,沒有之一!

這是我見過的最糟糕的程序代碼,沒有之一!

食物 一點 快的 人的 狀態 理解 系統 更新 特效

大多數的客戶項目在任務完成之後都會很快的從記憶裏消退,但有些,你一輩子都不會忘記。

我要說的這個屬於後者。

在一個相當大的公司裏,公司名我就不說了。那個軟件有一大堆程序,是一個商業系統的核心模塊,由一個、單獨的一個的小夥維護著,這個家夥不久前被炒了。

技術分享圖片

像這樣的事情其實都很正常,一些公司通常會發現他們的一些關鍵性技術自始至終都保存在一個人的頭腦裏,當有事情發生時,就像現在這個人,你通常會經歷一陣痛苦階段去閱讀他留下的東西,之後生活慢慢趨於正常。

這次有點不一樣。

這個程序出了點問題,公司派了一個去修復這個問題,等他回來後發現精神有點反常,不是哭就是笑,嘴裏嘟囔著什麽“匹薩調用漢堡並且傳入了包子”。

程序員的代碼裏通常體現著自己對幽默的理解以及對‘工作保密’這個詞的認識。我們都聽說過一些難以置信的故事,比如說公司辭退了某個搞技術的家夥 後,結果被告知如不在48小時內向某個海外賬戶打入多少錢,會計軟件將會自動刪除所有客戶記錄。像這種的小伎倆相對而言還好處理 —— 假設這些傳說的故事大多數都是真的,我還是很難相信,我從來沒有在現實生活中遇到過這種事情。

技術分享圖片

這個家夥留下來的軟件裏沒有任何的邏輯×××或下流的陰謀,編譯很正常,除了有一個bug外,一切都工作的很好。但是,你需要想像一下:程序中的所有 函數、變量名都是以食物命名的。匹薩,西紅柿,,水果,蔬菜,酒,等等,一篇一篇,全是這樣。裏面唯一能讓你馬上知道意義的地方只有 ‘main’函數名和C標準類庫的調用。

就這樣,我接手了這個費力不討好的爛攤子,努力的把程序恢復到一個可維護的狀態。

說實話,這是一個極好的加密形式,只有拿到密鑰你才能讓這些“代碼沙拉“變得有意義。一點一點的,我把這些函數名和變量名改成具有意義的命名,開始很麻煩,之後慢慢的變得容易些。

技術分享圖片

把已知的函數和源代碼進行恢復要比對未知的代碼進行反向解析容易的多,因為首先你要分清代碼裏哪些是程序,哪些是數據,而放在我前面的這些程序顯然 都是明文,所有這活兒並不是不可能完成,或者說是格外的困難,只是這活兒太乏味太無趣了。一旦你發現了某個變量可能應該給個什麽樣有意義的名字,余下的就 是查找和替換。

另外一個問題是,代碼寫的太爛,事實上,這意大利面條式的代碼比這些毫無意義的符號更讓人困惑,等我把函數名和變量名都改回有意義的名稱後,我開始把一大堆的代碼重寫,讓它們易於理解、效率更高。

我始終沒有弄明白他是否還有一套沒有加密混淆過的代碼,他可以使用一些‘混淆’腳本通過替換的方法把原始變量名混淆成這樣。我很難相信一個人會在最初時就把代碼寫成這樣,因為這對他自己也是一個巨大的挑戰,這裏肯定有一些高超的技術。

技術分享圖片

當然,如果你的腦子裏還在想:你不能因為我的變量名沒有什麽意義就把我開除了(或應該招我回來改程序),那你是在妄想,不管這個家夥的用意是什麽,他的做法十分的錯誤(我很難想象他的前任老板還會推薦他),不管怎樣,這事兒讓我樂了好幾周。

自己是一個五年的前端工程師

這裏推薦一下我的前端學習交流群:731771211,裏面都是學習前端的從最基礎的HTML+CSS+JS【炫酷特效,遊戲,插件封裝,設計模式】到移動端HTML5的項目實戰的學習資料都有整理,送給每一位前端小夥伴。不定時更新技術,與企業需求同步。好友都在裏面交流,每天都會有大牛定時講解前端技術!

點擊:加入

這是我見過的最糟糕的程序代碼,沒有之一!