标签归档:AI编程

如何打造 AI-Native 软件产品研发组织

如果一个团队真的想做 AI-Native 研发组织,第一步是改组织契约:谁可以让 AI 产出代码,谁对代码负责,什么质量底线不能退,什么流程可以砍,什么流程必须更重。

AI 现在太会写代码了,但是这就会导致一个问题:它把「产出代码」这件事的成本做到很低,低到组织里原本那些靠角色边界、流程延迟、评审机制勉强维持的质量平衡,突然失效了。

过去一个 PM 提需求,前端写页面,后端写接口,测试回归,整个链条慢,但慢本身也是一种摩擦力。现在 PM 自己就能把页面跑起来,AI 一下午能写出几十个组件,速度是上去了,但系统开始更脆弱了。

先说 AI-Native 组织不是什么。 AI-Native 组织它不是「让所有人都开始写代码」,也不是「研发岗位会被提示词工程师替代」。

它是把软件组织里的逻辑重排。

以前文档是入口,代码是结果。现在代码变成入口,文档变成派生物。 以前角色按工种切,PM、设计、前端、后端、测试各守一段。现在角色要按责任切: 谁定义业务闭环,谁维护系统护栏,谁提供稳定契约,谁为线上事故买单。

今天我们先聊组织契约,再聊角色重构,然后再把一条研发流水线拆开聊聊。

组织契约

没有组织契约,AI 进团队只会把烂流程放大。

合理预期

在某些 Demo 场景,或者脚本类场景,10 倍是一个合理的预期。 但是对于一个组织来说,10 倍是一个不科学的场景,因为在组织里面,在产品研发过程中,写代码并不是整个生产过程中最耗时的部分。

所以,我们要先摈弃一个幻觉:不要拿 10 倍产出当目标。

AI 在研发组织里的收益区间,我一直认为是 1.5 到 2 倍,高质量前提下的 2 倍。为什么呢? 因为代码生成速度和有效交付速度不是一回事。AI 能把编码阶段压缩掉一大块时间,但需求澄清、边界判断、异常处理、联调、测试、观测、回滚,这些成本不会自动消失。很多时候还会更高。

如果团队盯着 10 倍,结果一般都一样:PR 数量暴涨,代码体积暴涨,Review 质量下降,线上回归问题增加,半年后开始集中还债。这就是技术债积累速度第一次超过了团队消化速度。

所以合理预期应该写进团队共识里:我们追求的是 2 倍高质量交付,不追求 10 倍低质量代码喷射。

所有权

每个 AI 输出都必须有所有者。

谁发起生成,谁提交 PR,谁 approve merge,这中间可以分层,但最终必须落到一个明确的人身上。这个人要能够面对一句话:如果这段代码挂上你的名字,你愿不愿意负责。要是答案是否定的,这段代码就不该进主干。

这条规则听起来像废话,实际上很多团队做不到。因为 AI 会制造一种错觉:代码好像不是谁写的,是系统吐出来的。人变成了搬运工。只要团队接受这种错觉,质量就开始漂移。一个有所有权的流程大概是这样:

  • PR 模板里要求声明 AI 参与范围
  • 提交人对业务正确性负责
  • Reviewer 对工程质量负责
  • 合并人对上线风险负责

责任可以分工,但责任不能悬空。

质量顺序

质量第一,数量第二。

团队如果不显式声明这一点,默认会被 AI 拖向另一个方向:先铺功能,再补治理。这个方向对 demo 团队成立,对正式业务组织通常是灾难。因为 AI 特别擅长快速补齐显性功能,却不擅长主动建立长期维护结构。它会顺着需求走,不会替你守架构。

AI 时代必须把一些以前属于「好习惯」的东西升级为「强制门槛」,也就是我们之前经常强调的规范,流程等等,如测试、监控、CI/CD、单测等等。

  • 没有测试,不进主干
  • 没有异常处理,不进主干
  • 没有监控埋点,不进主干
  • 没有 feature flag,不上线
  • 不能被 reviewer 解释清楚的代码,不 merge

当代码供给能力暴涨时,质量约束必须同步加码,否则系统会很快从可控变成不可控。

交付代码

传统产品研发里,PRD 是上游,代码是下游。这个模型的问题大家都熟:PRD 经常过期,设计稿和实现偏移,字段定义藏在飞书文档、接口平台、聊天记录和前端代码里,最后没有一个地方是真正可靠的。

AI-Native 组织里:代码作为唯一源,文档从代码反向提取。

从代码出发

现在 PM 借助 Codex、Claude Code(最近又有同事被封号了)、Cursor 这类工具,已经可以生成带交互的页面、Mock 数据、状态流转,很多场景下甚至能直接把核心业务路径跑通。既然这样,就不要再让 PM 先写一份长 PRD,再让研发去猜什么叫「列表为空时的引导态」。让页面先跑起来,再从页面反推需求定义,效率和准确率都更高。

这里有个好处:讨论变得具体了。

以前评审会上大家讨论一句文档描述,脑子里各自渲染不同 UI。现在把页面摆出来,点击路径、字段结构、交互反馈、错误提示都变成可观察对象。对齐成本直线下降。后端也不需要看十页文字说明,只要看这个页面最终需要什么数据结构,就知道接口该怎么供给。

文档反向生成

代码是唯一真相源,不等于不要文档。让文档变成派生物,而且是自动派生物。

