RE:CZ

AI编程实践反思:避免OOP与过度兼容

人工智能软件工程

👤 软件开发人员、AI技术爱好者、编程初学者、关注代码质量和维护性的工程师
本文记录了作者使用AI进行编程(Vibe Coding)的失败经历,发现AI生成的面向对象代码质量差、结构混乱,导致技术债务爆炸。作者分析了原因,包括AI对OOP范式设计能力不足、缺乏架构指导、过度向后兼容等。文章提出关键建议:避免使用面向对象编程,转向面向过程和函数式编程;引导AI理解奥卡姆剃刀原则,减少代码臃肿。这些措施旨在提升AI生成代码的质量和可维护性。
  • ✨ AI生成的面向对象代码质量差,结构混乱,导致技术债务爆炸
  • ✨ AI对OOP范式设计能力不足,缺乏业务领域建模
  • ✨ AI缺乏架构指导,采取偷懒策略,代码臃肿
  • ✨ 过度向后兼容导致代码复杂性和维护成本增加
  • ✨ 建议避免使用OOP,转向面向过程和函数式编程
📅 2026-01-07 · 1,265 字 · 约 5 分钟阅读
  • AI编程
  • 面向对象编程
  • 函数式编程
  • 代码质量
  • 技术债务
  • 奥卡姆剃刀
  • 向后兼容

今天是 2026-01-07。

使用 Vibe Coding 大失败,AI 给我写的代码质量太差,完全没法用。迫不得已将 ZEN 项目全部重写了一遍,改用传统的古法编程来实现。

我使用 AI 从零开始生成代码,迭代了多轮之后,工程质量开始崩溃,新功能无法集成进去,bug 层出不穷,代码结构混乱,连删除功能都变得异常困难。这是技术债务爆炸的典型症状。于是,我果断介入,决定重写整个项目。其中比较关键的是,我发现 AI 写的 OOP 代码质量特别差,每次新功能就给我单开一个类,然后给其他相关的类打一个洞来调用它,出现了大量无用的类和方法。这哪里是面向对象编程,分明是面向需求清单编程。

究其原因,我认为:

  1. AI 对于面向对象编程范式设计能力不足,这可能是由于缺乏对业务领域概念的建模导致的。
  2. AI 不清楚自己在做一次性代码还是长期维护的代码,缺乏架构指导,采取了偷懒一把梭的策略。
  3. 缺乏一个 AI 友好的脚手架,AI 从零开始自举的过程比较艰难。
  4. AI 对于兼容性的要求把握过于保守,导致代码臃肿。

面向对象迷思

我认为,AI 目前还不适合写面向对象编程的代码。面向对象编程要求对业务领域有深刻的理解和建模能力,而 AI 目前还无法胜任这一点,甚至比较可笑的是,人类也无法轻易胜任这件事。相反,面向过程和函数式编程更适合 AI,因为它更关注于数据转换和处理,而不是对象的状态和行为。

如果你使用了面向对象,你需要同时让 AI 精通设计模式,精通重构。这样才能写出高质量的面向对象代码。而如果你使用面向过程和函数式编程,AI 只需要专注于算法和数据结构,就能写出不错的代码。

那么面向对象的收益是什么呢?封装?继承?多态?这在 AI 时代似乎并不那么重要,因为它们都是为了少写代码和团队分工合作而生的,而 AI 无所谓这些。相反,代码的可读性、可维护性和可测试性才是关键。而这些特性更容易通过函数式编程和面向过程来实现。

过度向后兼容

AI 对于向后兼容的要求过于保守,导致代码臃肿不堪。AI 总是试图保留所有的旧功能和接口,以防止破坏现有的代码。然而,这种做法往往适得其反,因为它增加了代码的复杂性和维护成本。有时候,删除旧功能和接口反而能简化代码,提高性能。但是 AI 很难做出这种权衡,因为它缺乏对业务需求和用户行为的理解。

如果 AI 认为所有的 public export 都是需要保留的,它在创建新功能的时候引入这些接口很随意,但是在后续维护中却像对待宝贝一样对待这些垃圾接口,生怕一不小心就把它们删掉了。结果就是代码越来越臃肿,复杂性越来越高,bug 也越来越多。

我尝试了引导 AI 使用“允许破坏性变更” 的策略以后,效果明显改善。说明我们定位到了问题所在。但是这也带来了新的问题:如何管理破坏性变更的风险?

必须让 AI 理解 奥卡姆剃刀原则:如无必要,勿增实体。 也就是说,代码应该尽可能简单,避免不必要的复杂性和冗余。只有在确实需要的时候,才引入新的功能和接口。这样才能保持代码的清晰和可维护性。

AI 如果不分离设计和编码任务,就很难做到这一点。

结论

  1. 强调不使用 OOP,转向面向过程和函数式编程。这是一个非常关键的捷径,可以大幅提升 AI 生成代码的质量和可维护性。
  2. 引导 AI 理解 奥卡姆剃刀原则,避免过度向后兼容,减少代码臃肿。

其他我还没想好怎么办,比如脚手架的问题,架构指导的问题等等。

See Also

Referenced By