鲍勃大叔:AI是从编程语言直到提示词的语义表达延续

AI并未改变软件本质,只放大工程约束的重要性,能否建立确定性控制体系决定其价值。

你以为AI让编程变简单,其实只是把你文理科底子暴露得更彻底!

从语义阶梯到不确定系统:大语言模型时代的软件工程约束重构


AI不是革命,而是语义表达阶梯的延续

软件工程敏捷发起人之一鲍勃大叔Robert C. Martin发话了,他认为AI只是语义表达能力的一次升级,本质仍然是人类在描述行为与结构。而评论区大量声音则指出,LLM的非确定性让这个阶梯模型出现断裂。

真正关键点不在是不是阶梯,而在你是否还能用工程手段把AI拉回一个可控系统。如果答案是能,那么AI就是升级。如果不能,那它确实是降级工具。问题不在AI本身,而在你是否具备驾驭它的能力。

语义表达的进化路径:从二进制到AI,本质从未改变

从历史路径看,人类一直在提高表达层级。我们走过了二进制到汇编,再到Fortran、C、Java、Python,直到现在的AI提示词。每一步的核心目标只有一个:降低表达成本,同时提高语义密度。

这里的关键误区是,很多人把表达方式的变化误认为问题本质的变化。

无论你写的是C代码还是Prompt,你都在描述两件事:

  1. 系统要做什么,也就是行为语义,
  2. 以及系统如何组织,也就是结构语义。
这两个问题从来没有消失过,只是被包装得越来越优雅,越来越接近人类的自然思维方式。

但很多人一到AI这里就开始自我欺骗。他们觉得自己可以跳过设计、跳过架构、跳过约束,直接说一句话就生成一个完整系统。这不是进步,这是把工程问题伪装成一个运气游戏。你指望AI猜中你脑子里的隐含假设,这跟买彩票有什么区别?区别只在于彩票至少明明白白告诉你中奖概率有多低。

非确定性争议:LLM到底是在进化还是倒退

评论区最尖锐的反对点集中在一句话上面。这句话就是:LLM是概率系统,不是确定性系统。每次运行可能得到不同结果,这在工程领域简直是灾难。

这个批评本身没有错,但它也不完整。因为你真正要问的问题是:系统本身是否确定,还是系统在约束条件下是否可确定。如果你随便写一个模糊的Prompt,那确实是每次结果都不同,这在工程上等同于不可用。但如果你引入一系列约束,比如设置低温度参数、使用结构化输入、采用测试驱动的方式、加入输出校验机制,那么系统就可以逼近确定性。

换句话说,LLM默认状态就是混乱的,就像一个刚入行的实习生,脑子里装满了各种可能性。但工程师的职责恰恰就是消灭这种混乱。如果你做不到这一点,那问题不在AI,而在你没有构建起一套有效的约束系统。你不能怪锤子砸到自己的手指,你只能怪自己握锤子的方式有问题。

Gherkin的真正意义:把AI重新拉回有限状态机

Gherkin在这里不是一个语法工具,而是一个确定性锚点。它用Given、When、Then这种结构把你从模糊的自然语言拉回到精确的状态转移描述。

Given描述系统的初始状态,When描述发生的事件,Then描述必须达到的结果状态。这本质上就是在描述一个标准的有限状态机。系统在某个初始状态,发生某个事件,必须进入某个结果状态。当你用一整套Gherkin场景覆盖系统行为时,你等价于在写一份形式化的行为规范。

关键点来了。AI可以生成代码,但Gherkin定义了什么是正确。这意味着你把AI从一个随便发挥的写手,变成了一个必须通过考试的学生。只要你的测试是刚性的,只要你的Gherkin场景是精确的,AI的输出就必须收敛到正确的方向。你不能给AI留任何模糊空间,就像你不能给一个五岁小孩留一整块巧克力然后指望他只吃一小口。

工程约束体系:AI时代更重要,而不是更不重要

很多人误以为AI降低了工程门槛。实际上它只是把门槛转移到了别的地方,而且往往转移到了更考验判断力的地方。

以前你需要写代码,现在你需要设计约束系统。你需要设计模块依赖图来决定系统结构是否混乱。你需要设计测试约束来决定行为是否符合预期。你需要设计复杂度约束来防止系统变得不可维护。你需要定义接口与边界来决定系统是否可扩展。

