【深度解读】Martin Fowler:AI 时代,软件工程的“确定性”终结与重生
前两周,软件开发领域的泰斗级人物 Martin Fowler 做客了《The Pragmatic Engineer》播客。作为一个见证了从汇编语言到高级语言跃迁、签署了《敏捷宣言》的行业老兵,他对这一波 AI 浪潮的看法既不盲目狂热,也不悲观抵触,而是透着一种“经历过大风大浪”后的务实与冷静。
这期长达 110 分钟的访谈干货满满,如果你没有时间听完全程,这里有一份核心观点的深度总结。Martin Fowler 认为,AI 对软件工程的冲击,是我们职业生涯中面临的最大一次变革。
以下是这次访谈的五个关键洞察:
1. 从“确定性”到“非确定性”的思维跃迁
Fowler 指出,AI 带来的最大改变并非抽象层级的再次提升,而是底层的确定性被打破了。
- 过去: 编程是确定性的。同样的输入,永远得到同样的输出。代码非黑即白。
- 现在: LLM(大语言模型)是非确定性的。同样的 Prompt,两次生成的结果可能截然不同。
这意味着软件工程师需要借鉴结构工程师(如桥梁设计者)的思维—— “容差”(Tolerance) 。就像木材和混凝土的物理性能存在波动,工程师必须在设计中留有余量以应对最坏情况。在 AI 辅助编程的时代,我们不能再预设代码产出是完美的,必须学会处理这种模糊性和不确定性。
2. 警惕“氛围编程”(Vibe Coding)的陷阱
现在流行一种叫 "Vibe Coding" 的说法:你只管告诉 AI 你想要什么,只要它能跑起来就行,不用管它怎么写的。Fowler 对此发出了严厉的警告。
他分享了一个真实案例:一位同事用 AI 生成了一个 SVG 图表。后来只需微调一下标签位置,结果打开源码一看,AI 生成的代码逻辑复杂得离谱。原本手写只需十几行的代码,现在变成了无法维护的“黑盒”。
核心风险在于切断了“学习循环”(Learning Loop)。 编程的本质是“想法 -> 代码 -> 反馈 -> 修正”的学习过程。如果你完全依赖 AI 生成且不阅读代码,你不仅失去了对系统的掌控权,也停止了作为工程师的成长。
3. AI 的杀手级应用:解读“遗留代码”(Legacy Code)
如果说 AI 写新代码有风险,那么它在解读旧代码上则是神器。ThoughtWorks 技术雷达已将“用 AI 辅助理解遗留系统”列为最高推荐级别。
每个在大公司待过的人都知道,接手一套文档缺失、原作者离职的 10 年老代码是多么痛苦。现在的 AI 可以像考古学家一样,帮你:
- 梳理数据流向;
- 解释晦涩的模块关系;
- 快速建立对系统的整体认知。
虽然 AI 无法解决因糟糕的决策(比如办公室政治导致的架构选型)带来的人为复杂性,但它能让你更快地看清现状。
4. 把 AI 当作“能力强但不靠谱的实习生”
如果你正在使用 Cursor 或 Copilot,Fowler 建议你调整心态:不要把它当上帝,要把它当成一个非常聪明、但不仅会犯错还喜欢撒谎的实习生。
- 审查机制: 这个“实习生”提交的每一行代码(PR),你都必须亲自审查。不能因为它看起来像那么回事就直接合并。
- 测试为王: 在 AI 时代,自动化测试的重要性不降反升。由于 AI 产出的不确定性,测试成为了防止系统崩溃的最后一道防线。
5. 给工程师的建议:重构与判断力
在访谈的最后,Fowler 强调了在这个时代依然不变、甚至更重要的技能:
- 重构能力: AI 能快速生成大量代码,也能快速制造大量“技术债务”。识别坏味道并持续重构的能力,是防止代码库腐烂的关键。
- 概率思维: 推荐阅读丹尼尔·卡尼曼的《思考,快与慢》。软件开发充满了概率问题(Bug 复现率、用户行为预测),培养概率思维能帮你做出更好的决策。
- 写作能力: 推荐阅读《The Power Broker》。清晰的写作反映了清晰的思考,这对工程师至关重要。
结语
Martin Fowler 的态度非常务实:先用起来。不要被各种理论吓倒,也不要急着站队。在实际使用中去理解 AI 的边界,在实践中打磨你的判断力。
技术在剧变,但观察、思考、写作、分享,这些工程师的立身之本,从未改变。