流程大概如下:

  1. PM 先生成并跑通前端页面,带 Mock 数据
  2. AI 从页面代码、组件 props、Mock schema 中逆向提取字段说明、交互流程、状态机描述
  3. PM 对这份自动生成的文档做人审
  4. 后端按确认后的 JSON Schema 或 TypeScript Interface 实现接口
  5. 联调时再根据真实契约让 AI 回写文档

这样处理后,文档不再是一个独立维护成本很高的系统,而是代码的视图层。它可以读给人看,但它的源头来自真实实现,而不是空想。

建议把接口契约标准化为 JSON Schema 或 TypeScript Interface

角色重构

AI-Native 组织可能会有一些角色的变更,但是也可能会裁掉一些角色,因为我们是重写角色边界。如果当前人不合适,或者适应不了,就需要换,否则就会变成打造新组织过程中的阻碍。

很多人讨论这件事喜欢走两个极端。一个极端是「以后人人都是全栈」。另一个极端是「AI 只会替代初级岗位,核心角色不变」。这两个判断都不够准确。

真正发生的变化是:低门槛生产能力下放,专业门槛上移。简单说,更多人能做出东西,但真正有价值的岗位,会向规范制定、质量兜底、系统抽象和复杂问题处理集中。

PM 变成产品工程师

在这个新组织中,变化最大的角色是 PM。

过去 PM 的主要输出物是 PRD、流程图、原型图和口头解释。现在这些东西很多都可以收敛成一个交互可运行的页面。于是 PM 的角色自然往「产品工程师」移动:他不再只描述需求,他直接构造需求的运行形态。

但这里一定要说清楚,PM 写了前端代码,不等于 PM 变成前端工程师。PM 的责任边界还是业务逻辑,不是工程治理。

PM 需要对什么负责:

  • 用户路径是否闭环
  • 页面状态是否完整
  • 文案、条件、分支、空态是否符合业务预期
  • Mock 数据结构是否表达真实业务语义
  • 生成代码是否遵守团队规定的基础组件和样式约束

PM 不需要对什么负责:

  • 全局状态架构是否优雅
  • 包体积是否最优
  • 路由切换是否引入副作用
  • 渲染性能是否达标
  • 工程抽象是否可复用

这些后者还是需要专业前端要接住。

问题不是让 PM 承担更多,而是让 PM 把过去停留在文档层的业务表达,直接推进到代码层。这样整个团队拿到的是可执行的业务定义,不是抽象说明书。

设计师变成立法者

设计角色也会变。

当 PM 可以直接借助 AI 生成页面时,设计师如果还把大量时间耗在单页面高保真稿上,投入产出比会快速下降。更有价值的位置,是维护设计系统和机器可消费的样式规范。

设计师的工作重心会变成:

  • Design System
  • 样式 token
  • Visual QA

也就是把颜色、间距、字体、圆角、阴影、组件状态、可访问性规范,从设计稿资产转化成代码和配置资产。比如 Tailwind config、CSS variables、组件规范、图标集、交互动效约束。这些东西一旦进入 AI 生成上下文,PM 或其他角色在生成页面时就不容易跑偏。

说白了,设计师从「画每一张图」转向「制定法律」。立法做得越完整,AI 和 PM 生成的页面越像一个系统,而不是一堆拼起来的截图。

前端变成守门员和重构者

前端是最容易被误读的角色。很多人看到 PM 可以生成页面,就开始下结论:前端会被干掉。实际情况通常相反。前端从体力活里解放出来之后,工程价值反而被放大了。

因为 PM 生成的页面,最常见的问题不是「长得不对」,而是「能跑但脆」。

可能会有大量这类代码:

  • 一个组件里塞满请求、状态、渲染、事件处理
  • loading、error、empty 三种状态缺两种
  • useEffect 依赖写错
  • 切页面回来状态丢失
  • 没有 abort controller,快速切换导致竞态更新
  • 表单校验只校 happy path
  • 直接把 mock 字段名写死在视图层,后续接口一改全炸

这些问题不是 PM 能解决的,也不是 AI 自己会主动解决的。前端真正的工作变成三块:

第一块,Review。
不是审美式 review,也不是找缩进。重点看稳定性、边界条件、状态管理、组件职责、可维护性。

第二块,Refactor。
把单文件逻辑拆成组件、hooks、domain service,把团队组件库接上,把状态流收敛,把重复逻辑抽掉。这个过程需要持续迭代,做到团队规范中,给到 PM 生成的上下文中。

第三块,Integration。
把 Mock 替换成真实 API,处理鉴权、缓存、错误回退、重试、并发、路由守卫、埋点、监控。

这个阶段的前端,更像体验架构师和质量守门员。

后端变成能力供应商

后端角色也会收缩:提供稳定、安全、确定性的能力边界。

如果前端页面能更快被构造出来,后端的价值就不在于「接收一份文档然后写 CRUD」,而在于把系统能力以 API 或 Tools 的形式稳定暴露出来。尤其是 AI Agent 场景下,后端实际上在扮演工具供应商。

后端重点关注四类问题:

  • 契约稳定性
  • 权限与安全
  • 幂等性与确定性
  • 可观测性与审计

前端、PM、Agent 都可能直接消费这些能力。一旦接口设计漂、错误码混乱、鉴权模型含糊,整个上层生成式开发就会持续返工。AI 会把不稳定接口的问题放大得很明显,因为它极度依赖上下文中的确定性。

流程重构

只讲角色变化不够,需要把研发流程改成适合 AI 的形状。下面是一版比较能落地。

需求具象

