关于AI场景下程序员的核心能力和职业方向的对话
用户:在过去,软件工程把产品经理和程序员分隔来了,让产品经理去专注处理需求、给出需求文档,程序员负责把需求落实到代码层面,完成抽象需求进入程序设计里,完成需求落实到程序设计的统一概念里。程序员的这部分工作应该怎么描述更准确。
我:这个问题涉及软件工程中的角色分工和术语定义,我来帮你梳理一下。
程序员这部分工作的准确描述
你描述的是程序员将抽象需求转化为具体技术实现的过程,在软件工程中有几个更精确的术语:
1. 软件设计 (Software Design)
最通用的说法,包含:
- 概要设计/架构设计 (Architectural Design):确定系统整体结构、模块划分、技术选型
- 详细设计 (Detailed Design):具体模块的内部逻辑、数据结构、接口定义
2. 技术实现 (Technical Implementation / Implementation)
强调将需求文档转化为可运行代码的完整过程,包括:
- 理解并分析需求(Requirements Analysis)
- 设计技术方案(Solution Design)
- 编码实现(Coding)
- 单元测试(Unit Testing)
3. 需求工程中的”需求规格说明”→”设计规格说明”转换
在需求工程理论中,这属于:
- 从问题域 (Problem Domain) 到解域 (Solution Domain) 的映射
- 产品经理输出 SRS (Software Requirements Specification,软件需求规格说明书)
- 程序员输出 SDS (Software Design Specification,软件设计规格说明书) 并编码实现
4. 更具体的术语
| 术语 | 侧重点 |
|---|---|
| 详细设计 | 模块内部的算法、数据结构、接口 |
| 领域建模 (Domain Modeling) | 将业务概念映射为代码中的对象/模型 |
| 系统架构 (System Architecture) | 高层技术结构、组件关系 |
| 实现 (Implementation) | 编码和构建的具体工作 |
一句话总结
程序员的核心工作是 “将需求规格转化为设计规格,并通过编码实现为可运行的软件系统” —— 这个过程统称为 软件设计 或 技术实现,本质是完成从问题空间到解空间的映射。
如果你想强调这个转换过程的桥梁作用,也可以说这是 “需求的技术解构与重构” —— 把业务语言翻译成技术语言。
用户:那么问题来了,不懂技术的产品经理如果想要通过Agent和vibe coding来越过程序员去写代码实现需求。他所欠缺的能力是什么?
我:这是一个非常有洞察力的问题。让我拆解一下:
核心结论:他欠缺的是**”解域建模能力”**
产品经理通过自然语言描述需求(问题域),而程序员的核心价值在于将问题域映射到解域(技术实现空间)。Agent和vibe coding只是加速了编码过程,但并没有消除这个映射鸿沟。
具体欠缺的能力
1. 边界意识(什么能做,什么不能做)
| 产品经理的盲区 | 后果 |
|---|---|
| 不知道技术约束(性能、并发、安全、成本) | Agent生成代码跑通demo,但无法支撑真实业务负载 |
| 不理解系统耦合性 | 改一个需求,Agent改了10个文件,引入隐性bug |
| 缺乏故障域划分思维 | 无法判断”这个功能应该放在服务端还是客户端” |
关键区别:程序员写代码前会先问”边界在哪里”,产品经理往往只关注”功能是什么”。
2. 分解与组合的结构化思维
产品经理的输入:”用户下单后要发短信通知” 程序员的转换: ├── 同步调用 or 异步消息队列? ├── 短信服务挂掉怎么办?(熔断、降级、重试) ├── 模板变量如何校验?(防止注入) ├── 频率限制?(防刷) └── 成本:按条计费还是套餐?
Agent可以生成”发送短信”的代码,但无法替你做这些决策——因为它们依赖于对系统整体的理解。
3. 隐性需求的显性化能力
产品经理写的PRD通常是正向路径:
“用户点击购买,扣款成功,显示订单”
程序员会补全逆向路径和异常路径:
- 余额不足?
- 网络超时?
- 重复点击?
- 支付回调延迟?
- 并发扣款冲突?
Agent只会实现你明确描述的东西,不会追问”那如果…呢?”
4. 调试与诊断的元能力
| 场景 | 产品经理 | 程序员 |
|---|---|---|
| Agent生成代码报错 | “这句错了,帮我修一下”(循环试错) | 读错误栈、定位根因、理解依赖关系 |
| 功能”好像对了”但数据不对 | 难以察觉 | 追踪数据流、验证状态一致性 |
| 性能慢 | “优化一下” | profiling、定位瓶颈、权衡方案 |
vibe coding的最大陷阱:它让”写出代码”变得容易,但让”理解为什么错”变得更难——因为你没有中间过程的mental model。
5. 技术债务的嗅觉
程序员能感知:
- 这段硬编码现在方便,下个月会埋雷
- 这个表结构设计满足当前需求,但扩展时会锁表
- 这个第三方库社区活跃度低,长期维护风险高
产品经理+Agent的组合倾向于最大化短期交付速度,而低估长期维护成本。
一个类比
产品经理用Agent写代码,就像不懂建筑的人用AI生成施工图纸。
你可以描述”我想要一个采光好的三层别墅”,AI能出图。
但你不知道:地基能不能承重?排水坡度够不够?当地抗震规范是什么?
房子能盖起来,但住进去后漏水、裂缝、结构隐患——你甚至不知道问题出在哪。
那么,什么情况下可以”越过”程序员?
| 场景 | 可行性 | 原因 |
|---|---|---|
| 原型验证/MVP | ✅ 高 | 边界清晰,失败成本低 |
| 内部工具/自动化脚本 | ✅ 高 | 用户少,容错率高 |
| 标准化SaaS配置(低代码) | ✅ 高 | 解域已被平台封装 |
| 核心业务系统 | ❌ 低 | 边界复杂,故障影响大 |
| 高并发/金融/安全敏感场景 | ❌ 极低 | 隐性约束极多 |
给产品经理的实用建议
如果想用Agent提效,应该补齐而非绕过:
- 学”计算思维”而非语法:理解状态、并发、抽象、分层
- 强制追问边界:每个需求问自己”如果失败会怎样?”
- 建立反馈循环:让有工程经验的人review你的Agent产出(不是看代码,是看设计决策)
- 从封闭域开始:选择技术约束明确的场景(如前端页面、固定模板的后端逻辑)
最终结论:Agent消除的是编码的体力成本,不是设计的认知成本。产品经理缺的从来不是”写代码的能力”,而是**”在约束条件下构造可行解”的能力**——这正是软件工程教育的核心,也是目前AI最难以替代的部分。
用户:我认为软件工程的工程化管理等的细节,未来一定会被程序员落实稳定。AI会在各种约束下写出更合规的代码,reviewcode会自动化,测试会自动化等等。那么,这之后程序员的工作又会变成什么呢
我:这是一个非常前瞻性的思考。顺着你的逻辑推演,如果工程化、约束合规、review、测试都被AI自动化,程序员的工作会发生本质性迁移——从”构建系统”转向”定义系统”。
未来程序员的核心工作:解域架构师(Solution Space Architect)
1. 约束工程(Constraint Engineering)
不再是写代码,而是设计和维护AI生成代码的约束边界:
1 | # 未来的"编程"可能长这样 |
程序员的工作是确保这些约束被AI正确理解、执行、且不冲突。
2. 意图精化(Intent Refinement)
产品经理说”用户可以快速下单”,程序员需要将其转化为AI可执行的精化意图:
| 模糊意图 | 精化后的结构化意图 |
|---|---|
| “快速下单” | 端到端流程 < 3步,每步加载 < 1s,支持预填充地址 |
| “高可用” | 定义故障场景(单点故障、依赖降级、脑裂),指定RTO/RPO |
| “智能推荐” | 明确冷启动策略、多样性约束、业务过滤规则 |
关键能力:识别模糊性、消除歧义、补全隐性假设。
3. 系统元设计(Meta-Design)
不再设计具体模块,而是设计系统如何演化:
扩展契约:新功能如何无损接入现有约束体系?
反脆弱结构:系统如何在部分组件失效时自愈?
熵增管理:长期迭代中如何防止约束腐蚀(constraint drift)?
类比:从”画建筑图纸”变成”制定建筑规范 + 审核AI生成的图纸是否符合规范”。
异常与边缘治理(Edge Case Governance)
AI擅长主流路径,程序员专注长尾风险
AI生成代码覆盖率:95% 常见场景 ✅
剩余 5% 边缘场景:
- 闰年2月29日的定时任务
- 跨时区夏令时切换的日志顺序
- 分布式事务在网络分区下的补偿
- 法规变更导致的合规逻辑冲突
程序员工作:识别、建模、验证这些边缘,
并确保AI理解”为什么这种边界情况重要”。
5. 跨域翻译与对齐(Cross-Domain Alignment)
成为问题域与解域之间的终极翻译者:
业务方:”我们要做跨境电商”
↓
程序员拆解:
- 支付域:多币种、汇率波动、风控规则
- 物流域:清关、轨迹追踪、异常处理
- 合规域:GDPR、数据本地化、税务
- 技术域:全球部署、数据同步、最终一致性
↓
转化为AI可执行的约束包 + 验证策略
核心价值:看到跨域的隐性依赖和冲突,这是垂直AI难以具备的。