凌晨四点半被手机震醒,一看,跑批挂了。调度平台连发三条告警,像催命似的。上周五下班前新改的那个对账脚本,Python 写的,我亲手把公司跑了十年的 PHP 跑批重构了一版——先别急着骂,PHP 那个老脚本不是不能跑,是每次月底对账,金额字段都得手调格式,老张当年写的,注释就俩字,"别动"。这次业务加了新的第三方渠道,字段对不上了,不改不行。
我那天下午在IDE里折腾了三个小时,最后把核心逻辑重写成 Python,挂在调度平台上,测试环境跑了两遍没问题,就上了生产。周五下班走的时候我还跟值班的同事说,今晚要是挂了给我打电话。结果它还真挂了。
我当时第一反应是完蛋,新脚本的时区问题。跑批这玩意,最怕的就是凌晨跨天,日期一错,整个对账全毁。我爬起来开电脑,把日志拉下来看,看半天没看明白,报错信息指向的是对账文件读取那一步,但日志里根本没打印具体哪一行。我当时脑子是糊的,你知道那种半夜被叫起来修东西的感觉吧,眼皮都睁不开,看着那个报错栈完全是浆糊。
然后我想起来,上个月我让 Cursor 帮我重构过一个 SQL 查询,那玩意干得还行。我就把报错栈和那一段代码直接粘过去,问它怎么回事。它倒是快,几秒钟就给了答案:"看你的日期格式化,第 84 行,用了 strftime,但是你的 locale 是 C,月份英文缩写对不上第三方回传文件里的字段名。"
我一看,还真是。那个第三方渠道传回来的文件名是 SEP_01,我用 strftime 格式化出来的是 Sep_01,大小写对不上,文件匹配直接失败。这问题在测试环境根本不可能暴露,因为测试环境我模拟的文件名全是按我自己脚本的格式来造的。生产环境一上真实文件就现原形了。我大半夜盯着这个报错看了二十分钟没看出来,人家一眼就给你揪出来了。要说我完全没有警惕性吧,也不对,我中间其实怀疑过文件名匹配这块,但是我当时以为第三方传的是标准月份缩写,谁知道他们用全大写。就这么个破事。
改完代码,重新跑批,数据对上了。我坐在那儿,喝了口凉茶,想骂人又不知道该骂谁。骂第三方?人家文件名规则写在文档里,是我没细看。骂 AI?它干得还挺好,虽然也就是个抓虫子的活。骂我自己?多少年没干过这种凌晨爬起来修脚本的事了,本来以为重构完能省点心,结果还是这副德性。
其实说真的,这半年来我让 AI 帮我干的活越来越多,从最开始查个函数用法,到后来整段整段帮我把老代码翻译成新语言,再到现在这种半夜帮我抓报错。我嘴上跟组里人说它就是个大号搜索引擎,省得翻文档了,但我心里清楚,它已经不只是打打下手的水平了。那天凌晨它从报错到定位到给修复方案,全程不到五分钟。这速度……要我说,也就是个工具,工具快有什么了不起的。
话说回来,我挺想知道它要是真接手这个脚本,能不能比我考虑得更周全。比如那个周一早上才跑的周报汇总,它知道要避开月初的数据波动吗?它知道老张留下来的那个"别动"注释底下,藏着一条业务线死活离不开的历史包袱吗?当年这条业务线是为什么写的,算了,说了你们也懒得听。
反正调好了,数据重新跑通了,天也快亮了。说句不中听的,这个活你交给谁干都得凌晨爬起来,我至少没白爬起来。AI 干得是好,但下一次,我希望它干得没那么好,这样显得我还有点用。
PHP 我照样写着,Python 我也没丢,哪天 AI 能把 PHP 的祖传代码全给我翻译了,我就真心服它一次。就一次。