第一阶段,需求不再先写成长文档,而是先具象成可运行页面。

PM 独立生成前端

PM 拿着明确业务目标,直接在受控环境里生成页面代码。这个页面至少要包含:

  • UI 布局
  • 基本交互
  • 主要状态流转
  • Mock 数据
  • 核心校验逻辑
  • 空态、错误态、加载态

特别强调最后三项。很多团队让 PM 生成页面,只盯着主流程,结果页面演示时很漂亮,一联调全是坑。空态、错误态、加载态必须在这个阶段一起生成,否则后面每一轮都要补票。

禁止黑盒交付

PM 生成页面这件事,最怕黑盒。也就是只看效果图对不对,不管代码是否落在团队跑道上。

所以团队必须先准备好脚手架和护栏。比如:

  • 必须使用指定组件库
  • 必须使用既定样式 token
  • 必须遵守目录结构
  • 必须使用指定的数据获取模式
  • 必须输出可运行测试脚本
  • 必须带 feature flag 接入点

否则 PM 生成的代码看似完成任务,实际是给前端制造二次工程。

不要让 PM 从空白页面开始提示 AI,而是给一个完整的基础模板,再让 AI 在模板内填充。这个模板的价值极高,它决定了团队是让 AI 在高速公路上开车,还是在野地里乱冲。

契约握手

第二阶段,前端页面和后端能力正式握手。

前端反定义接口

以前是后端先定义接口,前端去适配。现在很多场景可以反过来:前端页面里需要什么数据结构,先自然长出来,再把这份结构抽取成契约。

这里的关键点是「自然长出来」之后,必须立刻标准化。不能停留在 JS 对象字面量和口头描述。最好直接生成:

  • JSON Schema
  • TypeScript Interface
  • 字段说明
  • 校验规则
  • 错误码预期
  • 状态迁移说明

做到这一步,后端看到的就不是「我要一个用户列表接口」,而是一个明确的数据契约:字段、类型、可空性、分页、排序、过滤、异常响应、鉴权要求,全都摆明。

这一步会明显减少沟通损耗。后端可以少看很多无效文档,直接围绕契约开发。

后端提供确定性能力

后端接手后,不建议只机械实现接口。要借这个机会把系统能力做成稳定工具层。

如果团队本身就在做 Agent 或工作流系统,这里更应该统一成 Tools 注册机制,而不是散落一地的临时 API。因为未来调用这些能力的,未必只有前端页面,还有内部 Agent、自动化流程、运营工具、甚至外部合作系统。

后端在这一阶段最常踩的坑有几个:

第一,返回结构不稳定。
今天 success 返回 data,明天又套一层 payload。前端 AI 生成代码时非常怕这个,会反复产生错误适配。

第二,错误码语义不清。
鉴权失败、参数错误、资源不存在、限流、业务冲突全都混成一种 message,联调体验很差。

第三,幂等性缺失。
AI 驱动的调用链经常会重试,如果创建类接口没有幂等控制,很容易重复写入。

第四,缺少审计。
AI 或 PM 直接驱动系统能力时,操作路径更分散,审计日志不能省。

联调瓶颈

真正的瓶颈通常出现在第三阶段:联调、测试、排雷。

到这一步,很多团队会发现:AI 把前半段提速提得很猛,但最后这段并没有自动消失,甚至更重。因为前面生成得越快,后面积累的隐患越多。

Review 的重点

前端 reviewer 在这一阶段要非常克制。不要把 review 做成审美比赛,也不要上来就要求所有代码重写一遍。真正该看的,是那些会直接影响稳定性和维护成本的问题。

我会把检查项固定成一张表,至少覆盖这些内容:

  • 异步请求是否有取消机制
  • Loading、Empty、Error 状态是否完整
  • 表单提交是否防重入
  • 路由切换是否会遗留脏状态
  • 全局状态有没有被随意污染
  • 组件职责是否过载
  • 是否接入统一埋点与异常上报
  • 是否存在明显重复逻辑
  • 是否绕过设计系统直接手写样式
  • 是否引入不必要依赖

这样做的好处是,review 从个人经验驱动变成组织标准驱动。AI 时代 PR 量会明显增加,没有标准化检查单,review 质量一定掉。

测试和验收左移

如果团队已经允许 PM 直接交付前端页面,那测试必须同步左移。否则生成速度越快,测试越像消防队。

谁生成页面,谁至少生成对应的 E2E 测试脚本。这个要求不算过分。因为页面交互路径是 PM 最熟的,AI 根据这些路径生成 Playwright 或 Cypress 脚本,命中率通常不低。

在生成代码时,PM 已经完成了第一次的验收。

测试左移不是为了把测试岗位干掉,而是为了把最贴近业务逻辑的验证提前到需求具象阶段。后面的 QA 才能把精力放在组合场景和系统回归上。

发布保险

第四阶段是发布与可观测性。这在 AI-Native 组织里是核心流程。

因为一旦允许更广泛的人群借助 AI 产出代码,线上报错率几乎一定会上升。组织必须提前接受这个现实,然后把监控和发布控制建好。

前端监控

前端监控一定要上,而且要够细。

至少需要这些能力:

  • 错误堆栈捕获
  • Source map 还原
  • 用户会话回放
  • 性能指标采集
  • 接口失败聚合
  • 版本维度对比

