程序员写代码变量命名随意,代码不传代码库,难道是防御性编程?

老赵身上的毛病挺多,我捡两条比较主要的老讲讲!

首先就是老赵特别喜欢复制粘贴,这本来其实也无可厚非,毕竟大部分程序员平时的工作内容就是“CURD”和复制粘贴!

但是,他和别人不一样的是,别人复制粘贴完代码还会稍微改改,而且,起名非常随意!

老赵有几段代码到现在我一直都记不住,因为他的函数名写得非常简单,比如说F(),乍一看到这个函数名您知道这个函数是干嘛的吗?

要说他非要这么起名字的话,本身也不妨碍代码执行,但是好歹写个注释呀,但是他又特别不喜欢写注释。于是,他的代码中经常会出现一大堆只有一两个字符的变量名,有些名字我挠破头还能理解出来,但是,有些我是怎么也想不出来到底是啥意思!

比如说,老赵有段代码的函数名是这么起的,叫作“ReceiveUB”,Receive翻译起来很简单,但是“UB”是啥玩意?

看完函数内容我才明白,这个函数是用户登录的Session过期后,用来回调的,回调方式就是打开浏览器并跳到用户登录页,所以,“UB”的意思应该是“UserBrower”,而且,这还只是我猜的,因为这是最合理的解释了!

“UB”还能勉勉强强解释,但是在他代码中有个他经常喜欢起的变量名,叫“TL”的,这个我就真的受不了了!

同样叫“TL”,我见过类型为List的变量叫“TL”,也见过类型为List的变量叫“TL”,开始,我理解不了他为什么这么起,后来我才发现规律,只要是集合(List)变量,他一般都会起名叫“TL”!

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

好好好,你这么起名字是吧!如果这么起名字可以的话,以后我给所有变量都起名叫“obj”是不是也没问题呢?因为“万物皆object”嘛!但意义是啥?

上次我看到这种乱七八糟的起名字的方式,还是有一次我反编译一套代码看到的,因为只有反编译后的代码才会出现那种毫无意义的变量命名。

后来我估计“F()”代表的其实就是Function的意思,他代码的风格就是这样,今天即使明白了每个变量、方法、类型名称的意思,明天我照样不会记得它们的具体作用!

关键是,有时候有些老赵设计的业务逻辑不懂,我们就会去问老赵,老赵则会直接跟我们说:“去看代码啊,我代码写得很清楚!”

除了这个,老赵还有一个巨大的问题,就是他自己写了一些私有工具,但是这些工具在我们公司的每个项目里面都有使用到,甚至耦合了公司的业务逻辑!

但有一次,我在改一段代码的时候发现项目引用的一个包不在我们的代码库里面。

于是,我就在公司几个程序员里面一个一个去问,想知道是不是哪个程序员写完忘传了!结果,到了老赵这里,老赵说这是他写的,但是,他又跟我解释说,这个工具包里面没多少东西,他就写了一个公共函数在里面。

老赵的意思我是明白了,他是不准备把这个工具包传到我们公司代码库里面去!

既然老赵不愿意,我也不好勉强,于是我就想着,既然他不愿意把这个工具包上传到公司代码库,那我只能把引用这个工具包的所有函数都重新写一遍。

为了方便,我直接反编译了老赵写的工具包,结果不看不知道,一看之下我才知道,这个工具包压根不像老赵所说的只有几个函数而已,这里面光是代码文件就有几十个,几乎每个文件里面的内容都和我们公司的现有代码业务高度耦合。

本来老赵写的东西我是很少关心的(主要也是看不懂),但是,经过这个事情,我把几个我经常见到的几个函数在我们代码库里面全局搜索了下,匹配结果竟然有几百次之多!粗略估计,老赵写的这个工具包,已经跟我们公司的业务密不可分了!

这是多么可怕的事情,一想之下,细思极恐,如果老赵离职了,那么一旦他这个工具包出现了问题,那么光修改代码都够我们剩下的程序员受得了!

而且,因为老赵这个工具包我们并没有源码,万一他在离职之前或者是现在已经在代码内写了“代码炸弹”之类的东西,后果是不堪设想的!

结语

老赵的这个情况,我是发现了,但是我到现在还在犹豫要不要跟公司老板说!

但是,我不好猜忌老赵这么说的具体目的,咱也不能把人想得那么坏,但是,我很少见到程序员有把自己写的代码故意藏着掖着不上传到公司代码库的,因为如果我们老板是个懂技术的,那是绝对不会允许老赵这么干的!

可能有人认为这是“防御性编程”,但我觉得,如果真是这样的话,老赵有点防御过头了!

您认为呢?