我以为我在用 AI 提效,其实是我被自己困住了

13 阅读14分钟

用 AI 越熟,我越意识到一件事——它带给我的不是轻松,而是另一种我此前没有经验过的疲惫。

这种疲惫与"需求太多"很不同。工作量大的时候,我至少知道自己累在哪里,是哪几个模块、哪几个接口。但 AI 带来的累是弥散的,是代码似乎都写完了、PR 都提了,但脑子并没有真正"下班"的状态。电脑合上了,脑子还在转;人离开工位了,心里还挂着"刚才那个脚本跑通没有"、"那个 PR 的 CI 过了没"。

一年前我以为这只是过渡期,是没用顺手。后来我意识到,这种感受不是个例,也不是适应慢的问题。它更像是一种研发方式的底层变异——AI 改变的不只是敲代码的速度,而是我和代码之间的关系。只是这种改变太隐蔽了。

我并不是在质疑 AI 的能力。它确实好用,这一点我从未怀疑。我质疑的是另一个被默认的等式:写得快是否等于轻松。这两件事被捆在一起讨论得太久,以至于我们很少回头检查它是否真的成立。


审 AI,比自己写还累

我自己敲代码的时候,思路是顺着一根线走的。哪里是真的想清楚了、哪里是临时 hardcode 凑过去的、哪里只是先放着等重构的——我全程跟自己在一起,心里有数。

看 AI 给我的代码是另一种体验。它把几百行成品先摆在我面前,让我倒着拼出它当时的思路。我盯着它写的那些逻辑,会有一种奇怪的失控感——每一行都长得很像我会写出来的代码,但又不完全是。我没法判断它当时为什么这么写,它也没法跟我解释。

真正累的不是找语法错。编译不过的错反而好处理,一眼就能认出来。我累的是"找不出来"的状态——它写得很顺,跑起来也对,但脑子里有个声音一直在说:**边界条件处理了吗?并发安全吗?还会不会有其他情况?**我会反复review,review到分不清自己是在发现真正的 bug,还是在过度怀疑。提 PR 之前多扫两遍,合并之后有时还会回去打开看一眼。这种放不下,是我自己写代码从来不会有的。

还有一种累更根本。如果跟一个共事多年的同事合作,我很清楚他不会犯哪一类错,有些细节可以放心略过。AI 没有这种"技术人设"——它每一次都是新的,没有历史,没有记性,也不会因为之前引发过线上故障而对那类问题格外谨慎。这种状态与其说是怀疑,不如说是一种始终无法建立的信任。不是因为它代码写得烂,反而是代码写的很熟练,熟练到让人不敢相信。说到底信任本身需要时间去"熬",但 AI 把这个过程直接省略了。

这让我意识到一件事:我过去以为"提效"是指花更少的力气写同样的代码。但 AI 改变的只是敲键盘的效率,Code Review 的认知成本一分没少,有时候反而更高。真正被拿掉的,是我以前一边写一边顺手做掉的"重构和边界思考"。现在它变成了一个独立的、更耗神的环节,全压在了我一个人身上。


"我不会",越来越说不出口

过去这句话是好说出口的。一个人再厉害不可能什么都会,承认自己不懂某方面是常识,也是团队分工的基础。

但最近我注意到,每次想说"这个技术我不太会"之前,我都会犹豫一下——因为我知道接下来的可能会收到让 AI 写写试试的反馈。

我自己问别人也是这样问的。这种犹豫不是别人逼出来的,是我们一起共谋出来的。我们已经默认彼此都站在同一条工具线上:你不会,大概率是因为你没用 AI;你用了 AI,就没什么是你不能写的。

客观地说,用 AI 顺手写个简单的内部管理台,省去跨团队沟通的问题,这绝对是好事。但问题在于,这种甜头会让人膨胀,让你越界去接那些真正需要深度专业判断的活儿——写前端复杂的 CSS 动画、写晦涩的SQL调优、设计各种各样前端样式、写各种以前我不熟悉的语言、甚至去改我不熟悉的底层架构。表面上我好像变成了全栈。但我心里很清楚,我每接一件,就要为它的线上稳定性担一份责。我不是真的会,我只是用 AI 糊弄出了一个"看起来能跑"的东西。这种状态特别消耗人,代码合进主分支了,心里却一点也不踏实。

过去"我不会"这句话,其实是在划定责任边界:这块技术的判断责任不在我,得找设计,得找产品,得找前端大佬。现在所有人都成了"全栈",连说"我不会"的资格都没了。那遇到真正复杂、需要深度判断的线上疑难杂症,谁来兜底?

最后还是得靠那些真懂行、还在用脑子做事的人。只是这群人现在越来越累了。