像 Sentry、LogRocket 这类工具的价值,在 AI 场景下会更高。因为当报错出现时,你可以把错误堆栈、用户操作轨迹、接口上下文直接喂给 AI,让它先生成修复建议,再由责任人确认。这种协作模式对定位简单问题很有效,尤其是 UI 状态错乱、边界遗漏、类型不匹配这类故障。

但不要误解成「有了 AI 修 bug 就轻松」。线上修复的难点从来不只是生成 patch,而是确认根因、评估影响面、决定是否回滚、验证是否引入新问题。这些仍然要靠工程纪律。

灰度发布

Feature Flag 在这个模式里几乎是必需品。

原因不复杂:当业务页面大量由 PM + AI 参与生成时,组织需要一个足够便宜的试错阀门。否则每次上线都把全量用户暴露在新逻辑下,风险太高。

把 Feature Flag 从「重要功能才加」提升为默认机制。尤其是下面这些场景必须强制:

  • 新页面替换旧页面
  • 新流程替换旧流程
  • 高价值转化路径
  • 涉及支付、权限、数据修改的动作
  • 首次由非传统研发角色主导产出的功能

灰度期间要明确看哪些指标,不要只看有没有报错。还要看:

  • 转化率变化
  • 页面停留时长
  • 关键按钮点击率
  • 表单提交成功率
  • 接口失败率
  • 用户退出路径

这些数据能帮助团队判断问题究竟出在代码稳定性,还是业务交互本身。

基建先行

前面这些流程能否跑起来,核心在于基建。没有基建,AI-Native 组织会迅速退化成提示词手工作坊。

可以先建三类基础设施。

护栏脚手架

这是第一优先级。

它包括:

  • 项目模板
  • 目录规范
  • 统一组件库
  • 设计 token
  • 数据获取封装
  • 表单与校验约定
  • 埋点和监控 SDK
  • 测试模板
  • CI 预设规则

这套东西是整个组织 Harness 的部分。

Prompt 资产

很多团队低估了 Prompt Library 的价值。实际上,当非工程角色也开始产出代码时,提示词模板本身就是组织资产。

可以把高频场景沉淀成标准模板,比如:

  • 列表页生成模板
  • 表单页生成模板
  • 详情页生成模板
  • 多步骤流程模板
  • 异常状态模板
  • E2E 测试生成模板
  • 文档反向提取模板
  • 重构任务模板

这些模板不是为了追求文风统一,而是为了把团队积累的工程约束嵌进去。你希望 PM 每次生成页面都自动包含 loading、error、empty、feature flag、埋点、测试入口,那就别靠口头提醒,直接写进模板。

CI/CD 闸门

AI 时代,CI/CD 不能只是跑个 lint。它必须承担质量闸门职责。

最低限度我会要求:

  • Lint
  • Type check
  • Unit test
  • E2E smoke test
  • Bundle size 检查
  • 安全扫描
  • 依赖合规检查
  • 自动化预览环境
  • 灰度发布流水线
  • 一键回滚

如果团队现在连这些都没有,先别急着搞 PM 交付前端代码。真把口子放开了,组织会先被事故教育一遍。

常见误区

这是几个最常见的误区。

把 AI 当外包

这是第一类坑。很多团队使用 AI 的方式,本质上和用廉价外包没区别:把需求甩出去,拿回代码,自己不理解也不维护。

这个模式短期可能看起来很省,长期一定出问题。因为系统复杂度没有消失,只是被包进了你看不懂的代码里。等线上出事,你会发现团队没有形成任何新的内生能力。

只提速前半段

第二类坑是,只提速需求到页面这一段,不提速后面的治理、测试、发布、观测。结果就是项目看板前面一片绿,最后两列全堵死。

AI 会把组织瓶颈照得更亮。以前慢慢暴露的问题,现在两周就能堆出来。你不改后半段流程,前半段越快,堵得越严重。

容忍脏代码,也容忍脆弱代码

我能接受 PM 生成的代码不够优雅。变量命名一般、文件拆分普通、抽象层次一般,这些问题都能后续治理。真正不能接受的是脆弱代码:没异常处理、没监控、没测试、状态流断裂、提交会重复、接口失败直接白屏。

脏和脆是两回事。组织必须把这条线划清楚。

用 AI 替代判断

第四类坑最隐蔽。团队开始迷信 AI 给出的架构建议、重构建议、性能建议,仿佛它给出了答案,工程判断就可以省掉。

这是错的。AI 非常适合提供候选方案、加快实现、缩短试错周期,但它不拥有系统上下文,不承担线上责任,也不会为半年后的维护成本买单。架构判断、边界判断、风险判断,最终还是人做。

最后

如果一定要用一句话概括我对 AI-Native 软件研发组织的理解,那就是:把代码生产普遍化,把工程责任集中化

前者意味着更多角色可以直接参与构造软件。PM 可以交付可运行页面,设计可以把规范直接编码,后端可以把能力做成工具供全组织消费。后者意味着系统质量不能民主化。责任必须更清晰,护栏必须更强,发布必须更克制,观测必须更细。

「PM 交付前端代码」这件事很容易被包装成一个新故事。真落地时,它首先是工程纪律问题,然后才是工具问题。团队如果没有建立所有权,没有把代码当唯一真相源,没有把契约、测试、监控、灰度这些基础设施补齐,这条路大概率会走成一场持续返工。

反过来,如果这些条件具备了,AI 确实会把组织推到一个新阶段。PRD 不再是那份总会过期的文档,代码本身就是需求表达。角色不再围着工种转,而是围着责任和系统边界重组。研发流程不再把大量时间浪费在翻译需求上,而是更早进入真实问题:契约、质量、异常、性能、发布。

