“聪明”的努力,最后只值一句 prompt。
这是我这次面试之后,脑海里反复浮现的一句话。

这次字节的面试,对我来说不仅仅是一次失败,而更像是一次迎面而来的彻头彻尾的打击。它击碎的不只是我对这场面试结果的期待,更是我过去一段时间里对自己能力的想象。面试结束之后,我整个人几乎是瘫倒在椅子上,一种非常强烈的无力感扑面而来:明明很多问题都不算特别偏、不算特别难,甚至都没有超出我原本的预期范围,可我就是答不上来。

这种感觉比“遇到了不会的难题”更难受。真正让人沮丧的,从来不是完全陌生的东西,而是那些仿佛近在咫尺、自己似乎本该会,却偏偏没有答出来的东西。我的准备并不充分,不仅是一般意义上的“不够努力”,而且某些能力已经在不知不觉中退化了。

面试暴露出来的问题,比结果本身更值得反思

回头看这次面试,有几个非常明显的问题。

第一,是编码能力的退化。
这可能是我最不愿意承认、但又最无法回避的一点。过去一段几个月里,我越来越习惯,甚至说依赖 AI 来补全代码、生成实现。久而久之,我似乎默认了一种工作方式:遇到问题时,先丢给Agent看看能不能直接解决;遇到错误,直接把错误复制黏贴丢给AI,放弃思考。这样做在完成任务时确实非常高效,甚至会给人一种“我做得还不错”的错觉,但面试这种场景会非常残酷地揭穿这一点。因为面试从来不是看你能不能调出一个可运行的结果,而是看你能不能在没有外部支撑的情况下,自己独立建模、拆解问题、组织语言、一步步把代码写出来。

第二,是算法题准备得太少。
这次面试里,算法题并没有难到离谱,甚至可以说就是很典型的面试题范畴。所谓的 hot 题,之所以是 hot,本来就是因为它们高频、经典、有代表性。某种意义上,面试考察的内容并没有超纲。如果认真刷过 LeetCode hot100,或者对常见题型有比较扎实的训练,大概率是不会像这次这样慌乱的。

第三,是基础知识准备不足,或者说,缺少真正内化后的理解。
所谓的“四件套”——数据结构与算法、计算机网络、操作系统、数据库——其实一直都是技术面试里最核心的基础内容。这次面试里还问到了多线程相关的基础概念,以及数据库经历,而我的回答很难说令人满意。尤其是数据库,当我说自己没有做过的时候,我能明显感觉到自己的简历和能力画像一下子变得单薄起来。很多知识其实并没有进入我的理解系统里,没有形成稳定的、可以被随时调动的能力。换句话说,没有固化在我的脑海里。

新技术出现,不等于旧能力可以被跳过

AI 再强,也不意味着基础能力就不重要了。

有些东西,本来就不应该完全外包给 AI。至少对于程序员来说,基础的编码能力、算法能力、系统知识,仍然是不可被跳过的底座。新的、更高层的技术出现了,并不意味着原有的能力就可以被淘汰。恰恰相反,越是工具强大,越要求使用它的人知道自己在做什么。AI能发挥出的能量取决于它的使用者,这点我深有感触,但我似乎太执着于虚无缥缈的东西以至于丢失了基本功。

如果一个 C/C++ 程序员完全没有底层意识,那会很危险;如果一个做数字 IC 的人连真值表、时序逻辑这些基础都没有建立起来,再高级的工具也只是把问题隐藏,而不是解决。编程也是一样。面试官给出的算法题,并没有要求手搓多么庞大、多么复杂的工程系统,它考察的只是最基本的思维组织和编码表达能力。连这些都要依赖 AI 去“代劳”,那说明缺的已经不是技巧,而是根基本身。

所以问题并不在于“能不能用 AI”,而在于“什么东西不能交给 AI”。如果一个人把本该自己经历的训练过程直接跳过,把所有困难都转化为一句 prompt,那么最后留下来的,很可能只是任务完成的表象,而不是能力的增长。

面试官最后的那几句话

