深夜改代码的人,终于不用独自战斗了
它不像 Cursor 那样实时感知你的上下文,但在处理独立任务时,它的回答往往更有条理,更像是在和一个冷静的工程师讨论方案。于是我重新读了一遍代码,查阅了 asyncio 的文档,在笔记本上画了几张调用关系的草图。我打开了 Cursor,一个基于 VS Code 的 AI 编辑器,给它发了一个简单的指令:“帮我写一个 Python 脚本,批量重命名文件夹里的图片,按照拍摄日期排序。Cursor 成
深夜改代码的人,终于不用独自战斗了
凌晨两点,我对着屏幕上的报错信息发呆。那是一个再熟悉不过的场景:Python 抛出一个莫名其妙的 TypeError,堆栈跟踪打印了三十多行,指向一个我三天前写的函数。我揉了揉眼睛,开始逐行排查——检查变量类型、打印中间结果、在 Stack Overflow 上搜索类似的错误描述。四十分钟后,我发现问题出在一个被遗忘的缩进,一个该死的空格。
这种时刻,你很难不感到孤独。不是那种诗意的孤独,而是一种被工具背叛的疲惫。我们花了这么多年学习编程语言的语法,记忆各种框架的 API,却在最基础的地方栽跟头。
然后 Vibe Coding 出现了。
我第一次听说这个词是在一个技术播客里,主持人用一种近乎调侃的语气说:"现在写代码不需要懂代码了,你只需要会聊天。"我当时嗤之以鼻。作为写了十年代码的人,我本能地抗拒这种说辞——编程是一门手艺,是需要时间打磨的,怎么可能靠"聊天"就搞定?
但好奇心最终战胜了偏见。我打开了 Cursor,一个基于 VS Code 的 AI 编辑器,给它发了一个简单的指令:“帮我写一个 Python 脚本,批量重命名文件夹里的图片,按照拍摄日期排序。”
三秒钟后,代码出现在屏幕上。不是那种需要我手动调整半天的半成品,而是可以直接运行的、带注释的、甚至处理了边界情况的完整脚本。我盯着那段代码看了很久,心情复杂。它写得比我预期的要好,结构清晰,变量命名规范,还贴心地加了错误处理。
那一刻我意识到,有些东西确实变了。
这种变化不是"AI 要取代程序员"那种耸人听闻的叙事。真正让我触动的是另一种可能性:一个人可以在不懂 Python 的情况下,解决一个原本需要学几个月才能处理的问题。一个设计师可以为自己的作品集网站写交互逻辑,一个产品经理可以搭建原型验证想法,一个生物学家可以处理实验数据而不必先成为 Python 专家。
门槛在降低,但这不是在贬低专业,而是在放大可能。
我开始频繁使用这些工具。Cursor 成了我的日常 IDE,它的 Tab 键补全常常让我惊讶——不是惊讶于它猜对了我要写什么,而是惊讶于它猜到了我应该写什么。那些我懒得写的类型注解,那些我总会忘记的异常处理,它都默默补上了。它像一个经验丰富的搭档,不说话,但总在关键时刻推你一把。
Claude Code 则是另一种体验。Anthropic 把它做成了一个命令行工具,这意味着你可以直接在终端里和它对话。我特别喜欢用它来处理那些"我不想动手但又不得不做"的杂活:整理混乱的日志文件、写正则表达式提取特定格式的数据、把一段烂代码重构得稍微能看一点。它不像 Cursor 那样实时感知你的上下文,但在处理独立任务时,它的回答往往更有条理,更像是在和一个冷静的工程师讨论方案。
然后是 Codex,OpenAI 推出的那个可以直接操作终端的 AI。说实话,第一次用的时候我有点紧张——让它直接在我的电脑上运行命令?这听起来像是给陌生人我家的钥匙。但用了几次之后,我发现它的设计其实相当克制。它会在执行前展示计划,询问确认,而且默认是只读模式。我让它帮我配置一个复杂的数据库迁移流程,它一边解释每一步在做什么,一边生成相应的命令。整个过程像是在上一堂实践课,只是学生和老师是同一个人。
这些工具各有脾气。Cursor 擅长在代码的上下文里穿梭,Claude Code 适合处理需要多步推理的任务,Codex 则在和系统打交道时显得得心应手。它们都不是完美的——Cursor 偶尔会生成看似合理但实际错误的代码,Claude Code 在处理超长文件时会丢失一些细节,Codex 有时候过于谨慎,连删除一个空文件夹都要反复确认。
但"不完美"恰恰是它们最像人的地方。
我想起自己刚入行时,公司里有位老工程师。他从不直接告诉我答案,而是问我:“你觉得这里为什么会出错?”、“如果用户输入了负数怎么办?”、"这个方案三年后还能维护吗?"和他共事很痛苦,因为每个问题都要想很久。但正是这种被追问的过程,让我真正理解了什么是好的代码。
现在的 AI 工具还没有达到那种程度。它们不会真正"关心"代码的质量,不会在你写出一个丑陋的 hack 时皱眉头,不会追问你业务逻辑背后的真实需求。它们只是极其高效地执行指令,把"做什么"和"怎么做"之间的鸿沟填平了。
所以 Vibe Coding 的真正含义,或许不是"不用学编程了",而是"编程的表达方式变了"。你仍然需要知道自己在做什么,需要能够判断生成的代码是否合理,需要在 AI 给出三个方案时选出最适合的那个。只是你不再需要记忆那么多语法细节,不再需要为每一个分号的位置纠结,可以把更多精力放在问题本身。
前几天,我又遇到了一个凌晨两点的 bug。这次我没有独自挣扎,而是把错误信息扔给了 Claude Code。它很快指出问题出在一个异步函数的错误使用上,并给出了修改建议。我照做了,问题解决了。
但我没有立刻去睡觉。我坐在那里,回想刚才的过程。AI 给了我答案,但我意识到自己并不完全理解为什么那个修改有效。于是我重新读了一遍代码,查阅了 asyncio 的文档,在笔记本上画了几张调用关系的草图。半小时后,我不仅修好了 bug,还弄懂了之前一直模糊的概念。
工具可以帮你走捷径,但有些地方,你仍然需要亲自走一遍。
更多推荐


所有评论(0)