<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vibe-Coding on Armstrong Yan</title><link>https://yanqian.github.io/zh/tags/vibe-coding/</link><description>Recent content in Vibe-Coding on Armstrong Yan</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sat, 18 Jul 2026 23:53:44 +0800</lastBuildDate><atom:link href="https://yanqian.github.io/zh/tags/vibe-coding/index.xml" rel="self" type="application/rss+xml"/><item><title>AI 原生软件工程（四）：氛围编程无法取代人的判断</title><link>https://yanqian.github.io/zh/posts/publish/against-vibe-coding-why-human-judgment-still-matters/</link><pubDate>Sat, 18 Jul 2026 23:53:44 +0800</pubDate><guid>https://yanqian.github.io/zh/posts/publish/against-vibe-coding-why-human-judgment-still-matters/</guid><description>&lt;p&gt;实现可以自动化，评估也可以自动化。但判断，始终只能由人来做。&lt;/p&gt;
&lt;p&gt;这是“AI 原生软件工程”系列的第四篇。&lt;/p&gt;
&lt;p&gt;本文接续上一篇：&lt;a href="https://yanqian.github.io/zh/posts/publish/software-is-becoming-search-why-engineers-are-turning-into-constraint-designers/" &gt;AI 原生软件工程（三）：软件即搜索&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;第一篇追问，我们如何形成理解。&lt;/p&gt;
&lt;p&gt;第二篇追问，我们如何获得正确性。&lt;/p&gt;
&lt;p&gt;第三篇提出，软件正在变成一种搜索过程。&lt;/p&gt;
&lt;p&gt;但有一个危险的误解，必须说清楚：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;只要有智能体、验证框架和约束，
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;软件就能自行生产出来。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;事实并非如此。&lt;/p&gt;
&lt;p&gt;在第二篇里，约束帮助我们获得正确性。&lt;/p&gt;
&lt;p&gt;在第三篇里，约束塑造了实现方案的搜索过程。&lt;/p&gt;
&lt;p&gt;这一篇要继续追问：谁来为约束本身负责？&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;谁来决定该优化什么，
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;该拒绝什么，
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;又有哪些东西从一开始就值得做？
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;开始采用 AI 辅助的软件开发流程后，我注意到一个出乎意料的现象。&lt;/p&gt;
&lt;p&gt;实现能力越强，判断反而越有价值。&lt;/p&gt;
&lt;p&gt;起初，我觉得这有些反常。&lt;/p&gt;
&lt;p&gt;AI 越强，人的决策不应该越不重要吗？&lt;/p&gt;
&lt;p&gt;结果恰恰相反。&lt;/p&gt;
&lt;p&gt;实现不再是瓶颈。&lt;/p&gt;
&lt;p&gt;方向才是。&lt;/p&gt;
&lt;h2 id="氛围编程好用直到失控"&gt;
 氛围编程：好用，直到失控
 &lt;a class="heading-link" href="#%e6%b0%9b%e5%9b%b4%e7%bc%96%e7%a8%8b%e5%a5%bd%e7%94%a8%e7%9b%b4%e5%88%b0%e5%a4%b1%e6%8e%a7"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;大多数开发者都经历过这样的过程。&lt;/p&gt;
&lt;p&gt;一开始，你只有一个简单的想法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;把 X 做出来。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;AI 生成代码。&lt;/p&gt;
&lt;p&gt;你稍作调整。&lt;/p&gt;
&lt;p&gt;跑通了。&lt;/p&gt;
&lt;p&gt;于是继续往下做。&lt;/p&gt;
&lt;p&gt;一个个小胜利不断累积。&lt;/p&gt;
&lt;p&gt;项目也渐渐变大。&lt;/p&gt;
&lt;p&gt;直到某个时刻，问题突然一股脑冒了出来：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;架构渐渐偏离原来的方向&lt;/li&gt;
&lt;li&gt;抽象层越堆越多&lt;/li&gt;
&lt;li&gt;调试越来越慢&lt;/li&gt;
&lt;li&gt;对系统的信心彻底崩塌&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;系统依然能运行。&lt;/p&gt;
&lt;p&gt;但已经没人说得清，它为什么能运行。&lt;/p&gt;
&lt;p&gt;项目陷入一种奇怪的状态：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;好像一切都能推倒重来。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;却没有任何东西真正处于掌控之中。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我把这叫作氛围编程。&lt;/p&gt;
&lt;p&gt;并不是因为 AI 不好。&lt;/p&gt;
&lt;p&gt;而是因为，每一步进展都不再对应一个经过认真权衡的决定。&lt;/p&gt;
&lt;h2 id="测试通过带来的错觉"&gt;
 测试通过带来的错觉
 &lt;a class="heading-link" href="#%e6%b5%8b%e8%af%95%e9%80%9a%e8%bf%87%e5%b8%a6%e6%9d%a5%e7%9a%84%e9%94%99%e8%a7%89"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;面对这种问题，一个常见的回答是：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;多加一些测试就好了。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我也这样做过。&lt;/p&gt;</description></item></channel></rss>