前几天在 Hacker News 上看到一个叫 Fata 的项目,标语是”Sharpen the engineer behind the agent”——打磨 agent 背后的工程师。我当时愣了一下,然后有点心虚。
说实话,我已经很久没有从零写过一个完整的函数了。
一个让我冒冷汗的实验
Fata 做了一件事:用间隔重复的方式,让开发者每天花几分钟做编程练习。听起来很老派对吧?但他们放了一张图,三条曲线,看完之后我后背发凉。
第一条线是”用 Fata 学习的开发者”,技能稳步上升。第二条线是”不用 AI,纯手写代码”的开发者,缓慢上升。第三条线是”只用 AI 写代码,不做任何刻意练习”的开发者——那条线是往下的。
往下的。
我回想了一下自己最近的工作状态:Claude Code 在终端里跑着,Cursor 在另一个窗口开着,遇到问题第一反应是描述需求让 AI 帮我写,而不是自己想。代码是写得快了,但我有多久没认真思考过一个算法了?有多久没为一个 tricky 的 bug 调试超过半小时了?
不是 AI 不好,是我们在变懒
先说清楚,我不是要唱衰 AI 编程助手。Claude Code、Copilot 这些工具确实牛,能帮我处理大量重复性工作,让我把精力放在更重要的事情上。最近几个月,我的开发效率至少翻了一倍。
但问题在于:效率提升的同时,我对代码的”手感”在消失。
什么叫手感?就是你看到一段代码,本能地觉得哪里不对;遇到一个性能问题,能大概猜到瓶颈在哪;读别人的代码,能快速理解设计意图。这种东西不是靠看文档能学会的,是靠一次次写代码、调试、踩坑积累出来的。
现在呢?AI 帮你写,AI 帮你调试,AI 帮你 review。你从一个”写代码的人”变成了一个”描述需求的人”。听起来很高级,但你的编程直觉正在以你看不见的速度衰退。
一个真实的故事
上周我遇到一个内存泄漏的问题。按照以前的习惯,我应该先看 heap dump,分析对象引用链,定位到具体的代码行。但那天我的第一反应是把错误信息贴给 Claude Code,让它帮我分析。
它给了一个看起来很合理的解释,我照着改了,问题似乎解决了。但第二天又出现了同样的问题。这次我自己花了两个小时,从 Chrome DevTools 里一步步追踪,最后发现是一个事件监听器没有正确移除——一个很基础的问题,但我已经习惯性地跳过了这个思考过程。
如果我一开始就自己分析,可能半小时就能搞定。但因为我依赖了 AI,反而多花了一天。
我们在用效率换能力
Fata 的创始人说了一句很扎心的话:“You can’t direct what you don’t understand.”——你无法指挥你不理解的东西。
这话太对了。AI 编程助手本质上是一个执行者,它能帮你把想法变成代码。但如果你自己都不理解底层原理,你怎么判断它写的代码是对的?怎么在它犯错的时候发现问题?
最近看到一篇文章,标题是”AI coding agents need evidence-first review, not just cheaper routing”。意思是 AI 生成的代码需要基于证据的审查,而不只是看它跑得通不通。但问题是,如果你自己都不懂,你怎么审查?
这就形成了一个恶性循环:越依赖 AI → 越不懂底层 → 越无法审查 AI 的输出 → 越只能依赖 AI。
我在试着找回手感
意识到这个问题之后,我开始做一些改变。说起来也不复杂。
每天花 15 分钟,不用 AI,就自己写。可以是 LeetCode,可以是重构一段旧代码,可以是实现一个小工具。重点不是写多复杂的东西,是保持手感。就像打球,你不能三个月不摸球然后指望比赛的时候手感还在。
遇到 bug 先自己分析 10 分钟。不是不用 AI,是先自己想。实在搞不定再问,但要问自己:它给的解释我理解了吗?还有哪些可能的原因我没考虑到?
还有一个习惯是定期读源代码。特别是那些设计得好的开源项目。不是为了用,是为了学。看别人怎么组织代码,怎么处理边界情况,怎么做抽象。这个习惯其实 AI 时代之前就该有,但现在更重要了,因为你需要有能力判断 AI 写的代码好不好。
坚持了大概三周,变化是有的。至少现在遇到问题,我的第一反应不再是”打开 Claude Code”了。偶尔还是会用,但至少会先自己想一想。
写在最后
AI 编程助手是好东西,我打算继续用。但就像健身一样,你可以用器械辅助,不能完全不自己发力。
Fata 这类工具的出现,说明已经有一批开发者意识到了这个问题。我们不需要回到手写所有代码的时代,但得有意识地保持自己的编程能力。
说白了,AI 再强也只是工具。真正值钱的,是知道怎么用好这个工具的人。而”知道怎么用好”的前提,是你自己得懂。
不懂的话,你连它错在哪都看不出来。