开始一件事,变得太便宜了

夜里脑子里冒出一个重构的想法,过去我的本能反应是"明天想清楚再说"。现在的本能反应是"可以先开一个 Claude Code/Cursor Agent 试试看,万一成了呢?第二天再看看效果"。

这个动作做完我会感到一种小小的安心,但这种安心是假的。因为再躺下来之后,心里会一直有一根线挂着——不知道它会不会把别的模块改挂了、跑成什么样、明早起来要不要立刻修冲突。我并没有真的在工作,也没有真的在休息,我处在一种"待命"的状态里。

这还不是最让我警觉的事。更让我在意的,是另一种更慢的损耗:我感觉自己做架构和技术判断的能力,在被 AI 慢慢稀释。

过去我做过的几个还算好的技术决策,几乎都是"养"出来的。一个架构方案在脑子里放几天,会被自我反驳、修正、推翻、再立起来。这个过程很慢,有时候让我焦躁。但回头看,这个慢是关键的——它在过程中筛掉了绝大多数烂设计,留下来的那一两个,才是真正经过自己心里的。

现在我已经很久没有这种"养"的过程了。一个新的想法刚冒头,几秒钟之内就丢给 AI 了。AI 总能立刻给我一些回应——出个方案、写个 demo。看起来非常高效,但我自己清楚,我没有真的想过它。我只是把"想"这件事外包了出去。

这可能才是 AI 最隐蔽的代价。它抹掉了那段本该属于我的"技术摩擦"。那种摩擦感不是低效,它是技术直觉成型的必经之路。现在代码产出是变快了,但我对自己的技术判断也越来越没底了。


等待,变成了一种折磨

Agent 跑一个复杂的重构要几十秒、几分钟。这本应是一段天然的喘息时间,但我不会就此停下来。我会尝试去开第二个终端跑测试,或者切到另一个项目的需求里,或者刷一下手机。

这种"空白难以忍受"让我有些害怕。坐着不动等编译、等完成这件事,对我来说不再是中性的,它变成了一种轻微的折磨。

更让我意识到问题的,是我误解了自己在做什么。我以为是我在调度多个 agent,决定它们的优先级。但实际上,是它们谁先吐出代码,我就先去看谁的。我所谓的"调度",不过是它们的输出顺序在调度我的注意力。我不是在主动地写代码,我是在响应机器的输出。

我能保持连续注意力的时间,正在以一种我此前没察觉的速度缩短。过去我能不被打断地 debug 两小时;现在能不被打断的最长时间,差不多就是一个 agent 生成完一个文件的时间。

我以前觉得"心流"是个奢侈词,现在它简直成了绝版。打断我的不再是产品发来的消息,也不是用户的答疑问题,而是我自己开的那几个 agent。等于我给自己定了好几个随时会响的闹钟,然后抱怨自己没法集中注意力。用来提效的工具,反而把深度写代码的时间切得稀碎,这事儿想想挺荒诞的。


放下,比开始更难

过去一个技术方案推不下去,我是允许自己搁置并放弃的。"实现不了/推不下去"本身是一种信号,它在告诉我这个架构可能不合理、不该现在做、或者根本不该这么设计。我会认真对待这个信号。

现在我很少听见这种信号了。

一行代码写进死胡同了,我的第一反应不再是"是不是思路错了",而是"换一个 prompt 再试一次"、"换另一个模型试一次"、"让 agent 换个思路再跑一遍"。每一次"再试一次"几乎是零成本——我只需要打几个字。

但这种零成本是一种陷阱。它让我失去了主动止损的能力。一个本应被推翻的烂架构,会因为 AI 让它"看起来还能再缝补一下",被我无限拖延。我花过一周时间反复让 AI 调一个从一开始就设计错的模块,每一天都觉得"再修一个 bug 就差不多了"。最后模块还是没法用,但那一周已经消耗掉了。

我以前以为时间是被"写更多需求"消耗的。现在我才意识到,时间也会被"不肯放弃烂代码"消耗掉,而且这种消耗更难被人看见。AI 让前者变得显眼,让后者变得更隐蔽。

其实"做不下去"的那种痛苦,本身就是一种反馈。它在提醒你技术方向可能错了。AI 把这种痛苦抹平了,但也把反馈的渠道掐断了。撞南墙的痛感没了,结果就是一直在南墙跟前瞎转悠。


判断和执行,混成了一团

过去做技术决策和敲代码是两件先后分明的事——先想清楚架构,再动手写。是否想清楚了,动手前我心里有数。

