返回文章列表

Vibe Coding:一个重度AI编程用户踩了无数坑之后的效率指南

317·3 分钟阅读
AI 编程Vibe Coding工程效率技术债

先聊现状

Vibe coding 这个词火了快一年了,但你有没有发现一个尴尬的现实:大多数人用AI写代码,效率并没有提高多少,甚至有时候还倒退了

不是AI不行,是用法不对。

我见过太多这样的场景:丢一句"帮我写个XX功能"给AI,AI哗哗吐出500行代码,看着挺厉害,复制粘贴进去,报错,改,再报错,再改,最后花了两小时还不如自己手写快。还有一种:一个简单的bug,跟AI来回拉扯了20轮对话,每轮AI都在"发现问题"然后"修复",结果把原来能跑的代码也搞坏了。

这不叫vibe coding,这叫vibe debugging。

我重度使用AI辅助编程有一段时间了,从Copilot到Claude到各种agent模式,踩过的坑比写过的bug还多。这篇文章想聊的不是"AI能帮你写代码"这种废话,而是怎么用才能真正提效

最大的误区:把AI当全能程序员

很多人的用法是这样的:

你:帮我写一个用户认证系统,支持JWT和OAuth2
AI:好的,这是完整的实现(吐出800行代码)
你:复制粘贴 → 报错 → 改 → 更多报错 → 崩溃

这是最常见的低效模式。问题出在哪?你把AI当成了一个无所不能的程序员,而不是一个能力很强但需要你指挥的助手

打个比方:你不会跟一个刚入职的天才实习生说"把整个支付系统做了",你会把任务拆成小块,给上下文,给约束,逐步验收。AI也一样。

正确的做法:

你:我在用axum写一个Web服务,需要添加JWT认证。
    这是目前的项目结构(粘贴目录),
    这是现有的auth模块(粘贴代码),
    帮我在middleware层加一个JWT验证,
    token从Authorization header取,用jsonwebtoken库。
    只改auth/middleware.rs这一个文件。

AI:(输出精准的、可以直接用的代码)

上下文 + 约束 + 范围,三个要素缺一不可。

Prompt的层次:从低效到高效

我总结了一个效率层级,你可以对号入座看看自己在哪一层:

Level 0:随口一说(效率 -50%)

"帮我写个爬虫"

AI不知道你用什么语言、爬什么网站、怎么处理反爬、数据存哪。它只能给你一个通用模板,你大概率要改80%以上的代码。

Level 1:需求描述(效率 +10%)

"用Python写一个爬虫,爬取example.com的产品列表,
 保存为CSV"

好了一些,但AI还是会做很多假设——用requests还是playwright?翻页怎么处理?字段怎么映射?你得来回对齐好几轮。

Level 2:技术方案(效率 +50%)

"用httpx + BeautifulSoup写一个爬虫,
 目标是example.com/products,
 翻页参数是?page=N,
 每个产品提取name/price/image_url三个字段,
 用csv模块写入products.csv,
 加3秒间隔避免被封"

这已经很不错了。AI基本能一次给出可用的代码。

Level 3:上下文驱动(效率 +200%)

"继续上次的任务。现在爬虫基本能跑了,
 但有两个问题:
 1. 部分产品的image_url是相对路径,需要拼接base URL
 2. 翻页到最后一页时没有终止条件,会无限循环
 帮我修这两个问题,不要改其他部分的代码"

这个层级的关键是:你知道问题在哪,你知道不想改哪里。AI变成了一个精准的修复工具,而不是一个重新发明轮子的机器。

Level 4:架构协作(效率 +300%)

"我正在重构认证模块,目前是把JWT验证逻辑
 散落在各个handler里的。我计划:
 1. 抽一个AuthMiddleware
 2. 用axum的Extension注入用户信息
 3. 把token刷新逻辑独立成RefreshService

 你觉得这个方案有什么问题吗?
 先不写代码,帮我review一下设计"

这是最高级的用法:在写代码之前就让AI介入。让它帮你发现设计漏洞,比写完800行再推倒重来强一万倍。

一个关键能力:学会说"不"