面试结束时,和面试官有一段简短的交流。现在回想起来,那几句话反而是这次面试里最值得记住的部分。

他先说,我不能太依赖 AI。
然后又说,项目不在多,而在于有没有真正把一个知识点搞懂。

这两句话很短,却几乎正中问题的核心。

我过去其实也隐约知道自己有依赖 AI 的倾向,但我一直没有真正把这件事当成一个严重的问题。因为在很多实际情境里,它确实是有帮助的:能提高效率,能快速验证思路,能把一些原本需要查很久的内容迅速整理出来。AI呢能够相对稳定地输出“正确答案”,远远好过我的答案。问题在于,当“提高效率”逐渐演变成“替代思考”,当“辅助实现”慢慢变成“跳过训练”,人就会在一种表面高产的状态里,悄悄失去本来应该自己长出来的能力。

而“项目不在多,在于是否真正理解”,则是对我另一种焦虑的回应。现在很多时候,我会下意识觉得自己项目太过于naive、非科班、做的东西不够“像样”,于是总想赶紧再堆一个项目、再做一个系统、再补一个技术栈。但如果只是表面上做了很多,实际上每一个都停留在“能跑起来”的程度,没有真正理解设计取舍、边界条件、实现细节和底层原理,那么这些项目未必真的能说明什么。表面花哨的东西毫无意义,吃透了知识点才是项目背后的价值。

“第一次面试都会这样”也许是真的,但这不能成为安慰自己的理由

有人说,第一次面试表现成这样很正常,大家都会紧张,都会发挥失常。这话也许没错。可我发现,这种说法并不能真正安慰到我。

因为我知道自己难受,并不只是因为“第一次所以没发挥好”,而是因为我心里很清楚:这次暴露出来的很多问题,不是偶然,而是真实存在的短板。它们并不是因为紧张才突然出现,而是一直在那里,只不过在面试这个高压场景下被集中放大了。

我很清楚自己不是那种特别聪明、看一遍就能记住、学一遍就能举一反三的人。相反,我一直都更像是那种“笨小孩”——记忆力不算好,不内化、不理解的东西,基本就是看了就忘。所以很多知识,我必须花比别人更多的时间去反复理解、反复练习,才能真正变成自己的东西。从这个角度来说,我更没有资格依赖那些看起来省力的捷径。因为对我这样的人来说,一旦跳过了理解和训练的环节,最后几乎什么也留不下来。

我到底为什么要去大厂?

这次面试之后,我还开始反思另一个问题:我真的一定要进入互联网大厂吗?

这个问题以前我很少认真问自己。好像在周围的叙事里,“进大厂”天然就是一条更体面、更正确、更值得努力的路。可是这次面试之后,我开始有点去魅了。如果最终考察的主要还是这些内容,如果这个体系要求你不断在高频题、热点八股、标准答案中重复竞争,那我为什么一定要拼命卷进去?是为了那个看起来更光鲜的标签?为了别人眼中“不错”的工作?可很多时候,事实上 Nobody cares。外界的认可并不会替你承受长期透支、持续焦虑和高压竞争带来的代价。

这并不是说大厂就没有价值,也不是说以后绝不考虑这样的机会,而是我开始意识到:如果我只是因为一种抽象的“正确人生模板”去追逐它,那这件事本身就值得怀疑。任何选择都应该建立在更清楚的自我认识之上,而不是盲目地被某种主流叙事牵着走。

但无论如何,持续学习这件事没有退路

不过,去魅归去魅,反思归反思,有一件事情我反而比以前更确定了:我必须持续学习。

我可以怀疑某种路径是否适合自己,可以重新评估所谓“大厂”“体面”“成功”的意义,但我不能因此放弃成长本身。因为无论最终走向哪条路,真正能支撑我长期生活和工作的,始终还是那些属于我自己的能力。

