简介:AI生成的代码往往低耦合、少复用、随时重构,因此不易形成传统“屎山”;但它会快速膨胀为规模庞大的“群山”,最终受限于上下文窗口,变成人类难维护、AI也读不完的工程。本文剖析这一现象背后的机制,并给出架构治理与规模控制的实践建议。
关于 AI 生成代码,业界流传着一个颇为形象的担忧:让 AI 写代码,是不是迟早会把整个项目堆成一座无人敢碰的“屎山”?
这个直觉看似合理,但结论恰恰相反。AI 的编码风格决定了它很少制造传统意义上的屎山——然而它会带来另一种更隐蔽的工程风险:代码规模的无节制膨胀。理解这两种失败模式的差异,比简单地对 AI 编程下判断更有价值。
要判断 AI 会不会堆屎山,先要搞清楚屎山的成因。屎山很少是某一次糟糕设计的结果,它更像是一种长期演化的产物,核心驱动力是人类对“省事”的追求与心智带宽的有限性。
典型的形成路径是这样的:
if 套 if,循环里嵌循环,一个函数承担了五件事。可以看到,屎山的本质不是“代码多”,而是逻辑纠缠 + 修改影响面不可控。一个函数改动会牵动十几处隐藏依赖,这才是维护者的噩梦。
AI 写代码时,恰好在这几个成因上表现出与人类相反的行为倾向。
人类不愿重构,是因为重构要付出精力且风险自担。AI 在修改代码时,如果发现某段逻辑结构不顺眼,顺手就会重写一遍——对它而言,重写和微调的成本差异远没有对人类那么大。这种“看不顺眼就重构”的倾向,天然抑制了耦合的积累。
这一点常被误解为缺点,实际上是 AI 代码低耦合的关键来源。人类开发者倾向于复用,是因为“改一处要改多处”是真实的心智负担。而 AI 面对同样的任务,可以直接复制一份逻辑、另写一个几乎一样的函数,因为它可以自动搜索所有相关位置并批量修改——改一处和改二十处对它没有本质区别。
于是结果就是:AI 缺乏复用动力,从而主动制造低耦合。每个函数只服务一处逻辑,改一处代码只影响一处行为,修改影响面被牢牢限制在局部。
一个不在乎重构、不追求复用、主动保持低耦合的编码者,确实很难堆出传统屎山。因为屎山的核心特征——修改影响面不可控——在这种风格下几乎不成立。
用一段示意代码对比会更直观。人类容易写成这样:
def handle_order(order, user, is_vip, channel):# 下单、计价、优惠、库存、通知全塞在一起if channel == "app":if is_vip:price = order.base * 0.9else:price = order.base# ... 后续几十行继续嵌套
而 AI 更倾向于拆成彼此独立的函数,甚至为不同渠道各写一份:
def calc_price_app_vip(order):return order.base * 0.9def calc_price_app_normal(order):return order.basedef calc_price_web_vip(order):return order.base * 0.85
后者看起来“重复”,但每个函数职责单一、边界清晰,修改一个渠道的计价规则不会波及其他渠道。
如果故事到此结束,结论就是“AI 代码质量更好”。但问题在于,低耦合 + 不复用会带来另一个后果:代码总量快速膨胀。
不复用意味着同样的逻辑以近乎复制的方式散布在数十个函数里;随手重构意味着结构不断被重写而非收敛。项目规模会以一种人类开发者难以想象的速度增长,最终形成一片“群山”——每座山头都不烂,但山头太多。
这会带来两个层面的维护难题:
屎山难在“看不懂一处”,群山难在“要看的地方太多”。即使每段代码都清晰可读,当同类逻辑分散在几十处时,人类要建立全局理解仍然极其吃力。代码审查、故障定位、影响面评估的工作量都随规模线性甚至超线性上升。
对 AI 来说,单点理解不成问题,但它的上下文长度是有限的。当代码规模超过模型一次能容纳的 token 上限时,就会出现“读了后边忘了前边”的情况。此时 AI 对项目的整体把握能力急剧下降,修改代码时可能引入与远处逻辑冲突的改动。
这就形成了一个颇具讽刺意味的结局:项目最终不是死于代码腐烂,而是死于上下文爆掉。代码量大到人类读不完、AI 也读不全,维护成本同时压倒两类维护者。
既然风险类型变了,治理思路也要相应调整。核心不是“防止耦合”,而是控制规模与维持结构可导航性。
AI 写代码确实不太会产生传统意义上的屎山。它的低耦合、强重构、弱复用风格,从机制上抑制了“修改影响面不可控”这一屎山核心特征。
但这不等于 AI 代码好维护。它带来的是另一种失败模式:代码规模无序膨胀形成的“群山”,让人类因阅读量过大而难以维护,让 AI 因上下文有限而难以全局把握。屎山是人类的专利,群山是 AI 的副产品。
真正决定项目命运的,不是写代码的是人还是 AI,而是有没有人在规模失控之前,把架构约束、抽象收敛和上下文治理做到位。工具改变了失败的形式,但没有取消工程判断的必要性。