一个在校学生的 Vibe-Coding道路

写在前面

从前,我们比谁代码写得快、bug 调得准;现在,我们比谁能把想法讲清楚、把规则定明白。

这场变化的主角不是更强大的框架,也不是更快的语言,而是人与 AI 协作方式的升级------从"我写每一行"到"我指挥整个开发流"。

而驱动这场转变的核心理念,正是 SDD(Spec-Driven Development,规范驱动开发) :先写好"做什么",再让 AI 精准执行"怎么做"。

在这条路上,我从一个被课程设计逼到崩溃的学生,慢慢摸索出一套属于自己的 Vibe Coding 节奏。接下来,我想和你聊聊这段真实的成长经历。

而这一切的转折点,就藏在 SDD(Spec-Driven Development,规范驱动开发) 之中。

传统coding

在 AI 编程工具尚未普及的年代,相信有很多人入门都是敲"CQ外卖"这样的程序开始接触开发的吧,我也不例外。

开发一个像"CQ外卖"这样的 Spring + Vue 全栈项目,是一场消耗人力、流程固定、节奏缓慢的工程。

那时候其实已经有 AI 了,只是我们不会用------不知道怎么问,也不敢信它能写出靠谱代码。于是后端还是老老实实用 MyBatis 手写 DAO,前端靠 Vue 的 data 和 methods 一点点拼页面

连一个简单的"加入购物车"动画都要翻文档、调样式、反复刷新浏览器看效果。

AI 就在旁边,像一个沉默的特种兵

整个过程常常就一个人包揽全部:自己写需求、画界面、前后端一起写,最后再自己点按钮、输乱码测试会不会崩。没有分工,却有全套流程的负担。

一旦哪块卡住------比如接口还没通,页面就动不了------整个项目就原地停摆。

这种传统 coding 模式本身并不低效------它讲流程、重规范、求稳定,恰恰是大型项目所需要的。

但一旦面对"现在就要用"这类轻量、即时的场景,它的重量就变成了负担。
正因如此,开发者开始转向新的思路:不再一上来就写代码,而是先写清楚规则;不再靠一个人硬扛全栈,而是让 AI 成为协作伙伴。

Vibe Coding

事情是这样的:当我为 JavaWeb 课程设计焦头烂额,一位同学已经用 Trae 辅助完成了他的项目。他没熬夜,也没在控制台里疯狂404 500,反而早早完成了课设。

他看我快被课设弄崩溃了,就顺手把使用方法教给了我------直接把实验题目复制到Trae,然后根据生成的结果继续和它说

我试了一次,就再也回不去了。

从前是人适应框架,现在是"AI 帮你搭好架子,你只管填逻辑

我从此一发不可收拾------课程设计提前完成,还顺手加了用户登录、分页查询、响应式布局。

更关键的是,我第一次觉得,编程不是苦力,而是一种指挥与协作的艺术

这和下面要聊的 vibe Coding 密切相关。


vibe Coding 三大阶段

vibe感 的第一阶段 用一两句话来描述需求

当然,上面的行为我还是不推荐的------作业终究还是要自己认真写,基础不牢,地动山摇。

我之所以分享这段经历,并不是鼓励直接"交AI代劳",而是想说明:工具本身没有对错,关键在于你怎么用它

我上面使用的方法,其实正是 Vibe Coding 的第一个阶段:用一两句话描述需求

比如"帮我在这个 Spring Boot 项目里加一个根据用户名查询用户的功能"或者"在现有的 Vue 页面上加一个清空购物车的按钮"

这种用法,在我的大学生涯里更多出现在课堂作业中------老师给了基础源码,我们拉取下来后,直接在AI编辑器(比如Trae)说:"我要实现 XX 功能",AI 就能快速生成符合项目结构的代码片段。

当然,我并不是直接照搬------每段 AI 生成的代码我都会读,不仅看它怎么写,更琢磨它为什么这样写。

所以,哪怕只是"一句话 prompt",只要带着学习的目的去用,Vibe Coding 的起点,也可以是扎实成长的开始。


vibe感 的第二阶段 设计prompt

当然,上面那种"一两句话句话生成"的方法打打常规赛还行,

但一到"季后赛",比如期中课程设计,学校请来了某马的老师现场检查作业,情况就不同了。

来的不是只看结果的大学老师,而是真正在公司干过开发的年轻讲解老师。这时候,光靠 AI 堆代码就行不通了,我们的打法就得偏"欧美"一点了:结构清晰、命名严谨、注释到位、逻辑可追溯------毕竟,人家一眼就能看出代码是"手搓的"还是"糊弄的"。

具体该怎么做呢?

