Skip to main content

Vibe Coding 不仅仅是一种感觉

注意: 这篇文章配有 NotebookLM 播客(底部链接),以及 三个 生成的音频录制。 你可以阅读我在准备这篇文章草稿时与 ChatGPT 的对话 相关 HN 帖子上的评论和讨论。 将这篇文章视为你构建软件新方式的实地指南。当你读完时,你将不仅理解 AI 辅助开发如何工作,更重要的是理解其背后的原因。

你将学到什么

首先,我们将探索如何真正实现 10 倍生产力提升——不是通过魔法,而是通过放大 AI 优势同时补偿其弱点的刻意实践。 接下来,我将带你了解我们在 Julep 使用的、每天在 Claude 帮助下发布生产代码的基础设施。你将看到我们的 CLAUDE.md 模板、提交策略和防护措施。 最重要的是,你将理解为什么编写自己的测试仍然绝对神圣,特别是在 AI 时代。这一单一原则将让你免于许多深夜调试会话。
这是主要洞察: 良好的开发实践不仅仅是锦上添花——它们是 AI 放大你能力与制造混乱之间的区别。研究证实了这一点。使用严格实践的团队部署频率提高 46 倍,从提交到部署的速度提高 440 倍。当你将强大的 AI 助手加入其中时,这种效果更加明显。

这篇文章存在的原因:从梗到方法

让我带你回到这一切开始的时候。Andrej Karpathy 发推文谈论”vibe-coding”——让 AI 编写代码而你只是感受氛围的想法。开发者社区都笑了。这听起来像是终极开发者幻想:放松,喝咖啡,让机器做工作。 然后 Anthropic 发布了 Sonnet 3.7 和 Claude Code,意想不到的事情发生了。这个笑话不再好笑,因为它开始变得……可能?当然,我们可靠的朋友 Cursor 已经存在一段时间了,但这个新界面最终感觉像 真正的 vibe coding。 在 Julep,我们构建 AI 工作流编排。我们的后端有多年积累的决策、模式和偶尔的技术债务。我们极其小心地保持代码质量高,并为自己提供充足的文档。然而,代码的庞大规模和 为什么 不同部分以特定方式组织的历史背景,需要优秀工程师数周时间才能理解。
在使用 Claude 时没有适当的防护措施,你基本上是在和一个过度热心的实习生玩打地鼠游戏。

理解 Vibe-Coding

Steve Yegge 巧妙地创造了术语 CHOP——聊天导向编程,在一个稍微戏剧性的标题帖子”初级开发者的死亡”中。这是对与 Claude 一起编程体验的完美、直白的描述。 将传统编程想象成雕刻大理石。你从空白块开始,仔细地一点一点凿刻,逐行逐函数。每一笔都是深思熟虑的,每一个决定都是你的。这很满足但很慢。 Vibe-coding 更像是指挥管弦乐队。你不是演奏每一种乐器——你在指导、塑造、引导。AI 提供原始的音乐天赋,但没有你的愿景,它只是噪音。 在 vibe-coding 时,你可以采取三种不同的姿态,每种都适合开发周期的不同阶段:
  1. AI 作为初稿者: 在这里,AI 生成初始实现,而你专注于架构和设计。这就像有一个可以以思维速度打字的初级开发者,但需要持续指导。完美适用于样板代码、CRUD 操作和标准模式。
  2. AI 作为结对程序员: 这是大多数开发的甜蜜点。你积极协作,来回弹跳想法。AI 建议方法,你完善它们。你勾勒轮廓,AI 填充细节。这就像与一个读过所有编程书籍但从未真正发布过代码的人结对编程。
  3. AI 作为验证者: 有时你编写代码并想要理智检查。AI 审查错误,建议改进,发现你可能错过的模式。将其视为一个永远不会疲倦或暴躁的极其博学的代码审查者。
