首页 > 人工智能 > 人工智能 > AI 编程热潮下的万字思考 —— 规避风险,善用其利
编者按: 在 AI 技术席卷软件工程的今天,我们是否真的可以仅凭“氛围”和直觉,就构建出可靠、安全且可维护的生产级系统?
我们今天为大家带来的这篇文章,作者的核心观点是:“氛围编程(vibe coding)”与“AI 辅助的工程实践”存在本质区别,前者虽在创意激发和快速原型中具有价值,但绝不能替代结构化的工程方法。
文章通过多个维度深入探讨了这一观点:从 FAANG 团队的实际工作流程切入,指出真正的 AI 辅助的工程实践是在严格的设计、审查和测试框架内使用 AI 作为“效能倍增器”。继而以维恩图形象对比了“氛围编程者”、“竞技牛仔”和“困局囚徒”三类开发者原型,警示过度自由或过度约束都将阻碍可持续开发。最后还结合 CTO 调研和社区讨论,指出盲目依赖 AI 生成的代码可能导致安全漏洞、性能崩溃与可维护性灾难,并提出了“规范驱动开发”和“Agentic AI”等更负责任的工作流程建议。
作者 | Addy Osmani
编译 | 岳扬
氛围编程(vibe coding)并不等同于 AI 辅助的工程实践。近期一则 Reddit 帖子[1]描述了某 FAANG 团队如何使用 AI,由此引发了一场重要讨论:“氛围编程”与专业化的“AI 辅助的工程实践”。

虽然该帖子被包装成前者的范例,但它详细描述的流程 —— 包含技术设计文档、严格的代码审查和测试驱动开发 —— 在我看来恰恰是后者的一个清晰例证。将它们区分非常重要,因为将二者混为一谈既会贬低工程学科的专业性,也可能让新人误以为构建健壮的生产级软件无需严谨流程,这种认知极其危险。
氛围编程(vibe coding)能很好地推动开发进程、保持势头,但一旦缺乏结构化的工程方法,它在生产环境的严苛要求下就会不堪重负,最终崩溃。
需要明确的是:“氛围编程”是指完全沉浸于与 AI 合作协同的创造性流程(通过高层级的提示词),本质上不再过多关注代码本身的细节。这种方式不经深入审查就直接采纳 AI 提供的建议,并专注于快速、迭代式的实验。这使得它非常适合用于构建产品原型、最小可行产品(MVP),学习研究以及进行 Karpathy 所说的“周末练手项目”。这种方法(氛围编程)是开发者建立编程直觉、初学者降低编程学习难度的有效途径。它优先追求速度和探索性,而非专业应用所要求的正确性和可维护性。
在完全随性的氛围编程与稍加规划、遵循规范驱动开发、提供充分上下文等做法之间存在过渡的区间,而贯穿整个软件开发生命周期的“AI 辅助的工程实践”则属于另一维度。

与那篇帖子的观点相反,Reddit 帖子中描述的流程实际上是将 AI 系统化集成到成熟的软件开发生命周期的方法。这才是真正的“AI 辅助的工程实践” —— 人工智能在这里扮演的是强力协作伙伴的角色,而并非要取代基本的工程原则。在这种模式中,开发者将 AI 作为“效能倍增器”,用以处理诸如生成模板代码或编写初始测试用例等任务,但这些操作始终被约束在一个结构化的框架之内。最根本的区别在于人类工程师始终牢牢掌握控制权。他们负责系统架构设计,审查并理解 AI 生成的每一行代码,并确保最终产品具备安全性、可扩展性和可维护性。帖子中提到的开发速度提升 30%,是强化和优化了原有扎实流程的结果,而不是抛弃了这个流程。
对于工程师而言,将这种纪律严明的、使用 AI 增强的工作流称为“氛围编程”,是对其中所涉及技能和严谨性的错误描述。对于刚入行的新人来说,这会造成一种危险且错误的印象,让人以为不需要理解底层代码或工程基础,仅靠写提示词就能做出可用的产品。若想正确运用 AI 进行开发,请从扎实的工程设计开始,让所有产出物都经过严格的人工审查,并只将 AI 视为工程工具箱中一种无比强大的工具,而非取代工程所需专业知识和经验的魔法棒。
目前技术社区中各派的立场分裂:乐观主义者试“氛围编程”为革命,怀疑论者则认为这是换汤不换药的牛仔式编程(译者注:指的是一种无组织、无纪律、不受约束的软件开发方式。)。乐观主义者将“氛围编程”称为下一个抽象层 —— 这就像从汇编语言跃升到 Python 的变革。外部力量将不断推动其发展直至成熟。
务实派将其用于“技术探针”(用于快速验证),但事后必定施加规范约束。使用 AI 应如对待初级开发者:善用其助力,但绝不放任自流。怀疑论者则将其斥为营销话术 —— “若我能一眼识破是氛围编码的产物,这代码便不合格”。优秀软件的核心标准从未改变。社区中理性的声音认为:氛围编程(vibe coding)是激发创造力的“沙盒”,但要想实现规模化扩展,则必须依靠严谨的工程方法。

福雷斯特·布雷泽尔(Forrest Brazeal[2])用一张有趣的维恩图,以“绳索”(比喻自由与约束)为隐喻,对比了 AI 辅助时代的三种工程师人格 —— “氛围编码者”、“竞技牛仔”和“困局中的囚徒”。每种原型都代表了一种极端的工作方式,而这些方式都难以产出生产级的软件。
在软件开发中,“绳索”这个比喻象征着开发者在构建软件时被授予(或自我赋予)的自由度和风险承受水平。
“竞技牛仔” 在极少的限制中如鱼得水,他们崇尚西部荒野式的编程风格,具有极高的风险承受力且极少接受监督。他们会欣然即兴地“套索”出新功能或修复方案(有时真就全靠肾上腺素驱动)。“困局中的囚徒” 则在严格的规则下运作,被僵化的约束、沉重的治理或对错误的恐惧所捆绑 —— 他们行动缓慢而谨慎,甚至几乎不动。而介于二者之间的,是现代 AI 赋能的开发者:“氛围编程者” 被给予的自由度刚好足以让他们产出不可靠、不安全、难以维护的代码。
他们通过自然语言的“氛围提示词”快速生成代码,并盲目信任输出结果,往往既没有充分理解也不测试其可靠性。
不同风格的开发者,用 AI 的方法和敢冒的风险也都不一样:
现实中的工程师并非二元标签 —— 同一个人可能因项目与压力差异,同时具备三种人格的特质。该维恩图的精髓在于:三种极端路径都终将失效,过度自由与过度约束都会阻碍可持续的工程实践。
关键在于找到平衡点 —— 给予开发者足以创新的自由度,但又不至于让其(或代码库)被缺陷与技术债扼住咽喉。本报告后续将探讨为何放任的“氛围编程”会引发行业领 袖与网络社区的尖锐批评,以及团队如何更负责任地驾驭 AI 辅助开发。
社区共识很明确: 氛围编程能够加速探索进程,却埋下在生产环境引爆的隐患。 近期的社区讨论也凸显出以下这些重复出现的问题:
整个软件行业的资深工程领导者们正发出明确警告:AI 辅助的“氛围编程”在生产代码库中引发问题的速度可能远快于其解决问题的速度。Canva 首席技术官 Brendan Humphreys[4] 直言不讳地表达了这一观点:
“不,你不可能靠氛围编程来构建最终要上线运行的生产级软件 —— 除非你放弃对质量、安全性、安全防护与长期可维护性的要求。”
这些工具需要由资深工程师严密监督,尤其在处理关键任务代码时。换言之, AI 能够加速开发进程,但永远无法替代软件工程所需的严格规范。 一旦跳过这些规范,往往会导致系统脆弱不堪和大量隐性问题的堆积。
最新的调查结果印证了这些警告。在 Final Round AI[5] 于 2025 年 8 月的调研中,18 位 CTO 被问及氛围编程时,16 位报告称遭遇过由 AI 生成代码直接导致的生产事故。这些技术领导者没有炒作趋势的动机 —— 他们的观点来自实战中的惨痛教训。正如某位总结者所言[4]:
“AI 曾承诺让我们都成为拥有 10 倍效能的开发者,现实却把新人变成提示词工程师,让资深开发者沦为清理 AI 烂摊子的代码保洁员。”
当交付的功能漏洞百出以至于需要凌晨两点紧急抢修时,所谓快速交付的能力就失去了意义。
他们谈论的是哪些类型的故障?CTO 们列举了性能崩溃、安全漏洞和可维护性噩梦等案例:
行业领 袖的共识是:氛围编程会危及软件的质量属性 —— 安全性、代码清晰度、可维护性及团队知识传承。
这些行业领 袖并非抗拒新技术的勒德主义者 —— 他们才是对系统稳定运行负责的人。他们传递的信息虽然尖锐但具有建设性:利用 AI 作为辅助工具,而非放弃职责。代码依然需要人类判断力,尤其是将要部署到线上生产环境的代码。正如一位资深开发者所言:"AI 工具是副驾驶,而非自动驾驶系统。"它们能协助驾驶飞机,但必须由人类飞行员规划航线,并在遭遇湍流时随时准备接管操控。
不仅是 CTO 和思想领 袖在敲响警钟 —— 2025 年以来,一线开发者社区(那些日常与 AI 工具打交道的实战派)也在就氛围编程展开激烈辩论。在 Reddit[7] 和 Hacker News[8] 上,相关话题获得了数百次点赞,资深开发者们分享着血泪教训与对其的尖锐批评,间或夹杂少数成功案例。整体舆论氛围倾向于对在重要项目中使用未经审查的 AI 代码保持高度怀疑,但氛围编程对特定场景内的应用持有限乐观态度。
批评声中,开发者们讲述氛围编程如何负面影响其工作流程与团队协作。某 Reddit 热帖[9]的最高赞评论慨叹:
“我只希望人们别再在 PR 里 @ 我 —— 他们自己明显都没读过代码,却指望我审查上千行完全陌生的氛围编程出来的功能,这玩意甚至连 CI 都没通过。”
这种挫败感显而易见:如果代码作者自己都不理解 AI 生成的代码或懒得运行测试,代码审查就成了闹剧。它将责任转嫁给毫不知情的同事。另一位评论者回应[9]称此举“远低于专业素养的最低标准”,就像工人草率施工让他人收拾残局。当开发者未尽应尽的职责就将 AI 的输出丢给他人时,同行评审机制与团队信任便土崩瓦解。
没有人愿意与这样的“工程师”共事,其贡献只是从 ChatGPT 复制粘贴,并在出问题时耸肩推诿。
“这算不上工程实践,只是在赌运气”[6]的表述(源自 ShiftMag 文章观点的转述)在这些讨论中被反复引用。它精准传递了这样的观点:未经适当的审查/测试的氛围编程无异于指望软件靠魔法运行。许多开发者指出编程应是工程学科,而非许愿仪式。
然而在批评声浪中,技术社区也涌现出相反的观点和稍微不一样的观点。并非所有人全盘否定氛围编程。 部分实践者发现其在某些场景中优势显著。 某 Hacker News 高赞评论[8]借用经典的“创新者窘境”[8]理论框架:今天有专家视氛围编程为玩具,明天它就可能进化并颠覆旧有的方法。虽多数回应不认同这种必然性,但该讨论开启了一个乐观的视角:或许我们正处于 AI 编码的早期阶段,未来 AI 或方法论的改进将解决现有缺陷。
某 HN 用户分享了一个成功案例[11]:他用氛围编程极速地开发了一款定制的内部工具。
“上周我将一堆 Docker Compose 配置转换为 Terraform(Opentofu) —— 边看电视边用 Claude 操作,花了一两小时。若采用阅读文档和 Stack Overflow 的传统方式,随便都得耗上一周。”
该开发者构建的并非面向客户的产品,而是在自动化一项繁琐的基础设施任务。在此场景下,氛围编程大获全胜:既节省时间,而且生成的代码对于他控制的内部工具来说也“足够好用”。许多人纷纷附和,认为对于小规模或一次性的脚本和胶水代码,氛围编程可以极大提升生产效率。这是经典的 80/20 权衡 —— 若需快速实现且唯一利益相关者是自己时,AI 可在数分钟内产出解决方案。
关键在于,这个案例中的开发者清楚边界:他将 AI 视为加速自身工作的助手(甚至边编码边娱乐),并大概率也验证了 AI 的输出。这符合行业内多次讨论中的共识:“若你清楚自己在做什么,它就是绝佳的时间节省器。”言下之意是:经验丰富的开发者可以像使用动力工具那样运用氛围编程加速繁琐工作的进行,但仍需架构设计、过程引导与结果复核。若缺乏经验,同样的动力工具会造成严重破坏。
讨论中还出现了一些有趣的类比:“ 与 agentic LLMs 协作编程本质就是项目管理[8]。”你的工作不再是编写代码,而是为 AI 分解任务、验证每个模块并整合结果。本质上如同管理一位非常初级(但极快)的开发者的项目经理。有人认为这样会更轻松,故称“氛围编程”,另一些人则认为仍需扎实的开发能力,只是应用方式不同。成功者会完成一系列系统化的处理步骤,将问题拆解为可验证的小型提示词,通过拆分、验证、迭代保持控制力。失败者则向 GPT 抛出一个模糊的提示词后直接粘贴输出。
社区的基本共识是:氛围编程并非银弹。资深开发者大多将其视作原型设计和自动化完成琐碎任务的有趣工具,而非复杂系统[8]中严谨工程实践的替代品。“LLMs 将编写所有软件”的炒作正在遭受质疑。与此同时,大家也承认 AI 编码助手将长期存在,若审慎使用[4],可带来巨大的效率提升。目前的讨论焦点正转向如何将 AI 融入工作流程,同时还不丧失软件工程的严谨性 —— 这将是本文接下来要探讨的方向。
若纯粹的氛围编程对生产环境有风险,它是否仍有价值?行业领 袖与实践者的答案都是肯定的:氛围编程在某些特定场景下表现卓越,尤其在快速原型设计、探索性项目及作为创意辅助工具时,但必须知晓何时停止“氛围营造”并开始工程化实践。
FinalRound 调查[5]中多位 CTO 承认他们并不“完全否定氛围编程”,而是通过划分使用场景来实现最大效益。LittleHelp 创始人 Matt Cumming 分享道[5],他可以“在一天内无故障创建并部署一个功能性的微型 SaaS 网络应用,这堪称疯狂”。他利用一个周末时间,借助 AI 来完成繁重的工作,将创意转化为一款可以上线的产品。这种速度前所未有,将可能需要 2-3 周完成的 MVP 构建压缩至 48 小时。对于黑客松、演示项目、内部工具及快速验证产品与市场的匹配度而言,氛围编程可能改变游戏规则。它让小团队(甚至独立开发者)在功能输出上实现远超团队规模的表现。
然而,每位称赞这类成功案例的领导者都附加了重大限制条件。Matt Cumming 曾付出代价才认识到:没有约束地释放 AI 可能适得其反。他描述了自己的一个早期项目在历经一个月的开发后,因某些 AI 生成的代码损坏或错误,在“几分钟内被 AI 彻底摧毁”[5]。这次经历令他痛定思痛,从而建立了一套严谨的工作方法:
“我们使用 AI 辅助编码时,首先要与 AI 协作撰写功能规格说明和项目文档中的实施步骤。我吸取的另一个教训是:需要要求智能体对所有新增功能进行安全检查。”
换言之,需要利用 AI 协助规划与审查,而非仅仅将其作为代码生 成器。通过让 AI 先勾勒设计框架,他确保了自己对系统架构有自己的思考。通过要求 AI 对输出进行安全分析,他为漏洞防范增设了自动化的基础检查。他的团队还将氛围编程严格限定在“一次性的项目与产品原型,而非需要扩展的生产系统”上。通过氛围编码构建的应用仅作为概念验证(Proof of Concept)存在,后续可能需要重写或强化才能投入实际使用。
另一位领导者 Featured 公司 CEO Brett Farmiloe 对此表示赞同:
“一切从零开始时,氛围编程确实非常高效……我们使用 v0(某个 AI 工具)快速构建并部署了网页站点。但对于已定型的生产环境中的代码库,我们仅将氛围编程组件作为起点 —— 随后由技术团队成员接手完成后续工作。”
他与 Cumming 都将 AI 生成的代码视作脚手架。快速搭建框架并验证构想,这种方法非常高效,但绝不会将摇晃的脚手架留作最终建筑,需用坚固材料替换或加固它。用软件术语来表述:AI 生成的项目原型必须经过人类工程师的重构、测试并全面掌控后,才能成为永 久的解决方案。
另一获认可的应用场景是遗留代码重构[4]。某分析指出,部分公司允许 AI 将旧代码片段用新框架或新编程语言重写,以此作为“起步助力”。由于这些代码最终需要经过全面审查与测试,所以使用 AI 完成暴力翻译或机械性工作可以节省时间。类似地,AI 能协助修复已知的代码缺陷:例如“解决代码中的这 5 个特定缺陷” —— 这是给 AI 一个非常具体、明确的任务,而非全权委托 AI 生成。此类场景中,范围受限且输出经过验证,更贴近 AI 辅助编程而非盲目的氛围编程。
在此可以总结 2025 年氛围编程最 具价值的应用场景:
然而在所有场景中,都默认有一个前提:经验丰富的开发者参与决策循环、处于核心流程之内。那些通过氛围编程取得成功的人,依然会运用自己的判断力来有效引导 AI 并验证其输出。他们将其视为与一位不知疲倦但容易出错的初级开发者进行结对编程。与此形成鲜明对比的是,新手可能认为 AI 是跳过学习过程的魔法捷径 —— 这种方式往往以挫折和失败告终。如果初学者过度使用氛围编程,可能会绕过必要的学习阶段,培养出简历上有亮眼项目但缺乏基础技能的毕业生 —— 这是教育工作者指出的另一个长期风险。最终,当 AI 与人类经验结合时,它能显著减少琐碎工作所耗时间,但你很可能无法完全跳过人工审查与改进环节:

氛围编程作为一项创意的激发与加速工具还是十分有价值的,但氛围编程出来的代码如果真的要用于正式项目,绝不能直接使用。它必须只是一个初稿或原型,需要经过后续的工程化处理。用它实现从零到项目演示阶段的突破,或生成样板代码,或探索多种方案。随后迎来最关键的阶段:将 AI 生成的代码或原型转化为符合生产要求的、健壮的代码。如何有效实现这一过渡将是我们接下来的焦点。
针对氛围编程的缺陷,一个充满前景的发展方向是规范驱动和“agentic” AI 编码方法[12]的兴起。这些方法旨在保留 AI 代码生 成的生产力优势,同时引入更多明确的开发流程和代码规范、设计与架构思考,以及代码审查、测试、安全检查等质量保障措施 —— 本质上是为自由散漫的氛围编程过程添加护栏。
使用开发规范驱动 AI 开发意味着在编写代码前,首先要明确开发规范或项目设计文档(通常与 AI 协作创建)。 工程师不会直接发送给 AI 一句“帮我构建个功能”,而是告诉 AI “协助我规划该功能的需求与模块设计”。通过制定明确规范(无论是一段文字、一份正式的设计文档,还是一个简单的步骤列表和函数列表),开发者能确保自己与 AI 对目标达成共识。这就像先编写伪代码或用户故事(译者注:是敏捷开发中的需求描述方式,格式通常为“作为[某角色],我想要[完成某事],以便[实现某价值]”。它从用户视角定义功能价值。)。此举解决了氛围编程的一大缺陷:缺乏方向性。与 AI 共同撰写功能规范能使团队保持不脱离正轨,约束其输出必须严格符合预设的目标,从而避免产生“聪明但无用”的复杂代码。
在实践中,开发规范驱动的工作流可以包含:首先引导 AI 生成高层级规划、接口定义甚至测试用例,并持续迭代这些内容,直至人类认可该方案的合理性,随后才要求 AI 实施具体计划。这类似于优秀工程师指导初级开发者的方式 —— 你不会让初级开发者第一天就独立编写整个子系统,而是会先共同商定项目设计。面对 AI,我们要学会采用相同的方式:将它视为需要详细蓝图的初级伙伴。早期证据表明,这种方法比临时性的提示词能产生更好的结果。
Agentic AI 方法更进一步,使 AI 不仅能遵循规范,还能执行部分自主行动(例如运行代码、进行测试和持续优化。)。 此处的“Agentic”指 AI 智能体可接受高层级目标,并在限定范围内以自主迭代的方式实现目标。例如,部分工具允许 AI 执行所编写的代码、观察结果并修复错误 —— 全程无需用户在每一步骤都发出明确指令。
规范驱动的开发方法与 Agentic 方法从以下几个主要方面区别于初级的氛围编程:
实践中,探索这些方法的团队常采用如下策略:
这些措施都是试图以实际的工程严谨性削弱“直觉式编程”的风险。它们承认大语言模型非常有用,确实能理解用户意图并为各种任务生成可行代码,但只有在清晰的指引和明确的边界下才能发挥最佳效果。若放任自流,它们很容易偏离正轨,或生成表面可用却在边界场景失效的解决方案。
本质上,规范驱动方法与 Agentic 方法都旨在融合 AI 与人类的优势:人类擅长定义问题、理解语境和做出判断。AI 擅长快速探索解决方案、编写样板代码,甚至在经过适当配置后能协调任务执行。AI 辅助工程的未来很可能在于这种中间路线 —— 既非纯靠提示词与祈祷的氛围编程,亦非完全自动化,而是通过增强型工作流实现用 AI 放大人类设计能力,同时以人类约束 AI 的过度发挥。
最佳方案是采用混合模式。 在沙盒阶段:自由地进行氛围编码,测试项目创意,构建项目原型。 在生产阶段:则需运用工程规范 —— 通过运行程序或代码片段,来验证其行为是否符合预期、是否没有 Bugs;在不改变代码外部行为的前提下,对代码内部结构进行修改和优化,使其变得更清晰、更易于理解和维护;在编写具体代码之前,对软件的系统结构、模块组成、它们之间的关系以及技术选型等进行规划和设计;在软件开发过程中,主动采取措施防止安全漏洞(如代码注入、数据泄露、未授权访问等)出现。
开发者及其开发团队可以通过重新引入所有在 AI 生成过程中可能被跳过的传统软件工程实践,将氛围编程构建的产品原型转化为健壮的软件系统:进行设计、测试、审查,并对其负责。
快速完成产品初稿并无不可,甚至值得称赞。只要所有人都明白,之后必须跳出“氛围模式”,切换到“工程模式”。高效的开发团队很可能会培养出一种直觉,知道何时该驶入 AI 快车道,何时该回归到经过测试和审查的稳定道路上。最终的目标始终如一:交付可运行、安全且能被团队维护的软件。
开发工具和开发方法在不断演进,但在 AI 辅助工程的时代,责任担当、工艺精神和团队协作依然至关重要。
END
本期互动内容 🍻
❓您更喜欢哪种角色?
A. 氛围探索者:优先追求速度和创意,代码能跑就行。
B. 工程实践派:AI 只是工具,严格流程和审查才是王道。
C. 混合型:原型阶段用 A,生产环境用 B。
文中链接
[2] https://forrestbrazeal.com/
[3] https://www.reddit.com/r/programming/comments/1l4x5tu/the_illusion_of_vibe_coding_there_are_no/
[4] https://www.vktr.com/ai-technology/vibe-coding-explained-use-cases-risks-and-developer-guidance/
[5] https://www.finalroundai.com/blog/what-ctos-think-about-vibe-coding
[6] https://shiftmag.dev/the-illusion-of-vibe-coding-5297/
[7] https://www.reddit.com/r/programming/comments/1l4x5tu/the_illusion_of_vibe_coding_there_are_no/
[8] https://news.ycombinator.com/item?id=44959069
[11] https://news.ycombinator.com/item?id=44960238
本文经原作者授权,由 Baihai IDP 编译。如需转载译文,请联系获取授权。
原文链接:
https://addyo.substack.com/p/vibe-coding-is-not-the-same-as-ai
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70018536/viewspace-3098512/ ,如需转载,请注明出处,否则将追究法律责任。