这些东西在AI时代不是可选项,而是唯一能让系统稳定的手段。如果没有这些约束,AI生成的系统会迅速退化成一堆不可理解的垃圾堆。就像一个没有图纸、没有监理、没有验收标准的建筑工地,工人们想怎么盖就怎么盖,最后盖出来的东西你敢住进去吗?我是不敢。

提示词是降级这一观点的问题在哪里

有人说Prompting是语义阶梯的倒退,因为它的结果不可预测。这句话只在一个前提下成立,那就是你把Prompt当成了最终产物。

但如果你把Prompt当成一个中间层,真正的系统由测试、约束、验证机制共同构成,那么Prompt只是输入方式,而不是系统定义本身。不加约束的Prompt等于随机生成器,有约束的Prompt等于可控编译器。差别不在AI本身,而在你采用的工程方法。

这就像你有一台打印机。如果你随便扔一堆纸进去,打印机确实会卡纸或者乱打。但如果你正确装纸、设置参数、校准喷头,打印机就能稳定输出。你不能因为自己不会用就说打印机是个废物,那样打印机也很委屈。

抽象层提升带来的真实变化:不是更简单,而是责任迁移

有个评论说得很关键。抽象层不仅提升表达效率,还改变工作方式。这是事实,而且很多人严重低估了这个变化的影响。

当你从写代码变成描述系统,你的职责从实现细节转向定义规则。这意味着你必须更清楚系统边界,更明确行为约束,更严格验证结果。简单说,以前你错在代码层面,现在你错在设计层面。而设计错误通常更隐蔽,也更致命。代码写错了,程序一跑就崩溃,你马上知道有问题。设计错了,程序可能正常运行一段时间,然后在某个最不合适的时刻突然暴露出致命缺陷。

这种责任迁移对很多人来说是致命的。因为他们习惯了靠编译器、靠单元测试、靠代码审查来兜底。现在这些兜底机制被放到了更高的抽象层,而他们还没有建立起对应的验证体系。结果就是,他们以为自己在用AI加速开发,实际上是在用AI加速制造bug。

AI写梯子悖论:为什么很多人开始不信任系统

一个非常真实的担忧是:如果AI自己在生成系统,你是否还真正理解这个系统?这个问题不能被轻描淡写,因为它直接关系到安全性,比如航空、医疗系统这些场景。

如果你需要反编译AI生成的结果才能信任它,那说明你的抽象层设计失败了。解决方法不是拒绝AI,而是引入更强的验证层。你需要强制测试覆盖,需要形式化约束,需要自动化验证,需要可解释性检查。你不需要理解每一行代码,但你必须能够证明系统行为是正确的。

这就像你不需要理解飞机发动机的每一个零件的热力学原理,但你必须有足够的测试和验证来证明这台发动机是安全的。信任不是来自于对细节的全知全能,而是来自于验证体系的完整性和可靠性。

现实结论:AI不会替代工程原则,只会放大它们

这场讨论真正的价值在于,它戳破了一个幻想。这个幻想就是AI可以让你绕过工程基本功。事实正好相反。

AI放大一切。好的设计会带来更快的产出好系统,差的设计会更快地制造灾难。所以问题不是SOLID原则还重不重要,而是你有没有更强的版本来约束AI。如果你原来的设计能力就很差,AI不会帮你变好,它只会让你以更快的速度把差设计变成差系统。

这就像一把锋利的刀。刀本身没有善恶,刀快不快也不是问题的关键。关键是谁在拿刀,以及这个人有没有受过训练。给一个好厨师一把快刀,他能做出更精美的菜肴。给一个三岁小孩一把快刀,结果你大概能想象得到。

最终判断:你不是在用AI,你是在设计一个可控的不确定系统

这就是整个讨论的落点。AI本质是一个带噪声的系统,你的任务不是消除噪声,因为噪声在概率模型中是固有的。你的任务是构建一个框架,让噪声无法破坏最终结果。

如果你做到这一点,鲍勃大叔是对的:AI只是语义阶梯上的一步,是提高表达密度、降低表达成本的又一个工具。
如果你做不到这一点,评论区也是对的。AI确实是倒退,因为它把确定性系统变成了一个不可预测的黑箱。

所以问题的核心从来不是AI本身怎么样,而是你有没有能力把AI变成一个可控的工具。这个能力不来自任何提示词技巧,不来自任何模型调优,而是来自最基础的、最老套的、最不性感的工程纪律。你越早接受这个现实,你就能越早真正用好AI。你越抗拒这个现实,你就越会成为那个在评论区抱怨AI不靠谱的人。