
再读人月神话AI 时代下的产品化与系统化在 AI 时代重读读这本五十年前出版的软件工程领域圣经倒是带来了很多新的感悟尤其是有了 AI 之后很多论点在我看来已经不完全成立了此文记录一下自己的思考权作抛砖引玉本文对应原文的焦油坑章节阅读本文不需要读者阅读过原文传统软件开发中系统真正的知识载体往往是负责人本身。代码之外的大量设计意图、约束条件和历史背景以隐性知识的形式保存在开发者头脑中只在必要时通过沟通传递。AI 开发则不同。由于每次会话都无法继承上一轮实现过程中的思考这些知识如果没有沉淀为文档、接口约束或测试就等价于不存在。因此AI 并没有改变产品化和系统化的目标而是改变了知识的载体隐性知识逐渐失去价值显性知识成为持续开发的前提。代码的形态程序是最小可运行单元通常仅供作者本人使用和理解。编程产品是程序经过产品化后的形态具备完整文档、测试与统一风格可被任何人在不接触作者的情况下运行、调试与扩展。编程系统是程序经过系统化后的形态具备稳定的输入输出接口与清晰边界可作为组件被其他模块调用组合。编程系统产品同时满足产品化与系统化的要求。原文中给出的经验数字是产品化带来约 3 倍成本系统化带来约 3 倍成本两者叠加约 9 倍。产品化与系统化产品化需要提供文档、完整的测试、某种统一的风格从而使得程序可以被任何一个人在不和作者沟通的情况下运行、测试、修复和拓展。系统化需要提供稳定的输入输出格式以及清晰的边界和详尽的测试从而使得程序可以被其他模块依赖组合成更复杂的功能。虽然产品化与系统化解决的问题不同前者针对谁能使用后者针对能否被组合。但是两者的成本结构有很大重叠都是为了让当前理解代码的人之外的人也能驾驭这段代码而支付的一次性投入包括文档、测试、规范接口。理想状况下我们当然希望二者都做到但是二者是有成本的而是否划算可以归纳为一个简单的投资回报率ROI公式。ROI重新学习的成本×未来的复用次数建设及维护成本\text{ROI} \frac{\text{重新学习的成本}\times\text{未来的复用次数}}{\text{建设及维护成本}}ROI建设及维护成本重新学习的成本×未来的复用次数传统编程在传统的人类团队里这个”未来消费次数“由两个变量决定团队规模、人员流动率。因为人类程序员有长期的记忆而且对于代码和文档编写这种偏向体力劳动的工作效率较低如果代码只有作者或者有限的人会碰无论是产品化还是系统化投资大概率是亏本的所以理性的选择是不做或者只做一部分。此时代码的可维护性依赖于作者头脑中的隐性共识作者在场共识存在作者离场共识通过一次性培训转移给新人此后长期复用边际成本趋近于零。隐性共识是指未被写成文档、仅存在于负责人记忆中的对代码结构与设计意图的理解。vibe codingvibe coding是指以自然语言指令驱动大语言模型直接生成或修改代码的开发方式。在这种方式下实际编写代码的“作者”是一次性的 AI 会话任务完成后会话结束该会话对代码的全部理解随之清空。不同于人类程序员在主流 vibe coding 模式下 AI 无法像人一样长期保留隐性知识即使能自动索引整个项目提取隐性知识也会带来成本的上升而且对设计意图的理解也可能存在偏差但是代码与文档的生成效率较高。长上下文和持久化记忆一定程度上可以解决 AI 没有长期隐性知识的问题但是长上下文有注意稀释问题持久化记忆会有错误累积和上下文压缩可能带来的语义漂变在笔者看来并不算是最佳实践vibe coding 模式下 AI 的上下文最好只包含本次任务相关的信息产品化要解决的问题是不必找作者也能维护。在 vibe coding 中作者不在场是每次任务结束后必然发生的状态而非偶发的人员流失。人类负责人始终在场但并未参与实现细节的构建过程也未形成隐性共识。也就是产品化需要解决的场景一定会触发即使不考虑未来维护仅当前版本的正确性验证也要求测试具有更高的完备性。系统化要解决的问题是未来的复用是否需要重新理解全部实现。人类新人理解一个系统是一次性投入此后可无限复用。AI 每次新会话都从零重建理解这一成本并不随会话次数增加而降低而且 AI 从零重建的理解还不一定是正确的。重看 ROIROI重新学习的成本×未来的复用次数建设及维护成本\text{ROI} \frac{\text{重新学习的成本}\times\text{未来的复用次数}}{\text{建设及维护成本}}ROI建设及维护成本重新学习的成本×未来的复用次数不难看出在 vibe coding 模式下文档、测试等显式产物的生成成本被大幅度降低了。原文中给产品化、系统化各自约 3 倍额外成本这些额外成本很大一部分是人类写文档、写测试、维持统一风格这类“体力劳动效率低”的部分但这恰好是 AI 效率最高的环节。与此同时在多数持续维护的软件项目中AI 带来的重新理解次数增加有可能远大于单次学习的成本下降。vibe coding 模式下分子变高分母变小ROI 也随之提高产品化和系统化的价值相比传统编程要大得多。结论《人月神话》认为产品化与系统化是为了提升软件的可复用性因此是否值得投入取决于未来的人类协作成本。AI 的出现改变了其中两个变量一方面显著降低了文档、测试等显式工作的生成成本另一方面AI 作者无法保留隐性知识使代码在每次新会话中都面临重新理解的问题。因此在 AI 驱动开发模式下产品化与系统化不再只是面向团队协作的工程实践也逐渐成为维持 AI 持续开发能力的基础设施。因此一个 vibe coding 的程序几乎必须要是一个产品如果它需要后续迭代和组合那它最好也是一个系统。产物除代码本身外还应包含代码规范、单元测试与详尽文档覆盖架构、原始需求及其迭代记录、代码边界、接口文档与测试文档。不过需要补充的是系统化的投入不只是涉及开发阶段还涉及到设计阶段但是本文不做展开附录以下摘录与本文主题无关仅作为分享编程为什么有趣作为回报它的从业者期望得到什么样的快乐首先是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到愉快一样成年人喜欢创建事物特别是自己进行设计。我想这种快乐是上帝创造世界的折射一种呈现在每片独特、崭新的树叶和雪花上的喜悦。其次快乐来自于开发对其他人有用的东西。内心深处我们期望其他人使用我们的劳动成果并能对他们有所帮助。从这个方面这同小孩用粘土为“爸爸办公室”捏制铅笔盒没有本质的区别。第三是整个过程体现出魔术般的力量–将相互啮合的零部件组装在一起看到它们精妙地运行得到预先所希望的结果。比起弹珠游戏或点唱机所具有的迷人魅力程序化的计算机毫不逊色。第四是学习的乐趣来自于这项工作的非重复特性。人们所面临的问题在某个或其它方面总有些不同。因而解决问题的人可以从中学习新的事物有时是实践上的有时是理论上的或者兼而有之。最后乐趣还来自于工作在如此易于驾驭的介质上。程序员就像诗人一样几乎仅仅工作在单纯的思考中。程序员凭空地运用自己的想象来建造自己的“城堡”。很少有这样的介质–创造的方式如此得灵活如此得易于精炼和重建如此得容易实现概念上的设想。不过我们将会看到容易驾驭的特性也有它自己的问题然而程序毕竟同诗歌不同它是实实在在的东西可以移动和运行能独立产生可见的输出能打印结果绘制图形发出声音移动支架。神话和传说中的魔术在我们的时代已变成了现实。在键盘上键入正确的咒语屏幕会活动、变幻显示出前所未有的或是已经存在的事物。编程非常有趣在于它不仅满足了我们内心深处进行创造的渴望而且还愉悦了每个人内在的情感。