对话式编程
人提出问题并验收边界,语言模型可以起草代码;能运行不等于模型正确。
它是什么
对话式编程(常称 Vibe Coding)是一种分工:人提出要解决的问题、声明输入输出与失败条件,并验收结果是否真的在为世界建模;语言模型可以根据这些说明起草 程序 文本。它让未把编程当作职业的人,仍有可能把可检验的思想交给机器执行——前提是人没有把「意图、边界、对错」一并外包出去。
这不是程序员速成班的另一条捷径,也不是「不必再理解计算」。语法仍然是证据:用来证明一个想法真的可以被机器执行。能运行,只说明解释器走完了这份文本;它并不证明除数为零被挡住了,空表被考虑了,或打印出来的数字对应着问题里的那个量。
名字从哪来
Vibe Coding 一词在 2020 年代中期随着能根据自然语言起草代码的语言模型进入日常工具而流行,用来描述一种更放手的写法:人用对话迭代需求,模型给出可运行的草稿,人再看结果、改说明、再生成。中文里常见「对话式编程」与「氛围编程」两种叫法:前者强调这是一场关于问题的对话,后者贴近 vibe 的口语色彩;二者指的是同一种分工,而不是一种新的编程语言。
「Vibe」在口语里近于气氛、直觉。若把它理解成「凭感觉即可、不必验收」,恰好说反了这个做法能够成立的条件。感觉可以用来提出问题;模型是否把世界认对,必须靠边界上的检验,而不是靠一次幸运的运行。
它怎么工作
一次负责任的对话式编程,通常有三层工作留在人这边。第一是意图:这段程序要完成什么,用什么 函数 名、什么返回值来表达,好的 注释 写的也是这件事。第二是边界:哪些输入应得到确定的结果,哪些应当拒绝或报告 异常;空序列、零分母、缺失的键,都是模型最容易漏掉、又最能揭穿「只对了幸运输入」的地方。第三是建模:变量 的名字代表观测、估计还是编号?类型 有没有把世界认错?容器该用 列表 还是 字典,取决于问题要问顺序还是按名查找。
模型可以写出表面上完整的 Python。人的工作是阅读、运行、换一组输入再运行,并指出草稿在哪一处没有遵守上述约定。把看不懂的整段文字贴进编辑器再按一次运行,并没有完成对话;那只是把责任从屏幕的一侧挪到了另一侧。
现代工具链常把这件事拆得更细。IDE 里的代码补全先加速单个记号;对话式 LLM 起草整段文本;Agent 再把模型接进「改文件—跑命令—读反馈」的多步环。项目里的 Skill 打包重复流程,Rules 写入长期约束,让生成默认看见团队章程。效率来自少打字、少切换;正确性仍来自人是否提出意图、是否留下测试与版本、是否读得懂关键改动。
生活里在哪里
整理一份观测表、按公式检查几组系数、把重复劳动写成可再次执行的步骤——这些都不要求先成为职业程序员,却都要求说清「什么算做对」。向模型描述实验室的记录格式、允许的缺测、以及何种情况下结果无意义,再阅读它起草的脚本,已经是对话式编程。用它生成一份看起来能画图的代码却从不追问海龟有没有退回分叉点,则只是把不确定从手工抄写换成了自动抄写。责任随意图而来,并不随职业头衔而来。
和相近概念的差别
对话式编程改变的是文本的起草方式,并不取消程序作为可执行思想的地位,也不取消 抽象:接口仍然要由人说出。它也不是注释的替代品。没有意图说明,下一轮对话无法判断草稿是否跑题。
它与「把编程语言学成职业技能清单」不同。目标可以是解决一个真实问题,而不是积累语法条目。可是若连 print 与 return 的差别、缩进 如何改变结构都不愿意检验,对话就没有共同的对象。模型是起草者,不是实验的负责人。
常见误会
误会 1:能运行,就等于模型正确。
一次幸运输入走完全程,只说明这一次没有撞上未写的边界。换一组输入,尤其是空值、零和缺键,才知道程序宣称的范围有多大。
误会 2:有了生成工具,就不必再理解程序在做什么。
读不懂意图与结构,就无法指出错误在哪一行,也无法决定该改公式、补边界,还是整段作废。理解可以不必达到职业程序员的广度,但不能为零。
误会 3:对话式编程是一种可以代替验收的新语言。
它没有自己的语法。交出来的仍是 Python(或别的语言)写成的程序。人提出问题并验收边界;语言模型可以起草代码。分工可以变,责任不能变。
想知道更多
- 书:布鲁克希尔《计算机科学概论》
- 书:查尔斯·佩措尔德《编码:隐匿在计算机软硬件背后的语言》
- 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》
- 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》
未登录时不会保存学习进度