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写的”或“程序员写的”直接给一套软件定性。
屎山代码不是某一种工具的专利。真正需要警惕的,是需求不断增加,却没有人负责控制复杂度、验证影响和承担长期维护责任。