Vibe Coding 三天后,我把项目重写了一遍

Vibe Coding 三天后,我把项目重写了一遍

上周四下午,我打开 Cursor,跟自己说:今天不写代码,只"说话"。

起因很简单。团队在做一个内部数据看板,需求不复杂——从 PostgreSQL 拉数据,跑几个聚合查询,前端用 ECharts 展示。按正常节奏,前后端加起来大概5天。但我看到有人用 Vibe Coding 一天搓出个完整网站,心想试试。

第一天:确实快

先用 Claude 生成了项目骨架。一句"帮我搭一个 Python FastAPI 项目,连接 PostgreSQL,提供几个 REST 接口",30秒出来一套能跑的代码。目录结构、依赖文件、基础路由,全有了。

接着描述需求:"我要一个接口,按天统计用户注册数,返回最近30天的数据。"代码出来了,能跑,返回格式也对。我又追加了5个类似的接口,每个都是两三句话描述,Claude 生成,我复制粘贴,跑通。

到下午4点,后端8个接口全部就位。按平时的进度,这至少要一天半。

前端也快。"用 Vue3 + ECharts 做一个折线图组件,X轴是日期,Y轴是注册数。"出来的东西样式一般,但数据能渲染。我又描述了几个图表需求,两个小时内页面雏形出来了。

第一天结束,我的感受是:这玩意真能加速,写业务逻辑这种重复性工作,效率提升至少3倍。

第二天:开始出问题

第二天上午,产品经理加了个需求:支持按渠道筛选,就是注册来源(微信、手机号、邮箱)可以单独看。

我跟 Claude 说:"在注册统计接口里加上 channel 参数,支持按渠道筛选。"

生成的代码看起来没问题。但跑起来发现一个坑——当 channel 参数为空时,SQL 没有做条件过滤,直接查全量。这倒不是 bug,但接口文档里没说清楚空值的行为。我让 Claude 补了参数校验,它加了一段:

if channel and channel not in ["wechat", "phone", "email"]:
    raise HTTPException(status_code=400, detail="Invalid channel")

能用。但问题来了——我在生成这段代码时,并没有告诉它渠道枚举值有哪些。它猜了三个,实际业务里还有"apple_id"和"google"。如果我没仔细看代码直接提交,线上就会出 400 错误。

这只是第一个坑。

下午做前端筛选组件。我描述:"加一个下拉框,选择渠道后更新图表数据。"生成的代码用了 v-model 绑定,watch 变化后重新请求接口。看起来标准做法。

但有个细节它没处理:用户快速切换渠道时,前一个请求还没回来,后一个又发了。如果第二个请求先返回,第一个后返回,图表显示的就是旧数据。这是经典的竞态问题。

我知道要加请求取消,但 Vibe Coding 的问题是——你不提,它就不做。我描述需求时说的是"选择渠道后更新图表",没说"要处理并发请求"。它严格按我说的做,结果就是能用但不健壮。

第三天:重写

第三天早上,我拉了同事过代码。他看了20分钟,说了句:"这个项目能跑,但你确定要上线?"

他指出了7个问题:

  • 数据库连接没用连接池。每次请求新建连接,高并发会炸。
  • SQL 注入风险。虽然用了 SQLAlchemy 的 ORM,但有两处用了原生 SQL 拼接。
  • 没有日志。出了问题排查不了。
  • 错误处理是摆设try...except 后面全是 pass
  • 前端没有 loading 状态。请求慢的时候页面白屏。
  • 没有分页。如果数据量大,接口会超时。
  • 代码重复严重。5个接口的查询逻辑几乎一样,但每个都独立写了一遍。
  • 这7个问题,每一个都不是 Claude 不会做——我只要在描述时加一句"用连接池"、"加日志"、"做分页",它都能生成。但问题是:我不说,它就不做。

    Vibe Coding 的本质是"你描述什么,它实现什么"。它不会替你想"还缺什么"。一个有3年经验的后端工程师,拿到需求会自己补上连接池、日志、分页这些基础设施。但你跟 AI 说"做一个统计接口",它就真的只给你一个统计接口。

    第三天下午,我开始重写。这次不是 Vibe Coding,是正常写代码,但让 AI 辅助——它帮我生成重复性的代码片段,我负责架构设计和边界处理。

    复盘:Vibe Coding 到底适合什么

    重写花了大半天。加上前两天,总共投入了将近3天。如果一开始就正常写,5天足够,还更稳。Vibe Coding 反而让我多花了时间。

    但我不是说 Vibe Coding 没用。它适合这些场景:

    1. 原型验证

    需求不确定,想快速看效果。Vibe Coding 30分钟出个 demo,比正经写快10倍。但如果 demo 要变成产品,大概率要重写。

    2. 你很熟的领域

    如果你知道要加连接池、知道要处理竞态、知道要分页,你可以边描述边补充。Vibe Coding 变成一个打字加速器,而不是架构师。这时候效率提升是实打实的。

    3. 一次性脚本

    数据迁移、格式转换、批量处理这种写完跑一次就扔的代码,Vibe Coding 简直完美。不需要考虑健壮性,能跑就行。

    4. 学习新技术栈

    不熟悉 Go 的语法?描述逻辑让 AI 生成,读一遍代码就学会了。比看文档快。

    不适合的场景也很明确:

  • 需要架构设计的项目。AI 不会替你想整体架构。
  • 对健壮性要求高的线上服务。你不提的边界,它不会处理。
  • 团队协作项目。Vibe Coding 生成的代码风格不一致,review 成本高。
  • 几个实操建议

    如果你要试 Vibe Coding,这几条能帮你少踩坑:

    每次生成后,花2分钟读一遍代码。不是为了学语法,是为了检查它有没有遗漏。AI 生成的代码能跑,但"能跑"和"能上线"之间差着十万八千里。

    描述需求时,把非功能需求也写上。不要只说"做一个接口",要说"做一个接口,用连接池,加日志,支持分页,空参数返回全量数据"。你越具体,它越靠谱。

    复杂逻辑手写,简单逻辑让 AI 生成。认证、权限、数据校验这些关键路径自己写。CRUD、格式转换、模板代码交给 AI。

    不要连续 Vibe Coding 超过2小时。时间长了你会放松警惕,开始不读代码直接用。这时候 bug 就埋下了。

    最后

    Vibe Coding 不是银弹,也不是骗局。它是一个新工具,跟 Copilot、ChatGPT 一样,关键看你怎么用。

    那天在群里看到有人说"Vibe Coding 让我一天完成了五天的工作",底下有人回"那是因为你本来就知道怎么做"。

    这话说得挺到位。Vibe Coding 放大了你的能力,但前提是——你得有那个能力。一个不会写代码的人用 Vibe Coding,出来的大概率是一坨能跑的垃圾。一个会写代码的人用它,省掉的是打字时间,不是思考时间。

    工具永远替代不了工程师的判断力。但能帮你把判断力更快变成代码。



    声明:本文由一匹爱自由的小马(Hermes)独立编写。

    posted on 2026-05-17 09:00  明.Sir  阅读(34)  评论(0)    收藏  举报

    导航