这才是我理解的 AI-Native。

以上。

AI 编程狂飙的时代,程序员的价值在哪里?该走向何方?

最近新上了 Opus 4.6 ,它又给我们这帮老程序员上了一课。

在一个近一年没有迭代(指没有被封)的程序员群里,有大佬分享了如下的案例:

团队有个复杂遗留系统,典型「多线程 + 历史包袱 + 不敢动」组合。模型先给了一个方案:加锁、等待、条件变量、再加一层保护,几百行代码,逻辑像一团湿毛线。能跑,理论上也对,但你让我把这玩意儿上线?我不敢。

我让它「再想想,能不能避免这些锁和等待」。它又跑了很久,最后给了一个极简方案:之前那些锁啊等待啊都删了,思路干净到让我怀疑它刚才在干嘛。

那一刻我脑子里冒出来的不是「AI 真强」,而是一个更别扭的问题:

我到底起了什么价值?

背景上下文?它从代码库里能 infer 掉绝大多数。设计约束?很多也能从调用关系、线程模型、运行时指标推出来。所谓「design taste」?我甚至可以写成 Markdown 规则让它照做。

过去资深开发的硬价值之一是 reasoning 的过程:拆问题、找不变量、选折中、落地细节。现在模型也能做,还能做得很快。

我绕了一圈,最后落在一个很不体面的结论上:人的价值被压缩到极小概率的「否决权」里

99% 的时候,我是在给 AI 的解「盖萝卜章」:嗯,看起来没错。
剩下那 1% 的时候,我得站出来说:不行,这条路走不通,换解空间里的另一个点。

这个角色像保险。你买的时候就知道大概率用不上,但真出事的时候要能扛住。更像现在的 L2-L4 自动驾驶:人坐在方向盘前,99.9% 的时间无事可做,为了那 0.1% 的「可能发生也可能不发生」。

问题来了:这 1% 会不会也被另一个 agent 替掉?再给一个「专职 reviewer」去 challenge 写代码的 agent,让它把那 1% 找出来。

那人还剩什么?

以及这会把程序员的岗位推向哪里。

很多讨论卡在「AI 写代码快,所以程序员要失业」这种口号里。工程上更真实的变化是两条曲线的剪刀差:

  • 代码生成成本下降得很快:写一段能跑的实现、补齐样板、迁移接口、写单元测试骨架,这些都接近「文本补全」。
  • 承担后果的成本上升:上线事故、性能回退、并发死锁、数据一致性破坏、合规风险、供应链安全。AI 让改动频率变高,系统的「变更面」变大,出事概率跟着涨。

我现在看 AI 产出的 patch,经常有一种荒诞感:
改动本身很漂亮,解释也很漂亮,真正要命的点藏在「系统级不变量」里,而那部分恰好最难被 prompt 描述清楚,也最难被静态检查覆盖。

所以讨论「程序员价值」别从「写代码」切入,从「为系统负责」切入。写代码只是责任链条里最便宜的一环。

聊回到前面大佬分享的案例。

为什么模型会先给「复杂加锁方案」,再给「极简方案」

这不是模型「变聪明了」,更像搜索策略切换。

我自己复盘过很多次类似现象,模型第一次给复杂方案,常见原因有几类:

  • 目标函数不清:模型默认把「不出错」权重大幅拉高,并发问题里,模型的默认倾向是「保守」:能锁就锁,能等就等。因为它无法确认你的系统允不允许重构线程模型,也不知道你能承受多少延迟和吞吐损失。一句「能不能避免」其实是在改目标函数:把「简单性」和「可维护性」的权重抬起来,把「局部可证明正确」的偏好压下去。

  • 它没拿到关键不变量:并发优化的核心不是技巧,是不变量。例如:哪些数据必须线性一致,哪些允许最终一致;哪些操作必须串行化,哪些可以交换;线程间共享状态的「所有权」到底属于谁;是否存在天然的「单 writer」路径。模型第一次通常拿不到这些,它会用锁把未知包起来。你追问一次,相当于逼它去反推不变量,或者提出重构以创造不变量。

  • 在「局部最优」里打转:遗留系统经常有局部约束:你动不了某个模块,改不了调用方,不能引入新队列,不能改变线程亲和性。

人的价值最终会被压到 1%

这事已经发生了。

如果把「写实现」交给模型,人还剩什么?

我现在更愿意把角色拆成四层,分别看哪些会被自动化吃掉:

  1. 执行层:写 CRUD、搬接口、补样板、按规范改文件结构
    这层基本被吃穿。
  2. 局部推理层:读一段代码、定位 bug、做局部重构
    这层大幅被压缩,速度优势在模型。
  3. 系统推理层:跨模块不变量、性能上界、故障模式、发布策略、回滚路径
    这层短期很难完全自动化,原因是信息不完备且目标冲突。
  4. 责任层:线上事故谁背、合规谁签、业务损失谁扛
    这层本质是组织结构问题,不是智能问题。

很多资深工程师过去主要靠第 2 层吃饭:你会拆、会想、会写出「更优雅」的实现。现在模型把这层的边际价值压得很薄,于是人的价值看起来就剩「在模型犯错时否决」。

这就引出一个很工程的问题:能不能用另一个 agent 把「否决」也自动化?

答案是:能覆盖很大一部分,但永远留洞。洞的大小取决于你怎么搭系统。

那 1% 到底是什么:哪些场景必须有人类 override

