一个讨厌算法题的应届生,怎么给自己造了台“较真的算法私教”。
一、破防:2025 年我写得飞起,2026 年却被 LeetCode 打回原形
2025 年初,Cursor 爆火。我赶在学生优惠还没下线的时候上了车,那段日子写代码写得飞起——需求丢过去,代码哗哗地出来,我像个甩着指挥棒的乐队指挥。那时我甚至有点飘,觉得“一个字一个字手写代码”这件事,历史的进程已经替我翻篇了。
然后 2026 年到了。为了秋招,我不得不把 LeetCode 又捡了回来。
我老老实实照着 Hot 100 开刷,本想着“以赛代练”,用考试的紧张感逼自己进步。结果越刷越抑郁——因为我发现,我根本写不出来。
于是流程变成了这样:打开一道题,瞪它三分钟,投降,转头去问 AI。可光问还不够,我得先报上题号,然后——最荒诞的一步来了——我还得先教 AI 该怎么教我:别上来就甩完整答案、循序渐进给提示、先讲思路再讲代码……每开一道新题,这套“驯化开场白”就得重念一遍。
那一刻我意识到一件很分裂的事:我花在驯化聊天框上的力气,快赶上做题本身了。
既然如此——干脆让 AI 送传统手写算法题最后一程吧。
二、一个离经叛道的决定:讨厌刷题的人,做了个逼自己刷题的东西
这里有个我挺喜欢的反差。
我不擅长、也确实讨厌的,是“算法刷题”这件事本身。但我不讨厌、甚至有点擅长的,是拿着 Cursor 这类工具去做系统。于是我做了个当时看有点离经叛道的决定:我不去逼自己爱上算法,而是造一台机器,让刷题这件事变得能忍——最好,还能有点无痛。
说白了,我把“我不擅长的事”翻译成了“我擅长的事”。
这台机器叫 EasyCode。一句话讲清它是什么:一个跑在你自己电脑上的刷题工作台。你在本地写 Python,本地判题,AI 会给你这一次的作答打一个五维的分,把你解题的全过程录下来供你回放,再根据你掌握的程度,替你排好下一次该什么时候回来重做。所有数据不出你这台机器。
其中最要命的那个词是“过程”。这也是这篇文章真正想讲的东西,后面细说。
三、和两个 AI 结对的日子
这个项目基本是我和 AI 一起“长”出来的。而且不是一个 AI,是俩——Codex 和 Claude,我都用了。
分工大致按前后端切开,各管一摊。但更有意思的是第二招:交叉审查。A 写的代码,我转手丢给 B 去挑刺。两个不同的模型看同一段代码,盲区并不重合,于是那些单个 AI(和我自己)都会一眼放过的 bug 和坏味道,就藏不住了。这套“让 AI 互相审稿”的土办法,帮我抓出了不少问题。
这里我要接回前面那个梗。还记得我吐槽“每次都要先教 AI 怎么教我”吗?做这个项目的时候,我索性把“怎么教我”这件事,一次性写进了系统提示里。
于是有了 EasyCode 的苏格拉底助教:它不直接给你答案,而是分四层往外挤提示——先给思路方向,再给关键观察,然后给伪代码骨架,最后才轮到完整代码。而且这个层级是服务端一格一格往上推的,你不能一步跳到底。你想耍赖“求你直接把答案给我”?我在提示词里专门写了段“防越级”策略,教它怎么顶住“截止日快到了”“我真的学不会了”这类情绪施压。
说到底,我是把当初每天要对 AI 念一遍的那套开场白,永久地焊死在了产品里。
四、我最得意的一个设计:一台会“倒带”的私教
如果只让我挑一个技术细节吹,那一定是代码过程快照。
普通刷题网站只告诉你一件事:过,或者不过。可我真正想知道的,从来不是这个。我想知道的是——我到底是从哪一步开始走错的? 我明明最后把题做对了,但中间那几分钟改来改去、稀里糊涂,我自己都说不清是怎么从“错”蒙到“对”的。这种“侥幸 AC”的题,下次照样不会。
所以 EasyCode 每 30 秒就给你的代码拍一张快照。写完之后,你可以逐帧回放,像看录像一样,看着自己的解法一点点长出来:哪一刻卡住了、哪一刻推翻重来、哪一刻突然开窍。那条稀里糊涂的弯路,被完整地录了下来。
而且如果这次评分不理想,你还能“接着写”——新的作答会挂在上一次的后面,AI 复盘时能把你走过的整条弯路拼起来一起看,而不是只盯着终点那一版干净代码。
给这一切打分的 AI,自然也不只看你最后交上去的成品。它评的是五个维度:正确性、复杂度、代码质量、解题过程、改进建议——你看,“解题过程”本身就是其中一维。为了让它真的“看见”过程,我把上百帧快照抽样压成一条时间线喂给它:首帧给全量代码,后面全是差异(diff),并标出你在哪一刻按下了提交。它读到的,是一段“成长录像”,而不是一张“结课照片”。
这也正是这篇文章标题的由来。刷题网站用结果判断你的对错,可一个人真正的成长,其实全藏在过程里。EasyCode 是我给这句话造的一个证明。
顺手再抖两个“偏执”,当调味:
- 后端权威判题——防的就是我自己。 你在浏览器里跑的那套(Pyodide)只负责给你即时反馈图个爽;真正落库算数的,是后端另起一个隔离子进程、把你的代码重新跑一遍的结果。为什么搞这么麻烦?因为浏览器里的结果理论上是能被伪造的。而这个产品从头到尾只有一个用户——就是我。也就是说,我严防死守要防的那个作弊者,也只有我自己。
- 省钱的求生欲。 连编译都过不了、或者一运行就报错的代码,根本不劳驾大模型出场,本地确定性地判个低分就完事,一个 token 都不舍得烧。只有在评级最纠结、后果也最重的那两档(比如决定你是 3 天后还是 7 天后再来复习),我才舍得让模型多跑几次、投票取个最保守的结果。一个应届生做 AI 产品时的抠门,尽在于此。
五、那它到底有没有用?
有用。而且是真香。
我拿它认认真真练了一批代码题,那种久违的“无痛刷题”的感觉,第一次出现了:不再是对着一道题干瞪眼、然后灰头土脸地去翻题解,而是有个不厌其烦、还专门揪着我“过程”不放的私教陪着。刷题这件事,总算从“上刑”变回了“训练”。
我没打算在这儿吹它治好了我的算法焦虑——它没有。但它至少让我在这条我本来一点都不想走的路上,走得没那么想放弃了。
我们太习惯用结果来判断对错了。但如果你也正为秋招刷题刷到怀疑人生,也许可以换个角度看看:对错,看结果;成长,看过程。 EasyCode 没能帮我把每道题都做对,但它让我看清了自己究竟是怎么错的——对我来说,这比屏幕上“AC”那一声脆响,值钱多了。
至于那些传统的、要一个字一个字手写的算法题……这最后一程,就让我和两个 AI,一起把它送到这儿吧。
