Skip to content

AI 时代的软件工程范式转变:从“确定性”到“概率性”

Cover

在软件工程的历史长河中,我们正站在一个前所未有的十字路口。Martin Fowler 近期指出,这是他职业生涯中见证的最重要的变革——软件工程的“确定性”终结了。当 AI 从实验室走向大规模工程实践,传统的研发范式正在从底层逻辑、生产方式到组织架构发生全方位的重构。

软件工程的“确定性”终结

过去三十年,软件工程建立在“确定性”的基石之上:相同的源码经编译器处理,总能得到精确一致的结果;单元测试能给出非黑即白的判定。然而,大语言模型(LLM)的输出是概率性的。这种不确定性意味着,一个在 99 次测试中都能通过的代码,可能在第 100 次运行时失败。

这种转变标志着软件工程正在从“逻辑确定”的时代跨入“概率性”的 AI 时代。传统的 TDD(测试驱动开发)和调试路径在 AI 面前正面临失效,工程的核心任务正在从“保证代码确定”转变为“在不确定的世界中建立系统化的确定性”

智能体工程(Agentic Engineering):驱动规模化生产的新引擎

在 AI 参与开发的路径上,存在两种截然不同的模式。一种是 Vibe Coding(氛围编程),即不关心内部实现,全凭“感觉”和 Prompt 让 AI 堆砌代码。这种模式在开发 Demo 时表现惊人,但在复杂的企业级系统中,它会因为缺乏控制而导致系统迅速崩塌。

相比之下,智能体工程(Agentic Engineering) 才是支撑未来软件生产的核心框架,其中 Harness(装具/装具模式) 被视为驾驭 AI 生产力的核心框架。随着软件工程进入概率性时代,Harness 模式的作用是为具有不确定性的 AI 模型提供一套系统化的锚定和反馈机制,从而在不确定的输出中建立起工程上的“确定性”。

Harness 的核心公式:Agent = Model + Harness

根据 Terraform 创造者 Mitchell Hashimoto 的定义,AI 智能体并不等同于模型本身,而是由模型与 Harness 共同组成的系统。

模型(Model):提供推理能力的引擎。

Harness(装具):模型之外的一切,包括提示词、代码审计机制、编译器、约束文件和验证流程。

Harness 的两大支柱:指导(Guides)与传感器(Sensors)

Harness 通过前后两个维度的控制来约束 AI 的行为:

指导(Guides - 前置控制)

作用:在 AI 行动之前提供约束和引导。

内容:包括系统提示词(System Prompts)、API 架构文档、约束文档、编码规范以及特定任务的上下文知识。

目的:提高 AI 第一次就生成正确代码的概率。

传感器(Sensors - 后置反馈)

作用:在 AI 行动之后进行观察和验证。

内容:包括编译器检查、Lint 静态分析、类型检查、单元测试,以及由另一个 AI 担任的“LLM as Judge”代码审计。

目的:及时发现 AI 输出中的幻觉或错误,并反馈给系统。

确定性的分层:计算型 vs 推理型

为了平衡效率与质量,Harness 中的检查被划分为两个维度:

类型检查手段 (Sensors)特点示例
计算型CPU 执行,逻辑确定快速、廉价、非黑即白编译器、Lint、类型检查、单元测试[1]
推理型GPU/NPU 执行,基于 AI 审计慢、贵、具有概率性,但能理解复杂语义代码初审、语义评审、LLM as Judge[1]

工程建议:应尽可能将可规范化的规则转化为“计算型”检查,以获得最高的确定性和反馈速度。

核心演进:从“调试代码”到“转向循环”(Steering Loop)

在 Harness 模式下,工程师的角色发生了根本性转变:

不再手动修 Bug:当 AI 生成的代码出现问题时,工程师不应直接去修改代码,而是去诊断 Harness 系统。

开启转向循环:工程师通过修改 Guides(改进提示词或补充知识)或增加 Sensors(添加新的测试用例)来确保此类错误不再发生。

结果:AI 在改进后的 Harness 约束下重新生成正确代码。

总而言之,Harness 模式是将 AI 从“玩具”转化为“工业级工具”的关键。它通过“定义规则(Guides)”和“验证结果(Sensors)”的闭环,让工程师能够站在更高的维度,通过调教智能体系统来完成复杂的软件交付任务。

研发效能的深层复盘:当“代码爆发”成为负担

当 AI 智能体让生码变得极其容易且廉价时,行业开始深刻反思:生码率(AI 代码采用率)真的能代表产研提效吗?

“生码率”的虚假繁荣:AI 生成代码极其容易,导致“生码率”从提效指标退化为一种“过程指标”。如果缺乏有效的治理,这些海量生成的代码将迅速演变为代码债务代码一旦产生就是债务,只有它为业务创造价值时才是资产

效率与效果的错位:真正的效能应从“效率(Efficiency,更快写码)”转向“效果(Effectiveness,交付价值)”。在完整的研发周期中,纯编码仅占约 20% 的时间,而需求沟通、架构设计和联调才是真正的瓶颈。

灵魂与骨架:业务价值的定义是“灵魂”,API 与架构约束是“骨架”。成功的交付 90% 取决于灵魂(定义清晰)与骨架(约束严密),而非中间的填充代码。

软件工程的“左移”:以定义驱动交付

范式的转变迫使软件工程向“左”移动——即向需求定义和规格设计阶段大幅聚焦。

知识与规格的回归:当编码被 AI 承包,工程师的核心职责变成了编写清晰的 Spec(规格说明)。AI 擅长从清晰的规格中推导实现,这要求质量验证、测试用例生成都在需求阶段“左移”完成,甚至实现从 20% 到 100% 的全量测试覆盖。

