🎬 Martin Fowler的警告:LLM不是更高抽象,而是性质不同的抽象
> 原视频:Better Stack - "编程何必'精确'?Martin Fowler警告:软件开发正经历史上最大骤变!" > 核心来源:Martin Fowler 文章《LLMs and the future of software development》 > 视频链接:https://academy.claude-code.club/
---
🔥 核心论断
Martin Fowler 认为,LLM 对软件开发的影响不是「又一层抽象」,而是根本性的范式迁移。传统编程抽象是确定性的——你写代码,计算机精确执行。LLM 带来的抽象是非确定性的——你描述意图,模型给出一个大概率正确的结果,但结果会漂移。这意味着程序员的核心技能正在从「精确控制」转向「偏差管理」。
---
🎯 三个观点拆解
观点一:不是更高抽象,而是「性质不同的抽象」
编程语言的历史是一部「不断抽象」的史:
- 机器码 → 汇编 → C → Python → 低代码平台
- 每一层都在让程序员离硬件更远,离问题更近
| 维度 | 传统抽象(如 Python) | LLM 抽象 |
|---|---|---|
| 确定性 | 100% — 代码写 A 就是 A | 概率性 — 同一个 prompt 可能出不同结果 |
| 可解释性 | 每条指令有明确语义 | 黑盒推理,内部逻辑不可追踪 |
| 调试方式 | 断点、日志、单步跟踪 | 提示工程、示例、约束、迭代 |
| 失败模式 | 明确报错(语法/类型/运行时) | 静默偏差(看起来对,其实错) |
| 可控性 | 精确控制每个分支 | 只能通过约束和示例引导 |
---
观点二:非确定性首次进入软件开发核心
传统工程方法建立在确定性之上:
- 单元测试:输入 A 必输出 B
- 类型系统:编译器保证数据结构一致性
- 形式化验证:数学证明程序正确性
软件开发的核心问题从「如何写对代码」变成了「如何管理一个非确定性组件」。Fowler 引用了一个关键观点:这不是第一次非确定性出现在软件里(随机数、并发、网络都是),但这是第一次非确定性出现在「代码本身」的生产过程中。
---
观点三(最重要):从「写对代码」到「管理偏差」
这是程序员角色的根本性转变。传统上,程序员的工作是: 1. 理解需求 2. 设计算法/架构 3. 写代码 4. 调试直到正确
在 LLM 时代,这个流程变成了: 1. 理解需求 2. 定义意图(用自然语言或结构化 prompt) 3. 让 LLM 生成代码/方案 4. 验证结果(测试、审查、边界检查) 5. 定义偏差边界(什么情况下 LLM 会出错,如何兜底)
程序员的新技能树:
- 意图工程:把模糊需求转化为 LLM 可理解、低歧义的指令
- 偏差管理:识别 LLM 的「常见错误模式」,建立检测和兜底机制
- 验证体系:当 LLM 的输出不可完全信任时,如何用测试、审计、沙箱来保证质量
🧠 为什么这很重要?
1. 行业正在低估这个转变
很多公司和开发者把 LLM 当成「更快的 copilot」——还是写代码,只是有人帮你打字。Fowler 说这种理解太浅了。LLM 改变的不是写代码的速度,而是代码的来源和质量保证方式。
2. "编程" 的定义在扩展
当代码由 LLM 生成,程序员的工作重心向上游和下游移动:
- 上游:更精确的需求定义、上下文管理、约束设计
- 下游:更严格的验证、偏差检测、兜底策略
3. 非确定性的工程方法尚未成熟
我们有 70 年的确定性编程经验(编译器、调试器、类型系统)。但管理非确定性组件的工具体系还在婴儿期:
- 提示版本管理?勉强有
- LLM 输出的一致性测试?几乎空白
- 提示变更的回归测试?没有标准方案
- 多模型 A/B 测试?实验性
---
⚠️ 三个被忽视的风险
1. "看起来对" 比 "明确报错" 更危险
传统 bug 会 crash、会报错。LLM 的 bug 是静默的——代码运行了,但逻辑错了,而且错误可能只在边界条件下才暴露。这改变了软件安全的性质。
2. 上下文漂移
LLM 的输出依赖上下文(conversation history、RAG 检索结果、系统 prompt)。这个上下文会漂移——随着时间推移、数据更新,同一个 prompt 的行为可能改变。传统的「版本控制」是代码的版本,但 LLM 的「版本」是上下文+模型+数据的组合,没有成熟的工具来管理。
3. 技能断层
如果新一代程序员主要用 LLM 生成代码,但不理解底层原理:
- 他们能否调试 LLM 生成的错误?
- 他们能否判断生成代码是否安全?
- 他们能否在 LLM 失效时手动写出正确代码?
---
🎯 给程序员的三个行动建议(从视频提炼)
1. 从「写代码」转向「定义边界」
不要只关注 prompt 怎么写,要关注:
- 这个任务有哪些不可接受的错误?
- 如何检测这些错误?
- 当 LLM 失败时,兜底方案是什么?
2. 建立验证习惯
把 LLM 当成一个不可信的实习生。它可能很能干,但你需要:
- 每段生成代码都 review
- 每个功能都有测试覆盖(尤其是 LLM 生成的部分)
- 建立「LLM 偏差清单」——记录这个模型在哪些场景下容易出错
3. 保持底层技能
继续使用 LLM 提高效率,但刻意保持:
- 手动写复杂算法的能力
- 阅读和理解底层代码的能力
- 调试和推理的能力
---
📚 参考
- Martin Fowler 原文:https://martinfowler.com/articles/2025-llm-software-development.html(或类似近期文章)
- Claude Code Academy:https://academy.claude-code.club/
- 相关概念:Prompt Engineering → Intent Engineering → Deviation Management
> "LLM 不是让编程变简单,而是让编程的性质变了。未来最好的程序员不是写代码最快的人,而是最懂得定义意图、管理偏差、验证结果的人。" —— 小凯解读
#MartinFowler #LLM #软件开发 #编程范式 #AI编程 #非确定性 #偏差管理 #程序员转型 #软件工程 #ClaudeCode #小凯
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens