Huzzah:一种用 AI 编程的新范式

查看原文 HN 讨论

文章摘要

作者 Daniel Vaughn(自 2009 年起做前端工程)说 2026 年头几个月对工程师来说「难以置信」——编码 agent 突然好到不需要手写代码了;但蜜月期结束后他撞了墙:到了 8 月,他感到「彻底疲惫」,厌倦了为每一处改动都写长篇英文,同时又不想回到全手写代码的乏味里。他的论证链条是三条具体的抱怨,而不是笼统的「AI 不好」:

(1)没有可靠的人类意图记录。 prompt 用完就丢,代码到底是不是 AI 生成的也无从判断——那个「表达人类想让机器做什么」的中心权威消失了。(2)聊天式 prompt 是命令式的、逐步的,描述的是「对应用做的改动」而不是「应用本身」,因此指令在开发过程中被反复重述、反复消耗 token,效率低下。(3)自然语言里很大一部分是为社交功能存在的,不是为传递信息,平均一句话的真实信息量很稀薄,用这种方式对机器说话很累赘。

针对这三点,他做了个实验性编辑器 Huzzah,把 prompt 的三个属性整体翻转:coding agent 的 prompt 是「长篇 + 命令式 + 一次性」,Huzzah 的 prompt 是「伪代码 + 声明式 + 持久化」。工作流是:新建一个 fizz_buzz.hz 文件,用你自己喜欢的方式写伪代码(他给的写法大意是 fizz_buzz() 下面缩进写 loop 100modulo 3 ? "fizz"5 ? "buzz"both ? "fizz buzz");保存时编辑器自动生成真实代码。要改需求时直接改文件——比如把 loop 100 改成参数化的 fizz_buzz(n) / loop n——保存时 Huzzah 捕获 diff 并把 diff 当作 prompt,只重新生成受影响的源码。他还给了购物车(list cart / add_item(id) / checkout() 返回 cart.sum(item by price) 并格式化成价格)和 Todo List(含带类型的 Todo 结构、toggle_todotodo.completed = NOT .completed)两个例子。

他列出的好处:伪代码比长篇 prompt 简洁可读得多;写它时你的脑子是投入的,感觉像在「设计代码的形状」;详略程度完全由你控制;因为是人写的,它天然就是开发文档;还可以写语言无关的伪代码,作为多语言/多环境目标的共同基础(他举的例子是 CRDT 这类复杂算法)。他也诚实列了 caveats:这套做法在大规模场景下可能有问题;更适合新项目而非既有代码库;如果你缺少领域专长,自然语言反而更好用;跨文件依赖这类东西可能难以可靠表达;LSP 类功能会失效(虽然理论上也能生成)。项目目前只是概念验证(web app,跑在 localhost:5173),源码在 github.com/danielvaughn/hz。他在 HN 自述里补充了一个文章里没强调的关键点:编辑器会持久化伪代码与生成代码之间的 source map,任何一行生成代码都能追溯回产生它的那行伪代码。

HN 评论精华

这条 Show HN 有 379 分、209 条评论,作者本人几乎逐条回复,讨论质量很高。主线是三问:这跟已有的东西(spec-driven development、字面编程、UML、commit message、PDL)有什么区别?伪代码这层抽象是不是「用 LLM 当编译器」的倒退?以及扩展到多文件/模块级还行不行? 另有一条相当长的哲学支线跑到了「agent 时代还算不算编程」上。