如何长期维护依赖AI生成的项目?
目前我们已经经过实证,引入AI生产的项目,开发效率可以获得了数十倍,数百倍的提升。
但这也会带来一个问题,代码的功能堆积,在非常短的时间内,就做到了正常开发迭代数代许久的屎山。
AI 把软件工程里原本缓慢积累的复杂度,压缩到了极短时间内爆发。
数千行代码堆积在一个文件之中,又因为不是自己开发的,看代码的逻辑又像是看前人遗留下的代码,是一个很疼苦的事情。
功能越来越多,代码越来越乱,短期效率极高,长期维护极差。而代码一旦没人愿意继续维护,其实倒推回来,开发也是完全没有必要的。
最近差不多完全掌握了,3月看到的,动辄一天上百次提交的实现方案。
代码完全不经过任何我的的审查,由AI自己审查自己,无误后直接提交代码,无需经过我。
任务设置得当,一天提交的代码会非常的多。
问题也很明显。代码开始失控了。这和业务无关。
尤其是上个版本我要求他对全项目的多语言进行变更之后。涉及的范围和影响太大。
多了很多我未曾见过的代码。
虽然我要的功能都实现了。但代码开始变的非常乱。
AI 时代最大的伪工程化,是用结构复杂度掩盖业务简单性。
这套代码在设计之初,我是参考标准结构进行设计的。每个模块都设计了接口,然后把接口实现和使用的逻辑分离出来。像是菜单项,配置项,日志,主题这些。
虽然很多的模块在使用AI不断的迭代之中,腐朽了,但骨架是不变,更新的逻辑的代码不管修改了多少就还在那个位置。
插件化的开发模式,让即使某个模块完全由AI来写,也不会破坏整体的接口。
局部功能不影响整体的结构设计。
虽然代码结构,我在最开始的时候就做好了约束。项目的结构设计完全使用接口来进行拼装组合。
AI很不喜欢优化代码。
或者是可以这么理解。AI的能力看我们的代码就像是看小孩子一样,不管逻辑如何复杂,对于他而言是一样的。
但对于我而言不一样,逻辑要尽量贴合阶乘。要分层。每层的逻辑要尽量简单。要不我很难处理巨型项目。
复杂度应该按人类理解能力分解,而不是按 AI 的生成便利性堆叠。
我不知道他是如何做到的,每次任务都是增量添加。
最近一个月一直在忙着一个插件的开发。功能上几乎都是AI在做。我的任务就是检查AI的输出是否符合我的理解。而我的理解需要和用户进行沟通。
我相当于是一个人肉AI,还是效率很差的那种,每次的反馈迭代的周期是一天。白天确认需求,晚上指挥Agent干活,校对。第二天重复这个过程。
功能的进展很顺利。问题也很顺利,就是他写的代码我逐渐跟不上了。
当我要求他重构的时候,他的代码越写越多。每次重构,功能不变,代码多出了一堆。结构多了好几层。每个函数都有异常处理。每个函数都没几个调用,拆的非常细碎,但逻辑上,显然已经超出了我这个上下文不足的人的理解。
当我意识到这个问题之后。我就不在要求他帮我重构,而是开始指挥他对逻辑进行删减。效果是有的。
但非常差,他非常不情愿的删除一些代码。需要我手动指出这里的代码好像没有任何意义,可以直接删除之后,他才承认的确如此并且执行。
这种情况在尤其是测试驱动开发的代码下更为明显。他写了一堆的测试。但不愿意重构就是收到了测试的影响。
我不得不完全删除测试代码。然后告诉他git可以还原,让他完全忽略现有的逻辑,只从功能的角度开审视代码的实现。
现在这个代码也成为我层级批判的代码。核心逻辑几百行就解决了。然后工程化之后,整出来几万行代码。
而且还是在我审视了一遍之后。
多语言,多主题。多入口,多导出,还有增加的一些功能。最后让代码膨胀的很彻底。