<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Software-Engineering on Armstrong Yan</title><link>https://yanqian.github.io/zh/topics/software-engineering/</link><description>Recent content in Software-Engineering 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/topics/software-engineering/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><item><title>AI 原生软件工程（三）：软件即搜索</title><link>https://yanqian.github.io/zh/posts/publish/software-is-becoming-search-why-engineers-are-turning-into-constraint-designers/</link><pubDate>Sat, 18 Jul 2026 23:37:09 +0800</pubDate><guid>https://yanqian.github.io/zh/posts/publish/software-is-becoming-search-why-engineers-are-turning-into-constraint-designers/</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/harness-engineering-is-about-limiting-ai-not-empowering-it/" &gt;AI 原生软件工程（二）：验证框架工程与正确性&lt;/a&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;当实现工作交给 AI 后，理解从何而来？
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;
&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;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;
&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;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;
&lt;p&gt;人们眼中的优秀工程师，往往能够：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;更快写出实现&lt;/li&gt;
&lt;li&gt;更快完成调试&lt;/li&gt;
&lt;li&gt;熟记更多 API&lt;/li&gt;
&lt;li&gt;精通更多框架&lt;/li&gt;
&lt;li&gt;交付更多可以运行的代码&lt;/li&gt;
&lt;/ul&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;h2 id="传统工程在实现稀缺时做建造"&gt;
 传统工程：在实现稀缺时做建造
 &lt;a class="heading-link" href="#%e4%bc%a0%e7%bb%9f%e5%b7%a5%e7%a8%8b%e5%9c%a8%e5%ae%9e%e7%8e%b0%e7%a8%80%e7%bc%ba%e6%97%b6%e5%81%9a%e5%bb%ba%e9%80%a0"&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;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; 架构
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; 实现
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;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;p&gt;工程就是建造。&lt;/p&gt;
&lt;h2 id="ai-让建造变成探索"&gt;
 AI 让建造变成探索
 &lt;a class="heading-link" href="#ai-%e8%ae%a9%e5%bb%ba%e9%80%a0%e5%8f%98%e6%88%90%e6%8e%a2%e7%b4%a2"&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;ul&gt;
