有个同事写了段代码,我看完血压直接拉满。他用单字母变量名写了个数据处理函数。a、b、c、d满屏飞。除了他自己没人看得懂。那天他请假,别人想改个功能,硬是看了三小时。
更绝的是他喜欢在一行里塞十几个操作。链式调用套lambda再套列表推导式。一行代码顶别人五十行。运行时报错根本不知道哪一步炸了。调试器里跳来跳去像在玩扫雷。
他还有个习惯,全局变量当传家宝。模块里写十几个全局字典,函数之间全靠它们传数据。某个地方改了值,另一个地方就崩。查bug像在迷宫找出口。最后全组人陪他重构。
有一次他写了个类,继承层次深到五层。最底层的方法调了祖爷爷的属性。中间还有两个混合类。新来的同事看了直接说想转行。代码评审会上大家集体沉默。
他特别喜欢忽略异常信息。try里一大块逻辑,except后面写个pass。程序跑着跑着突然没反应了。数据丢了你都不知道在哪丢的。线上出问题查日志,全是空异常。
有个函数叫do_stuff,参数是args和kwargs。里面判断类型全靠猜。传什么进去都行,出什么结果看运气。谁都不敢改这个函数。改了别的地方就冒烟。后来大家给这函数起了个外号叫“随机数生成器”。
最让人崩溃的是注释。他只在最上面写一句“这个模块处理数据”。下面每个函数都没注释。变量名叫x1、x2、x3。魔数遍地都是。0.618是什么意思?没人知道。后来发现是黄金分割比例,但用在这个场景完全没道理。
他走了以后代码库成了公共遗产。新人培训第一课就是“识别遗留系统的危险模式”。那些代码像定时炸弹。每次发布前都要静默祈祷。测试覆盖率不到百分之十。改一行代码跑全量回归要两个小时。
有一次生产环境的定时任务出了问题。他写的那个调度脚本用了shell调用Python。Python里又调了shell。嵌套了三层。报错信息在中间层被吞了。排查花了四个小时。最后发现是路径写死了,上线后换了机器路径对不上。
很多人写代码图一时爽。变量名随便起,逻辑往死里嵌套。觉得不改也能跑。等三个月后自己看自己写的代码都懵。那感觉就像看别人拉的屎。想改又不知道从哪下手。
后来我们立了规矩。代码必须经过同行评审。变量名不能少于三个字母。函数最长不能超过屏幕一页。异常不能静默处理。这些规则看着死板,但救了不少人的命。至少没人再写那种让人想打人的代码了。
你现在打开项目看看那些老代码。如果看到了上面这些特征。赶紧想想怎么重构吧。趁你还能看懂它们的时候。不然再过两个月,连你自己都想穿越回去掐死当时的自己。