智能系统的设计之道(二)

从写规则到写意图:软件工程正在发生的三次范式迁移

技术洞察2026-09-095 分钟
范式迁移函数式编程微服务声明式软件2.0智能体

摘要

第一章谈到,经典设计模式的黄昏,源于确定性世界观的崩塌。但黄昏之后,新秩序并非凭空出现——它早已在软件工程的底层悄然生长。回看过去二十年的技术演进,我们能看到三次深刻而连贯的范式迁移:计算走向原子化,系统走向解耦,逻辑走向概率化。三条线索最终汇向同一个方向:软件从“被写死的规则”变成“被表达的意图”。

第一次迁移:计算从对象走向函数

面向对象编程把世界抽象为对象,对象拥有状态与方法。这曾是伟大的进步,却也埋下了隐患:状态一旦共享,就成为耦合与错误的温床。两个模块要协作,必须先约定各自的状态如何变化;系统越大,这种“状态纠缠”越难以控制。

于是,函数式思想开始复兴。纯函数没有副作用,同样的输入永远得到同样的输出,天然可组合、可测试、可并行。计算的单位从“带有内部状态的对象”重新回到“纯粹的变换”——这并非倒退,而是一次原子化的重构:把复杂系统拆成不可再分、彼此独立的计算单元,再像管道一样串联起来。

同一时期,响应式编程带来另一重觉醒:程序不再阻塞等待结果,而是对事件做出反应。配合流式数据处理,开发者开始用另一种眼光看世界——世界不是一张静止的快照,而是一条持续流动的河流。与其费力保存世界的副本,不如订阅它的变化,让系统随世界一起流动。今天大模型的流式输出、Agent 的持续感知,骨子里都是这条哲学。

第二次迁移:系统从单体走向生态

单体应用把所有能力装进一个进程,简单直接,但任何修改都可能牵动全身。微服务把系统拆成一组通过 API 协作的独立服务——边界即契约,每个服务可以独立开发、部署、扩容。软件不再是“一座建筑”,而是一个不断生长的生态。

更关键的变化发生在“如何指挥”上。Kubernetes 用声明式 API 取代了命令式指令:运维者不再说“先启动 A,再启动 B,失败就重试 C”,而是说“我需要 3 个副本,你看着办”。系统自己负责感知期望状态与当前状态的差距,并持续弥合它。从“下达指令”到“声明意图”,这是一次控制权的让渡——而 Agent 恰恰是这条路的终点:我们告诉它的不是每一步怎么做,而是最终要达成什么。

Serverless 则把这种原子化推向极致:连服务器都隐去了,开发者只剩“函数”一种思考单位。基础设施变成公共服务,注意力全部回到业务本身。

第三次迁移:逻辑从规则走向概率

前两次迁移改变的是软件的形态,第三次迁移改变的是软件的本质。传统编程里,逻辑由人逐条用 if-else 写下;而机器学习让逻辑从数据中“生长”出来。程序员不再编写规则,而是设定目标、准备数据、划定边界——这是被称为“软件 2.0”的转折。

随之而来的问题是:概率系统的输出天生不确定,怎么保证可靠?MLOps 给出了工程答案:版本管理、离线评估、在线监控、快速回滚。模型不需要永不犯错,只需要错误可被及时发现、成本可控地修正。这套方法论正在为 Agent 时代的 AgentOps 铺路——当系统拥有自主行动能力,评估、护栏与可观测性就不仅是锦上添花,而是存在的底线。

结语:从模式到意图

三条迁移线看似各自独立,实则同构:函数与流把“怎么做”抽象掉,声明式编排把“怎么调度”抽象掉,软件 2.0 把“怎么判断”抽象掉。抽象一层层剥离,最后剩下的,是系统要达成的目标本身。

从模式到意图,是软件工程过去二十年最深刻的底色。而我们即将迎来的 Agent,正是这条脉络的必然产物:它接收意图,它自行规划,它对世界行动,它在反馈中成长。工程师的角色也随之改变——不再是规则的写作者,而是意图的设计师、边界的守护者。

以上是本文全部内容,欢迎阅读更多专题文章