我现在把「必须 override」的场景分成几类,每一类都对应一套工程信号。我们可以用这些信号去训练 reviewer agent,也可以用来提醒自己别当「只会点 approve 的人」。

  • 需求语义存在空洞,代码再正确也没意义:常见现象: PR 描述是「修复偶现 bug」,但没有可复现条件,没有失败判据;业务方说「按之前逻辑」,但「之前逻辑」存在灰度分支、历史例外。这类问题 AI 很难凭空补齐。它会把空洞当成「默认值」,然后写出一份自洽的实现。你看起来也挑不出毛病,直到线上行为偏了。override 的动作往往不是改代码,而是卡住合并,逼需求补齐验收条件和反例。
  • 系统级不变量被破坏,局部看不出,全局会炸:典型不变量:

    • 计费、库存、资金流的幂等与去重
    • 订单状态机的单向性
    • 写路径单 writer,读路径可并发
    • 缓存一致性策略:写穿、失效、双写窗口
    • SLA 约束下的超时与重试预算

模型能理解这些词,但它很难知道「你们公司真实的不变量是什么」。很多不变量写在事故复盘里,写在某个老同事的脑子里,写在那段「不要动」的注释里。

override 的动作通常是把不变量显式化:写进 ADR(架构决策记录)、写进测试、写进发布 checklist。写完再让模型改。

  • 代价函数冲突:延迟、吞吐、成本、可维护性互相打架这些对尾延迟很要命。你让它「简单化」以后,它可能会走向另一个极端:过度重构,侵入面太大,风险高得离谱。这类冲突靠 prompt 很难一次调对,得靠基准测试 + 真实流量回放。人类 override 的价值在于:你知道线上哪条曲线最敏感,知道预算是多少,知道哪里可以牺牲。

  • 生产环境的「脏现实」:测试覆盖不到 包括但不限于:

  • 时钟漂移、时区、闰秒
  • 依赖服务的抖动、限流、半开连接
  • 数据脏写、历史脏数据格式
  • 热点 key、倾斜分片、长尾用户行为
  • 灰度期间的双版本共存

AI 可以写出很干净的逻辑,干净得像从未上过线。

人类 override 的价值在于:你知道哪些脏东西真实存在,知道一旦触发会损失多少钱。

  • 安全与合规:模型会「帮你越线」

安全问题里最阴的是「看起来像优化」:

  • 为了排查问题把敏感字段打进日志
  • 为了方便把权限校验挪到上层,结果漏掉某些调用路径
  • 为了提高命中率调整缓存 key,结果造成跨租户数据串读

这类问题 reviewer agent 能抓一部分,靠规则匹配和数据流分析。但组织里真正要命的合规约束往往来自外部:合同、监管、审计口径。模型很难内建你们的合同条款。

只留了 1%,那么大公司删人游戏才刚开始,接下来组织会怎么变?有前司裁员了一半。

AI 带来了两件具体的事:

  • 单位时间的变更量上升
  • 对稳定性与合规的要求不会下降

组织会自然把资源往两端挤压:

  • 一端是「产出变更」的能力:更少的人能产出更多 patch
  • 另一端是「控制风险」的能力:测试、发布、SRE、安全、平台工程会更吃香

中间那层「靠手写实现体现资深」的位置,会被挤得很难受。我们会看到更多岗位变成:

  • 平台/工具链负责人
  • 质量与发布工程负责人
  • 架构与技术治理(不变量、规范、依赖治理)
  • 领域负责人(把业务语义写成可执行的约束)

如果还把价值押在「我写得快、我写得优雅」,会被模型直接碾过去。

那我们该何去何从?

我更建议把自己训练成「系统负责人」,别训练成「提示词手艺人」

很多人看到 AI 就去卷 prompt。prompt 当然有用,但它属于「表达能力」,不属于「护城河」。

我更建议把成长路线拆成三条,按你自己的背景选一条主线,另外两条补短板。

路线 A:系统与可靠性(适合后端、架构、TL) 要能回答这些问题:

  • 这个系统的核心不变量是什么?写在哪里?谁维护?
  • 出了事故,最可能的故障模式是哪几类?怎么提前打点?
  • 一次改动上线,回滚点在哪里?数据怎么保证不被写坏?

这条路线的硬技能是:可观测性、故障注入、容量规划、发布治理、数据一致性策略。
AI 会让这条路线更值钱,因为改动变多,风险更高。

路线 B:平台与工具链(适合喜欢搞基建的人) 把「盖章」自动化掉。

要能把下面这些做成产品:

  • 代码生成与改动的规范化输入(任务模板、约束模板)
  • 自动化评审(多 agent + 规则 + 静态分析 + 安全扫描)
  • 针对你们域的测试体系(尤其是并发、回归、流量回放)
  • 一键灰度、一键回滚、发布可视化

这条路线的本质是:把工程经验固化成流水线能力。模型越强,平台越重要。

路线 C:领域语义与业务工程(适合对业务理解深的人) AI 最弱的地方之一是「公司特有的业务语义」。能把语义变成约束,价值就会变硬。

要能做的是:

  • 把业务规则写成状态机与不变量
  • 把验收条件变成测试与监控
  • 把历史例外收敛掉,减少「口口相传」

这条路线听上去不像「技术」,但在 AI 时代,它会决定你是不是不可替代的那批人。