API First 治理:利用清晰的 API 边界来隔离 AI 生成内容的复杂性,防止“不健康代码”蔓延到整个系统。

在 AI 驱动的新型生产关系下,传统的“前后端分离”模式正在向 “Half-Stack”(半栈) 模式重构,由此催生了 PDFEABE 两个核心岗位。

PDFE:产品设计前端工程师 (Product Design Front-end Engineer)

PDFE 岗位的核心是将业务逻辑、交互设计与前端实现进行“三合一”整合。

核心职责

业务定义与设计:从业务逻辑出发,负责产品功能的深度定义和交互体验设计。

前端实现:利用 AI 辅助快速完成从业务逻辑到产品 Demo,再到正式前端页面的闭环交付。

角色转变:这类岗位更像原有的“产品经理”或“交互设计师”向技术侧的延伸。在 AI 极大降低了前端代码编写成本的背景下,PDFE 的价值更多体现在对业务价值的理解产品定义的准确性上。

ABE:AI 架构与后端工程师 (AI Architecture and Back-end Engineer)

ABE 岗位则专注于处理系统底层的复杂性,特别是与 AI Agent 调度和系统稳定性相关的工程任务。

核心职责

架构与 API 治理:负责系统的状态机设计、API 边界定义以及高可用/高并发能力的构建。

AI 调度与调度整合:管理 AI Agent 的执行逻辑,确保 AI 生成的内容在系统框架内受控运行。

角色转变:这类岗位更侧重于技术深度。其价值在于通过严密的架构约束(即“骨架”)来对抗 AI 带来的不确定性,确保系统的鲁棒性和可维护性。

两者的协作与分工逻辑

这种新型的分工模式反映了软件工程向“两极”发展的趋势:

“水平”与“垂直”的交汇:PDFE 关注业务的水平覆盖(从需求到用户界面),ABE 关注技术的垂直深度(从 API 到系统架构)。

API 作为新边界:两者的协作不再是琐碎的代码联调,而是基于清晰的 API 契约。ABE 负责提供稳定、原子化的能力,PDFE 则调用这些能力快速组装业务价值。

组织提效:这种重构旨在最大程度利用 AI 降低跨部门协作的沟通损耗,提升 E2E(端到端)的交付效率。

总的来说,PDFE 负责 “定义价值”(灵魂),而 ABE 负责 “构建确定性的约束”(骨架),两者共同构成了 AI 时代高效的研发组织形态。

人才培养的危机:崩塌的“资深工程师”之路

技术的飞跃也带来了人才断层的隐忧。过去,一名资深工程师是靠无数次 Debug 和底层模块编写磨炼出来的,那条从简单任务走向核心架构的道路正在崩塌

当 AI 承包了所有初级任务,新人失去了在实战中理解 OS、网络和底层逻辑的机会。如果计算机教育不能迅速从“教授如何编码”转向“培养系统设计洞察力”,未来可能会面临高级工程师枯竭的风险,毕业生可能沦为只会调教 AI 的“低级劳动力”。

智能体时代的人月神话

智能体工程(Agentic Engineering)通过重塑开发中的沟通模式、生产力分配和复杂性管理,在很大程度上缓解甚至“破解”了弗雷德里克·布鲁克斯在《人月神话》中提出的经典难题。

消除沟通成本的几何级增长(破解布鲁克斯定律)

传统困境:布鲁克斯定律指出,向进度落后的项目增加人力,只会使其更落后。这是因为人与人之间的沟通路径随人数 n 以 n(n−1)/2 的频率几何级增长,导致沟通成本迅速抵消新增人力带来的产出。

智能体方案:AI 智能体不需要开会、同步信息或经历人类的理解磨合。它们能够无缝地获取海量上下文,并在瞬间理解存量代码与新需求之间的逻辑关系。在智能体工程中,一个工程师可以指挥一组智能体,这种“人与机器”的协作消除了传统大团队中沉重的沟通损耗。

回归“主程序员制”(Surgical Team)模式

传统困境:布鲁克斯曾提倡“外科医生团队”模式,即由一名天才主程序员负责设计,其他人提供支持。但在传统工程中,由于人类精力和技能带宽有限,这种模式难以规模化。

智能体方案:智能体工程使得一名工程师能够真正成为“主程序员”。他负责定义灵魂(业务价值)和骨架(架构约束),而将繁琐的代码填充、单元测试编写、Bug 修复等工作交给智能体团队(即 Harness 模式下的 Agents)执行。这种模式实现了“权力高度集中,执行极度规模化”,让小团队也能完成过去需要数百人才能支撑的工作量。

大幅降低“附带复杂度”,直面“本质复杂度”

复杂度区分:布鲁克斯将软件复杂度分为本质复杂度(逻辑本身)和附带复杂度(环境配置、语法、调试工具等)。

智能体方案

AI 几乎抹平了大部分的附带复杂度。例如,原本需要数天搭建的环境或复杂的语法转换,智能体可以瞬间完成。

通过 Harness(装具)模式 中的“传感器(Sensors)”和“指导(Guides)”,工程师可以从琐碎的代码细节中解脱出来,将精力集中在解决软件的“本质复杂度”——即业务逻辑的设计和架构的稳固性上。

局限与警示:尚未终结的挑战

代码爆炸风险:AI 降低了生码成本,但也可能产生海量的“垃圾代码”,如果缺乏架构约束,会导致系统熵增和严重的代码债务

本质复杂度依然存在:虽然沟通快了、写码快了,但如果业务目标定义模糊(灵魂缺失),再强大的智能体也无法交付出有价值的软件。

总而言之,智能体工程通过将“人与人的协作”转变为“人对智能体系统的调度”,从根本上改变了软件开发的效能曲线,使得规模化交付不再受限于人力增长带来的负面效应。