AI最危险的地方是它永远不会说"我不会"

你让它写一个它不了解的库的代码,它会自信满满地给你一个看起来很对但实际上API完全不对的实现。你让它修一个bug,它可能会"修"出三个新的bug,然后继续"修",陷入无限循环。

这里有几个血泪教训:

教训1:不要让AI改你不理解的代码

❌ 错误做法:AI写了一段你不理解的代码,报错了,
   让AI自己修。

✅ 正确做法:先让AI解释这段代码在干什么,
   理解了之后再决定怎么改。

我有一次让AI帮我写一个复杂的正则表达式,它给了一个很长的pattern,看着很厉害。测试的时候边缘case全挂。让AI修了5轮,越修越复杂。最后我自己花10分钟重写了一个简单的版本,一次通过。

AI擅长生成代码,但不擅长迭代修复它自己生成的复杂代码。超过3轮修不好的,大概率方向错了。

教训2:永远验证AI的输出

# AI告诉你这样写没问题
data = json.loads(user_input)  # AI说:直接解析就行
 
# 但实际上你应该这样做
try:
    data = json.loads(user_input)
except json.JSONDecodeError:
    return error_response("Invalid JSON")

AI经常忽略错误处理、边界条件、安全问题。不是它不知道,是你没问,它就不提。

教训3:识别AI的"自信废话"

AI有时候会这样回答:

"这个实现使用了业界最佳实践,考虑了性能、
 安全性和可维护性..."

这种话可以直接忽略。看代码本身,别看AI的自我评价。

真正提效的场景和方法

说了这么多坑,那AI到底在哪些地方真正好用?根据我的经验:

场景1:样板代码(效率提升 10x)

那种你知道怎么写、但写起来很烦的代码。数据转换、API wrapper、配置解析、测试用例生成。这类代码AI一次就能写对,你只需要review。

"根据这个JSON schema生成Rust的struct和serde实现:{
  "type": "object",
  "properties": {
    "id": {"type": "integer"},
    "name": {"type": "string"},
    "tags": {"type": "array", "items": {"type": "string"}}
  }
}"

场景2:学习新API/新框架(效率提升 5x)

你要用一个没用过的库,与其翻文档翻半小时,不如直接问AI:

"我要用tokio的broadcast channel实现一个简单的
 事件系统,一个sender多个receiver,
 receiver可以随时subscribe和unsubscribe。
 给个最小可运行的例子"

注意:AI给的例子要跑通了才算数。跑不通就换一个问法,别让它在错误代码上修修补补。

场景3:代码Review和设计讨论(效率提升 3x)

这是被严重低估的用法。把你的代码丢给AI,让它找问题:

"Review一下这段代码,重点关注:
 1. 有没有潜在的死锁
 2. 错误处理是否完整
 3. 有没有更好的实现方式

 (粘贴代码)"

AI在这方面的表现出乎意料地好,因为它见过的代码比你多得多。但记住:AI的建议要自己判断,不是所有建议都适合你的场景。

场景4:调试辅助(效率提升 3x)

把报错信息和相关代码一起给AI,比自己猜快:

"运行这段代码报了这个错:
 (粘贴错误信息)

 相关代码在这:
 (粘贴代码片段)

 可能是什么原因?只分析原因,先不给解决方案"

注意最后一句——先让它分析,别急着让它改。很多bug的原因分析对了,但AI给的"修复方案"引入了新问题。你自己根据分析结果去改,更可控。

场景5:写测试(效率提升 5x)

测试是AI最擅长的领域之一。给它一个函数实现,让它生成测试用例:

"为这个函数写单元测试,覆盖:
 - 正常输入
 - 边界条件(空字符串、超长输入、特殊字符)
 - 错误输入(null、类型错误)

 函数签名和实现:(粘贴代码)"

工作流:怎么跟AI高效协作

用法比工具重要。我总结了一个日常工作流:

原则1:小步快跑,持续验证

错误的工作流:
  需求 → AI生成整个模块 → 复制粘贴 → 调试3小时

正确的工作流:
  需求 → AI生成第一个小功能 → 跑通 → AI生成第二个 → 跑通 → ...