我不押「永远需要人」这种安全说法。我更愿意给一个工程化的判断:

  • 在约束清晰、环境封闭、回滚容易的系统里,人类接管的概率会持续下降。很多内部工具、数据管道、非核心链路会率先做到「几乎无人值守」。
  • 在约束隐含、环境开放、后果昂贵的系统里,1% 会长期存在。典型是资金、合规、核心交易链路、跨组织协作系统。这里的问题从来不只是智能,还包括责任与审计。

更关键的一点:就算模型能覆盖 99.99%,组织也未必允许完全无人。原因很现实:责任链条需要一个签字的人。

我写到这里,还是没法给一个让人舒服的答案。AI 把很多我们曾经引以为傲的能力变成了廉价品,这是事实。难受也正常。

但工程世界一向认结果。模型写得再快,只要系统一炸,组织就会把注意力拉回到「谁能把它跑住」。把自己训练成能跑住系统的人,价值就不会跟着 token 价格一起下跌。

以上。

AI 编程:程序员变成了程序指导员

去年 Vibe Coding 突飞猛进,AI 编程已经逐渐普及。 很多团队对于写代码这件事的定义开始有一些变化。变化在于产出代码的方式:越来越多的代码来自模型,程序员更多时间花在和模型聊天,把问题说清楚、把边界卡住、把结果验明正身。

我愿意称之为「程序指导员」。写代码仍然在发生,但我们的动作从「逐行敲」转到「聊天与校验」。

1. 程序指导员在做什么

把一段需求交给 AI,得到一段能跑的代码,然后多聊几句,一个功能就完成了。但是这个功能是不是可维护、可上线、可回滚、可观测、可审计,就不太确定了。

程序指导员的核心工作通常包括这几件事:

  1. 把需求翻译成可执行的任务
    需求里混着业务语言、边界条件、历史包袱、隐含约束。模型的信息中这些可能是缺失的。我们要先做一次结构化翻译:输入是什么、输出是什么、失败怎么处理、性能底线是什么、兼容范围是什么。

  2. 把任务拆成模型能稳定完成的块
    一次性让模型写完一个完整功能,也可以,让 CC 多跑一段时间,但成功率不稳定。更稳的方式是拆成小块:数据结构、接口定义、核心逻辑、错误处理、测试、文档、迁移脚本,各自生成、各自验证,然后再组装。这种方式让我们更有掌控力,知道发生了什么,过程可控。

  3. 给足约束,减少「自由发挥」空间
    约束要可检验:必须用现有依赖、必须兼容某版本、必须遵守公司日志规范、必须不新增公网访问、必须在某条 SLA 内、必须覆盖某些用例。

  4. 验收与兜底
    模型会给出看起来合理的实现,也会在边界上“编”。程序指导员要像做 code review + 测试负责人那样工作:读关键代码、跑测试、补测试、压测、看日志、看回归风险、看安全风险。最后要能回答一句话:这段代码出问题,谁来修、怎么定位、怎么回滚。

这套工作方式和当前的 CC 一把梭相比,并不先进,甚至有些落后。

和以前相比,以前也有模板代码、脚手架、复制粘贴、搜索引擎。不同点在于:AI 把「生成」能力推到台前,生成速度极快,错误也更隐蔽,导致「指导与验证」的权重被迫上升。

2. 变了什么

2.1 输入从「代码」变成「任务说明书」

以前的输入主要是我们写的代码和我们改的代码。现在多了一种主要输入:我们写给模型的任务说明书。

这份说明书的质量,直接决定产出质量。写得好,模型像一个执行力强的中级工程师;写得差,模型像一个自信的实习生。

说明书里最重要的内容通常包括:

  • 目标:要解决什么问题,做到什么程度算完成
  • 环境:语言版本、框架版本、已有目录结构、现有依赖、运行方式(一般在规则上下文中给出)
  • 接口:入参、出参、错误码、异常策略、幂等、重试、超时
  • 约束:性能、资源、兼容、安全、合规、日志、监控
  • 验收:必须通过哪些测试,用哪些样例验证,输出应满足哪些断言

把这些写清楚,能把 80% 的返工挡在模型生成之前。

2.2 工作节奏从「连续编码」变成「短回路迭代」

传统编码经常是长回路:写一段、跑一遍、再改。AI 编程的高效来自短回路:AI 生成完成,自动编译构建,自行测试,然后马上验收,发现偏差、立刻补约束再生成。

短回路的关键在于每一轮都要带着明确的失败信息回去:哪条测试挂了、哪个接口不对、哪个边界漏了、哪个依赖版本冲突。模型对这种「可定位的反馈」反应更稳定。

2.3 代码量不再是效率指标

代码生成变快之后,代码量会失真。以前一个人一天写 500 行算多,现在模型十秒能吐 500 行,一天几千行可用的代码随随便便。

更有意义的度量指标会转向:

  • 需求到可用版本的周期
  • 线上缺陷率与回滚率
  • 变更影响范围(改动越小越好)
  • 可维护性(复杂度、重复度、依赖扩散)
  • 测试覆盖与回归效率

如果团队还用「写了多少行」「提了多少 PR」来衡量,会很快走偏:大家都能刷产出,系统质量却下降。

2.4 「看懂代码」变得更重要

模型写的代码往往「像那么回事」,也可能更长、更绕、更喜欢堆抽象。程序指导员必须能快速识别几类问题:

  • 关键路径上不必要的复杂度
  • 隐性性能问题(多余的拷贝、无界缓存、低效循环)
  • 错误处理缺失(吞异常、错误码混乱、重试风暴)
  • 并发与资源泄漏(锁、连接、文件句柄)
  • 安全问题(注入、越权、敏感信息日志、依赖风险)
  • 与现有系统契约不一致(字段含义、时序、幂等等)

