近期事件

最近几个月的工作中,开始接触公司的更多项目,项目一个 10 年以上一个 6 年以上,有些共同特征

  • 工具老,Webpack 2,还有各种古早依赖库
  • 代码乱,没有底层架构,没有设计模式,没有代码规范,只面向需求迭代

结合以上问题,我们这次来谈谈 AI 在开发老项目中的问题。那么首先,我需要解释一下

什么是软的?什么是硬的?

如果将文档比作软的,也就是自然语言化,灵活性高、重在意图与含义

那么代码则是硬的,也就是形式语言化,严谨性高,重在逻辑与结构

AI 的背刺

本文主要介绍使用 AI 开发相关的内容,所有的“文档”指的都是“AI 开发指导文档”

使用 AI 开发这些老项目时,经常会遇到修复一个问题后,导致另外一个问题出现了,还有就是有时候发现之前写的某个功能不起作用了,检查代码后发现其他人修改了代码,把我的逻辑注释或删掉了

本质上这并不是 AI 的问题。原因是 AI 是目的专注的,当你给 AI 提出一个问题修复时,它的目光首先会聚焦在目的本身,然后向外扩散检查相关逻辑。在混乱的代码中,它的专注力更多的会在出问题的一条逻辑线上,所以如果逻辑互相有多处关联

就会非常容易因修复一个问题产生一个或多个新的问题

稳定的三角关系

解决这个问题,只优化 AI 文档总是有限的,代码的优化也是必不可少的。包括但不限于,使用设计模式、提供抽象类、配置代码规范等等。最理想的状态是,让 AI、文档、代码,形成一个稳定的三角关系

近期在实现某个相对独立的模块的时候,我尝试尽可能脱离原本的代码去实现,添加了 TypeScript 做类型约束、实现基础抽象类等,让新增模块中的功能像做填空题一样,或者说像插件开发一样。经历了几次小范围重构和优化,代码提供硬的约束边界,文档提供软的方向指导,再通过 AI 让两者之间不断循环迭代

再次感叹,好的设计模式无论什么时代都不会过时

牢骚

简单分析一下,一个项目怎么就会变成这样

主要原因,项目在基于需求迭代,安排一个功能做一个功能,零零散散且高耦合,底层封装基本没有

次要原因,每个月有迭代要求,优化都只能挤时间做,重构更是不可能,发版时间为重,感觉是为了发版而发版