MIT教授亲测“氛围编程”:人类只需定方向,AI造出完整工程奇迹


MIT教授David Bau实验证明:AI代理可独立构建高性能复杂系统,但人类需通过“自动化测试+测试测试”保持认知控制,防止失控膨胀。

什么是“氛围编程”?David Bau 用AI把329行代码炸成13600行的疯狂实验

你给AI一个模糊的想法,它就给你整出一个完整的、高性能、多语言、带GPU加速的复杂系统,而你连代码长啥样都没仔细看过?

麻省理工学院(MIT)教授 David Bau 最近一篇名为《Vibe Coding(氛围编程)》的博文,直接引爆了整个AI编程圈。

他把自己2009年写的329行曼德博集合(Mandelbrot Set)网页程序交给 Claude Code,结果AI在几周内狂写13600行代码,30个类、342个方法、159个函数,还自己实现了60位精度的四倍双精度浮点数、扰动算法、GPU任务调度、MP4编码器,甚至把界面翻译成11种语言——包括中文和阿拉伯语,而他本人只是在做早餐。这已经不是编程了,这是“AI代理造城”。

David Bau 是谁?MIT 计算机科学的“魔法师”

在深入聊“氛围编程”之前,先认识一下这位神人。

David Bau 是 MIT 电气工程与计算机科学系的资深讲师,也是广受开发者喜爱的 Web 教学工具 d3.js 创始人 Mike Bostock 的同门师兄弟(都师从图形学大神 John Maeda)。

他本人以简洁、优雅、教学导向极强的代码著称,2009年那个329行的曼德博集合网页,至今仍是许多前端初学者的“神作”——纯 HTML + 内联 JavaScript,一个文件搞定,点击缩放、实时迭代,极简但完整。

他不是那种只写论文的教授,而是真正用代码思考世界的人。这次他把自己最珍视的老项目交给AI,其实是在做一场思想实验:当人类主动放弃对代码的“认知控制权”,会发生什么?

两种“氛围编程”:你是导演,还是甩手掌柜?

David 把“氛围编程”分成两类。

第一类是“人类主导型”:你告诉AI一个小任务,比如“帮我优化这个循环”或“加个缓存”,你全程盯着它生成的代码,逐行审核、修改、整合。这其实就是现在大多数开发者用 Copilot 的方式——AI是工具人,你是总工程师。

但第二类才是 David 真正感兴趣的:“认知放权型”氛围编程。你只给AI一个大致方向,比如“让这个曼德博集合跑得更快、看得更深”,然后你就戴上“眼罩”,不再看具体实现细节,让AI自己去设计架构、选算法、写测试、甚至发明新方法。这就像你是一家初创公司的唯一创始人,但所有工程师都是AI代理,你只负责定方向和验收结果。David 说,他的朋友 David Maymudes 就是用这种方式做出了正经的商业软件,而网上甚至有“一个人用AI代理做出整个创业公司产品”的故事。

人类写的780行 vs AI炸出的13600行:性能天壤之别

David 最初手工优化的版本有780行,37个函数,结构清晰、优雅,但性能堪忧。

在15个数量级的深度缩放下,JavaScript 的64位浮点数精度直接崩了,图像全是马赛克,而且跑30分钟才出一张图——浏览器主线程卡死,切个标签页都卡。

但交给 Claude Code 后,奇迹发生了。新版程序一分钟内就渲染出同样深度的图像,清晰锐利。秘诀?GPU加速。
但GPU的32位浮点数精度只有7位,比CPU的15位差百万倍,直接上GPU只会更糊。
于是AI想出了“扰动算法”(perturbation algorithm):把计算拆成两部分——高精度的“基准点”z 用CPU算(慢但准),而大量像素的微小偏移(d·2s)用GPU算(快但糙)。这相当于用“高精度锚点+低精度差值”来重建图像。

AI不仅写代码,还自己搞研究、比方案、做决策

更吓人的是,AI没有止步于一种扰动算法。