问题在于,我过去可能花了太多时间在休闲娱乐上,也总是安慰自己说“我每天也有在学一些东西”。可现在想来,“一些”实在是太少了。更关键的是,我的大脑似乎把学习这件事二元化了:要么就觉得自己今天学了,因此可以心安理得;要么就觉得今天没做到理想状态,于是干脆陷入放弃。可学习从来不是一个“有或没有”的问题,它本质上是一个时间分配的问题,是一个积累速度的问题。

真正重要的,不是“我今天有没有学”,而是“我今天投入了多少有效时间,我的训练有没有形成连续性,我的能力有没有一点点往前推进”。说到底,还是时间。It’s about time. 我必须更严肃地面对这个问题:如何在有限的时间里,稳定地完成学习和工作,如何让自己的精力真正向重要的事情倾斜,而不是被碎片化消耗掉。

一份真正能执行的计划

所以,与其继续沉浸在失败感里,不如开始制定一个真正可以执行的计划。

目前我想到的方向有这些:

  1. 系统刷 LeetCode
    至少先把高频题、经典题型和 hot100 认真过一遍,不是为了机械背答案,而是为了恢复最基本的算法思维和手写能力。我要做到的不只是“看懂题解”,而是自己能独立写出来,能解释思路,能在限定时间内完成表达。

  2. 扩展项目,补足数据库相关经验
    比如让 Beruto 这个项目往数据库方向做一些延伸,哪怕只是从最基础的存储设计、查询逻辑、索引理解做起,也比“完全没做过”要强得多。数据库不能一直是我的空白项。

  3. 再做一个更完整的项目,比如音乐库
    这个方向对我来说可能更有兴趣驱动,也更容易长期投入。重点不只是做出功能,而是借机练习完整的软件设计、数据组织、性能考虑和迭代过程。

  4. 正式开始搭建自己的博客网站
    一方面,我太过依赖固有的博客框架了,实际上我完全有能力去学习如何从零搭建一个网站并且这是十分有意义的;另一方面,输出更多的文章,对我这种“必须内化才能记住”的人来说,写作本身就是学习的一部分。把知识写出来,才能逼迫自己真正理解。

  5. 继续读书,把 Rust 系统地看完
    Rust 对我来说不该只是“看过一点”“写过一点”,而应该成为一次更扎实的语言和系统能力训练。尤其是所有权、借用、并发安全这些部分,本来就和我想加强的方向高度相关。

  6. 多学语文,多看看书
    语文永远值得我学习。

AI 时代的学习焦虑

说到底,我现在最深的焦虑并不是这次面试本身,而是一个更大的问题:在 AI 时代,我到底应该如何学习代码?

这件事一直盘旋在我的脑海里。因为现实是,AI 确实已经能写出大量看起来不错的代码。尤其是在 toy program、练手项目、标准化任务里,AI 往往比人的初稿更快、更完整,甚至更漂亮。这就带来一种非常强烈的挫败感:我不会的东西,AI 能做;我会的东西,AI 似乎做得比我更好。于是人很容易掉进一个漩涡里——既然我不会的都可以交给 AI,我为什么还要痛苦地去学?可一旦这样想,能力就会进一步退化;而能力越退化,就越离不开 AI。最后,仿佛所有东西都变成了悖论:什么都应该学,但又什么都好像没有学习的必要。

从结果导向上看,似乎真的可以像一个“领导”那样去指挥 AI:我只要知道这件事能不能做、应该往哪个方向做,并且把需求描述清楚,很多任务就可以被推进下去。可问题是,如果我始终只停留在这个层面,我就永远成不了一个真正高级的 C++ 或 Rust 程序员。我对并发、多线程、内存模型、生命周期这些内容的理解,就会永远停留在“让 AI 帮我完成某项工作”的层面,而不是我自己真正拥有的能力。

一旦走到这一步,人就会产生一种非常可怕的错觉:AI 能做,等于我能做;AI 不能做,等于我不能做。这样一来,我自己仿佛失去了存在的意义。

不是 AI 比我强,而是它拿走了本该属于我的训练过程

后来我慢慢意识到,我最痛苦的地方其实不是“AI 比我强”,而是 AI 把我原本应该亲自经历的训练过程拿走了。

