传统编程大佬MF感慨:AI编程动了我的奶酪


马丁福勒Martin Fowler发文:AI(人工智能)是怎么搅动编程界这池水的!(AI编程动了我的奶酪)

AI 大模型:编程世界的“核弹级”变革
就像那些喜欢大嗓门评论行业的人一样,我也一直在紧盯着 生成式AI系统 在软件开发里能扮演啥角色。我觉得 大型语言模型(LLM) 的出现,对软件开发的影响,简直就像当年编程从 机器码(汇编语言) 进化到 第一批高级编程语言 那么大!

以前,编程语言和各种框架虽然也在不断发展,让我们写代码更方便、效率更高,但它们只是在抽象层面上往上挪了挪,并没有彻底改变编程的“本质”。但 LLM 不一样,它带来的冲击就是这么猛!它不光是把抽象层次又往上拉了一大截,还逼着我们去思考一个问题:用“不确定”的工具来编程,到底意味着什么?

高级语言的诞生:从“按键精灵”到“发号施令”
咱们先说说 高级编程语言(HLLs) 刚出来那会儿,它简直是革命性的。

打个比方,你用 汇编语言 编程,就像是给一个机器手编按键精灵,你得考虑机器的每个小动作,比如怎么把数据挪到正确的“寄存器”里,才能让它执行某个特定的指令。你得想得特别细致,像什么把数据搬到哪儿,用哪个指令,都得你亲手安排。

而有了 高级语言 之后,程序员就能直接用一句句 “指令” 来发号施令了,比如:“先做这件事,然后根据情况选择A或B,再重复C操作几十次。”你还可以给代码里的各种数据起名字,一眼就知道它们代表什么。

当然,早期的语言也挺“笨”的。比如我第一次专业编程用的 Fortran IV,那会儿的“如果”(IF)语句就没法加“否则”(ELSE),而且你还得记住,整数变量的名字必须以“I”到“N”开头,否则就识别不了。

后来,编程语言放宽了这些限制,还加入了 “块结构” (就是“如果”后面能跟好几行代码了),这确实让编程变得更简单、更有趣,但本质上还是那一套。

你看,现在我几乎不写循环了,也能很自然地把函数当数据来用——但说到底,我跟机器说话的方式,跟我当年在多塞特荒原上用 Fortran 编程时,还是挺像的。Ruby 语言比 Fortran 高级得多,但它们俩给人的感觉是类似的,而 Fortran 和 PDP-11 机器指令给人的感觉就完全不同了。

LLM:从“写代码”到“说人话”的飞跃
到目前为止,我还没机会深入使用最好的生成式AI工具,但我听朋友和同事们分享他们的经验时,简直是入了迷。我确信,这又是一次根本性的改变:

用“提示词”(prompt)来跟机器对话,就像 Fortran 和汇编语言之间的差距一样,是和用 Ruby 编程完全不同的体验。

但这不仅仅是抽象层次的巨大飞跃。你想想看,我写一个 Fortran 函数,就算编译一百遍,它每次运行出来的 bug 也都是一模一样的。

但是,大型语言模型 引入了一种 不确定性 的抽象。这意味着,我不能简单地把我的“提示词”存在代码管理工具里(比如 Git),然后就指望每次都能得到同样的结果。

就像我的同事 Birgitta 说的那样,我们不光是在抽象层面上 往上走了,同时也是在 横向移动,进入了一个 不确定性 的新领域。

这可是个大挑战,也充满了无限可能!