关键在于升级提示词

  1. 我们可以先赋予 AI 一个明确角色,比如"资深全栈工程师"

  2. 再说明项目结构(文件该放哪儿)、代码规范(ES6、TailwindCSS、RESTful 等)

  3. 接着清晰描述当前需求,提供必要的上下文(如技术栈、已有模块),并指定输出格式(完整文件、逻辑片段或带注释的代码)。

相比第一阶段的随机抽卡,这时的提示词更专业、更系统,本质上是用工程语言引导大模型,把模糊想法拆解为可执行任务,从而精准控制 Vibe Coding 的产出质量------从"碰运气"迈向"可预测"。


vibe感 的第三阶段 多Agent协作

到了第三阶段,其实就和完成大学作业没什么关系了。

Vibe Coding 不再是"人 + AI"的单打独斗,而是演变为一套多 Agent 协作的自动化开发流水线

在真正写代码之前,先让 AI 扮演不同角色,按专业流程依次推进:

举个例子:我们要做一个微信记牌小程序。

首先,在微信开发者工具里新建一个项目。

接着,用 Gemini 3 帮我们生成一份高质量的 Prompt(具体怎么访问 Gemini 自己想办法)。输入两段引导性提示:

ini 复制代码
你是一个大师级的微信小程序产品经理,我现在需要你帮我把想法变成需求文档,用于给到AI编程工具进行实现:
ini 复制代码
我们需要先讨论一下需求,等确定了所有的需求,我们在进行第二步

根据你的具体想法,AI 会输出一份高度结构化、可直接用于工程落地的 Spec。不同的人输入,得到的 Prompt 也不同------这才是真正的个性化协作。

比如,你可能会得到这样一份提示词:

ini 复制代码
Role: Expert WeChat Mini Program Developer
Task: Create a standalone scoring Mini Program (offline-first).
Language: JavaScript (Native WeChat Framework), WXSS, WXML.
1. Project Context (项目背景)
这是一个用于线下桌游(麻将、扑克)的通用记分工具。
核心逻辑:基于"零和游戏"规则(Zero-Sum Game),即每局所有玩家的得分之和必须为 0。
运行模式:单机版,无后端,所有数据存储在本地缓存(LocalStorage)。
用户:通常由其中一名玩家操作,记录所有人的分数。
2. Tech Stack (技术栈约束)
Framework: Native WeChat Mini Program (原生开发).
Styling: Standard WXSS (Flexbox layout). Minimalistic design.
Storage: wx.setStorageSync / wx.getStorageSync.
Logic: No external dependencies. Pure JS logic.
3. Data Schema (数据结构设计)
Please strict follow this JSON structure for LocalStorage key game_history.
code
JSON
[
  {
    "id": "uuid_v4_string",          // 唯一牌局ID
    "name": "2023-10-01 欢乐麻将",    // 牌局名称
    "createTime": 1696123456789,     // 创建时间戳
    "playerCount": 4,                // 玩家人数 (2-6)
    "players": [                     // 玩家列表
      { "id": 0, "name": "张三", "totalScore": 10 },
      { "id": 1, "name": "李四", "totalScore": -5 },
      { "id": 2, "name": "王五", "totalScore": -5 },
      { "id": 3, "name": "赵六", "totalScore": 0 }
    ],
    "rounds": [                      // 对局记录流水
      {
        "roundId": 1,
        "timestamp": 1696123500000,
        "scores": [10, -5, -5, 0]    // 对应 players 数组索引的分数变化
      }
    ]
  }
]
4. Page Flow & Requirements (页面逻辑)
Page 1: Home (首页 - 牌局列表)
UI:
Show list of saved games (Name + Date + Player names).
If list is empty, show a placeholder image + "Create New Game" button.
Floating Action Button (FAB): "+" to create a new game.
Interaction:
Click item -> Go to Page 3 (Scoreboard).
Long press item -> Option to Delete game.
Page 2: Create Game (新建牌局)
UI:
Input: "Game Name" (Default: Current Date + "Game").
Selector: "Player Count" (Range: 2 to 6, Default: 4).
Dynamic Inputs: "Player Names" based on count (Default: P1, P2, P3...).
Logic:
On "Start": Initialize the data structure and save to LocalStorage, then redirect to Page 3.
Page 3: Scoreboard (计分看板 - 核心页)
Header:
Grid layout showing current totalScore for each player.
Highlight the winner (highest score) in Red, loser in Green.
Body (List):
Reverse chronological list of rounds (Round 10, Round 9...).
Show specific score changes for that round (e.g., +10 | -5 | -5 | 0).
Delete Function: Allow deleting the last record only (to prevent logic errors).
Footer:
Large Button: "Record Round" -> Opens Page 4.
Page 4: Input Score (记分录入)
UI:
List of players. Each row has: Player Name + Input Field (Number).
Auto-Balance Button: A button next to the last player or at the bottom.
Logic: Calculates 0 - (Sum of other players) and fills the remaining field.
Validation (Strict Zero-Sum):
Before saving, check: Sum(scores) === 0.
If Sum !== 0, show Toast error: "Total score must be 0! Current: +X".
Allow input of 0.
Save:
On success: Update players.totalScore, push to rounds, save to LocalStorage, go back to Page 3.
5. Edge Cases (异常处理)
Input Type: Ensure inputs handle negative numbers (keyboard type usually digit or number allowing -).
Empty Input: Treat empty input as 0.
Data Persistence: Update LocalStorage immediately after every round addition/deletion.