过去学习编程时,一个人通常会经历这样一整条链路:不会、查资料、尝试、写错、调试、返工、再理解。真正让人变强的,从来都不是最后“代码跑起来”的那一刻,而是中间不断犯错、不断修正、不断重建理解的过程。可现在,AI 往往会在我还没来得及真正思考之前,就先把一个看起来完整的答案摆在我面前。项目可能做成了,功能也许也跑起来了,但我的能力并没有同步长出来。结果与能力之间出现了割裂,这种割裂会带来非常强的空虚感。

所以问题不在于 AI 是否存在,而在于我如何使用它。
如果我把 AI 当成“代做者”,那它大概率会让我退化;但如果我把它当成老师、陪练、审稿人,它反而可能成为一种很强的放大器。

我可以先自己设计思路,再让 AI 帮我 review。
我可以先自己实现,再让 AI 帮我指出 bug 和坏味道。
我甚至可以明确要求它不要直接给最终答案,只给提示、反问、局部修正和测试建议。
这样一来,最关键的训练部分——独立思考、独立建模、独立判断——就还掌握在我自己手里。

AI 可以帮我提速,但不能替我思考。
AI 可以帮我实现,但不能替我做关键判断。
AI 可以是工具,但不能成为我能力的替身。

理解、判断和验证的能力是永恒的

如果我真的想成为一个更成熟的工程师,那么未来真正要建立起来的,不会只是“让 AI 帮我写出代码”的能力,而是那些即使 AI 非常强大,也依然无法替我拥有的能力。

比如,对底层机制的理解。
比如,对生命周期、内存管理、线程安全、原子操作、错误边界的直觉。
比如,对系统设计中抽象、约束、取舍的判断。
比如,在复杂场景里发现问题、定位问题、验证问题的能力。

因为真实工程里,最难的部分从来都不只是“把代码写出来”,而是在不确定性中分辨什么是正确的,什么是危险的,什么是看起来能跑、但长期一定会出问题的方案。高级工程师也从来不是写代码最快的人,而是那个在复杂约束之下,仍然能够做出正确判断、承担后果并收拾残局的人。

从这个意义上说,未来人与 AI 拼的并不是谁输出得更快,而是谁能更好地定义问题、审查方案、识别边界、验证结果。如果一个人只是 AI 的传话筒,那么他的价值确实会越来越低;但如果一个人能看懂系统本质、看穿 AI 的错误、在故障出现时真正把系统救回来,那么 AI 只会让他的价值变得更高。

终了

现在回头看,这次面试当然让我痛苦,也确实击碎了不少自信。但它的意义,也许恰恰在于它把我从某种错觉里叫醒了。

我原本以为,只要我能借助工具把事情做完,能力迟早会自然跟上;可现在我发现,结果并不会自动转化为能力。
我原本以为,大家都在用 AI,所以自己这样做也没什么问题;可现在我发现,工具的普及并不能掩盖基础退化的事实。
我原本以为,只要持续接触新东西,自己就算是在进步;可现在我发现,不经过内化和反复训练,很多“学过”的东西其实根本不属于我。

因此,这次经历真正留给我的,也许不是一句“你不够好”,而是一个更具体的问题:从现在开始,我到底要怎么重新训练自己?

答案可能并不复杂。
少一点幻想,少一点自我安慰,少一点把困难外包给 AI。
多一点独立写代码的时间,多一点从零思考和调试的过程,多一点对基础知识的回炉重造,多一点真正长期、稳定、可执行的积累。

我可能不是那种最聪明、最有天赋的人,但至少我应该成为一个愿意慢慢把东西学扎实的人。
我也许一时还找不到最终想去的方向,但我至少要先把那些真正属于自己的能力重新捡起来。

面试失败并不可怕。
可怕的是,在一次失败之后,仍然不肯看清自己真正的问题。


所以,离开了 AI,我还有什么?

我想,至少我还应该有这些:
重新学习的勇气,承认不足的诚实,慢慢积累的耐心,以及把能力一点一点练回来的决心。