&lt;li&gt;五种架构&lt;/li&gt;
&lt;li&gt;三套重构方案&lt;/li&gt;
&lt;li&gt;两种数据库模型&lt;/li&gt;
&lt;li&gt;多套 API 设计&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;于是，工作流程变成了：&lt;/p&gt;</description></item><item><title>AI 原生软件工程（二）：验证框架工程与正确性</title><link>https://yanqian.github.io/zh/posts/publish/harness-engineering-is-about-limiting-ai-not-empowering-it/</link><pubDate>Sat, 18 Jul 2026 23:29:59 +0800</pubDate><guid>https://yanqian.github.io/zh/posts/publish/harness-engineering-is-about-limiting-ai-not-empowering-it/</guid><description>&lt;p&gt;在 AI 原生软件工程中，最重要的也许不是生成，而是约束。&lt;/p&gt;
&lt;p&gt;这是「AI 原生软件工程」系列的第二篇。&lt;/p&gt;
&lt;p&gt;本文承接上一篇：&lt;a href="https://yanqian.github.io/zh/posts/publish/agentic-coding-mental-models-and-the-new-depth-of-software-engineering/" &gt;AI 原生软件工程（一）：智能体编程中的心智模型&lt;/a&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;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;如果实现工作交给了 AI，
&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;上下文更长。&lt;/p&gt;
&lt;p&gt;智能体可以自主运行。&lt;/p&gt;
&lt;p&gt;一次改动多个文件。&lt;/p&gt;
&lt;p&gt;工作流能够自我修复。&lt;/p&gt;
&lt;p&gt;但用 AI 智能体做了一段时间项目后，我却得出了相反的结论：&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;最重要的工程问题，不是如何让 AI 更自主。
&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;而是如何更严格地约束 AI。
&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;怎样才能让 AI 生成的实现可以被放心信任？
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="传统软件开发的基本假设"&gt;
 传统软件开发的基本假设
 &lt;a class="heading-link" href="#%e4%bc%a0%e7%bb%9f%e8%bd%af%e4%bb%b6%e5%bc%80%e5%8f%91%e7%9a%84%e5%9f%ba%e6%9c%ac%e5%81%87%e8%ae%be"&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;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; 实现
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;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;p&gt;直到复杂度不断攀升。&lt;/p&gt;
&lt;h2 id="ai-打破了这个假设"&gt;
 AI 打破了这个假设
 &lt;a class="heading-link" href="#ai-%e6%89%93%e7%a0%b4%e4%ba%86%e8%bf%99%e4%b8%aa%e5%81%87%e8%ae%be"&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;人
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; 意图
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AI
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;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;-&amp;gt; 审查
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;乍看之下，效率很高。&lt;/p&gt;</description></item><item><title>AI 原生软件工程（一）：智能体编程中的心智模型</title><link>https://yanqian.github.io/zh/posts/publish/agentic-coding-mental-models-and-the-new-depth-of-software-engineering/</link><pubDate>Sat, 18 Jul 2026 22:57:49 +0800</pubDate><guid>https://yanqian.github.io/zh/posts/publish/agentic-coding-mental-models-and-the-new-depth-of-software-engineering/</guid><description>&lt;p&gt;AI 能生成代码。验证框架能检验行为。但理解由谁来建立？&lt;/p&gt;
&lt;p&gt;这是“AI 原生软件工程”系列的第一篇。&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;当 AI 降低了实现成本，
&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;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;过去几个月，我一直在密集尝试 AI 辅助的软件开发方式。&lt;/p&gt;
&lt;p&gt;不是自动补全。&lt;/p&gt;
&lt;p&gt;也不只是把 AI 当作编程副驾驶。&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;SPEC
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; 约束
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; 验证框架
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; 智能体执行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; 评估
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;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;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;如果 AI 明天消失，
&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;h2 id="传统模式在实现过程中形成理解"&gt;
 传统模式：在实现过程中形成理解
 &lt;a class="heading-link" href="#%e4%bc%a0%e7%bb%9f%e6%a8%a1%e5%bc%8f%e5%9c%a8%e5%ae%9e%e7%8e%b0%e8%bf%87%e7%a8%8b%e4%b8%ad%e5%bd%a2%e6%88%90%e7%90%86%e8%a7%a3"&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;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; 编写代码
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; 建立心智模型
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;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;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;li&gt;犯错&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;亲手实现，自然会带来理解。&lt;/p&gt;
&lt;p&gt;只是过去，我们未必意识到这一点。&lt;/p&gt;
&lt;h2 id="智能体编程改变了路径"&gt;
 智能体编程改变了路径
 &lt;a class="heading-link" href="#%e6%99%ba%e8%83%bd%e4%bd%93%e7%bc%96%e7%a8%8b%e6%94%b9%e5%8f%98%e4%ba%86%e8%b7%af%e5%be%84"&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;有了 AI 编程，整个循环变了。&lt;/p&gt;</description></item><item><title>播客摘要工具让我明白：摘要不等于理解</title><link>https://yanqian.github.io/zh/posts/publish/a-podcast-summarizer-taught-me-that-summaries-are-not-understanding/</link><pubDate>Sat, 18 Jul 2026 12:13:29 +0800</pubDate><guid>https://yanqian.github.io/zh/posts/publish/a-podcast-summarizer-taught-me-that-summaries-are-not-understanding/</guid><description>&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;
&lt;p&gt;那个项目是一款播客摘要工具。&lt;/p&gt;
&lt;p&gt;源代码公开在这里：&lt;a href="https://github.com/yanqian/podcast-summarizer" class="external-link" target="_blank" rel="noopener"&gt;yanqian/podcast-summarizer&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; -&amp;gt; 转写文本
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; 摘要
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;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;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%9c%80%e5%88%9d%e7%9a%84%e9%97%ae%e9%a2%98%e5%b9%b6%e4%b8%8d%e6%98%af%e5%86%85%e5%ae%b9%e5%a4%aa%e9%95%bf"&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;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;/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;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;/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;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;h2 id="摘要会抹掉通往结论的过程"&gt;
 摘要会抹掉通往结论的过程
 &lt;a class="heading-link" href="#%e6%91%98%e8%a6%81%e4%bc%9a%e6%8a%b9%e6%8e%89%e9%80%9a%e5%be%80%e7%bb%93%e8%ae%ba%e7%9a%84%e8%bf%87%e7%a8%8b"&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;p&gt;这正是问题的核心。&lt;/p&gt;
&lt;p&gt;很多时候，我们恰恰要沿着这条路走一遍，才能真正理解一个观点。&lt;/p&gt;</description></item></channel></rss>