如果你刚开始做开发者,你可能已经注意到,每个人的建议都互相矛盾。
一个人信誓旦旦地说你必须刷 500 道 LeetCode 题,否则永远找不到工作。另一个人说 DSA 已经死了,你只要学会用 AI 工具就行。第三个人说别管前两个,直接做项目。而你坐在那里,一周时间有限,不知道谁说得对,于是你要么僵住不动——要么默认去刷 DSA,因为那是房间里声音最大的那个。
说实话:他们都说对了一半。而没有人真正告诉你的是这些部分是如何拼在一起的。
所以让我给你画一张我希望当初有人为我画的地图。作为新开发者,你需要平衡三项技能——我把它们想成一个三角形——而第三条边是几乎没人教的那条,尽管它悄悄才是真正让你拿到工作的那条。让我们把三条边都过一遍,然后我会诚实地告诉你该把时间花在哪里。
第一条边:DSA——它到底是什么(以及它不是什么)
数据结构与算法。就是你在 LeetCode 上刷的东西。让我们公平地看待它,因为它并非无用——但它被严重误解了。
DSA 真正给你的东西:一种思维方式。它教你把一个难题拆成更小的部分,去推理你的解法是高效还是浪费,以及识别模式(“哦,这其实是个图问题”)。这套思维工具是真实存在的,它会帮助你整个职业生涯。
DSA 不是不是:衡量你是否是个好工程师的标准。这是初学者搞错的地方。刷 500 道题不会让你成为好开发者——它让你擅长通过面试。这是非常不同的两件事,把它们混为一谈会浪费你人生中的好几个月。
为什么它变得如此重要:这是诚实的历史。DSA 面试之所以存在,是因为公司收到成千上万份申请,需要一个廉价、标准化的筛选方式。一道 LeetCode 题容易组织也容易评分,所以它成了门槛。它是一种代理对于“这个人能在压力下清晰思考吗”——这不是对实际工作的测试。知道这一点很有用,因为一旦你看出它是一种筛选而非工作本身,你就能把它当作筛选来对待。
你的初学者要点:你需要足够DSA 来通过面试并清晰思考——不足以赢得竞赛。学习核心模式(数组、字符串、哈希表、双指针、基础树和图、递归),理解为什么它们有效,并练习到足够熟练。然后停止刷题。第 400 道题教给你的远少于前 50 道。
第二边:AI 熟练度——三角形的新一边
这一边几年前还不存在,而现在它是不可妥协的。
为什么现在它很重要:AI 工具是真实开发实际发生方式的一部分。这不是炒作——这只是这份工作当前的现实。一个能与AI 有效协作的开发者比做不到的开发者行动更快,就像熟悉 IDE 快捷键的开发者总是有优势一样。拒绝学习它不会让你更纯粹;只会让你比周围所有人都慢。
但这里有一个真正重要的细微之处——而且几乎没有人把这一点清楚地告诉初学者:AI 熟练度不是“让 AI 做一切”。这就是陷阱。如果你依赖 AI 来写你不理解的代码,你会产出看起来能用的东西,却从未建立起判断 AI 何时出错的能力——而它确实会出错,经常出错且自信满满。你会感觉自己很有产出,却在悄悄失败,没能成为一名开发者。
真正的 AI 熟练度意味着用它来走更快同时仍然理解它产出的内容。用它来解释你卡住的概念。用它来起草一些东西,然后你去阅读、质疑并验证。用它来学得更快——而不是跳过学习。会茁壮成长的初学者,是那些把 AI 当作加速自己思考的工具、而不是替代思考的拐杖的人。
你的初学者要点:学会好好使用 AI,但尽早给自己定一条规则——绝不交付(或提交、或依赖)你无法解释的代码。让 AI 加速你;不要让它替你思考替你。这一个习惯区分了会成长的初学者和会停滞不前的初学者。
第三边:没人教你的技能——也是真正让你被录用的那一个
这就是那个训练营跳过、CS 学位几乎不碰、没有任何网站让你刷的三角形的一边。而且,说实话,我认为它是最重要的一边。
它是什么:实际上构建真实的东西,并且能够沟通。把一个项目从零做到能跑。读懂代码别人写的并理解它。在晚上 11 点东西崩了、报错信息还毫无用处的时候调试它。把你的思路讲清楚,让队友能听懂。和他人协作而不产生摩擦。搞清楚什么该做,以及为什么它重要。
为什么没人教它:因为它不是一套整齐、可测试的课程。你没法把“懂得如何冷静地调试一个令人困惑的问题”放进选择题测验里。你没法在 LeetCode 上刷“沟通清晰”。所以教育体系优化的是那些可衡量的东西——数据结构与算法、语法、框架——而这整个类别就悄无声息地从缝隙中漏掉了。没有人反对教它;只是它很难打包,所以就被略过了。
为什么它是真正让你被录用——并且一直保住工作——的那一边:想想这种错配。面试往往考数据结构与算法。但实际工作每天都在考验这第三边。一个能端到端构建真实东西、把它讲清楚、并且在团队里协作良好的开发者,会打败那个能反转链表却从没交付过任何东西、开会时一声不吭的人。而且关键在于:这一边是最持久的。工具会变。框架会死。数据结构与算法的琐碎知识在面试后一周就淡忘了。但构建、调试、理解和沟通的能力会在你整个职业生涯中不断累积。这是到了第十五年仍在给你回报的技能。
给初学者的要点:这几乎肯定是你现在正在忽视的那一边——因为它是没人告诉你要去练的那一边。所以要有意识地保护出时间给它。它不会自己发生。
那么你到底该把时间花在哪里?
好——诚实的路线图。你的时间有限。作为初学者,大致应该这样分配:
学足够的数据结构与算法来通过筛选并清晰地思考——然后就别再过度刷题了。早期花一段专注的时间,熟悉核心模式并理解其中的原因。在面试前偶尔练习一下,保持手感。但别让它成为你的全部身份。过了某个临界点后,每做一道新题教给你的东西,都不如动手构建真实项目来得多。
把大部分时间花在构建真实项目上。这是最重要的一点,而秘诀在于:构建真实的东西会同时锻炼三角形的三条边。你会用到 DSA(你会遇到真实的性能问题,并终于理解它为什么重要)。你会用到 AI(在具体情境中,把它当作工具,同时仍然得让它真正跑起来)。而你会构建第三条边——交付、调试、理解、决策。“只管动手做东西”听起来像是偷懒的建议,但实际上它是最高效的建议,因为一项活动就训练了所有能力。
在具体情境中学习 AI,而不是把它当作一门独立的学科。不要专门划出“学 AI 的时间”。就在你一边构建和学习的过程中使用它——并对自己坚持一条原则:理解它给你的东西。流利来自使用,而不是来自一门课程。
核心要点:对一个初学者来说,这三条边并不是在互相竞争。DSA 磨砺你的思维,AI 让你更快,而构建则把两者整合起来,同时培养工作中真正重要的技能。错误不在于选错了哪条边——而在于把所有精力都倒进一条边(通常是 DSA,因为它声音最大),让另外两条边枯萎。
一个诚实而令人安心的真相
如果你只能从这篇文章里带走一件事,那就带走这个:你不需要成为 LeetCode 大神才能拥有出色的职业生涯。大多数真正优秀的工程师都不是。我能想到的一些最出色的开发者,如果当场做一道高难度 DSA 题,也会很吃力——而这从来都不重要,因为他们能构建真实的东西、与人协作,并弄清楚需要做什么。
你也不必在三角形的三条边上都做到完美。没有人做得到。你要做的是停止忽视其中某一条边。真正茁壮成长的开发者,不是把单一技能练到极致的人——而是全面发展的人:有足够的 DSA 来思考,有足够的 AI 来快速推进,以及真实且不断增长的构建与沟通能力。
所以,用一张图概括就是:DSA 让你走进那扇门. AI 熟练度让你保持快速且与时俱进. 但真正能构建实际东西和与人协作的能力,才是真正让你被录用、保住工作并发展职业生涯的关键。把前两项学到足够多,让它们不再成为阻碍——然后把你的精力投入到第三项,因为这是没人教、却人人都需要的一面。
三角形需要三条边才能立起来。不要只画一条长线,就把它叫做职业生涯。
如果你刚刚起步:诚实地想一想——你一直把全部时间投入到三角形的哪一边,又一直在悄悄回避哪一边?而对于已经做了这行一段时间的人:真正真正让你被录用的是什么,与你事先学的东西相比又如何?我很希望读到这篇文章的初学者能听到真实的答案,而不是领英式的答案。