Skip to content

Latest commit

 

History

History
59 lines (34 loc) · 5.78 KB

File metadata and controls

59 lines (34 loc) · 5.78 KB

Human judgment doesn't leave the software factory. It relocates.

TL;DR

软件工厂将重复编码交给 AI,但人类判断并未消失,而是被重新定位到定义意图、设计系统、设定质量门槛、解读验证和最终上线负责。验证不是越多越好,认知带宽有限,需动态调整自主性并保留人类所有权。代码能上线,仍需人的品味与责任。

Summary

这篇文章的核心观点是:随着 AI 代理(agent)和自动化软件工厂的普及,人类的判断力并没有从软件开发中消失,而是被重新定位到了更关键的位置——从亲手编写代码,转移到定义意图、设计系统、设定质量门槛、解读验证结果、以及最终对上线负责。

作者 Addy Osmani 结合自己的实践,解释了什么是软件工厂、什么时候需要它、人类在其中扮演什么角色,以及如何避免自动化带来的新陷阱。

什么是软件工厂?

软件工厂就是一个围绕软件开发工作的可重复循环。它把任务从来源(比如 GitHub issue、Slack 消息)中取出来,交给 AI 代理去实现、测试、提 PR,并在这个循环中加入人的介入点。和直接使用 Claude Code 或 Codex 这样的编码工具相比,软件工厂更强调“事件驱动”和“可重复性”,适合需要同时处理大量任务、并且要求行为一致性的场景。

但作者强调,很多人其实并不需要马上搭建一个完整的软件工厂。普通的编码工具配合多个会话、好的规格说明和约束条件,已经能走得很远。只有当工作量大到需要排队、需要隔离云环境、需要避免多个代理互相抢占任务时,工厂才变得有价值。

人类的判断去哪儿了?

作者提出,在软件工厂中,人类的参与并没有被消除,而是被重新分配到四个环节:

  1. 塑造(Shape):在任务开始前,明确产品意图、系统设计、质量门槛。
  2. 引导(Steer):在代理执行过程中,进行方向修正、提供额外上下文。
  3. 交接(Handoff):当代理遇到阻塞或需要人工决策时,把任务连同状态和上下文交给人类。
  4. 批准(Approve):最终决定是否可以合并、上线。

过去,人类可能要阅读每一行代码;现在,代码生成量太大,人类不可能全部阅读。更合理的做法是把注意力集中在自动化信号最弱、风险最高、最需要品味和判断的地方,比如产品设计、架构选择、安全边界、以及对验证结果是否可信的判断。

验证不是越多越好

软件工厂会运行大量检查:类型系统、测试、变异测试、安全扫描、lint 规则等等。但作者提醒,检查的数量不等于质量。你需要实验哪些检查能提供最好的信号噪声比,并故意收紧或放松约束。验证预算就像性能预算一样:快速确定性的检查(如 lint、类型检查)尽早运行,重型检查(如浏览器测试、变异测试)放在后面。真实测试不能被摘要代替,但也不需要每一步都跑全套。

此外,绿色的测试也可能具有误导性。代理可能会通过修改断言或偷偷改变行为来让测试通过,而不是真正满足意图。因此,在工厂搭建初期,人类需要密切关注验证是否真的在验证该验证的东西。

认知带宽不会随代理数量扩展

虽然可以并行启动几十、几百个代理,但人的认知带宽是有限的。这会产生“理解债务”(comprehension debt)——代码生成的速度超过了人类理解的速度。作者分享了自己经历:他合并了一个收藏功能,测试通过、浏览器里看着也正常,但几天后想调整时,却发现自己已经无法解释这个功能是怎么工作的。代码保留了决策,但没有保留决策的原因。

解决方法之一是让代理记录其轨迹、决策理由和所学到的经验,供以后查阅,而不是依赖会话历史或自己的记忆。

运行分类与信任

作者参考 Vercel 的做法,把每次运行分为四类:成功有缺陷(实现了错误的东西)、阻塞(缺少凭据等环境问题)、手动(需要人工决策的边界)。只有“成功”才上线,其余重新进入系统。但这还不够,还需要记录每个阶段的时间,才能知道一次“有缺陷”的运行到底花了多少成本才发现问题。

另外,手动运行并不是工厂停下就算结束,而是要确保人类知道下一步该做什么——交接必须清晰。

自主性不是一个固定设置

验证可以换取信任。如果某个项目上,大量的检查都通过了,而且人类也复核过,那么下次类似任务就可以给代理更多自主权。自主性应该随风险和验证效果动态调整,而不是对所有项目一刀切。

所有权不会消失

最后,作者强调:即使人类亲手写的代码比例大幅下降,人类的所有权也不应该下降。仍然需要有人选择问题、选择架构、设定质量门槛、决定哪些验证信号值得信任、决定何时证据充分可以上线。当系统出问题时,“是代理写的”不能成为借口。

因此,软件工程的未来不是“人类退出循环”,而是人类判断被重新定位。最好的软件工厂不是完全消除人类参与,而是智能地放置人类参与——把确定性、重复性的部分交给机器,把需要上下文、品味、风险和长期责任的部分留给人。

总结一句话:代码足够好可以上线,仍然需要人的品味和所有权;人类判断没有离开软件工厂,它只是搬了家。