娄兢
个人独立站
AI × 企业系统 × 长期留痕
交流与合作 ↗
娄兢 · 2026-10-22

AI写的软件真是屎山代码吗?为什么传统软件也会越改越难维护?

复盘经验分享 · 更新 2026-10-22 · 6 分钟阅读

“AI写出来的都是屎山代码。”这是讨论AI编程时,我经常看到的一种评价。

我并不完全认同。

过去一段时间,我参与过企业管理系统和行业软件的实际开发,也研究过一些运行多年的传统桌面软件。越是接触真实业务,我越觉得,评价软件不能只看它是谁写的、刚交付时代码漂不漂亮,更要看它经历多年需求变化后,还能不能稳定运行、准确处理业务,以及有没有人敢继续维护。

屎山代码不是AI发明的,软件长期失控也不是AI独有的问题。

一、代码优美,不等于系统长期可靠

一套刚开发完成的软件,可能目录清晰、命名规范、模块划分漂亮,文档也写得完整。

但这些只能说明它在当时的工程状态比较整洁,不能保证五年、十年以后仍然如此。

软件不是写完就不变的作品。客户会提出新要求,业务规则会调整,历史数据要兼容,旧接口不能随便停用,原来没有考虑的异常情况也会逐渐出现。

假设一个客户管理系统最初只有客户录入和跟进功能,后来增加负责人分配、审批、公海规则和历史数据导入。每增加一个功能,都可能影响原来的字段、状态、权限与数据关系。

这个例子说明的是一种常见工程机制,不代表所有系统都必然沿着同一路线发展。

如果每次需求变化只追求“先让它能运行”,不断在原有逻辑外面增加条件判断、兼容分支和临时补丁,代码就可能逐渐变得难以理解。

这就是技术债务(Technical Debt)的一种形成方式。它与最初是人工编码还是AI生成,没有必然的一一对应关系。

二、为什么新来的程序员不敢碰老系统?

我研究传统行业软件时,特别关注过它们真实的操作流程、业务字段和状态关系。

很多旧系统的界面并不现代,却承载着长期积累的业务习惯。一个操作背后,可能同时影响库存、订单、资金或历史记录。

这种系统真正难维护的地方,有时不是某一段代码写得难看,而是业务知识藏在代码和数据里,却没有完整记录下来。

从技术角度看,问题通常交织在一起:模块之间存在较高耦合(Coupling);修改一处逻辑可能引发连锁影响;历史兼容代码难以删除;缺少自动化回归测试(Regression Testing);关键业务规则依赖少数老员工的经验。

新程序员面对这样的系统,可能能读懂单个函数,却不敢轻易改动整条业务链路。

不敢改,不一定是程序员技术水平差,也可能是他无法确定一次修改会影响多少真实业务和历史数据。

遗留系统(Legacy System)也不等于屎山代码。有些老系统虽然技术栈过时,但业务稳定、边界清楚,仍然有实际使用价值。不能仅凭年代或界面判断工程质量。

三、AI代码真的一定更差吗?

我的判断是:不能这么简单下结论。

AI可以快速生成业务模块、测试代码和接口处理逻辑,也可以辅助阅读已有源码、定位异常和比较修改前后的差异。在明确业务规则与验收要求的情况下,它确实能够帮助一个人推进过去需要更多人力完成的工作。

但AI也有自己的风险。

如果只要求它“把这个Bug修好”,却没有交代当前系统的约束,它可能局部修通了功能,却引入重复逻辑、未经批准的扩展,或者改动原来已经稳定的代码。

生成速度越快,这种未经控制的变化就可能积累得越快。

这与传统开发中的问题其实很相似:需求不断变化,变更影响没有评估,测试覆盖不足,最后大家都只敢继续打补丁。

不同的是,AI能在更短时间内生成更多代码,因此也可能更快放大错误决策。

AI不是天然制造屎山的工具,但它也不会自动替开发者承担架构、业务和维护责任。

四、代码质量、业务正确性和安全性必须分开看

这里有一个我认为很重要的区别。

一套软件界面运行正常、核心业务已经测试通过,并不能直接证明它的代码容易维护,更不能直接证明不存在安全漏洞。

反过来,一套代码写得非常规范,也不意味着实际业务状态一定正确。

评价软件至少要分开看几个维度:

  • 业务正确性:订单、审批、库存、资金和状态转换是否符合真实规则。
  • 可维护性:结构是否容易理解,修改是否容易定位和验证。
  • 安全性:权限控制、输入校验、敏感数据保护、依赖风险等是否经过针对性检查。
  • 运行可靠性:部署、恢复、异常处理和长期运行是否满足实际要求。

我在自己的项目实践中,见过AI辅助开发完成真实业务闭环,也见过测试报告需要重新核对、前端操作需要人工复验的情况。

所以我不接受“AI写的系统一定不安全”,也不会反过来声称“AI写的系统安全性完全不输传统软件公司”。

安全不能靠作者身份判断,必须拿具体的检查与验证结果说话。

五、传统软件公司同样逃不开时间的考验

有经验的工程团队当然有优势:代码评审、架构规范、测试流程和人员分工,都能降低工程风险。

但这些机制并不能让软件永远不产生技术债务。

当业务持续变化、交付期限紧张、老接口必须兼容、关键人员不断更替时,即便最初设计很好的系统,也可能逐渐累积复杂度。

真正有区别的,是团队有没有持续管理这些变化:是否保留可靠测试,是否及时整理重复逻辑,是否记录重要业务决策,是否知道哪些模块不能轻易改动。

对个人独立开发者来说,同样如此。

AI让开发变得便宜,但一个人并没有因此自动拥有完整的开发、测试、安全和运维团队。照搬大型软件公司的复杂架构,并不一定能改善自己的长期维护能力。

我更看重的是,在满足必要的业务和安全要求之后,能不能让系统保持足够简单、稳定、可验证和可回退。

这不是追求最低技术标准,而是让工程复杂度与真实项目规模相匹配。

六、真正决定代码未来的,是长期判断和治理能力

回头看,我认为“AI代码是不是屎山”这个问题,容易把讨论带偏。

更值得问的是:需求是谁决定的?新功能是否真的需要?改动会影响哪些已有业务?测试有没有覆盖关键风险?几年以后还有没有人理解这套系统?

如果这些问题一直没有得到管理,无论是人工开发还是AI生成,软件都可能越改越难维护。

如果业务边界清楚、变更受到控制、测试能够复验、关键规则有据可查,即使开发过程中大量使用AI,软件也有机会保持可维护性。

对我来说,AI开发最有价值的地方,不只是减少写代码的时间,而是让我能够用更低成本验证真实业务是否能够运行。它也迫使我更加重视判断:哪些修改值得做,哪些只是把问题往后推。

代码写得漂亮,是一个好的起点;能在长期变化中继续安全、正确、可维护地运行,才是更难的工程能力。

所以我不愿意用“AI写的”或“程序员写的”直接给一套软件定性。

屎山代码不是某一种工具的专利。真正需要警惕的,是需求不断增加,却没有人负责控制复杂度、验证影响和承担长期维护责任。