AI 时代的软件工程:从 Coding 到 Decision
AI 正在改变软件开发的方式,但它并没有改变软件工程的本质。真正决定软件质量的,从来不是代码本身,而是在复杂约束下持续做出正确工程决策的能力。
引言
这是我思考了很久的一个问题。
很多人在讨论 AI 对程序员的影响时,往往站在工具的视角:Codex、更强的大模型、更好的 Agent、更长的 Context、更完善的 Harness Engineering……
这些当然重要,但它们更多回答的是 “代码将如何生成”。
我尝试不用 AI 的视角,而是站在软件工程发展史的角度去回答。
因为只有放在历史长河里,才能看清楚哪些东西是短期变化,哪些东西是长期不变。
先说我的结论
未来程序员创造价值的地方,不是 Coding,而是决策(Decision)。
这里的"决策",并不是管理学意义上的决策,而是在复杂约束下,对软件系统进行持续权衡与取舍的能力。
整个软件开发,本质上是在不断做决策。
软件开发的发展,本质上一直在降低 Coding 的比重
如果回顾软件的发展史,你会发现一个很有意思的规律。
每一次技术革命,都在降低程序员亲自编写代码的比例。

第一阶段:机器语言时代
在机器语言时代,程序员直接操作二进制指令。
几乎所有价值,都来自于"会写代码"。
因为只有人能够完成这项工作。
第二阶段:高级语言时代
随后出现了 C、C++、Java、Python 等高级语言。
程序员开始不用关心寄存器、指令集和内存地址。价值开始变成:算法与数据结构。
Coding 的成本下降了一大截。
第三阶段:框架时代
Spring、Hibernate、MyBatis、React、Vue …
程序员已经不用自己写:HTTP、ORM、IOC、生命周期。
开始变成:业务实现。Coding 再次被抽象。
第四阶段:云时代
Kubernetes、Docker、Serverless 程序员甚至不用部署,基础设施继续自动化。
第五阶段:AI时代
AI开始生成:Controller、Service、SQL、Test、API。Coding第一次开始自动化。
注意:这是第一次。
以前只是:降低 Coding 的复杂度。 今天是:降低 Coding 本身。
这是质变。
那程序员到底还剩什么?
很多人会回答:
- 架构。
- 业务。
- 沟通。
这些都对。
但是我觉得,它们还有一个共同的本质。
叫:Decision(决策)。
软件开发,本质其实是一连串决策

举个例子。
开发一个订单系统。真正的工作不是:
public void createOrder(){}
真正困难的是:
- 订单应该拆几个模块?
- 库存什么时候扣?
- 支付失败怎么办?
- 事务怎么做?
- 同步还是异步?
- 消息队列要不要加?
- 数据库怎么分?
- 一致性做到什么程度?
- 性能优先还是一致性优先?
有没有发现?
整个过程中。几乎没有一个问题是:Java 语法。
全部都是:工程决策。
为什么AI现在不能完全替代程序员?

很多人说:
- AI容易幻觉。
- AI上下文不够。
- Context不完整。
- Harness还不成熟。
但我觉得:即使十年以后。这些问题都会越来越小。真正的问题仍然存在。
因为:软件开发没有标准答案。

AI可以生成方案,但不能替你承担决策
未来AI可能会说:
- 方案A:一致性最好。
- 方案B:性能最高。
- 方案C:成本最低。
- 方案D:开发最快。
那么最终选择哪一个?AI可以推荐。但是,真正负责的人,仍然是程序员。
因为:决策意味着承担后果。而责任,无法自动化。
所以未来程序员最大的能力,不再是Coding,而是Decision
Decision来自哪里?
我认为来自五种能力。
- 理解问题(Understand)
很多需求,真正的问题。并不是PRD写出来的那个问题。
优秀程序员首先会问:
- 为什么要做?
- 真正要解决什么问题?
- 用户真正的痛点在哪里?
问题理解错了,后续所有工作都可能失去意义。
- 抽象问题(Abstraction)
现实世界永远是混乱的。
程序员最大的能力,不是记API。而是把复杂世界抽象成:模型。
例如:订单、库存、支付、物流…
这些都是对现实世界的抽象。
抽象决定系统。不是代码决定系统。
- 工程决策(Decision)
这是未来最值钱的能力。
例如:
- 什么时候同步?
- 什么时候异步?
- 什么时候引入缓存?
- 什么时候采用最终一致?
- 什么时候保持强一致?
这些都是:工程判断。
没有教材。没有标准答案。只有经验。
- 验证结果(Verification)
AI 生成代码越来越快。
未来程序员更多时间可能花在:
- Review。
- 测试。
- 监控。
- 压测。
- 风险分析。
未来,验证能力的重要性,只会越来越高。
- 持续演进(Evolution)
优秀的软件。不是:写完。结束。
而是,未来五年:
- 还能不能继续改。
- 架构是否容易扩展。
- 模块是否容易替换。
- 业务是否容易新增。
这些决定了:软件生命周期。
所以未来程序员真正创造价值的位置在哪里?
我最近把软件开发重新画成了一张图。

Coding 已经变成:其中一个自动化步骤。
真正越来越重要的是:
Coding前面的:理解、抽象、决策。
以及Coding后面的:验证、演进。
再进一步,我认为程序员未来的角色也会发生变化

他负责:定义问题、拆解问题、建立抽象、制定约束、权衡方案、验证结果、持续演进。
AI负责:实现。
写在最后
我认为,AI 并没有改变软件工程的本质,它改变的只是软件工程中"实现(Implementation)"这一环节的生产方式。
过去,程序员通过编写代码实现设计;未来,程序员更可能通过指导 AI 实现设计。但无论实现方式如何变化,真正决定软件质量的始终不是代码本身,而是实现代码之前的理解、抽象与决策,以及实现代码之后的验证与演进。
所以,当 Coding 不再是程序员的主要工作时,程序员真正创造价值的地方,不是掌握更多语法、框架或工具,而是在复杂约束下持续做出正确的工程决策。
因为代码可以生成,方案可以推荐,实现可以自动化,但"为什么这样设计、为什么这样取舍、为什么承担这样的成本与风险",最终仍然需要人来负责。
这也是我认为,未来十年程序员最值得投资的能力。它不是 Java,不是 AI,不是某一个框架,而是一种能够跨越技术周期、始终不过时的核心能力:在复杂系统中做出高质量工程决策的能力。

239

被折叠的 条评论
为什么被折叠?