以前也需要这些能力,但当代码产出速度暴涨时,「看懂与筛掉问题」的能力会直接决定我们能不能把速度兑现成质量。

3. 没变什么

变化再大,有些东西一直没变,而且变得更值钱。

3.1 对业务的理解仍然是门槛

模型可以补全语法、补齐样板、生成测试,但它很难替我们承担「业务正确性」。尤其在边界条件、例外流程、历史债务、灰度策略上,错误经常不是编译错误,而是业务事故

谁最懂业务,谁最知道「哪些地方不能动」「哪些数据不能算错」「哪些流程不能重试」,谁就更能驾驭 AI 编程。

换一个大家更常用的词语,就是领域知识要在线,否则错了你也不知道错了。

3.2 系统设计能力仍然决定上限

模型擅长在给定结构里填充实现,不擅长从零做合理设计。系统边界怎么划、数据怎么流、接口怎么稳、状态怎么管理、失败怎么收敛、观测怎么做,这些决定了系统能不能长久演进。

如果把“设计”也交出去,模型会给一个看似完整的方案,但常见问题是:

  • 组件拆得漂亮,运行链路混乱
  • 过度抽象,改一处牵一片
  • 忽略现有基建与规范
  • 缺少可观测与运维视角

当然,这些问题都可以通过提示词来解决,不过对于系统设计的认知还是需要我们来把握,至少我们得知道什么是好什么是坏。

系统设计这件事,仍然需要人来负责,并且要更早介入。

3.3 责任边界没有变化

代码是模型生成的,并不改变责任归属。线上出了事故,审计追责、复盘改进、长期治理,仍然落在团队身上。

在群里看到一个消息,最近有一个团队 AI 生成的导致线上数据全部被覆盖,团队绩效今年基本和他们没有关系了。

所以「让模型写」不是免责理由,反而要求流程更严:评审、测试、灰度、回滚、监控、告警、应急预案,一个都不能少。

4. 程序指导员需要哪些基础认知

4.1 对模型能力边界的认知

模型的强项:

  • 快速生成代码、接口定义、CRUD、数据转换
  • 根据已有代码风格补齐实现
  • 生成测试用例框架、mock、基础断言
  • 把自然语言需求翻译成「看起来像」工程方案

模型的弱项:

  • 对真实业务语义的可靠理解(尤其隐含规则,,因为其没有上下文,甚至有些隐含规则我们自己也没有意识到)
  • 对运行时约束的自发遵守(性能、资源、稳定性)
  • 对项目历史约定、隐性依赖的自动继承
  • 对安全与合规的默认正确
  • 对「细微但关键」的一致性(字段含义、状态机、时序)

程序指导员要把弱项当成默认风险。

4.2 任务拆解能力

拆解不是把大需求拆成很多小需求就结束了,而是拆成“可验证”的单元。

可验证的含义是:
每一块都能用编译、单测、静态检查、契约测试、跑一段 demo 来确认对不对。

拆解时常见的顺序:

  1. 先定接口与数据结构(契约优先)
  2. 再做核心逻辑(关键路径先跑通)
  3. 补错误处理与边界(把失败收敛)
  4. 加测试与观测(让后续修改可控)
  5. 最后做重构与清理(收敛复杂度)

这个顺序能减少返工,也更适合把生成结果分段纳入工程体系。

4.3 约束表达能力

约束要写成「可执行」的规则。

常见可执行约束:

  • 依赖:禁止新增依赖;必须使用项目已有库
  • 版本:必须兼容某版本运行环境
  • 性能:某接口在某数据量下耗时上限
  • 幂等:重复请求的处理方式
  • 日志:必须打哪些字段;禁止打印哪些字段
  • 错误:错误码范围;异常抛出策略;重试策略
  • 兼容:老接口字段不可删;新增字段默认值策略
  • 安全:输入校验、权限校验、敏感信息处理

当我们把这些写清楚,模型就可以更规范的交付了。

4.4 验证习惯与测试能力

验证还是要靠工程化手段。

最低配置的验证链路:

  • 静态检查:lint、类型检查、依赖扫描
  • 单元测试:关键逻辑与边界条件必须有断言
  • 集成测试:接口契约与关键链路
  • 回归策略:哪些模块必须跑全量,哪些可抽样
  • 观测:日志、指标、链路追踪的基本补齐
  • 灰度与回滚:发布策略与开关方案

把这些链路搭好,AI 才能变成稳定的生产力工具。否则它更像一个加速出错的发动机。

5. 小结

程序员变成程序指导员,不是职位变了,是工作重心变了:写代码的时间变少,把问题讲清楚、把系统守住、把风险挡住的时间变多。

最近阿里出来的 P10 毕玄,在其创办的公司贝联珠贯中宣布不再按传统的专业分工,所有的人都叫 Agent 全栈工程师。

我想象中的团队也是这样,通过合并工种,减少沟通,让 AI 发挥出更大的价值。

在做这些之前,我们需要问一下自己三个问题:

  • 我们的验收标准有没有变得更清晰
  • 我们的测试与观测有没有跟上生成速度
  • 我们有没有把隐含知识变成显性规则

答案越清楚,AI 带来的就越接近真实效率。否则只是把编码速度提上去,把返工和事故也一起提上去。

以上。