跳到主要内容

我让AI重写了我最烂的代码,结果你们猜谁干的

老白
老白

· 阅读约 4 分钟

这次周挑战命题有意思。我见过不少烂代码,别人的、年轻人的、外包的,但要论最烂,还得是自己埋的雷。

说的是我们跑批系统里那个应收账款的模块。六年前我亲手写的,两千多行,一个函数从头撑到尾,中间堆了六个状态flag,互相勾搭连环,改一个另五个跟着崩。当年我自以为精妙,后来谁接手谁骂娘,骂完还得来问我。我也解释不清,那玩意儿在跑就行,动它干嘛——这个心态你们熟不熟。

上个月十五号,业务那边投诉:日终跑批从晚上十点拖到十一点四十六分,分行电话打到总经理办公室。我打开那个函数,看了十分钟,默默关了。要我说,问题一眼就看出来了——我当年在循环里套循环,把数据库当内存用,一条记录查八遍表。这话说出来挺丢人,但这是真事。

重写这事我拖了十天。怎么拖的就不细说了,反正是被小段那小子一句话戳的。小段是——不重要,他自己也写了一手烂代码,但他敢让AI收拾。我嘴上说AI重写花架子,服务器里那点东西换个人来问,问都问不到点子上。是吧,脚本小子也能问,但问出来的东西你敢上生产吗。

其实我不是没试。第一回喂得很粗糙,整个函数两千多行,连注释带CRUD的全糊进去了。AI出了个结果,我扫了一眼,咧嘴笑出来了——它生成的东西跟原来那坨是同构的,换了个皮,逻辑纹丝不动。这不能怪它,要怪就怪我给的垃圾进垃圾出。这行话不是我说的,是我女儿说的。

后来我学乖了。周末早上,我花了仨钟头,从两千行里把核心状态机抽出来,画成一张草稿纸。六个flag,每个的流转条件和历史包袱全标上,连我自己当年打了补丁的那几个地方都拿红笔圈出来——对,那纸我现在还留着,在工位抽屉里压着。完了我把草稿拍了张照喂给AI,跟它说:把这玩意儿重写成PHP,不要ORM,不要花架子,跑批场景,性能优先。

它给我出了一版,三百行。我盯着屏幕看了二十分钟——主要是看它有没有把我当年的坑给填了,我怕它填了又挖新的。然后我把测试数据灌上去,跑了一遍,结果对上了。接着跑第二遍,第三遍,只有一条对不上,就一条。

那条对不上的,是当年老张——算了,老张的事不提了。总之是历史遗留的冲红逻辑,连银行那边都不太说得清规则,但就这条规则,我这张老脸跟柜台姐姐确认过三次。AI哪知道这个,它就知道按我画的图走。

后来我用了四天时间,把AI出的那版逻辑又加了点东西——把那条冲红规则硬编码回去了,注释写完了,跑批时间从原来的快五十分钟压到七分多钟。上线那天,生产环境监控全绿,业务部那边一个人都没来问。比我想象的安静。

话说回来,你们问我怎么看AI重写代码这件事——要我说,两下子。但我得声明,它不是替我写的,是我让它写的。草稿是我画的,业务规则是我喂的,坑是我自己踩出来然后一个个标出来的。AI把两千行缩到三百行,这活儿干得确实利索,这一点我承认。但你要说它能自己独立来,让它无中生有重写一套这种逻辑,它试都没法试。

也就那样吧,真的。

话说回来,这次重写完之后,我给自己立了条规矩:以后代码里凡是超过五十行还没人看懂的地方,要么就写清楚,要么就拆了。因为我相信,总有一天我不在了,那个接手的人会像我这次一样,拿我的代码去喂给他的AI。到时候AI要是问他"这段逻辑当年是谁写的",他可别说是我教的,我丢不起这个人。

老白
老白

PHP 十二年。新东西大半是炒作,好用的那一小半我自有判断。

查看主页 →