软件的历史就是不断把工作交给机器的历史。我们最初把指令打在卡片上,后来让编译器把可读的语言转换成机器代码,再后来让虚拟机忘记我们究竟运行在哪台物理计算机上,最后让云彻底忘记"机器"这个概念本身。每一步在当时看起来都像是放弃控制权。但实际上每一步都是向上迈了一个层级——用一层苦劳换来一层杠杆。智能体化开发是这条长线上的下一步,而且是比大多数人想象中更大的一步。
抽象一直是这个故事的主线
之前的每一次转变都没有让程序员失业,它们只是改变了程序员一天的时间花在哪里。编译器没有终结编程,它终结的是手写汇编。云计算没有终结运维,它终结的是自己上架服务器。每当机器吸收了下面一层,人类就移动到上面一层——从管理内存到管理逻辑,从管理服务器到管理系统。
这个模式如此一致,几乎可以称为一条规律:任何变得容易自动化的东西,都不再是价值所在,价值会转移到当下最稀缺的那一层。长久以来,最稀缺的是"实现"——把意图变成能运行的代码。而这正是智能体如今正在吸收的那一层。
智能体是同事,不是更快的自动补全
一个诱人的错误是把编程智能体归类为"更好的自动补全"。它们是完全不同的东西。自动补全是替你把句子写完;而智能体接受一个目标并对其采取行动——在你设定的边界内,决定要改什么、怎么改,然后动手去做。与其说它是一个更聪明的键盘,不如说它更像是一位恰好住在代码仓库里的同事:你给它一个 issue,它就离开去工作,回来时带着一个 merge request。
这正是我们打造 TaskGoblin 的方式。它不是编辑器里的一个面板,而是你团队已经在用的工具里的一名队友——被分配 issue、在讨论串中被提及、审查 pull request——它在沙盒(sandbox)中完成实现工作,然后把可供你审查的成果交回来。交互的基本单位不是一次按键,而是一项任务。
一天的工作开始变成什么样子
沿着这个方向再往前一步,工作日的形态就会改变。没人愿意做的依赖升级会在一夜之间完成。不稳定的测试会在站会(standup)前就被清理掉。一个描述清晰的功能会以草稿 pull request 的形式出现,脚手架代码和测试都已就绪,等待的是判断而不是敲键盘。产品经理(product manager)移动一张工单,等任何人再看时,变更的第一个版本已经打开了。那条苦劳的传送带——占据了工程师一周中大量不起眼但必要的工作——终于开始放慢速度。
剩下的正是那些一直以来才算真正的工作:决定应该构建什么,察觉那个看似显而易见的实现方案在哪里悄悄出了错,持有任何原始能力都无法提供的品味与语境。工程师从"作者"变成"编辑"——从产出每一行代码,变为指挥产出什么,并裁定它是否正确。
问题从"我们能做到吗?"变成"我们该不该做?"
当实现变得便宜又快速,真正的约束就不再是你能不能构建某样东西,而是它是否值得构建。迭代变得足够便宜,设计评审开始转向探索式——试三个版本,而不是为一个版本争论不休。一支小团队可以拿出规模大得多的团队才有的产出,因为人均杠杆提高了。竞争优势也随之转移:不再是谁能执行,而是谁有品味知道该执行什么,谁有共情理解这是为谁而做,谁有足够的清晰度把问题表述得让智能体能够直接展开工作。
这就是喧嚣之下真正的重新定位。"我们现在都只是在管理一群初级开发者(junior dev)组成的蜂群"是焦虑版本的说法;更真实的版本是,杠杆转移了,稀缺的技能也随之转移——向上,转移到判断力。
人类留在了哪里
一个诚实的未来版本不会假装人类会消失。恰恰相反:随着机器吸收了实现工作,人类的决策变得更加举足轻重,而不是更少,因为每一个决策如今驱动的产出都远比以往更多。这正是 TaskGoblin 刻意让人类留在合并(merge)环节的原因——智能体负责编写代码、审查变更,但它从不批准,也从不合并。判断某样东西对这个系统、在此刻是否正确,恰恰是无法被自动化的那一层,也是我们所有人正在向上迁移到的那一层。
传送带正在放慢速度。决定谁将塑造软件下一个时代的,不会是谁能实现——机器正在接管这一层,就像它接管了下面的所有层级一样。真正起决定作用的,将是想象力、品味,以及把这一切能力对准真正值得构建的事物的判断力。