<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Information Theory on Leslie Liu</title><link>https://leslieo2.github.io/tags/information-theory/</link><description>Recent content in Information Theory on Leslie Liu</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 19 Apr 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://leslieo2.github.io/tags/information-theory/index.xml" rel="self" type="application/rss+xml"/><item><title>拆解 Vibe Coding：一个信息论视角</title><link>https://leslieo2.github.io/posts/vibe-coding-information-theory/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0800</pubDate><guid>https://leslieo2.github.io/posts/vibe-coding-information-theory/</guid><description>&lt;h2 id="从一句咒语开始"&gt;从一句咒语开始&lt;/h2&gt;
&lt;p&gt;动念写这篇文章，是因为最近看到了一些具有神秘色彩的言论，比如说第一性原理咒语：一些人声称，如果在 Vibe Coding 的时候，让模型基于第一性原理思考，会获得更好的效果。听起来，“第一性原理”好像变成了一个魔法咒语，具有了点石成金的魔力。那么我今天也试着用第一性原理，从香农信息论的视角，去拆解所谓的 Vibe Coding 。&lt;/p&gt;
&lt;h2 id="信息论视角下的软件"&gt;信息论视角下的软件&lt;/h2&gt;
&lt;p&gt;根据信息论的基本观点，信息被用于消除系统中的不确定性，可以把软件建模为“有效信息”的集合。这里的有效信息，并不是一个严格的信息论术语，而是一种便于讨论的定义：它指的是构成该软件核心语义、并使其区别于其他软件的那部分信息。&lt;/p&gt;
&lt;p&gt;举例而言，对于一个 SaaS 产品，其架构与技术选型往往属于有效信息；而对于一个面向大众的消费级产品，用户更关心的是其交互体验与视觉设计，这些才构成其有效信息。换言之，“什么是有效信息”取决于使用者的视角。&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://leslieo2.github.io/images/posts/claude-shannon.png"
 alt="Claude Shannon 肖像"&gt;&lt;figcaption&gt;
 &lt;p&gt;克劳德·香农（Claude Shannon）。“Claude Code” 实际上就是致敬 Claude 香农。&lt;/p&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id="vibe-coding-的信息结构"&gt;Vibe Coding 的信息结构&lt;/h2&gt;
&lt;p&gt;如果回看编程语言的发展路径，会发现它一直在做同一件事：汇编语言对底层二进制进行抽象，高级语言又在汇编之上进一步屏蔽实现细节。按这个演进方向，AI 原本也应该继续抬高软件生产的抽象层级，帮助开发者屏蔽代码本身。&lt;/p&gt;
&lt;p&gt;但实际情况并不是这样。AI 的介入是跨层的：它不仅替代部分底层实现，还参与、甚至替代部分高层决策。从这个角度来看，所谓的“有效信息”，其实就是使用者角度所关心的那一层信息；而 Code Agent 会侵入不同层级进行修改。&lt;/p&gt;
&lt;p&gt;正因为 Code Agent 的这种特性，我们才可以进一步讨论：在这种协作方式里，究竟哪些信息该由人提供，哪些信息由 Agent 补全。&lt;/p&gt;
&lt;p&gt;我们可以把 Vibe Coding 生产的软件拆解为两部分：一部分信息由人类通过 prompt 提供，另一部分由 Code Agent 补全。当人类提供的信息不足时，Code Agent 会选择概率最高的实现方式-这种概率偏好在模型训练结束后就固化了- 这会使软件更容易在架构、交互和实现细节上落入高频范式，进而导致软件的同质化。相反，如果人类提供的信息充足，那么 Code Agent 在很大程度上会退化为一个“翻译器”或“执行器”：它负责将已有的信息，从一种表达形式转换为另一种表达形式。&lt;/p&gt;
&lt;p&gt;这就意味着，如果人类通过 prompt 提供的信息足够充足的话，它本质上也已经非常接近实现代码——只是它用自然语言表述。在这里可以引入 Edsger W. Dijkstra 在&lt;a href="https://www.cs.utexas.edu/~EWD/ewd06xx/EWD667.PDF"&gt;《EWD667》&lt;/a&gt;中的一个经典批评。他指出，“自然语言编程”之所以愚蠢，是因为它试图用歧义的、不确定的自然语言，去替代简洁的、确定的形式化语言。如果我们真能用自然语言描述一个软件，其篇幅往往会远远超过等价的形式化代码。今天的 Code Agent 当然有别于他所批评的传统“自然语言编程”想象，但他的提醒仍然成立：自然语言天然是歧义的，而歧义总要在后续环节中被消解。&lt;/p&gt;
&lt;p&gt;因此，一个自然的问题是：基于上面的建模，Vibe Coding 的意义究竟何在？&lt;/p&gt;
&lt;h2 id="五类场景"&gt;五类场景&lt;/h2&gt;
&lt;p&gt;我认为，它的价值主要体现在以下几个场景中。&lt;/p&gt;
&lt;h2 id="第一类场景是有效信息的等价转换"&gt;第一类场景是“有效信息的等价转换”&lt;/h2&gt;
&lt;p&gt;在这类场景下，有效信息的源头与终点在语义上是等价的，差别仅在表达形式。例如，将一个 TypeScript 编写的项目用 Rust 重写。至于 Rust 的忠实信众，他们的长期事业之一，似乎就是将一切软件都用 Rust 重写一遍。两者在功能与逻辑上可以保持完全一致，Code Agent 只是加速这一转换过程，而不引入新的有效信息。&lt;/p&gt;</description></item></channel></rss>