然后,打开你喜欢的 AI 编辑器(比如 Trae、Cursor),把刚才新建的空项目文件夹拖进去,把这份 Prompt 粘进去,让它开始生成代码

然后得到了这样的结果。这本来也不是干货博客,这里我们主要看这个prompt和生成的代码。

你会发现:它生成的代码结构清晰、逻辑严谨、注释到位,甚至考虑了零和校验、本地存储格式、边界输入处理等细节。

这已经不是"帮我写个功能"了,而是"按生产标准交付一个模块"。

而且说实话------这份 Prompt,确实比我手写的要好得多

我们可以看到:整个过程强调规矩、专业、流程化 ,不再是随意生成,而是以 Spec 为唯一权威源------这就是 Spec-Driven Development(规范驱动开发,SDD) 的核心理念:先写清楚"要做什么",再让各角色围绕规范协同履约。

此时的 Vibe Coding,已接近生产级标准:可审计、可追溯、可迭代 。AI 不再是第一,第二阶段的prompt抽卡机,而是一支训练有素的虚拟工程团队------你只需担任"技术负责人",把控方向,协调节奏,确保每个 Agent 都在正确的轨道上交付高质量产出。

这里我要强调一个概念:SDD

SDD(Spec-Driven Development,规范驱动开发)

是一种以清晰、可执行的规范为起点和唯一权威的开发范式------先写好"合同",再让代码履约。

在 Vibe Coding 的第三阶段,SDD 成为核心:AI 不再凭语义的模糊指令自由发挥,而是围绕一份由虚拟产品经理产出的结构化需求文档(Spec.md),依次驱动设计、编码与测试,确保每个环节都严格对齐同一份契约。

和"先写代码再补文档"不同,Spec-Driven 强调代码必须严格满足规范,而不是靠口头理解或临时修改。这样做的好处是:需求更清晰、沟通成本更低、返工更少,也更容易做自动化测试。

AI 也不再是魔术师,而是一个守规矩的协作者。

总结

整篇博客,我都是以一个普通在校学生的视角,讲了自己怎么从"手敲 CQ 外卖"一步步走到用 Vibe Coding 搞定课程设计的过程。

一开始是被课程设计逼到墙角,偶然看到同学用 Trae 几分钟跑通了我熬一晚上都搞不定的逻辑;后来慢慢发现

AI 不是用来抄答案的,而是用来放大你的工程思维的。

而这一切能真正落地的关键,就是 SDD(Spec-Driven Development)

它让我明白:未来最有价值的程序员,可能不是写代码最快的那个,而是能把需求翻译成清晰、可执行规范的那个人。

Vibe Coding 不是取代我们,而是让我们终于可以像真正的工程师那样工作------不靠蛮力,而靠指挥系统。

而这,或许才是编程本该有的样子。

2025年是Agent 元年,不管下学期我会偷偷跑去哪家公司实习,我都会继续拥抱最前沿的技术。

相关推荐
李剑一4 小时前
uni-app使用瓦片实现离线地图的两种方案
前端·trae
星辰引路-Lefan4 小时前
在浏览器中运行大模型:基于 WebGPU 的本地 LLM 应用深度解析
ai·ai编程·llama·gpu算力
冬奇Lab5 小时前
【Cursor进阶实战·06】MCP生态:让AI突破编辑器边界
人工智能·编辑器·ai编程
踏浪无痕5 小时前
从需求到落地:我们是如何搭建企业知识库问答系统的
后端·ai编程
FreeCode5 小时前
一文精通Agentic AI设计
人工智能·agent·ai编程
洛卡卡了5 小时前
2025:从用 AI 到学 AI,我最轻松也最忙碌的一年
人工智能·后端·ai编程
橙子的AI笔记5 小时前
2025年全球最受欢迎的JS鉴权框架Better Auth,3分钟带你学会
前端·ai编程
黑土豆6 小时前
一次真实的流式踩坑:fetchEventSource vs fetch流读取的本质区别
前端·javascript·ai编程
石小石Orz6 小时前
自定义AI智能体扫描内存泄漏代码
前端·ai编程
飞哥数智坊6 小时前
谈谈我对 Claude Code 之父13条技巧的理解
人工智能·ai编程·claude