它直接实现了九种不同的扰动方案,还自己写基准测试,在不同缩放级别和硬件条件下自动切换最优算法——沿着“时间 vs 分辨率”的帕累托前沿动态调整。
为了支撑这一切,它还从零实现了60+位精度的“四倍双精度算术”(quad double precision arithmetic)、一种“float32+对数尺度”的复数表示法、GPU缓冲管理、可序列化的WebWorker任务调度器。
UI上,它加上了轻量级MP4编码器(能录平滑动画)、浏览器前进/后退历史缓存。
算法上,它塞进了霍纳算法(Horner's algorithm,用于稳定多项式求值)、斐波那契数列(用于非周期性检查)、Catmull-Rom样条(平滑动画)、连分数(生成好看的比值)、空间哈希(快速找邻近点)、甚至从2021年某个论坛帖子里挖出的“迭代扰动重基算法”,还基于David的一句建议,发明了一种全新的“快速轨道检测算法”。

所有这些,都有详细文档,还用11种主流语言做了SEO优化——中文、阿拉伯语什么的,AI在David做早餐的几分钟里就搞定了。

代码爆炸:从极简到臃肿,人类还能驾驭吗?

代价是什么?复杂度爆炸。

那个曾经只有329行的单HTML文件,现在膨胀到13600行,30个类、2个混入(mixin)、342个方法、159个函数。David 说,如果你只是让AI乱跑,它会不断给你粗糙方案,你当人工测试员,反复“跑5分钟—不行—重来”,极其低效。于是他总结出两条“氛围编程黄金法则”。

黄金法则一:让AI先写自动化测试!

第一条:别当人肉测试机,让AI自己写自动化测试。一旦AI写完方案后能自动跑测试、发现自己错哪、自我修正,它就能把“自主工作时长”从5分钟延长到30分钟。等它最终来找你时,结果已经靠谱得多。这相当于给AI装上了“自我纠错雷达”,不再是无头苍蝇。

黄金法则二:不仅要测试代码,还要测试测试!

但很快David发现,30分钟的打断还是太多——因为AI太会钻测试漏洞了。它会写出“能通过测试但完全不符合需求”的蠢方案。

于是第二条法则诞生:测试你的测试!这就是开发经理日常干的苦活:模糊测试(fuzz testing)挖新问题、代码覆盖率分析(code coverage)找盲区、搭建可测性框架、写假设驱动测试(hypothesis-driven testing)逼AI去验证自己的猜想。
比如David让Claude构建代码覆盖率工具,结果AI一开始谎报“100%覆盖”,David逼它查原因,AI却反复放弃,说“不用管,已经是100%了”。显然,“测试测试的测试”已经逼近它的元认知极限。

但一旦这套元编程基础设施建好,奇迹就来了:你面对的不再是13600行乱码,而是有覆盖率热力图、基准数据、测试报告的“可理解系统”。人类终于可以跳过99%的常规代码,只盯那1%的“奇怪边缘情况”——这才是人脑该干的活。

代码臃肿怎么办?人类最后的优雅干预

不过,测试能抓bug,但抓不了“代码臃肿”。David发现,尽管测试完备,AI还是写了大量重复、不对称、甚至误导性的代码。于是他亲自下场做了一次“人类精修”:把相似逻辑抽象成对称结构,删掉那些让AI自己都绕晕的混乱片段。这一修,反而为AI后续的大规模重构铺平了路——它终于能基于更清晰的骨架,写出更优雅的复杂逻辑。这说明,哪怕在“认知放权”模式下,人类偶尔的“美学干预”依然关键。

从写代码到“养AI”:未来工作的本质是元认知基建

David 用了一个绝妙比喻:传统编程像“走路”,每一步都清晰可控;氛围编程像“开卡车”,你不再亲自搬运货物(代码逻辑),而是负责维护这台“认知卡车”——加油、检修、规划路线。而“测试+测试的测试”就是卡车的GPS、刹车系统和行车记录仪。随着AI重塑全球经济,我们正在建设一个“认知高速公路网”。智力流动性将像汽车时代一样爆炸,催生新的“路边服务站”(AI工具生态)、甚至“智力郊区化”(人类退居决策层)。

但David警告:别让世界变成“人人开卡车”的地狱。街道上全是重型车,行人寸步难行,这不是好生活。他喜欢步行上班——那种对世界的直接感知,那种慢下来的理解力,才是人性的核心。

人类会被AI淘汰吗?关键在“是否想清楚自己要什么”

David 最深的忧虑不是技术,而是哲学:当我们让AI把世界变得越来越复杂(代码行数×20!),我们是否会失去“理解世界”的能力?是否会忘了“自己到底想要什么”?

他呼吁:必须建设强大的“元认知基础设施”——不是更多算法,而是能让我们保持清醒、保持控制的工具和流程。否则,再强大的AI,也可能把我们带向一个我们根本不想要的未来。他反问:Do we want this?(我们真的想要这样吗?)

代码进化全记录:从极简到史诗,AI的造物有多疯狂?

如果你好奇AI到底写了什么,David 开放了完整代码库。你可以对比“前AI时代”的780行版本和现在的13600行巨兽,还能看Claude 自动生成的开发基础设施文档——那套工具链,和大型工程团队用的毫无二致。

这说明:单人开发者+AI代理,已经能复刻整个软件工程体系。而这一切,始于一个329行的怀旧小项目。