先说清楚:这篇文章写给谁
在云栈社区,这篇文章只写给程序员和有技术背景的人。
如果你不写代码,这篇文章对你可能没什么用——你可以直接跳到下一篇。
如果你写代码,或者你管理写代码的人,我想和你聊一个 2026 年最真实的技术从业者困境:
「感觉流」(Vibe Coding)和「工程化」之间,你站哪边?
这不是一道选择题,但很多程序员把它当成了选择题——然后做出了错误的答案。
两个我亲眼看见的极端
极端案例 A(Vibe Coding 的拥护者):
我认识一个独立开发者,【姓名或描述】,他从去年开始全面拥抱 Vibe Coding。
他的工作方式是:打开 Cursor,说出他想要什么,然后接受 AI 的几乎所有建议——不深究每一行代码,不要求自己理解实现细节,只看结果能不能跑。
他在【2 个月】里上线了【25 个】产品原型,其中【100+ 个】有真实的付费用户。
同期,我身边大多数「传统」开发者,【6 个月】内上线了【2 个】。
速度的差异是真实的,惊人的。
极端案例 B(工程化原教旨主义者):
我认识另一个技术背景更强的开发者,在大厂做过几年,代码审查标准极高,对「Vibe Coding」几乎本能地排斥——「这不是真正的编程」。
他的产品,代码质量无可挑剔。
但他的第一个产品,从开始到上线花了【5 个月】。
在这【5 个月】里,他的代码经过了完整的测试覆盖、严格的架构设计、多轮的重构优化——
然后他终于上线了,发现市场已经有三个竞品先他而至,其中一个就是案例 A 的某个原型。
这两个人,代表了 AI 时代程序员的两种极端。
两种极端,都付出了不应该付出的代价。
Part 1:什么是 Vibe Coding——精确定义,不是玩笑
「Vibe Coding」这个词,最早由 Andrej Karpathy 提出。
他描述的是一种编程状态:完全沉浸在意图和感觉流中,接受 AI 的代码建议,而不总是理解每一行代码在做什么。
这不是在贬低这种方式——Karpathy 本人是这种方式的实践者和提倡者(在合适的场景里)。
但这个词从 Karpathy 的精确描述,到很多人的实践,中间发生了重大的误解。
Karpathy 说的 Vibe Coding,有一个重要的前提:
他知道自己在做什么。他能判断 AI 给的代码是不是朝正确的方向走。他能感知「这里有问题」即使他没有逐行读代码。
这种「感觉」,来自他多年的技术积累——不是凭空产生的。
很多人把「接受 AI 的所有建议,不管自己理不理解」当成了 Vibe Coding。
这不是 Vibe Coding。
这是「盲目依赖」。
Vibe Coding 的精确定义(我自己的理解版本):
Vibe Coding =
在特定场景下,刻意降低对「理解每行代码」的要求,
把认知资源集中在「意图和方向」上,
让AI处理实现细节——
同时,你保留对「整体是否朝正确方向走」的判断力。
关键词是「刻意」和「同时保留判断力」。
不是「偷懒不看代码」,而是「在这个场景下,不需要看每行代码,但我知道整体在做什么」。
Part 2:两种模式的精确适用边界
我花了 9 个月踩坑,才建立了这套边界判断框架。
适合 Vibe Coding 的场景
场景一:原型验证(最适合)
你想知道的是:「这个方向可不可行?」
你不需要知道的是:「这段代码能不能维护?」
Vibe Coding的价值:
72小时内验证一个想法,而不是2周。
边界:
一旦这个原型要进入「正式开发」阶段,
所有Vibe Coding出来的代码,必须重写或系统化审查。
不要在Vibe Coding的代码上直接扩展——
这是最常见的技术债务来源。
场景二:个人工具(第二适合)
你自己用的工具,坏了你来修。
没有用户数据,没有SLA,没有团队维护。
Vibe Coding的价值:
把「本来要花2天手动做的重复工作」,
用2小时做出一个「也许有bug但能用」的工具。
边界:
一旦这个工具要给别人用,停止Vibe Coding,
开始做错误处理、日志记录、用户提示。
场景三:一次性脚本(适合)
数据迁移、一次性的批量处理、临时的格式转换。
用完即弃的脚本,不需要优雅,需要能跑一次。
边界:
真的是「用完即弃」——不要让「临时脚本」变成「生产系统」。
(这是程序员最常说的谎言之一)
场景四:探索全新领域(有条件适合)
你在学一个你完全不熟悉的技术栈,
需要快速获取「这个东西能不能做X」的直觉。
Vibe Coding可以帮你快速建立直觉。
边界:
Vibe Coding出来的「学习代码」,
你必须在理解之后才能用在正式项目里。
「它跑起来了」不等于「我理解了它为什么能跑」。
必须工程化的场景
场景一:生产环境的核心服务
任何会影响真实用户体验的代码,
必须是你(或你的团队)理解的代码。
原因不是「规范」,是「你需要能在凌晨3点排查问题」。
你Vibe Coding出来的代码,在出问题的时候,
你看不懂,你改不了,你不知道哪里断了。
场景二:涉及用户数据的系统
数据安全不是「感觉安全」就可以的。
AI写的数据处理代码,会出现:
• SQL注入漏洞(AI不总是记得参数化查询)
• 权限边界模糊(AI不了解你的业务边界)
• 数据泄露路径(AI不知道哪些数据不能出现在日志里)
每一行涉及用户数据的代码,
必须经过你的理解和专项的安全审查。
场景三:多人协作的代码库
你Vibe Coding出来的代码,你的同事要维护。
你的同事,不在你当时和AI的对话里。
他们看不到你「为什么这么实现」——
因为你自己也不完全知道。
这对团队协作是有毒的。
规则:进入共享代码库的代码,
你必须能向任何一个团队成员解释清楚每个关键实现。
解释不清楚的,重写,直到你能解释清楚。
场景四:需要长期维护的项目
我在这里踩过最惨的一个坑。
【具体描述你的真实经历:
用Vibe Coding做了某个项目的某个功能,
X个月后需要修改时,
发现自己完全看不懂当时的代码,
最后花了X倍的时间重写】
时间线:
Vibe Coding写完:2小时
X个月后,需要改一个功能:2周
等价于:为了节省2小时,付出了2周的代价
教训:
任何项目,在你判断「我以后会再动这段代码」的时候,
就是需要工程化的时候。
Part 3:我自己的「Vibe Coding 灾难」
【第 1 个月】,我做了一个让我后悔很久的决定。
我在做【项目描述】,有一个功能需要实现:【功能描述】。
我用 Vibe Coding 的方式,让 Cursor 帮我完成了这个功能。整个过程花了【2 小时】——比我预估的快很多。
代码跑起来了,测试通过了,我非常满意。
然后【2 个月】后,这件事发生了:【具体的问题,比如:需要修改某个逻辑、出现了某个 bug、新功能需要和这段代码集成】
我打开那段代码,看了【5 分钟】。
我看不懂。
不是完全看不懂——我大概知道它在做什么。但里面有几个关键的设计决策,我不知道为什么这样做,也不知道改变它们会影响什么。
我尝试修改了一个地方,运行,报错。
改回来,运行,好了。
改另一个地方,运行,没报错,但行为不对。
我花了【3 天】,改了一个原本应该【1 小时】能完成的修改。
那次之后,我建立了一个我自己的规则——在下面 Part 4 里会说。
Part 4:工程化 AI——具体是什么,怎么做
很多人把「工程化」理解成「不用 AI」。
这是一个错误的二元对立。
「工程化 AI」不是「不用 AI 写代码」,而是「用 AI 做工程化的事」。
工程化 AI 的四种具体实践:
实践一:用 AI 写测试,你来定义边界
传统做法:自己写功能代码,自己写测试(或者不写测试)
工程化AI做法:
① 你先写「测试用例描述」——
「这个函数在X情况下,应该返回Y」
「这个函数在Z边缘情况下,应该做什么」
② 让AI根据你的描述,写测试代码
③ 你审核测试代码,确认它在测你真正想测的东西
④ 然后用AI写功能代码,让测试通过
价值:
你定义了「正确」的边界(这是判断力,是你来做的)
AI处理测试代码的写作(这是执行,AI来做)
结果:有测试覆盖的代码,而且测试是基于你的理解定义的
实践二:用 AI 做代码审查,你来判断建议
做法:
把你写的代码发给AI,让它做审查:
「以下是我写的[功能]代码。
请从以下角度审查:
① 有没有明显的安全漏洞(特别是[数据处理/用户输入/权限控制]相关)
② 有没有可能的边缘案例没有处理
③ 有没有性能问题(在[具体的数据规模]下)
④ 有没有违反[我的代码规范,比如:错误处理规范/日志规范]
对每一个发现的问题:
说明问题在哪里,为什么是问题,建议怎么修改。
对你不确定的地方,请明确标注[不确定]。」
价值:
AI做了第一遍的系统性检查(效率高)
你判断哪些建议是真正重要的(判断力是你的)
重要:AI的代码审查建议,你要逐条判断是否采用——
不能全部接受,也不能全部忽略。
每一条建议,你需要理解「为什么这是问题」。
实践三:用 AI 生成文档,代码是你写的
这是最简单但最被低估的工程化AI实践。
做法:
写完一个函数/模块之后,发给AI:
「以下是这段代码,请帮我生成:
① JSDoc注释(或你使用的文档格式)
② README里关于这个模块的使用说明
③ 这个函数可能需要注意的使用场景和限制
注意:只基于代码本身生成文档,
不要补充代码里没有的功能或行为。」
价值:
文档从「不写」变成「总是写」
而且文档质量稳定,不因为你的心情/时间决定
实践四:用 AI 处理样板代码,你来做创造性决策
什么是样板代码(Boilerplate):
每次都要写但基本一样的代码,
比如:CRUD操作、错误处理模板、API接口定义、
数据验证、日志记录格式……
做法:
让AI生成这些样板代码,你做三件事:
① 定义「这个样板需要满足什么标准」
② 审核生成的代码是否符合你的标准
③ 做那些需要「理解业务逻辑」才能做的定制化修改
你不做的:从零手打这些重复代码——
那是在浪费你的创造性认知资源。
Part 5:2026 年程序员的三种新型竞争力
这是我观察到的,在 AI 时代,真正有竞争优势的程序员,在练的东西。
不是「会用 Cursor」,不是「会写提示词」。
竞争力一:系统架构判断力
AI改变了「实现」的成本,没有改变「架构决策」的重要性。
一个错误的架构决策,
AI能帮你很快实现它,也能帮你很快付出技术债务的代价。
「这个系统应该是单体还是微服务?」
「这个数据应该存在关系数据库还是文档数据库?」
「这个功能应该在客户端处理还是服务端处理?」
这些判断,AI可以给你选项和分析,
但做判断的,必须是你——
因为它需要你对「这个系统在真实使用中会遇到什么」的理解。
这种判断力,AI用得越多,就越贵重。
因为大量Vibe Coding的代码在快速产生,
能判断「这堆代码的架构是否会撑得住」的人,变得稀缺。
竞争力二:AI 输出质量评估力
这是「质量判断能力」在代码层面的具体化。
AI写的代码,有一类问题特别难发现:
「逻辑上成立,但在边缘情况下失效」
示例(你可以用你自己的真实案例):
AI写的分页逻辑,在数据量正好是页面大小的整数倍时,
会多返回一个空页面——逻辑上完全说得通,但行为错误。
AI写的缓存失效逻辑,在并发请求时会有竞态条件——
单线程测试通过,高并发时出问题。
这类问题,发现它们,需要:
① 知道AI容易在哪类问题上出现这种错误
② 有意识地设计测试用例,专门针对边缘情况
③ 在代码审查时,不只看「逻辑是否正确」,
还看「有没有我没有考虑到的场景」
这是经验积累出来的直觉,AI无法提供这个直觉。
竞争力三:技术债务管理力
Vibe Coding时代的最大隐患,
是技术债务的积累速度,超过了大多数人的认知速度。
你的Vibe Coding代码可能在快速堆叠,
但你「理解这些代码的整体状态」的能力,没有同步提升。
某天,你会到达一个临界点:
「我不知道这个系统现在处于什么状态了。」
管理技术债务,需要一种元认知能力:
「我知道我知道什么,我知道我不知道什么。」
在你的代码库里:
哪些部分你完全理解?
哪些部分你大概理解但细节模糊?
哪些部分你基本不理解?(Vibe Coding的产物?)
定期做这个「清单」,
然后把「基本不理解」的部分,
要么系统化理解,要么重写,要么标记为「风险区域」。
没有这个清单,你的技术债务是一个看不见的定时炸弹。
有了这个清单,它至少是一个可管理的风险。
Part 6:我的个人决策框架——一个问题就够了
经过【5 个月】的摸索,我现在在开始一段新的开发工作之前,只问自己一个问题:
「【1 个月】后,如果有人需要修改这段代码,他能理解它吗?如果他不能,我有没有时间现在把它做得可以理解?」
这个问题的两个可能答案,导向不同的选择:
答案A:「X个月后不需要改它了,或者到时候重写也无所谓」
→ 适合Vibe Coding
→ 快速实现,不追求可维护性
答案B:「X个月后可能需要改,或者会有人维护这段代码」
→ 工程化
→ 你必须能解释清楚每个关键决策
→ Vibe Coding出来的部分,需要被理解/重写/文档化
这个问题好在哪里?
它把「Vibe Coding vs 工程化」,
从一个「哲学立场」变成了一个「具体的情境判断」。
不是「我是Vibe Coder」还是「我是工程化原教旨主义者」,
而是「这段代码,在这个情况下,用哪种方式更合理」。
Part 7:给不同处境的程序员的具体建议
如果你是:独立开发者/Solo 创业者
你最大的优势:速度
你最大的风险:技术债务在你不注意的时候堆积
建议的比例:
原型阶段:80% Vibe Coding + 20% 工程化关键路径
产品验证后:50% + 50%
稳定运营后:20% Vibe Coding + 80% 工程化
你现在最应该做的一件事:
给你的代码库做一次「技术理解审计」——
列出所有你「基本不理解」的部分,
给它们贴上「⚠️ 风险区域」的标签。
这些区域,是你技术债务的真实位置。
如果你是:大厂/中厂的工程师
你的处境:
个人用AI的速度,和团队协作的规范,之间有张力。
你可以Vibe Coding,但你的代码要进代码库,要被团队维护。
建议:
在「你的个人开发环境」里用Vibe Coding提速,
但进代码库之前,做「理解验证」:
「我能向团队里经验最少的那个人,
解释清楚这段代码的每个关键实现吗?」
解释不清楚——先理解,再提交PR。
你现在最应该做的一件事:
在你的团队里,提议建立「AI代码使用规范」——
不是禁止用AI,而是定义:
「进入我们代码库的代码,需要满足什么标准,
不管它是人写的还是AI写的。」
如果你是:技术管理者/Tech Lead
你的挑战:
你的团队成员,Vibe Coding的速度和程度,
正在超过你的可见性。
他们用AI快速产生了代码,
但没有人知道这些代码的整体健康度。
你现在最应该做的一件事:
在你的团队里,引入「技术理解审计」机制——
定期(比如每季度)做一次:
「我们的代码库里,有哪些部分,
没有任何一个团队成员能完整解释清楚?」
那些部分,是你团队最大的技术风险。
可能是Vibe Coding的产物,
也可能是离职员工留下的遗产,
或者是当时时间压力下的快速交付。
让这些部分变得可见,是你作为Tech Lead最重要的职责之一。
Part 8:关于程序员这个职业
这是我个人的判断,不一定对。
5 年后,「会写代码」这件事,可能变得和「会用 Excel」一样普通。
不是说程序员会消失——用 Excel 的人没有消失,需要会用 Excel 的岗位也没有消失。
但「会用 Excel」不再是竞争优势,就像「会打字」不再是竞争优势一样。
那时候,程序员的竞争优势,在哪里?
我的判断:
不在「能写多快」——AI在帮每个人都写得更快
不在「懂多少技术细节」——AI在帮每个人都理解更多技术细节
而在:
「能设计出正确的系统架构」
「能识别AI生成代码里的隐患」
「能管理复杂系统的整体健康度」
「能把技术能力翻译成业务价值」
这四件事,有一个共同点:它们都需要「对整体负责的判断力」,而不只是「执行单一任务的技能」。
Vibe Coding,给了你速度。
工程化,给了你对整体负责的能力。
两者都不要放弃,但要知道在哪里用哪个。
结尾
我不站在「Vibe Coding」这边,也不站在「工程化原教旨主义」这边。
我站在:「在正确的场景,用正确的方式,做出可以对结果负责的决策」这边。
这听起来像废话,但它其实是一个很高的要求:
「对结果负责」,意味着你不能把责任推给 AI。
不能说「AI 写的代码,出了 bug 不是我的问题」。
不能说「AI 给我建议这么架构的,后来维护困难不怪我」。
你是工程师,你对你交付的东西负责——不管那东西里有多少行是 AI 写的。
这个责任意识,是 Vibe Coding 时代里,工程师最重要的专业素养。
比你用什么工具,比你的代码有多快,都重要。