现在不是这样了。因为生成代码成本太低,我可以"边干边想"。听起来像是更敏捷的开发方式,但我慢慢感觉到代价:我没办法分辨自己究竟是架构设计错了,还是具体实现错了。

我经常会在一个复杂的业务模块上,连核心流程都没想清楚,就让 AI 跑十几个版本的实现。每一版它都跑得挺顺,但每次遇到跑不通的 edge case,我的反应不是停下来重新梳理设计,而是让它再生成一版。最后选定的那一版,往往不是因为它的架构最合理,也不是需求真正完成了,而是大概率那一版的产品恰好能完成所有的case,表面看起来没有任何问题了,同时我也不想再让 AI 跑下一版了,因为我也累了。这不是技术决策,这是耗到结束。

我越来越怀疑,使用 AI 的这一年里我做出的很多看起来理性的技术方案,以及实现的部分需求,本质上都是疲劳与侥幸催生的决定。

设计和编码分开,其实是一种保护机制,防止你脑子一热瞎写一通。现在这两步融为一体,看似效率起飞,实际上是丢掉了代码质量的护城河。代码是产出了一大堆,但每一行背后的思考都变薄了。


写到这儿,必须澄清一点:我绝不是在全盘否定 AI,更不是呼吁大家退回到纯手敲代码的时代。事实上,它帮过我大忙。有次我写出了一个极其隐蔽的并发问题,是 AI 在 review 时一眼揪出来的。它是一个不知疲倦的、没有情绪的Code Pair。

所以,当我回看上面这些毛病时,我突然反应过来一件事:这些乍一看全是 AI 的锅,其实根本不是。

客观地说,AI 工具的设计本身就在诱导这种行为。就像短视频的无限下拉一样,Cursor 和 Claude 的即时反馈、极低的启动成本、多 Agent 并行的能力,本质上就是在制造一种“停不下来”的结构性成瘾。它把写代码变成了一台老虎机,每一次按下 Enter,我都在期待它吐出完美运行的代码。工具确实在塑造我的行为。

但工具的诱导之所以能成功,是因为它精准地击中了我身上原本就有的弱点。

AI 没有要求我写这么多。它没有催我,没有要求我设计开发运维全包,没有禁止我删掉一坨烂代码,也没有禁止我停下来等一等。

其实是我自己。

是我自己等不及;是我自己不敢说"我不懂";是我自己舍不得停下来;是我自己一边痛恨被工具牵着走,一边又主动开第两三个 agent 给自己加更多任务。

AI 没有制造这些倾向,它只是放大了它们。那些一直藏在我身上、但过去没有合适出口的东西——贪心、不肯停、害怕被看作技术菜、对"还可以再多加个 feature"的执念——在 AI 这里第一次找到了完美的落脚点。

用 AI 写了一年多代码,最让我意外的发现,不是 AI 比我想象的强,而是我比我想象的更缺乏自制力。

所以这事儿没法靠什么"AI 编程最佳实践"来解决。不存在一个神奇的 prompt 模板能治好我的焦虑。它说到底是我自己的事,跟工具无关。


也是因为这个,我开始重新审视一些以前觉得早就"过时"的程序员能力。

等待。 在一个几分钟就能生成几百行代码的时代,能心安理得地坐着等一会儿,其实是一种定力。它意味着你不需要靠外部的输出刺激来填满自己。

搁置。 敢于删掉一坨写不下去的烂代码,不是半途而废,而是听懂了大脑给你的报错信号,没被工具的廉价感绑架。

承认"我不会"。 在全员全栈的氛围里,敢说一句"这块底层我不懂,得找专业的 DBA",其实是在保护系统的边界。不糊弄自己,也不给线上留坑。

慢。 大家都踩在同一个加速器上,代码越堆越多。这时候,还能耐着性子慢慢想架构、慢慢做设计、慢慢 review 的人,反而成了稀缺资源。


以后程序员之间的差距,绝不是谁的 Agent 用得更好。工具门槛只会越来越低,大家早晚都在同一条起跑线上。

真正拉开差距的,是那些 AI 替不了的决定:你愿不愿意敲键盘前先想清楚架构?愿不愿意承认自己不懂某个技术栈?愿不愿意果断废弃一个烂方案?愿不愿意花几天时间,在脑子里好好"养"一个系统设计?

这一年折腾下来,最让我警醒的不是 AI 编程有多强,而是我在它面前那个一刻也等不及、什么活都想接、连句"我不会"都不敢说的样子。AI 没改变我,它只是一面镜子,把我照得清清楚楚。

所以,这一年我最大的收获,真不是掌握了什么 AI 编程技巧。

而是慢慢弄明白了:到底有哪些代码,是绝不能交给 AI 替我写的。