程序員寫代碼變量命名隨意,代碼不傳代碼庫,難道是防禦性編程?

老趙身上的毛病挺多,我撿兩條比較主要的老講講!

首先就是老趙特別喜歡複製粘貼,這本來其實也無可厚非,畢竟大部分程序員平時的工作內容就是“CURD”和複製粘貼!

但是,他和別人不一樣的是,別人複製粘貼完代碼還會稍微改改,而且,起名非常隨意!

老趙有幾段代碼到現在我一直都記不住,因爲他的函數名寫得非常簡單,比如說F(),乍一看到這個函數名您知道這個函數是幹嘛的嗎?

要說他非要這麼起名字的話,本身也不妨礙代碼執行,但是好歹寫個註釋呀,但是他又特別不喜歡寫註釋。於是,他的代碼中經常會出現一大堆只有一兩個字符的變量名,有些名字我撓破頭還能理解出來,但是,有些我是怎麼也想不出來到底是啥意思!

比如說,老趙有段代碼的函數名是這麼起的,叫作“ReceiveUB”,Receive翻譯起來很簡單,但是“UB”是啥玩意?

看完函數內容我才明白,這個函數是用戶登錄的Session過期後,用來回調的,回調方式就是打開瀏覽器並跳到用戶登錄頁,所以,“UB”的意思應該是“UserBrower”,而且,這還只是我猜的,因爲這是最合理的解釋了!

“UB”還能勉勉強強解釋,但是在他代碼中有個他經常喜歡起的變量名,叫“TL”的,這個我就真的受不了了!

同樣叫“TL”,我見過類型爲List的變量叫“TL”,也見過類型爲List的變量叫“TL”,開始,我理解不了他爲什麼這麼起,後來我才發現規律,只要是集合(List)變量,他一般都會起名叫“TL”!

仔細一想,我恍然大悟,“T”不就是泛型的意思麼,而“L”代表的意思肯定就是“List”啦!

好好好,你這麼起名字是吧!如果這麼起名字可以的話,以後我給所有變量都起名叫“obj”是不是也沒問題呢?因爲“萬物皆object”嘛!但意義是啥?

上次我看到這種亂七八糟的起名字的方式,還是有一次我反編譯一套代碼看到的,因爲只有反編譯後的代碼纔會出現那種毫無意義的變量命名。

後來我估計“F()”代表的其實就是Function的意思,他代碼的風格就是這樣,今天即使明白了每個變量、方法、類型名稱的意思,明天我照樣不會記得它們的具體作用!

關鍵是,有時候有些老趙設計的業務邏輯不懂,我們就會去問老趙,老趙則會直接跟我們說:“去看代碼啊,我代碼寫得很清楚!”

除了這個,老趙還有一個巨大的問題,就是他自己寫了一些私有工具,但是這些工具在我們公司的每個項目裡面都有使用到,甚至耦合了公司的業務邏輯!

但有一次,我在改一段代碼的時候發現項目引用的一個包不在我們的代碼庫裡面。

於是,我就在公司幾個程序員裡面一個一個去問,想知道是不是哪個程序員寫完忘傳了!結果,到了老趙這裡,老趙說這是他寫的,但是,他又跟我解釋說,這個工具包裡面沒多少東西,他就寫了一個公共函數在裡面。

老趙的意思我是明白了,他是不準備把這個工具包傳到我們公司代碼庫裡面去!

既然老趙不願意,我也不好勉強,於是我就想着,既然他不願意把這個工具包上傳到公司代碼庫,那我只能把引用這個工具包的所有函數都重新寫一遍。

爲了方便,我直接反編譯了老趙寫的工具包,結果不看不知道,一看之下我才知道,這個工具包壓根不像老趙所說的只有幾個函數而已,這裡面光是代碼文件就有幾十個,幾乎每個文件裡面的內容都和我們公司的現有代碼業務高度耦合。

本來老趙寫的東西我是很少關心的(主要也是看不懂),但是,經過這個事情,我把幾個我經常見到的幾個函數在我們代碼庫裡面全局搜索了下,匹配結果竟然有幾百次之多!粗略估計,老趙寫的這個工具包,已經跟我們公司的業務密不可分了!

這是多麼可怕的事情,一想之下,細思極恐,如果老趙離職了,那麼一旦他這個工具包出現了問題,那麼光修改代碼都夠我們剩下的程序員受得了!

而且,因爲老趙這個工具包我們並沒有源碼,萬一他在離職之前或者是現在已經在代碼內寫了“代碼炸彈”之類的東西,後果是不堪設想的!

結語

老趙的這個情況,我是發現了,但是我到現在還在猶豫要不要跟公司老闆說!

但是,我不好猜忌老趙這麼說的具體目的,咱也不能把人想得那麼壞,但是,我很少見到程序員有把自己寫的代碼故意藏着掖着不上傳到公司代碼庫的,因爲如果我們老闆是個懂技術的,那是絕對不會允許老趙這麼幹的!

可能有人認爲這是“防禦性編程”,但我覺得,如果真是這樣的話,老趙有點防禦過頭了!

您認爲呢?