那年我还在老东家。财务系统月末跑批,几万条数据跑一整夜。跑不完就锁表,锁表就业务积压,业务积压就有人打电话骂。组长挨骂,回来骂我,我把那堆代码藏了三年,不敢说是我写的,后来交接的时候也没敢提。对,这么糊弄,就是我们这代人的"职业素养"。
说起来那段代码怎么烂?我后来回头看过一眼,一条 SQL 里嵌了六层子查询,外面还套着两层游标,中间穿插了三个临时表,就为了算一个部门的本期发生额。其实用窗口函数,一页纸就能写明白。但当年刚转正,会写游标好像是很牛逼的事,我就硬写,写完好几个月自己都看不懂,全靠当时一张草稿纸上的注释。后来草稿纸也丢了。我记得大概是二月份吧,冬天还没过完,公司说要接那个古董系统的维护。我翻出祖传代码库,一眼就看见了我那堆东西——旁边还挂着前年离职的小赵留的一个批注,写着"此段逻辑未知,勿动"。
那天晚上十一点多,我脑子已经不太转了。要我说,那一刻纯粹是赌气——我就把那段二百多行的核心逻辑,一片一片撕下来喂给那个新来的什么 Copilot。对就那个,名字我老记成 Copilt,改不过来了,它也不介意。我一开始不敢给它整段,怕它学了我那套破烂还给我的更多,就只给它一小段,问它这段是干嘛的。它回我,列了一堆推断,我看了一眼觉得废话。第二天我缓过来了,一行一行跟它磨,这个字段什么意思、那个表跟主表怎么关联、当年的傻逼逻辑里那三个临时表到底在扛什么东西。它居然能接住,问我是不是等价于按某个维度做了累计。我当时在工位上静了两秒,没敢让旁边的人看见我的表情。
它给的重写方案,用了一个窗口函数,加了一个中间表,没动我的业务逻辑。我在测试库里跑了一遍,二十分钟。我掐了表,又跑了一遍,十九分半。我当时没站稳,不是因为快,是因为它把我当年那个"今天算了,明天重新算"的破账目累加方式给改成了增量式。我愣了半天,心想,这玩意儿怎么会知道增量式的。它当然知道,它什么都知道。只是我不知道该怎么跟它说,我写那堆东西的时候,也没人教过我怎么改。
翻车也翻过。它给的第一版代码里有个细节,把小数位数从两位截成了四位,我当时差点骂它。后来发现是我喂给它的原始逻辑里就带着四舍五入的问题,我那破代码糊了三年,它不过是原样吐回来了。最后我一版一版改,那晚就一直在键盘上敲,改到最后也不太确定那些改动是我改的还是它改的了。
说回现在。那个季度结账一次过,没锁表,没积压,业务那边都没人发现系统换了一截。我坐在那儿有点空虚,我藏了三年的那一坨,被人二十分钟拆了。要我说,也就那样吧。工具而已。主要还是我知道怎么描述问题,换个脚本小子来连问都问不到点上。不过……话说回来,重写那晚,它不是打下手,它算是跟我一块儿把那头堵了三年的墙给拆了。就那一回。下不为例。别让我组长看见这段话。