很多开发者用ChatGPT、Codex一段时间以后,会发现一个很明显的变化。

以前AI帮你写代码,更多是在解决:

“怎么实现。”

现在它越来越会主动发现:

重复逻辑。

复杂结构。

过长函数。

职责混乱。

不统一接口。

甚至你只是让它修一个Bug,它也可能顺手告诉你:

这里可以抽象。

这里可以拆层。

这里可以重构。

这里可以统一。

从代码质量角度看,这当然是进步。

但真实项目里,一个新的风险也开始出现:

AI越来越会优化代码,但并不代表每一次优化现在都值得做。

有时候,最危险的不是AI写错代码。

而是:

AI把一个原本虽然不漂亮、但稳定的系统,优化成了一个更漂亮、却更难维护的系统。

这就是AI Coding里一个越来越值得注意的问题:

Over-Optimization——过度优化。


一、真实场景:你只想修一个Bug,AI却顺手“整理”了半个模块

假设你让Codex处理一个问题:

“修复订单状态偶尔不同步的问题。”

AI分析以后,很快找到问题。

真正需要修改的,也许只是:

一个状态更新顺序。

几行代码就能解决。

但AI继续分析后发现:

这个模块里有三段相似逻辑。

几个函数参数结构不一致。

异常处理也有重复。

于是它顺手:

抽出公共Service。

统一参数模型。

调整函数结构。

整理异常处理。

补充新的抽象层。

最后:

Bug确实修好了。

测试也通过。

代码甚至比以前漂亮很多。

但几周以后,新需求来了。

团队发现:

原来那三段相似逻辑,其实正准备朝三个不同方向演进。

现在因为被抽象到一起,改其中一个,就要考虑另外两个。

于是:

短期减少了重复。

长期却增加了耦合。

这就是典型的过度优化。


二、为什么会发生?因为AI看到的是“当前代码质量”,不是“未来变化成本”

AI很擅长发现当前代码里的问题。

例如:

重复。

复杂。

命名不统一。

结构松散。

这些问题在当前状态下都是真实存在的。

但工程决策不只是判断:

这里能不能变得更漂亮。

还要判断:

现在值不值得改。

比如:

一段重复代码存在半年。

如果未来马上就要拆成两个独立模块,

现在抽象反而不划算。

再比如:

某个旧接口设计不好。

但已经有十几个系统依赖。

理论上重构很合理。

但实际迁移成本可能非常高。

所以软件工程真正关心的是:

优化收益,能不能覆盖未来维护成本和当前改动风险。

而这个判断,不会自动出现在“最佳实践”里。


三、工程机制:AI优化的是Local Quality,但工程真正关心Total Cost

可以把一次重构带来的价值拆成两部分。

第一部分:Local Quality Gain

局部质量收益。

例如:

减少重复。

降低函数复杂度。

改善命名。

统一结构。

减少代码量。

AI通常很容易识别这一部分。

第二部分:System Cost

系统成本。

包括:

迁移成本。

理解成本。

回归风险。

新抽象维护成本。

团队学习成本。

未来修改耦合。

工程里真正应该比较的是:

Local Quality Gain - System Cost

而不是只看:

“代码是不是更漂亮了。”

这也是为什么有些重构:

技术上非常合理。

工程上却不值得。


四、为什么“减少重复”不一定永远正确?

这是AI很容易触发过度优化的地方。

DRY原则很经典:

Don't Repeat Yourself。

不要重复自己。

但真实项目里有一个更重要的问题:

这两段代码是真的同一个概念,还是只是现在长得一样?

例如:

订单退款。

售后退款。

会员余额退还。

当前可能都有:

检查状态。

生成记录。

更新金额。

于是AI很容易抽成统一退款流程。

但未来:

订单退款可能增加风控。

售后退款可能增加物流判断。

余额退款可能走另一套财务系统。

如果它们未来变化方向不同,

今天提前统一,

就会把本来应该独立演化的东西绑在一起。

所以:

重复代码有成本。

但:

错误抽象的成本可能更高。


五、为什么AI越强,过度优化反而越容易发生?

因为AI越来越擅长发现“可以改善的地方”。

弱一点的AI可能只完成:

你要求的任务。

强一点的AI会看到更多:

结构问题。

设计问题。

重复问题。

潜在技术债。

这让它越来越像一个积极的开发者。

但问题也恰恰出在“积极”。

真实工程里,有经验的开发者经常会做一件看起来不够完美的事:

知道问题存在,但选择暂时不改。

因为他会考虑:

当前优先级。

项目生命周期。

团队资源。

未来路线。

改动风险。

也就是说:

工程经验的一部分,不是发现问题。

而是:

知道哪些问题现在不值得解决。


六、为什么未来这个问题会越来越明显?

因为Agent会越来越能自主完成大范围任务。

以前:

AI帮你改一个函数。

过度优化影响有限。

以后:

AI可能一次:

重构一个模块。

统一多个接口。

调整多个数据结构。

自动补测试。

整个过程非常快。

这意味着:

优化成本越来越低。

而当一件事情变便宜以后,人通常会做得更多。

于是未来可能出现:

代码重构越来越频繁。

抽象越来越容易创建。

架构调整越来越容易发生。

问题是:

维护这些变化的人,仍然需要长期承担成本。

所以AI时代一个新的风险是:

代码变化成本下降后,

我们可能开始低估:

“什么都不改”的价值。


七、自测指标:重构收益比

这里可以建立一个指标:

重构收益比

简单理解:

一次AI重构带来的真实收益,是否明显高于它增加的成本。

可以从几个方面判断。

第一,解决的是明确问题,还是“看起来可以更好”?

如果只是:

代码更漂亮。

结构更统一。

但没有实际问题,

收益可能有限。

第二,修改范围有多大?

为了减少30行重复,

却改了12个文件。

收益比可能很低。

第三,新抽象未来会不会被重复使用?

如果只是为了两处当前相似代码建立复杂抽象,

风险较高。

第四,重构以后是否增加了理解成本?

如果新人必须先理解更多层才能改简单逻辑,

说明优化未必真的降低复杂度。


八、怎么降低AI过度优化风险?

第一:把“修复”和“优化”拆成两个任务

不要让AI在修Bug时默认拥有重构权限。

例如:

第一阶段:

只修Bug。

验证稳定。

第二阶段:

再单独评估是否值得重构。

这样可以避免把:

功能修复风险。

和架构变化风险。

混在一次提交里。


第二:明确告诉AI“最小修改优先”

复杂项目里可以加一条很有价值的约束:

优先使用满足目标的最小修改,不进行与当前目标无关的结构优化。

这不是限制AI能力。

而是在控制:

Change Surface。


第三:让AI证明“为什么现在值得重构”

不要问:

“这里能不能重构?”

而应该问:

“如果不重构,未来具体会产生什么成本?”

“这个重构预计会减少什么真实维护问题?”

“有什么证据说明这几个模块未来变化方向一致?”

如果这些问题回答不清楚,

重构可能只是:

看起来更优雅。


第四:要求AI同时给出“不重构方案”

比如:

方案A:

完整重构。

方案B:

局部修复。

方案C:

保留现有结构,只补测试和注释。

然后比较:

风险。

收益。

长期成本。

这能避免默认认为:

重构一定是更高级的答案。


九、还有一个关键原则:能延迟的抽象,很多时候比错误抽象更安全

软件工程里一个很重要的思想是:

不要过早抽象。

如果还不确定:

几个模块未来是不是同一个方向,

先保持少量重复,

有时候反而更安全。

因为重复可以以后再合并。

但错误抽象一旦进入公共层,

后面所有调用方都开始依赖,

拆起来反而更贵。

所以:

Duplication is cheap to remove later.

但:

Wrong abstraction is expensive to unwind.

AI时代尤其如此。

因为AI太容易帮助你把抽象快速搭出来。


十、为什么过度优化时,不应该第一时间追求更强模型?

如果现在你的问题是:

AI总喜欢顺手重构。

改动范围越来越大。

代码越来越漂亮,但Review越来越难。

那么真正的问题通常不是:

AI能力不够。

而是:

边界没有定义。

优化标准没有定义。

重构收益没有评估。

更强的AI甚至可能更容易发现更多“可以优化”的地方。

所以应该先建立:

最小修改原则。

重构审批。

收益评估。

任务拆分。


十一、什么时候Plus通常够用?

如果你的工作主要是:

小功能。

局部Bug。

简单脚本。

常规代码修改。

大部分任务不需要复杂架构调整。

那么:

Plus通常已经够用。

尤其是在明确限制:

只修问题。

不做无关重构。

之后,

很多日常任务完全可以高效完成。


十二、什么时候Pro才真正开始匹配?

更接近Pro的状态是:

你已经有成熟的AI工程流程。

能够判断:

什么时候应该重构。

什么时候应该保持现状。

复杂任务有明确Scope。

重构前会比较Trade-off。

AI修改范围也能被控制。

在这个基础上,你仍然需要:

大型Repository。

复杂模块重构。

长时间Agent任务。

多个架构方案比较。

大量跨模块工程工作。

这时候更高AI能力才更容易真正转化成生产力。

判断逻辑不是:

“项目需要重构,所以我要Pro。”

而是:

“我已经知道哪些重构值得做,现在需要更强AI帮助我完成真正高价值的重构。”


最后:AI越会优化以后,开发者越要学会接受“不完美”

AI Coding很容易把我们带进一种状态:

看到重复。

就想消除。

看到旧结构。

就想重构。

看到不统一。

就想整理。

但真实软件工程不是一场代码美化比赛。

真正重要的是:

稳定。

可维护。

可理解。

符合未来变化方向。

有时候:

两段重复代码,

比一个错误的公共抽象更安全。

一个不够漂亮的旧接口,

比一次大范围迁移更划算。

一个暂时存在的技术债,

比现在立即偿还更合理。

所以未来AI越会重构,人越需要问一句:

“这个地方是真的需要变得更好,还是只是看起来可以更漂亮?”

如果只是局部代码优化:

Plus通常已经够用。

如果你已经有成熟工程判断体系,并且持续处理大量高价值复杂重构:

Pro才真正开始匹配。

未来真正高级的AI Coding能力,不是:

让AI把所有代码都优化掉。

而是:

知道哪些地方值得优化,哪些地方应该暂时保持不动。

持续更新Codex、大模型开发相关技术内容。
长期使用各类代码大模型,整理了稳定的AI会员订阅渠道,有需要可自取!

Logo

葡萄城是专业的软件开发技术和低代码平台提供商,聚焦软件开发技术,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。

更多推荐