你不是在精心制作每一行,而是在审查、完善、指导。但是——这一点不能过分强调——你仍然是架构师。Claude 是你的实习生,拥有百科全书般的知识,但对你的特定系统、用户、业务逻辑零上下文。

Vibe-Coding 的三种模式:实用框架

经过数月的实验和不止几次的生产事故,我确定了三种不同的操作模式。每种都有自己的节奏、自己的防护措施和自己的用例。

模式 1:游乐场

何时使用: 周末黑客、个人脚本、概念验证,以及那些让编程变得有趣的”我想知道如果…”时刻。 在 游乐场模式 中,你拥抱混乱。Claude 编写 80-90% 的代码,而你提供足够的指导来保持正轨。这很解放,也稍微可怕。专业提示: 查看 claude-composer 进行全 YOLO 模式。 游乐场模式是这样的:你有一个分析 Spotify 历史脚本的想法。你打开 Claude,用简单的英语描述你想要什么,然后看着它生成完整的解决方案。没有 CLAUDE.md 文件,没有仔细的提示——只是原始、未过滤的 AI 编写的代码。 游乐场模式的美在于速度。你可以在几分钟内从想法到工作原型。危险在于这种牛仔编码风格绝对不适合任何重要的事情。将其用于实验,永远不要用于生产。相信我,虽然令人惊叹的人们宣扬相反的观点,但良好的工程原则仍然重要,现在比以往任何时候都更重要

模式 2:结对编程

何时使用: _约 5,000 行代码以下_的项目、有真实用户的副项目、演示(你不想破坏),或大型系统中范围明确的小服务。 这是 vibe-coding 开始发光的地方。你需要结构,但不要太多以至于减慢你的速度。这里的关键创新是 CLAUDE.md 文件——Claude 在调用时自动读取的自定义文档。来自 Anthropic 的 Claude Code 最佳实践:
CLAUDE.md 是一个特殊文件,Claude 在开始对话时自动拉入上下文:
  • 常见的 bash 命令
  • 核心文件和实用函数
  • 代码风格指南
  • 测试说明
  • 仓库礼仪(例如,分支命名、merge vs. rebase 等)
  • 你希望 Claude 记住的其他信息 你不是重复解释项目的约定,而是记录一次。这是一个最近副项目的真实例子:
有了这个上下文,Claude 变得非常有效。这就像每天向新员工解释项目与让他们读一次入职文档的区别。 但 结对编程模式 需要的不仅仅是文档。你需要用我称之为”锚点注释”的东西积极指导 AI——防止 Claude 迷失在荒野中的面包屑:
这些注释服务于双重目的:它们指导 AI 并为人类记录代码。这是双向都有回报的文档。这种”锚点注释”与常规注释的关键区别:这些是_编写的_、维护的,并且_旨在被_ Claude 本身使用。这是我们项目 CLAUDE.md 的_实际片段_:

模式 3:生产/单体仓库规模