每一步都要验证。AI生成的代码能跑通再进行下一步。这看起来慢,实际快得多。

原则2:AI写初稿,你写终稿

好的分工:
  你:定义接口、设计数据结构、定技术选型
  AI:实现具体逻辑、写样板代码、生成测试
  你:review、调整边界条件、处理错误路径

不好的分工:

  你:描述需求
  AI:全部实现
  你:复制粘贴
  结果:你不理解代码,bug来了也修不了

原则3:上下文管理是核心技能

跟AI协作最大的挑战不是prompt怎么写,而是上下文怎么管理

对话太长,AI会"忘记"前面的约定。对话太短,你每次都得重复背景。

我的做法:

1. 每个任务开一个新对话
2. 开头给完整上下文(项目结构、技术栈、当前目标)
3. 对话过程中如果偏离了,开新对话重新给上下文
4. 关键决策记录在代码注释或文档里,而不是对话里

还有一招:把关键上下文写在项目的CLAUDE.md或者.cursorrules里,AI每次对话都能读到,不用你重复说。

原则4:知道什么时候不用AI

有些场景,AI帮不了你甚至会添乱:

场景 为什么不用AI 该怎么做
性能瓶颈优化 AI不了解你的数据特征和运行环境 自己profile,自己优化
复杂的状态机逻辑 AI容易遗漏状态转换的edge case 自己画状态图,自己实现
涉及业务机密的代码 数据安全 自己写
你自己都不理解的需求 垃圾进垃圾出 先想清楚再用AI
已经能跑的、不需要改的代码 "改进"可能引入新bug 别碰

不同工具的体感差异

用过不少AI编程工具,说说真实体感:

代码补全类(Copilot、Codeium)

适合写"你已经知道怎么写、只是懒得打字"的代码。不适合做设计决策。好处是融入现有工作流,几乎没有学习成本。坏处是经常补全出你不需要的东西,Tab按太快容易引入奇怪的代码。

对话式(ChatGPT、Claude对话)

适合讨论设计、学习新东西、review代码。不适合直接生成大段代码——你得手动复制粘贴,还要处理格式问题。最大优势是你可以跟它"讨论",而不只是"命令"。

Agent模式(Claude Code、Cursor Agent、Windsurf)

这是目前最有前途的模式,但也是最容易翻车的。Agent能直接读写你的文件、运行命令、搜索代码库。用好了是真正的效率倍增器,用不好就是自动化的灾难。

Agent模式的核心原则:给它小任务,验证后再继续。不要让它一口气重构整个项目。

心态:最重要的事

最后说点形而上的。

Vibe coding的核心不是"用AI写代码",而是改变你跟代码的关系

以前你是一个"写代码的人",所有细节都要自己处理。现在你是一个"指挥AI写代码的人",你的核心价值变成了:

  1. 判断力 — 知道什么该让AI做,什么该自己做
  2. 架构能力 — 把大问题拆成AI能处理的小问题
  3. 审查能力 — 快速判断AI输出的代码质量
  4. 方向感 — 知道项目该往哪走,不让AI把你带偏

写代码的手速不再是瓶颈,思考的速度才是。

这也是为什么有些人用AI效率提升10倍,有些人反而变慢——差距不在AI工具上,在人身上

最后的碎碎念

重度使用AI辅助编程之后,我最大的感受是:AI不会替代程序员,但会替代不会用AI的程序员

这不是贩卖焦虑。你看看周围——那些效率真正提升的人,不是用了最贵的AI工具,而是找到了跟AI协作的正确姿势。他们知道什么时候让AI上,什么时候自己上;知道怎么给AI足够但不过多的上下文;知道怎么验证AI的输出而不盲目信任。

反过来,那些抱怨"AI生成的代码全是bug"的人,往往是把"帮我写个XX"甩给AI,然后期待奇迹发生。

Vibe coding的vibe,不是"随便写写"的意思,而是一种新的工作节奏:你定方向,AI出体力,你做裁判。三者缺一不可。

工具一直在进化,但用工具的智慧不会过时。花点时间学会怎么跟AI协作,可能是你今年最值得的投资。