YC Vibe Coding 编程指南
LLM 暂时无法一次性生成完整产品 —— 但随着氛围编程(Vibe Coding)的兴起,如虎添翼的开发者们正逐渐接近这个目标。
这种融合直觉探索与实证验证的新范式,正在成为软件开发的新前沿。本篇开发指南汇集 YC 创始人的实战技巧,为想要最大化发挥氛围编码效能、提升开发效率的实践者提供系统方法论。
规划流程
- 制定全面计划:首先与 AI 协作,在一个 Markdown 文件中编写详细的实施计划。
- 审查和完善:删除不必要的项目,如果功能太复杂则标记为 “暂不实现”。
- 保持范围控制:单独设置一个板块用于后续想法,以保持专注。
- 增量实施:逐个分步实现,而不是试图一次性构建所有内容。
- 跟踪进度:每当一个部分成功实现后,让 AI 将其标记为 “已完成”。
- 定期提交:在开始下一部分之前,确保每个可工作的部分都已提交到 Git。
版本控制策略
- 严格使用 Git:不要仅仅依赖 AI 工具的回退功能。
- 从干净状态开始:每个新功能都以一个干净的 Git 工作区开始。
- 陷入困境时重置:如果 AI 开始产生不切实际的代码,使用
git reset --hard HEAD命令重置。 - 避免累积问题:一次又一次失败的尝试,只会在错误的代码上堆砌更多错误的代码。
- 清晰的实现:当你最终找到解决方案时,先重置代码库,然后在一个干净的版本上重新、清爽地实现它。
测试框架
- 优先进行高层测试:相较于单元测试,优先编写端到端的集成测试。
- 模拟用户行为:通过模拟用户点击网站 / 应用来测试功能。
- 捕捉回归问题:LLM 经常对不相关的逻辑进行不必要的更改。
- 测试通过后再推进:确保测试通过后再进行下一个功能。
- 使用测试作为防护栏:建议从测试用例开始,以提供清晰的边界。
有效的错误修复
- 利用错误信息:通常只需复制粘贴错误信息就足够让 AI 给出分析。
- 先分析再编码:要求 AI 考虑多种可能的原因。
- 失败后重置:每次修复尝试失败后,都回到干净的代码状态再进行下一次尝试。
- 实施日志记录:在关键位置添加日志记录,能帮你和 AI 更好地理解代码的实际运行情况。
- 切换模型:当一个模型卡住时,尝试不同的 AI 模型。
- 清晰的实现:一旦确定了修复方案,重置并在干净的代码库上实现它。
AI 工具优化
- 创建指令文件:在适当的文件(如
cursor.rules,windsurf.rules,claude.md)中为你的 AI 编写详细的指令。 - 本地文档:将 API 文档下载到你的项目文件夹中以确保准确性。
- 使用多种工具:同时在同一个项目上运行 Cursor 和 Windsurf。
- 工具专长:Cursor 对于前端工作稍快一些,而 Windsurf 思考时间更长。
- 比较输出:生成多个解决方案并选择最好的一个。
复杂功能开发
- 创建独立原型:首先在一个干净的代码库中构建复杂功能。
- 使用参考实现:为 LLM 指明可遵循的有效示例。
- 清晰的边界:保持外部 API 的一致性,允许 AI 在内部自由修改和重构。
- 模块化架构:基于服务的模块化架构,由于其边界清晰,比庞大的单体仓库(monorepo)更适合与 AI 协作。
技术栈考量
- 成熟框架表现出色:像 Ruby on Rails 这样拥有 20 年发展历史和大量惯例的框架,AI 对其理解更深。
- 训练数据很重要:像 Rust、Elixir 这样的新兴语言,由于可供 AI 学习的公开代码较少,其表现可能会稍逊一筹。
- 模块化是关键:小型、模块化的文件对人类和 AI 都更容易处理。
- 避免大文件:不要拥有数千行代码的长文件。
编码之外
- DevOps 自动化:使用 AI 配置服务器、DNS 和托管服务。
- 设计辅助:用 AI 生成网站图标和其他设计元素。
- 内容创作:AI 能帮你起草产品文档和市场营销文案。。
- 教育工具:让 AI 逐行解释它生成的代码,帮助你学习和理解。
- 使用截图:以视觉方式分享 UI 错误或设计灵感。
- 语音输入:借助像 Aqua 这样的工具,你可以用每分钟 140 个单词的速度通过语音输入指令。
持续改进
- 定期重构:当你建立起完善的测试体系后,就可以大胆地、频繁地进行代码重构。
- 识别机会:主动询问 AI,让它帮你找出代码中可以重构优化的部分。
- 紧跟潮流:尝试每一个新发布的模型版本。
- 认清优势:不同的模型在不同任务上各有所长,学会在合适的任务中选择合适的模型。