太精彩了!YCombinator 的AI编程教程
本文总结了AI辅助开发的系统化方法,包含规划、版本控制、测试、调试等全流程优化策略。核心要点包括:采用Markdown制定结构化计划,通过Git保持代码纯净,优先端到端测试,利用错误信息高效调试。建议使用多AI工具对比输出,复杂功能单独开发原型,选择成熟技术栈降低风险。同时强调DevOps自动化、定期重构和模型更新跟踪,通过模块化设计和清晰边界提高AI协作效率。全文提供了从编码到部署的完整AI协作
·
规划流程
- 制定全面计划:先与 AI 协作,在 Markdown 文件中编写详细的实施计划(解释:借助 AI 梳理思路,用 Markdown 的结构化特性确保计划清晰可追溯,避免遗漏关键环节)
- 评审与优化:删除不必要的内容,若功能过于复杂则标记为 “暂不开发”(解释:通过精简和优先级划分,防止计划膨胀导致精力分散,聚焦核心目标)
- 保持范围可控:单独设立 “后续想法” 板块,以此保持专注(解释:将非核心需求暂时剥离,避免开发中频繁偏离主线,确保当前阶段目标明确)
- 增量式实现:分模块逐步开发,而非试图一次性构建所有内容(解释:降低单次开发复杂度,便于及时发现问题,同时能快速看到阶段性成果)
- 跟踪进度:功能成功实现后,让 AI 将对应板块标记为 “已完成”(解释:通过可视化进度管理,清晰掌握开发节奏,增强推进动力)
- 定期提交代码:在进入下一个模块前,确保当前工作板块已提交至 Git(解释:避免代码丢失,同时为后续可能的回滚提供依据,降低开发风险)
版本控制策略
- 严格使用 Git:不要完全依赖 AI 工具的 “回退” 功能(解释:AI 工具的回退机制可能不完善,Git 作为专业版本控制工具,能更可靠地管理代码历史)
- 从 clean 状态开始:开发每个新功能时,以干净的 Git 状态启动(解释:减少历史代码干扰,降低新功能与旧代码冲突的概率)
- 卡顿时重置:若 AI 陷入 “空想式编码”,使用
git reset --hard HEAD
命令重置(解释:当 AI 生成的代码偏离需求且难以修正时,快速回到干净状态重新开始,避免无效堆叠) - 避免累积问题:多次失败的尝试会导致代码层叠式崩坏(解释:错误代码的反复修改会让逻辑越来越混乱,后期调试成本呈指数级上升)
- 干净地实现:当最终找到解决方案时,重置并干净地实现代码(解释:确保最终代码逻辑清晰、无冗余,便于后续维护和扩展)
测试框架
- 优先高阶测试:相较于单元测试,更注重端到端的集成测试(解释:从用户实际使用场景出发验证功能,更能发现真实环境中的问题,避免 “单元测试通过但整体用不了” 的情况)
- 模拟用户行为:通过模拟用户点击网站 / 应用的操作来测试功能(解释:站在用户视角验证交互逻辑,确保功能符合实际使用习惯)
- 捕捉回归问题:大语言模型(LLM)常对无关逻辑进行不必要的修改(解释:AI 可能在优化某功能时误改其他代码,测试能及时发现这类 “牵一发而动全身” 的问题)
- 分步前先测试:进入下一个功能前,确保测试通过(解释:及时验证当前成果,避免带着问题推进,防止后期问题集中爆发难以定位)
- 用测试作 “护栏”:部分创始人建议从测试用例入手,以明确边界(解释:先定义 “什么是对的”,为 AI 提供清晰的目标框架,减少无效尝试)
高效调试
- 利用错误信息:直接复制粘贴错误信息,对 AI 而言通常就足够了(解释:错误信息包含具体报错位置和原因,能帮助 AI 精准定位问题,提高调试效率)
- 编码前先分析:让 AI 思考多种可能的原因(解释:避免 AI 局限于单一思路,通过多维度分析覆盖潜在问题点)
- 失败后重置:每次修复尝试失败后,从 clean 状态重新开始(解释:防止错误修复方案的残留代码干扰下一次尝试,保持代码环境纯净)
- 实现日志记录:添加策略性日志,以更好地理解程序运行情况(解释:通过日志追踪代码执行流程,快速定位隐藏在逻辑深处的问题)
- 切换模型:当一个 AI 模型卡住时,尝试不同的模型(解释:不同 AI 模型的训练数据和逻辑侧重不同,换模型可能带来新的解题思路)
- 干净地实现修复:一旦确定修复方案,在干净的代码库上重置并实现(解释:确保修复后的代码无冗余,避免 “补丁摞补丁” 导致的维护难题)
AI 工具优化
- 创建指令文件:在合适的文件(如
cursor.rules
、windsurf.rules
、claude.md
)中为 AI 编写详细指令(解释:将长期有效的要求固化为文件,避免重复沟通,确保 AI 持续遵循统一标准) - 本地文档化:将 API 文档下载到项目文件夹,以确保准确性(解释:AI 对实时 API 细节的记忆可能有偏差,本地文档能让 AI 参考最新、最准确的信息)
- 使用多工具:部分创始人会在同一个项目中同时运行 Cursor 和 Windsurf(解释:不同工具的优势互补,能提高解决方案的多样性和质量)
- 工具专业化:Cursor 在前端工作中速度稍快,而 Windsurf 思考更慢(但可能更深入)(解释:根据任务类型选择工具,前端快速迭代用 Cursor,复杂逻辑分析用 Windsurf,提升效率)
- 对比输出结果:生成多个解决方案,然后挑选最佳方案(解释:通过横向对比不同方案的优劣,选择最适合当前场景的实现方式)
复杂功能开发
- 创建独立原型:先在干净的代码库中构建复杂功能(解释:隔离复杂逻辑与主项目,降低对现有代码的干扰,便于专注突破难点)
- 使用参考实现:将 AI 指向可参考的工作示例(解释:给 AI 提供具体的 “标准答案” 模板,减少其凭空创造的试错成本)
- 清晰的边界:保持外部 API 一致,同时允许内部修改(解释:确保复杂功能与其他模块的交互稳定,内部逻辑则可灵活优化)
- 模块化架构:具有清晰边界的基于服务的架构,比单体仓库(monorepos)更适用(解释:模块化能降低代码耦合度,让 AI 更容易理解和修改单一模块,减少连锁反应)
技术栈考量
- 成熟框架更出色:Ruby on Rails 因 20 年的一致约定而表现良好(解释:成熟框架的规范清晰、社区支持完善,AI 对其语法和最佳实践的掌握更精准)
- 训练数据很重要:像 Rust 或 Elixir 这类较新的语言,训练数据可能更少(解释:AI 对训练数据少的语言理解有限,容易生成不规范代码,增加调试成本)
- 模块化是关键:小而模块化的文件,对人类和 AI 而言都更易处理(解释:文件体积小、逻辑单一,便于 AI 快速理解上下文,减少解读偏差)
- 避免大文件:不要保留数千行的超大文件(解释:大文件逻辑复杂、上下文关联紧密,AI 难以整体把握,容易在修改时出错)
编码之外
- DevOps 自动化:用 AI 配置服务器、DNS 和托管服务(解释:AI 可生成标准化配置脚本,减少手动操作的繁琐和错误)
- 设计辅助:生成图标等设计元素(解释:借助 AI 快速产出基础设计素材,降低对专业设计工具的依赖)
- 内容创作:起草文档和营销材料(解释:AI 擅长文字组织,可快速生成初稿,节省内容创作时间)
- 学习工具:让 AI 逐行解释实现逻辑(解释:通过 AI 讲解代码细节,帮助开发者理解陌生技术或复杂逻辑)
- 使用截图:可视化分享 UI bug 或设计灵感(解释:图片比文字更直观,能让 AI 精准理解视觉相关的问题或需求)
- 语音输入:像 Aqua 这样的工具支持每分钟 140 词的输入(解释:语音输入比打字更快,适合快速记录想法或下达指令)
持续改进
- 定期重构:测试到位后,频繁进行重构(解释:通过重构优化代码结构,避免技术债务累积,保持代码可维护性)
- 发现优化机会:让 AI 寻找可重构的候选点(解释:AI 可从全局视角识别冗余或低效代码,提供人类可能忽略的优化方向)
- 紧跟更新:尝试每一个新的模型版本(解释:新模型通常在特定任务上有性能提升,及时体验可发现更高效的工作方式)
- 识别优势:不同模型在不同任务上各有所长(解释:了解各模型的擅长领域,在合适的场景使用合适的工具,最大化效率)
更多推荐
所有评论(0)