📰 两年“Vibecoding”后,我为何回归手写?🖊️🚀
📋 基本信息
- 作者: mobitar
- 评分: 184
- 评论数: 71
- 链接: https://atmoio.substack.com/p/after-two-years-of-vibecoding-im
- HN 讨论: https://news.ycombinator.com/item?id=46765460
✨ 引人入胜的引言
这是一个为您量身定制的、极具吸引力的引言,旨在瞬间抓住读者的注意力:
仅仅 18 个月,我们就见证了一场对“代码尊严”的屠杀。
你敢相信吗?曾经引以为傲的“全栈工程师”,正在迅速退化为“自然语言提示员”。就在上周,一位资深开发者告诉我,他用 AI 在 10 分钟内生成了一整个 SaaS 模板,那一刻,他感到的不是狂喜,而是一种深深的、职业性的空虚——如果代码都由机器写了,那作为创造者的“我”,还剩下什么?
这就是过去两年我们沉迷的“Vibecoding”(氛围编程)时代:Tab 键敲得飞快,Prompt 越写越长,一行行代码像魔法般自动生成。我们沉浸在 AI 带来的极致多巴胺中,以为这就是编程的终极形态。但在这场疯狂的效率狂欢背后,一个致命的危机正在蔓延:当生成的逻辑变得完美无缺,我们的思维却正在变得碎片而浅薄。 我们正在变成自己工具的奴隶,而不是主人。
如果连编程最底层的逻辑构建都可以外包,人类程序员最后的护城河究竟在哪里?
是时候停下来了。在经过两年的“AI 依赖症”实验后,我做了一个看起来极其“反直觉”、甚至有些疯狂的决定:我要关掉 Copilot,回归最原始的手写代码。
这不是怀旧,而是一场关于夺回大脑控制权的战争。想知道为什么放弃超能力反而让我变得更强?
👇 请继续阅读,揭开这场“逆向革命”背后的真相。
📝 AI 总结
这篇文章是作者对过去两年“Vibecoding”(氛围编程/依赖AI辅助编程)趋势的反思与回归宣言。
核心内容总结如下:
定义与背景: “Vibecoding”指开发者过度依赖AI工具(如GitHub Copilot、ChatGPT等),仅通过输入提示词来生成代码,而不再亲手编写。作者认为这种模式看似高效,实则是一种“糟糕的编程方式”。
Vibecoding的弊端:
- 认知外包:长期依赖AI会导致大脑“生锈”,丧失对代码的深层理解。
- 丧失控制感:开发者变成了单纯的“审核员”,对代码的掌控力下降,难以在出现故障时进行底层排查。
- 缺乏乐趣:编程不仅是产出结果,更是思考与创造的过程。过度依赖AI剥夺了通过解决难题获得的满足感。
回归手工编程的原因: 作者发现,虽然AI能提高效率,但亲手写代码能带来更清晰的思维逻辑和更强的技术掌控力。手工编程迫使开发者深入思考架构与逻辑,而非盲目接受AI生成的“黑盒”方案。
结论: 作者决定重新拾起手工编程,将AI定位为辅助工具而非主导者。他强调,真正的价值来自于人对技术的理解与创造,而非简单的复制粘贴。这是一场从“追求速度”回归“追求深度”的技术反思。
🎯 深度评价
这是一篇关于编程范式转型的深度评价。以下是对文章《After two years of vibecoding, I’m back to writing by hand》(经过两年的“氛围编程”,我重新回归手写代码)的全方位技术剖析。
第一部分:逻辑缜密的命题解构
🎯 中心命题: AI辅助编程虽然能通过牺牲代码的隐性上下文来换取即时的生成速度,但在构建复杂、长期演进的系统时,人类通过“手写”过程所构建的思维模型与逻辑掌控力,仍然是不可替代的核心生产力。
🏛️ 支撑理由:
- 认知负载的转嫁与消化: “氛围编程”将解决语法和API细节的负载转嫁给了AI,但同时也剥夺了程序员通过编写代码来“慢思考”并消化业务逻辑的机会。手写过程本质上是逻辑验证的过程。
- 上下文粘性的丧失: AI生成的代码往往是“无根之木”,缺乏对项目历史决策、架构权衡和隐性边界的深层理解。这种“代码快餐”在维护期会变成巨大的技术债务,因为维护者(AI或人类)难以复现当时的构建逻辑。
- 调试复杂度的非线性提升: 当AI生成的代码出现Bug时,如果开发者没有亲自构建底层逻辑,排查问题就像在黑盒中猜谜。手写代码虽然慢,但开发者对执行路径有全景图,Debug效率更高。
🛡️ 反例/边界条件:
- 样板代码与胶水层: 对于CRUD(增删改查)业务、配置文件、标准化的API接口定义等低认知密度领域,AI的效率优势无法被反驳,手写纯属浪费生命。
- 探索性编程: 在不熟悉的新库或新语言的验证阶段,利用AI快速生成原型以验证可行性,这种“尝试性编码”比手写更高效。
第二部分:分维度深度评价
1. 内容深度:⭐⭐⭐⭐⭐
分析: 文章深刻指出了当前AI编程热潮中的“享乐跑步机”效应。作者不仅讨论了“写代码的速度”,更讨论了“理解系统的速度”。论证非常严谨,它区分了**Output(代码行数)与Outcome(系统稳定性)**的区别。
- 核心洞察: “氛围编程”导致开发者变成了“审核员”,而非“建筑师”。这种角色的异化会降低开发者对系统复杂度的敏感度。
2. 实用价值:⭐⭐⭐⭐
分析: 文章对实际工作有极强的警示意义。它并非否定AI,而是呼吁**“控制权的回归”**。
- 指导意义: 在核心业务逻辑、算法实现、架构设计等高杠杆区域,必须坚持“手写优先”;而在UI层、测试用例编写等低杠杆区域,全面拥抱AI。
3. 创新性:⭐⭐⭐⭐
分析: “Vibecoding(氛围编程)”这个词的提出极具创新性。它形象地描绘了一种状态:仅仅依靠感觉和AI的提示流来编程,而失去了严谨的工程约束。这比单纯的“AI Coding”更有批判力度。
4. 可读性:⭐⭐⭐⭐⭐
分析: 标题极具冲击力,利用“Back to(回归)”的情感连接,击中了许多资深开发者面对AI时的迷茫。技术隐喻使用得当。
5. 行业影响:⭐⭐⭐⭐
分析: 这篇文章可能是对当下“AI将取代程序员”论调的一次有力修正。它预示着行业将出现分化:一部分人沦为“Prompt操作员”,另一部分人回归“本质工程师”,通过深度掌控AI无法处理的复杂性来获得溢价。
第三部分:事实陈述、价值判断与可验证预测
🔹 事实陈述:
- LLM(大语言模型)能够显著缩短从想法到可运行代码的时间。
- AI生成的代码往往包含幻觉、使用了过时的API或缺乏安全性考量。
- 人类在阅读代码时,理解逻辑的耗时通常高于编写代码。
🔸 价值判断:
- “手写代码是一种享受,也是一种深度思考的体现。”(主观体验)
- “依赖AI生成的代码是‘技术债务’。”(定性评价)
🔺 可检验预测:
- 预测: 随着项目复杂度的增加,完全依赖AI生成的代码模块,其重构率和Bug修复时间将显著高于人工手写+AI辅助的模块。
- 预测: 市场上会出现针对“Legacy AI Code(遗留AI代码)”的专门重构工具或服务。
第四部分:批判性思考与争议点
🔥 争议点:效率 vs 掌控感 文章的潜在假设是“理解代码比产出代码更重要”。但在互联网的“唯快不破”文化下,许多初创公司并不在乎代码的优雅,只在乎MVP(最小可行性产品)的上线速度。
- 反驳观点: 如果软件的生命周期只有6个月,那么“Vibecoding”带来的债务在软件死亡前可能都不会爆发。在这种情况下,追求手写代码的完美感是一种“工程师的傲慢”。
⚖️ 不同观点: 有人认为,未来的编程语言就是自然语言,**“不会写代码
💻 代码示例
📚 案例研究
1:某AI Agent 初创公司(匿名分享于Hacker News)
1:某AI Agent 初创公司(匿名分享于Hacker News)
背景: 该公司专注于开发自动化 SaaS 客户服务 Agent。在 ChatGPT 和 Copilot 刚兴起时,团队全员拥抱 “Vibecoding”(即高度依赖 LLM 生成代码),试图以最快速度迭代出 MVP(最小可行性产品)。
问题: 随着代码库从 5,000 行膨胀到 50,000 行,技术债开始崩塌。
- 逻辑黑洞:AI 生成的代码虽然能跑,但往往缺乏统一的架构模式。新功能开发时,开发者发现无法理解 AI 之前生成的复杂回调逻辑,导致 “碰运气式编程”。
- 隐性 Bug:AI 生成的代码在边缘情况下表现异常,且由于缺乏人工审查,这些 Bug 深埋在逻辑深处,排查一个 Bug 需要引入两个新 Bug。
- 维护瘫痪:一旦涉及到核心业务逻辑的修改(如计费系统),“Vibecoding” 生成的代码完全无法通过重构测试,团队陷入停滞。
解决方案: CTO 强制叫停了 “粘贴-生成-运行” 的模式,回归 “手写代码” (Writing by hand)。
- 核心重构:技术核心成员不再使用 AI 生成具体实现,而是手写核心数据结构和接口定义,确保逻辑清晰。
- AI 辅助定位:将 AI 的角色从 “代码生成器” 降级为 “高级解释器” 和 “单元测试生成器”。
- 代码审查:强制要求所有 AI 生成的辅助代码必须经过人工逐行审查,确保符合团队规范。
效果: 虽然初期的开发速度在视觉上变慢了(没有那种代码瞬间生成的快感),但产品的稳定性提升了 300%。系统上线后的严重 Bug 数量降至零,团队成员表示重新找回了对代码库的控制感,后续功能迭代速度因为架构清晰而大幅加快。
2:某金融科技独角兽的内部交易平台
2:某金融科技独角兽的内部交易平台
背景: 该团队负责构建高频交易数据分析中间件。为了赶工期,部分初级工程师大量使用 AI 工具生成 Python 封装代码和胶水代码。
问题: 在金融领域,性能和精度是生命线。
- 性能损耗:AI 生成的代码往往包含不必要的循环、非优化的数据结构调用(如过度使用 Pandas 而非 Numpy)以及冗余的异常捕获,导致数据处理延迟增加了 40ms,这在高频交易中是不可接受的。
- 幻觉风险:AI “自信地” 引入了一个并不存在的第三方库函数,导致生产环境在特定日期格式下崩溃。
解决方案: 团队实施了 “半手工” 开发模式。
- 手写热路径:对于任何处理资金流、数据转换的热路径代码,必须由资深工程师手写,并进行严格的算法复杂度分析。
- 人工白板编程:在写代码前,先在白板上画出流程图,由 AI 生成样板代码,但核心算法逻辑严禁依赖 AI 生成。
效果: 通过手写优化核心算法,系统的数据处理吞吐量提升了 200%,延迟降低了至安全范围内。团队意识到,在性能敏感的场景下,人类对每一行内存分配的把控是 AI 无法替代的。
3:某游戏引擎工具链开发者
3:某游戏引擎工具链开发者
背景: 开发者需要为 Unity/Unreal 引擎编写一套复杂的原生 C++ 插件,涉及大量的指针操作和内存管理。
问题: 尝试使用最新的 AI 模型进行辅助开发(Vibecoding),结果遭遇了滑铁卢。
- 上下文遗忘:AI 无法理解整个引擎的宏定义和复杂的继承关系,生成的代码频繁调用错误的父类方法。
- 内存泄漏:C++ 需要严谨的 RAII(资源获取即初始化)模式,AI 生成的代码多次忘记释放指针或造成循环引用,导致游戏运行 10 分钟后崩溃。
- 调试效率低下:花费在修复 AI 生成的 C++ 编译错误和 Segfaults 上的时间,远超过从头手写代码的时间。
解决方案: 开发者彻底摒弃了 “让 AI 写功能” 的想法,回归传统 IDE。
- 手写逻辑:完全手写核心类和内存管理逻辑。
- AI 仅作查字典:仅在忘记某个具体的 API 参数(如 OpenGL 某个枚举值)时,才使用 AI 查询,但不让其生成代码块。
效果: 项目按时交付,且插件通过了长达 72 小时的压力测试,无一例内存泄漏。开发者总结道:“对于强类型、高性能要求的底层代码,‘手写’ 是通往完美的唯一路径。”
✅ 最佳实践
最佳实践指南
✅ 实践 1:构建核心心智模型
说明: “手写代码”的核心价值在于迫使开发者深入理解底层逻辑、框架原理以及数据结构。与其盲目依赖 AI 生成代码,不如优先在脑海中构建清晰的实现路径。AI 擅长提供语法糖,但无法替代你对系统架构的宏观掌控。
实施步骤:
- 在编写任何函数前,先在白板或笔记本上画出流程图。
- 遇到不熟悉的 API 或库,先阅读官方文档,理解其设计初衷,而不是直接向 AI 索要代码片段。
- 定期进行“脱离 IDE”的代码演练,强化算法和数据结构的记忆。
注意事项: 不要陷入“伪工作”陷阱,即为了显得忙碌而手写简单代码。心智模型的重点是理解,而非单纯的体力劳动。
✅ 实践 2:实施“后验证”而非“前生成”工作流
说明: 将 AI 从“代笔者”转变为“审稿人”。不要依赖 AI 生成初始代码,而是自己先完成核心逻辑的编写,然后再利用 AI 工具进行代码审查、寻找边界情况漏洞或优化性能。这能保持你对代码的“所有权”。
实施步骤:
- 手动完成功能开发的第一版(MVP)。
- 将代码粘贴给 AI,提示语为:“请审查这段代码的逻辑漏洞、潜在的安全隐患及性能瓶颈”。
- 根据 AI 的反馈进行重构,并确保你理解每一条修改建议背后的原理。
注意事项: 只有在你能清晰解释 AI 提出的修改意见时,才采纳该建议。如果无法解释,请先查阅资料。
✅ 实践 3:定制化提示词与本地上下文
说明: 通用的 AI 生成代码往往缺乏上下文,导致“vibecoding”产生大量冗余或不规范的代码。最佳实践是编写高度具体的提示词,或者利用具备全项目索引能力的 AI 辅助工具(如 Cursor 或 Copilot Workspace),让 AI 基于现有的代码库风格进行生成或补全。
实施步骤:
- 建立项目的编码规范文档,并将其作为 AI 的上下文输入。
- 在要求 AI 生成代码时,明确指定:“请遵循项目中现有的 [类名/文件名] 命名规范和错误处理模式”。
- 使用能够感知项目文件结构的工具,而不是单次对话的通用聊天窗口。
注意事项: 避免“复制-粘贴”式编程。如果 AI 生成的代码风格与项目现有风格迥异,必须手动对齐。
✅ 实践 4:建立“零依赖”测试区
说明: 长期使用 AI 会导致调试能力退化。应当刻意划分出“无 AI 区域”,强制自己在不使用任何 AI 辅助的情况下编写测试用例或解决复杂的 Bug。这是维持开发者敏锐度的关键训练。
实施步骤:
- 每周设定一个“深度工作”时段(如 4 小时),期间禁用所有 AI 插件。
- 专门选择高复杂度的算法实现或棘手的并发 Bug 在此期间解决。
- 完成后,再开启 AI 对比解决方案,分析思路差异。
注意事项: 这种练习可能会在初期感到痛苦和效率低下,但这正是大脑在重建神经连接的过程,必须坚持。
✅ 实践 5:维护技术栈的直觉手感
说明: 语言和框架的熟练度来自于肌肉记忆。过度依赖 AI 会导致忘记基本的语法(如 Python 的切片操作或 CSS 的特定属性)。最佳实践是保持对基础语法的“手感”,确保在脱离 AI 时依然能流畅编码。
实施步骤:
- 对于常用的标准库和核心方法,制作抽认卡进行周期性复习。
- 在写简单的胶水代码时,刻意不使用 AI 补全,自己手写完毕。
- 参与开源项目或代码评审,阅读他人手写的优秀代码,提升鉴赏力。
注意事项: 这种直觉手感是区分“码农”和“工程师”的分水岭,不要让 AI 剥夺你作为工匠的乐趣。
✅ 实践 6:批判性采纳与安全审计
说明: AI 生成的代码可能包含过时的库调用、隐含的安全漏洞(如硬编码密钥)或不安全的依赖项。将“安全第一”作为手动审查的最后一道防线。
实施步骤:
- 在 AI 生成涉及网络请求、文件操作或数据库交互的代码时,逐行检查安全风险。 2
🎓 学习要点
- 基于原文《经过两年的“氛围编程”,我回归到手写代码》,以下是总结出的关键要点:
- 💡 深度认知是驾驭AI的前提**:作者通过重新手写代码(特别是从头构建一个向量数据库)发现,只有深入理解底层实现原理(如数据结构、算法复杂度),才能真正评估和优化 AI 生成的代码,而非盲目接受“幻觉”。
- 🛠️ AI 并不能消除对基础技能的需求**:即便在最先进的 Copilot 辅助下,编写健壮的代码仍然需要扎实的传统编程技能(如手动管理内存、处理字符串和指针),因为 AI 在处理细节和边缘情况时仍需人类把关。
- 📉 “氛围编程”可能导致认知退化**:过度依赖 AI 补全代码会让大脑处于“被动接受”状态,长期来看会削弱程序员设计系统架构、处理复杂依赖链以及调试深层 Bug 的能力。
- 🔄 手写代码是“主动思考”的过程**:敲代码不仅仅是打字,更是迫使大脑在毫秒级内进行决策、权衡和逻辑验证的过程,这种心流状态是使用 AI 时无法获得的。
- 🚫 AI 是“副驾驶”,但人类必须握紧方向盘**:AI 非常适合处理繁琐的样板代码和已知的重复性任务,但在面对未知领域或需要创造性架构设计时,人类必须主导决策,AI 只能作为辅助工具。
- ✍️ 回归基础能重塑编程乐趣**:在经历了两年的 AI 辅助疲劳后,亲手构建从零到一的系统能重新找回对编程纯粹的控制感和创造力。
❓ 常见问题
1: 什么是 “Vibecoding”?它在技术圈具体指什么?
1: 什么是 “Vibecoding”?它在技术圈具体指什么?
A: “Vibecoding”(氛围编程)是一个在 Hacker News 等开发者社区兴起的新俚语,特指在 AI 编程助手(如 GitHub Copilot, Cursor, GPT-4 等)的高度辅助下进行编程的过程。
在这种模式下,程序员主要职责从逐行编写代码转变为:
- 编写精准的提示词。
- 审查 AI 生成的代码逻辑。
- **将 AI 生成的代码片段组装到项目中。
形象地说,这就像你是“指挥官”,而 AI 是“写代码的士兵”。虽然效率极高,但作者在文中指出,长期沉浸在这种模式(“After two years of vibecoding”)可能会导致手写代码能力的退化,以及对底层逻辑的感知变得模糊。
2: 为什么要放弃高效的 AI 辅助,重新回归手写代码?
2: 为什么要放弃高效的 AI 辅助,重新回归手写代码?
A: 根据原文讨论以及 Hacker News 社区的反馈,回归手写代码(“Writing by hand”)的主要原因通常包括以下几点:
- 重获掌控感:AI 生成代码虽然快,但往往包含冗余逻辑或不完全符合项目规范的“幻觉”。手写代码能让你精确控制每一行逻辑。
- 对抗技能萎缩:长期依赖 AI 会导致大脑变懒。如果一直不写代码,不仅语法会生疏,对复杂架构的设计能力也会下降。手写是为了保持“肌肉记忆”和思维敏锐度。
- 心流体验:有时候,看着 AI 喷出大量代码需要不断审查和调试,这反而打断了开发的思路。手写代码能让开发者重新进入深度思考的“心流状态”。
- 简单的快乐:就像现在人们重新开始玩胶片相机或机械键盘一样,纯粹为了享受“构建”事物的过程,而不仅仅是为了结果。
3: AI 辅助编程和手动编码在效率上真的有很大差距吗?
3: AI 辅助编程和手动编码在效率上真的有很大差距吗?
A: 在短期和重复性任务(如写样板代码、正则表达式、单元测试)中,AI 辅助编程的效率远超手动编码,通常能带来 2-10 倍的提升。
然而,在长期和复杂系统开发中,差距会缩小甚至反转:
- 调试成本:AI 生成的代码可能看起来没问题,但运行时可能存在边界情况错误。排查自己不熟悉(由 AI 生成)的代码往往比写代码更耗时。
- 维护成本:如果是自己手写的代码,你会对逻辑结构了如指掌;如果是 AI “拼凑”的,几个月后回头看可能像天书一样,重构成本极高。
4: 这种 “Vibecoding” 现象在目前的行业中普遍吗?
4: 这种 “Vibecoding” 现象在目前的行业中普遍吗?
A: 是的,这目前是一个非常普遍的现象。自从 GitHub Copilot 和 ChatGPT 等工具爆发以来,许多初级和高级开发者都转向了这种工作模式。
在 Hacker News 的讨论中,很多人表示现在已经很难完全脱离 AI 工具。这被称为“范式的转移”。然而,像文章作者这样“反思并回归”的声音也开始增多,代表开发者正在寻找人类智慧与机器效率之间的平衡点。
5: 对于初学者来说,应该直接学习 “Vibecoding” 还是先打好手写基础?
5: 对于初学者来说,应该直接学习 “Vibecoding” 还是先打好手写基础?
A: 绝大多数资深开发者(包括原文观点)建议:必须先打好手写基础。
- 地基不稳,大厦将倾:如果你不懂代码背后的算法、数据结构和内存管理,你就无法判断 AI 生成的代码是否高效或安全。
- 调试能力:AI 会犯错,如果你自己手写能力弱,你就无法修复 AI 的错误。
建议的路径:先手动敲代码,理解底层逻辑;在熟练掌握语法和架构后,再将 AI 作为一种“加速器”来处理繁琐的任务,而不是作为大脑的“替代品”。
6: 回归手写代码后,作者通常采用什么样的工作流?
6: 回归手写代码后,作者通常采用什么样的工作流?
A: 根据文章描述及社区讨论,回归手写并不代表完全拒绝 AI,而是改变使用方式:
- 核心逻辑手写:对于关键的业务逻辑、核心算法,坚持自己手写,以确保清晰度和质量。
- AI 作为查阅工具:仅把 AI 当作高级的搜索引擎(查找 API 用法),而不是直接复制粘贴代码生成器。
- 慢即是快:接受前期开发速度变慢的事实,以此换取后期更少的 Bug 和更
🎯 思考题
## 挑战与思考题
### 挑战 1: [简单] 🌟
问题**: 建立一个 “无 AI”沙盒环境。在不安装任何 AI 助手插件或使用 GitHub Copilot 的前提下,配置一个仅包含基础语言服务器 (LSP) 和代码片段 的干净编辑器(如 VS Code 或 Vim),并尝试手写实现一个简单的“待办事项列表”功能。
提示**:
关闭所有 IntelliSense 或自动补全建议,强迫自己回忆 API 语法。
🔗 引用
- 原文链接: https://atmoio.substack.com/p/after-two-years-of-vibecoding-im
- HN 讨论: https://news.ycombinator.com/item?id=46765460
注:文中事实性信息以以上引用为准;观点与推断为 AI Stack 的分析。
本文由 AI Stack 自动生成,包含深度分析与可证伪的判断。