何时使用: 大型代码库、有真实用户的系统、任何错误会花费金钱或声誉的地方。 Claude 可以生成大量代码,但将其集成到复杂系统中需要仔细编排。 让我先说明一个大警告:在这个规模上的 vibe coding 还不太好扩展, 目前。我确实看到这些系统在处理更大代码库方面变得显著更好,,为了让它们有效,需要大量努力来帮助它们导航、理解和_安全地_在它们上工作,而不会在迷宫中迷失。一般来说,最好将它们分成单独的服务,并在可能时使用子模块。 作为通用原则,良好的工程实践适用于大型项目,无论是否 vibe coded。例如,在生产规模上,边界变得关键。每个集成点都需要明确的文档:
没有这些边界,Claude 会愉快地”改进”你的 API 并破坏生产中的每个客户端。底线:更大的项目应该_绝对_开始在部分中采用 vibe coding,并采用增强这种体验的方法,但,不要期望可靠地落地大型功能。(截至 2025 年 6 月 7 日 / AI 时代

基础设施:可持续 AI 开发的基础

CLAUDE.md:你的单一真相来源

让我绝对清楚这一点:CLAUDE.md 不是可选的文档。你花在更新它上的每一分钟都节省了以后一小时的清理工作。 将 CLAUDE.md 视为你代码库的宪法。它建立了管理代码应该如何编写、系统如何交互以及要遵循或避免什么模式的基本法律。投资于发展团队技能和能力的组织会获得更好的结果——你的 CLAUDE.md 就是这种投资结晶成文档。 这是我们生产 CLAUDE.md 结构的精简版本,经过数千次 AI 辅助提交的完善:
这个文档成为你和 Claude 之间的共享上下文。这就像有一个高级开发者在整个编码会话中在 Claude 耳边轻声指导。 随着你的代码库增长,仅 CLAUDE.md 是不够的。你需要内联指导——我称之为锚点注释。这些作为防止 AI 做出局部错误决策的本地上下文。 将你的代码库想象成一个城市,锚点注释作为路标。没有它们,即使聪明的访客也会迷路。以下是我们有效使用它们的方式:
这些注释创建了一个叙述,帮助 AI 和人类理解不仅仅是代码做什么,而是为什么这样做。

AI 开发的 Git 工作流

AI 辅助开发最被低估的方面之一是它如何改变你的 git 工作流。你现在以可能快速污染 git 历史的速度生成代码,如果你不小心的话。 它真的只适用于非常大的代码库,因为它不是非常直接的工具,但我建议使用 git worktrees 为 AI 实验创建隔离环境:
专业提示: 阅读如何使用 worktrees,并查看巧妙的 wt 工具。 这种方法给你两全其美:Claude 可以自由实验,而你的主分支历史保持清洁和有意义。 对于提交消息,我们已经标准化了标记 AI 辅助提交:
这种透明度在代码审查期间有帮助——审查者知道要特别注意 AI 生成的代码。

神圣规则:人类编写测试

现在我们来到 AI 辅助开发中最重要的原则。它如此重要,我将以多种方式重复它,直到它烙印在你的记忆中: 永远。不要。让。AI。编写。你的。测试。 测试不仅仅是验证其他代码工作的代码。测试是可执行的规范。它们编码你的实际意图、你的边缘情况、你对问题领域的理解。高绩效者在速度和稳定性方面都表现出色——没有权衡。测试是你实现两者的方式。 让我用一个例子说明为什么这很重要。假设我们要求 Claude 实现一个速率限制器:
看起来合理,对吧?Claude 甚至有帮助地生成了测试:
但这是 Claude 的测试错过的——只有理解业务需求的人类才会测试的:Claude 的实现有内存泄漏。只访问 API 一次且永不返回的用户会在内存中永远留下他们的数据。AI 生成的测试检查快乐路径但错过了这个关键的生产问题。 这就是为什么人类编写测试。我们理解上下文、生产环境、重要的边缘情况。在 Julep,我们的规则是绝对的:
你的测试是你的规范。它们是你的安全网。它们是每个你修复的 bug 和每个你发现的边缘情况的编码智慧。狂热地保护它们。

不溺水地扩展:Token 经济学和上下文管理

AI 辅助开发中最违反直觉的教训之一是,为了节省 token 而在上下文上吝啬实际上会让你付出更多代价。这就像试图通过只加半箱油来节省汽油钱——你最终只会去加油站更多次。 Token 预算很重要。提供重点提示,减少差异长度,通过提前总结意图来避免大文件膨胀。但”重点”并不意味着”最小”——它意味着”相关和完整”。 让我向你展示饥饿提示的虚假经济: 饥饿提示尝试: "为用户端点添加缓存" Claude 的响应: 实现缓存…但是:
  • 使用内存缓存(不适用于多个服务器)
  • 没有缓存失效策略
  • 没有指标或监控
  • 没有考虑缓存雪崩 结果: 3 轮修复,花费了 4 倍的 token适当丰富的上下文提示:
教训?预先加载上下文以避免迭代周期。将 token 视为投资好工具——前期成本会多次回报。 事实上,我建议所有项目都应该定期要求 Claude 查看代码库更改,并向 CLAUDE.md 添加上下文

新会话和心理模型

这是另一个违反直觉的实践:为不同任务使用新的 Claude 会话。保持一个长期运行的对话很诱人,但这会导致上下文污染。 这样想:你不会在切生鸡肉后用同一个砧板切蔬菜。同样,不要在讨论前端样式后使用同一个 Claude 会话进行数据库迁移。上下文会以微妙的方式渗透。 我们的规则:一个任务,一个会话。当任务完成时,重新开始。这保持 Claude 的”心理模型”清洁和专注。

案例研究:在生产中发布结构化错误

让我带你了解我们在 Julep 做的一个真实重构,展示了生产规模的 vibe-coding。我们需要用结构化错误层次结构替换我们临时错误处理,跨越 500+ 端点。 人类决策(为什么): 首先,我们必须决定我们的错误分类法。这是纯粹的架构工作——Claude 不能做出这些决定,因为它们涉及理解我们的业务、用户和运营需求:
AI 执行(如何): 有了明确的规范,我们让 Claude 处理机械重构:
Claude 的计划很扎实:
Claude 能够处理查找和更新 500+ 错误站点的繁琐工作,而我们专注于审查:
结合我们精心编写的 CLAUDE.md 文件、细致的文档、定期更新的锚点注释和清晰的指令,结果:
  • 时间:4 小时而不是 2 天
  • 覆盖:所有 500+ 错误站点已更新

AI 时代的领导力和文化

你作为高级工程师的角色已经根本性地转变。你不再只是编写代码——你在策划知识、设定边界,并教导人类和 AI 系统如何有效工作。 精益管理和持续交付实践有助于改善软件交付性能,进而改善组织性能——这包括你如何管理 AI 协作。

新的入职检查清单

当新开发者加入我们的团队时,他们获得两个入职轨道:一个针对人类,一个针对与 AI 合作。这是我们的组合检查清单: 第 1 周:基础
第 2 周:引导 AI 协作
第 3 周:独立工作

建立透明度文化

一个必要的文化转变:标准化 AI 协助的披露。我们不是试图隐藏我们使用 AI——我们试图负责任地使用它。每个包含 AI 工作的提交消息都被标记:
这种透明度服务于多个目的:
  1. 审查者知道要特别注意
  2. 未来的调试者理解代码的来源
  3. 没有人对使用可用工具感到羞耻 创建一个开发者可以有效地利用 AI 的环境,没有恐惧或羞耻,是建立高绩效文化的一部分。

Claude 永远不应该碰的东西(刻在石头上)

让我们对边界非常清楚。这些不是建议——它们是戒律。违反它们会带来危险。

神圣的永不触碰清单

❌ 测试文件
测试编码人类理解。它们是你的安全网、你的规范、你积累的智慧。当 Claude 编写测试时,它只是验证代码做了代码做的事情——而不是它应该做的事情。 ❌ 数据库迁移
迁移在生产中是不可逆的。它们需要理解数据模式、部署时间和回滚策略,这是 AI 无法掌握的。 ❌ 安全关键代码
❌ 没有版本控制的 API 合约
❌ 配置和秘密

AI 错误的层次结构

并非所有 AI 错误都相等。以下是我们如何分类它们: 第 1 级:烦人但无害
  • 错误的格式化(你的 linter 会捕获)
  • 冗长的代码(稍后重构)
  • 次优算法(分析会揭示) 第 2 级:修复昂贵
  • 破坏内部 API(需要协调)
  • 改变既定模式(混淆团队)
  • 添加不必要的依赖(膨胀) 第 3 级:限制职业生涯
  • 修改测试以使其通过
  • 破坏 API 合约
  • 泄露秘密或 PII
  • 破坏数据迁移 你的防护措施应该与错误级别成比例。第 1 级错误教导初级开发者。第 3 级错误教导你更新 LinkedIn。

开发的未来:走向何方

当我写这篇文章时是 2025 年,我们正处于 AI 辅助开发的尴尬青春期。工具强大但笨拙,就像一个刚经历生长突增的青少年。但轨迹是明确的,而且正在加速。 良好的文档是成功实施 DevOps 能力的基础。表现出色的团队将是那些将文档视为代码、以与测试套件相同的严格性维护 CLAUDE.md 文件的团队。 我看到即将到来的东西(~大致按到达顺序):
  • 主动建议改进而不需要提示的 AI
  • 学习你团队模式和偏好的 AI
  • 跨会话和项目的持久记忆
  • 理解整个代码库而不仅仅是文件的 AI 但即使能力扩展,基础仍然存在:人类设定方向,AI 提供杠杆。我们是工具使用者,这些只是我们创造的最强大的工具。

底线:从这里开始,今天开始

如果你已经读到这里,你可能感到兴奋和恐惧的混合。这是正确的反应。AI 辅助开发很强大,但需要纪律和意图。 这是你的行动计划: 今天:
  1. 为你当前项目创建一个 CLAUDE.md
  2. 自己为你最棘手的代码添加三个锚点注释
  3. 尝试一个具有适当边界的 AI 辅助功能 本周:
  4. 与你的团队建立 AI 提交消息约定
  5. 与初级开发者运行 AI 辅助编码会话
  6. 为一段 AI 生成的代码编写测试 本月:
  7. 测量采用 AI 前后的部署频率
  8. 为常见任务创建提示模式库
  9. 运行关于 AI 辅助开发的团队回顾 最重要的事情?开始。从小开始,谨慎开始,但要开始。掌握这个工作流的开发者不一定更聪明或更有才华——他们只是更早开始并从更多错误中学习的人。 软件交付性能预测组织性能。在一个速度和质量决定成功的行业中,AI 协助不是锦上添花——它是竞争必需品。但只有在你做得对的情况下。 Vibe-coding,尽管名字有趣,但这是严肃的业务。这是思考软件开发的新方式,它放大人类能力而不是替代它们。掌握它,你将比以往想象的更快地发布更好的软件。忽略它,你会看着竞争对手在你还在输入样板代码时超越你。 工具在这里。模式已证明。唯一的问题是:你将是指挥管弦乐队,还是仍然自己演奏每一种乐器?

准备深入?开始资源:

📄 我们经过战斗测试的 CLAUDE.md 模板:
github.com/julep-ai/julep/blob/main/AGENTS.md 🤝 问题?在 Twitter 上找到我: @diwanksingh 💬 加入讨论: 分享你自己的模式和学习 📚 推荐阅读:
成为分布的一部分。

来源和致谢

本文基于 Diwank Singh 的原创文章 Field Notes From Shipping Real Code With Claude 进行扩展和本地化。 原作者: Diwank Singh
原始链接: https://diwank.space/field-notes-from-shipping-real-code-with-claude
发布日期: 2025年6月7日 感谢 Diwank Singh 分享这些宝贵的 AI 辅助开发实践经验。本文保留了所有技术细节、代码示例和最佳实践说明,同时进行了适当的格式优化和图片本地化处理。
  • 掌握 Claude Code 的 33 个必知设置技巧 - 通过 33 个基础到高级的技巧全面掌握 Claude Code,涵盖快捷键、提示技巧、MCP 服务器、项目规则和自动化钩子。从新手到专家级生产力的完整指南。
  • 我如何使用 Claude Code - 一份关于有效 Claude Code 使用模式的综合指南,从线程管理到 MCP 服务器、规划模式和 AI 辅助开发的生产力技巧。