📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

24 Harsh Software Engineering Lessons Nobody Tells You (Until It’s Too Late)

Aman Manazir19:51

Transcription

我在高中时未能通过 AP 计算机科学考试。我只得了五分之二。在大学的第一个项目中,我也只得了 C。而且我花了几个月的时间才解决了 Code Easy 上的两个问题。然而,不知何故,到 22 岁时,我竟然获得了六个高薪软件工程实习机会和多个六位数年薪的软件工程全职工作机会。那么,这究竟是如何实现的呢?嗯,这是因为我掌握了游戏中的潜规则。在本视频中,我将分享 24 条我希望在 24 岁之前就了解的、极其坦诚的软件工程经验。关于为什么成为一名出色的程序员还不够,如何掌握实际的招聘流程本身,以及那些将普通学生转变为 10 倍软件工程师的核心思维转变。这个合集将为你节省十年试错的时间。让我们开始吧。第一课是编程技能是不够的。现在,大多数人过分强调编码能力,也称为价值创造,但却没意识到这只是职业成功方程式的一半。那一半仅仅是软件工程。另一半同样至关重要,称为价值捕获,它涉及掌握求职过程的战略要素。许多有才华的构建者或工程师错误地过度优化他们的原始技术技能,而忽略了如何有效地向雇主推销自己。根本性的错误在于此。你认为你纯粹的工程技能足以保证一份顶尖工作。但公司实际上是根据彼得·蒂尔的价值悖论运作的。他们支付你 10 万美元,例如,因为他们通常从你的工作中创造出 100 万到 500 万的价值。价值捕获技能使你能够通过掌握与编码无关的技能,如有效的面试、简历、演示、谈判和建立专业关系,来实际捕获你为公司创造的部分价值。第二课是优化视觉效果和经验。招聘人员几乎将相关工作经验置于一切之上,包括教育程度或 GPA。事实上,招聘人员扫描你的简历只花费 7 秒钟。因此,你想优化视觉效果,或者让你的经验看起来尽可能好,因为这对于获得动力至关重要。这个策略利用了所谓的“光环效应”,即令人印象深刻的第一印象会使招聘人员认为申请的其他部分也很强。这就像你在街上看到一个穿着西装的男人。你立刻会认为这个人是律师、会计师或专业人士。你的经验需要使用强烈的行动动词、技术术语和具体数字来构建。例如,我将一项涉及将损坏的电脑搬到垃圾箱的低级别高中实习成功地包装成了一项 IT 工程实习。核心原则是尽可能夸张,但要能为自己辩护。你想最大化任何角色的技术外观。所以,俱乐部、研究、志愿者职位,当然,不包括公然撒谎。调查证实,招聘人员认为工作年限和工作类型比教育水平重要得多。第三课是掌握推荐。推荐被认为是获得科技行业工作的秘密武器,对于在海量申请中脱颖而出至关重要。数据显示,有推荐的候选人获得工作的可能性比冷门申请者高出 700%(7 倍)。这是由于一个显著的不对称性,虽然像谷歌这样的大公司只有 5% 到 10% 的申请者有推荐,但被录用的人中有 30% 到 50% 有推荐。你必须战略性地利用 LinkedIn 和 Blind 等平台建立你的网络。LinkedIn 提供了一个无与伦比的目录,用于定位目标公司的员工。Blind,另一个匿名的、经过验证的科技员工平台,也可以通过搜索特定公司并直接给个人发消息请求推荐来利用。推荐至关重要,因为员工通常会因推荐成功的候选人而获得奖金激励。第四课是申请者的谬误陷阱。申请者的谬误是一种常见的错误,即认为获得更多技术技能,例如学习第五门编程语言或构建不必要的复杂个人项目,是失业的主要解决方案。这是错误的,因为对于大约 75% 的挣扎中的候选人来说,主要问题是无法获得面试机会,而不是无法通过面试。过度优化技术知识未能解决价值捕获的瓶颈,例如糟糕的简历或不足的申请量。相反,你应该专注于获得真实世界的经验,例如技术俱乐部职位、黑客马拉松或研究,因为这些在简历上的价值远高于你在卧室里构建的独立项目。第五课是我称之为“通往软件天堂的阶梯”。这里需要关注的重点是,你需要通过采用这种方法来设定现实的职业目标。这意味着不要直接跳过旅程的步骤,直接去像 Fang 或 Quant 这样竞争激烈的公司。相反,你想专注于逐步攀登等级制度,从本地或区域性公司开始,我们称之为 0 级或 1 级。利用这些经验来获得中型公司的录用,然后才去谷歌、苹果、亚马逊或 Jane Street 这样的顶尖公司。例如,我的经验始于一家本地保险公司,然后是一家名为 John Deere 的大型区域性公司,随后为亚马逊和 Shopify 打开了大门。使用这种策略的原因很简单。如果你没有经验,并且你向谷歌或 Meta 这样的公司发送大量申请,你将没有机会在那里成功。但如果你将旅程分散几年,从一家小公司开始,然后去一家中型公司,然后去一家 Fang 公司,你成功的可能性要大得多。第六课是时机就是一切,你必须了解市场周期。看,科技市场是周期性的,这意味着申请必须战略性地安排时间。你通常想尽早申请,通常是在你实际开始工作前的那个夏天的七月或八月。大多数公司都采用滚动招聘的方式。因此,尽早申请可以减少竞争并增加空缺职位。这利用了你的先发优势。实习和新毕业生的招聘高峰期通常发生在秋季学期。所以十月和十一月,准备工作,如简历、LeetCode 和人脉,实际上应该在几个月前开始,通常在夏天。看,在申请开放一年多前就尽早申请,通常是获得实习的关键因素。当我获得亚马逊实习机会时,就是因为我提前一年申请了。现在你了解了招聘游戏,让我们来谈谈驱动执行的心态。第七课是采用无限进化的心态。这个原则是成长型思维的进阶版本,它根植于一种根深蒂固的信念,即几乎任何特质,无论是智力、编码能力、外貌还是社交技能,都是一项可以刻意获得和改进的技能。你应该采取人工智能机器人的心态,不断分析他人的成功。当你看到某人成功时,无论他们是在谷歌这样的公司工作的软件工程师,还是在健身房里超级强壮的人,你的首要行动应该是识别具体的、可重复的行为,分析它们,实施它们,并努力超越它们。这种心态转变使我能够在健身房取得进步,并在生活的几乎所有领域取得成就的同时,获得多个 Fang 级别的实习机会。第八课是停止拖延,立即开始。你已经准备好面对任何你想面对的挑战。看,你可能有一个内在的声音敦促你等到 100% 准备好。例如,你觉得你需要完成一个项目,掌握每一个 LeetCode Medium,或者进入大三。那个声音就是拖延。这种拖延导致了多年的机会浪费和动量丧失。你应该立即准备好申请。即使你是大学新生,即使你是高中高年级学生,如果你想进入软件工程领域,特别是如果你觉得自己完全不合格,尽早开始,即使技能有限,对于你将来获得高质量的经验至关重要。第九课是,你必须不寻常才能取得不寻常的成果。例如,要取得前 1% 的成果,比如在 20 多岁时获得六位数的工作,或者生活中任何其他事情,比如拥有令人难以置信的健壮身材,你就不能过着普通的生活。过度的饮酒、持续的睡眠不足、频繁的游戏或不良饮食等普通行为常常导致平庸的普通结果。如果你想获得非凡的结果,就需要非凡的承诺,并且通常需要牺牲短期的社交舒适度,并采取结构化、高度自律的例程。第十课是,你会在生活的几乎所有方面提高你的标准。本质上,你想超额交付。如果你想达到前 1%,你的工作标准可能是不够的。你必须始终以 120% 的交付为目标,推高上限,因为现实世界的错误、紧张的截止日期和意外的问题将不可避免地将你的产出拉低到大约 95%。这里的指导原则是“少承诺,多交付”,这样你就能超出最低期望。所以,你可以运用这个原则的几个例子是,假设你在为操作系统课的中期考试做准备。如果你只打算掌握 85% 或 90% 的材料,那并不意味着你会得到 90%。那意味着你会得到 60%,因为考试会有你没准备过的问题。相反,如果你以 120% 为目标。即使超出材料的要求,你最终也会得到 90% 或 95%。同样,在从事软件工程师职位或实习时,如果你只以完成项目为目标,并且不考虑不确定性,你最终将无法完全完成。但相反,如果你以完成两个项目为目标,你将完成一个半。第十一课是接受拒绝,并理解就业市场是一个战场。我称科技行业的求职为战场,因为它以持续的重复拒绝为特征。你必须预期失败。有些人即使有两年的经验,也需要提交一千多份申请才能获得一份工作。解决方案是采用系统思维,并在情感上将自己与个体结果分离开来。与其将每一次拒绝视为个人失败,不如将其视为一个大型系统中必要概率性数据点。如果你无法忍受一次又一次地失败的感觉,你就会精疲力尽。第十二课是,你的工作录用通知实际上只是工作的入场券。很多人认为,如果他们获得一份高薪的六位数工作,他们生活中的每一个问题都会得到解决。这就是所谓的“抵达谬误”。那份六位数的工作录用通知仅仅是一张入场券,让你每天 9 点到 5 点,每周投入 40 到 50 小时的黄金时间,以换取薪水来为别人实现目标。你基本上卖掉了周一到周五,换来了周六和周日。真正的生活满意度必须通过有意识地关注财富的其他领域来独立培养。所以,时间、社交、身体和心理健康。如果你不喜欢编码,仅仅靠薪水是无法带来幸福的。现在,如果你正在听这些课程,并且你对自己说:“阿曼,我明白了所有这些,但我迷失了方向。我申请了很多软件工程师的实习或工作,但真的没有收到多少回复。”那么你正是我五年前的样子。我有一个模糊的策略想法,但当我面临高风险时,我缺乏执行它的持续性和责任感。我花了几年时间独自尝试这个过程。这就是我创建“软件工程加速器”的原因。在这里,你将直接与我以及一个由 Fang 级别教练、亚马逊、彭博社的招聘人员以及谷歌、微软和 Meta 的软件工程师组成的团队合作,安装一个最终系统,保证你在平均 3 到 6 个月内获得一份工作。我们不仅仅是教你概念,我们为你做所有事情。我们几乎会为你做所有事情,从重写你的简历、建立你的 LinkedIn、进行八次以上的模拟编码和行为面试、帮助你解决 LeetCode 问题,以及在你获得录用通知后进行薪资谈判。就像我说的,如果你准备好在今年秋天锁定目标并获得你梦想中的实习或工作,请查看描述中的第一个链接。好了,第十三课是,LeetCode 就像去健身房。你需要接受 LeetCode 作为一项必要的终生习惯。它为你的软件工程大脑提供了基础训练,证明你拥有通过面试所需的关键解决问题能力。我将一个做 LeetCode 的软件工程师比作一个去健身房的运动员。勒布朗不会在球场上做卧推,但他在健身房持续的职业道德使他在球场上表现得更加成功。很多人会花几个月的时间苦练 LeetCode,然后找到工作或不找到,然后他们会多年不碰。当他们被解雇或裁员或想换工作时,他们就完蛋了。看,公司使用 LeetCode 作为一种领域特定的智商测试,以大规模评估解决问题的能力和基本数据结构知识。持续的定期练习几个月甚至几年,可以确保你在面试机会出现时做好准备。第十四课是,在 LeetCode 上应用 80/20 原则或帕累托原则来最大化你的投资回报。所以,你想集中精力在高频主题上,这些主题出现在 90% 到 95% 的入门级编码面试中。Algo Monster 的研究表明,85% 的编码面试只关注数组、哈希、树、图、双指针、链表和 DFS/BFS 等主题。你想避免在低投资回报的领域浪费时间,比如 LeetCode Hard 或复杂的动态规划,因为这些在入门级很少被测试。第十五课是,责任感就是一切,你必须开始一个 LeetCode 俱乐部。看,意志力通常不足以维持 LeetCode 的磨练。没有人,包括我,喜欢 LeetCode,这就是为什么你需要某种外部结构来让它发生。最好的方法是创建外部责任感,组成一个由大约 3 到 6 名有承诺的人组成的小型专属 LeetCode 俱乐部。这种结构解决了拖延问题。它通过健康的竞争来解决这个问题。你正在与同样试图在科技行业获得工作和实习的朋友竞争,这激励了持续的练习和加速的学习。你理想情况下每周会面三次,每次 90 分钟,专注于预先选择的问题,通常是两到三个 LeetCode Medium 和几个简单的热身题。第十六课是,掌握行为面试,停止只关注你的技术技能。看,行为面试是如此基础,以至于有很多公司甚至不做技术面试。他们只做行为面试。而且每家公司都使用行为面试来评估潜在贡献和文化契合度。你想持续练习 STAR 框架,即情境、任务、行动、结果。其中最重要的方面实际上是结果,它必须用数字和行动动词量化。现在,如果你要去亚马逊这样的目标公司,你想将他们的核心价值观,即领导力原则,融入你的回答中,以向招聘人员和工程师表明你具有文化契合度。第十七课是,在面对 LeetCode 问题时,使用系统化的方法 PBOI 或 PE boy。PE boy 代表纸、暴力破解、优化和实现。这正是你解决 LeetCode 问题时一步一步所做的。你想从纸和笔开始,在进行暴力破解之前实际概念化问题。你想能够用手走完整个问题,理解问题是如何工作的,然后实现暴力破解解决方案,同时理解其时间和空间复杂度。然后你可以手动进行优化。最后,一旦你进行了优化,你知道最优的时间和空间复杂度,然后你想实际实现那个最优解决方案。这个过程强制进行清晰的思考,并防止过早进入编码的错误。现在你了解了在软件工程中取得成功所需的心态,让我们来谈谈推动你职业生涯前进的专业技能。第十八课是,你将想为程序员使用费曼方法。当你上课或在工作中开会时,你想避免被动地吸收信息,你想实际利用费曼方法,这意味着每次听到一个抽象概念时,你都想用自己的话来总结它,就像你在教别人一样。这可以通过一个两阶段系统来实现。理想情况下,你想在讲座或会议之前预读教科书并预先学习信息。然后在会议或讲座期间,你填补你理解上的空白,并利用这段时间提问。这个过程确保了深刻的理解和记忆,因为写作能带来清晰。第十九课是磨利斧头。这意味着持续努力提高你的个人效率以获得效率。这意味着你想花时间学习新的生产力工具和系统,尤其是在人工智能时代,几乎每周都有新的 AI 工具、模型或现有 AI 堆栈的更新出现。所以,保持竞争力的唯一方法是每周投入几个小时来磨利斧头。所以,掌握新的 AI 工具,学习如何更好地使用模型,以及学习通用的生产力工具和策略。我使用 Notion 进行知识管理,Fantastical 进行时间块和日历规划,Things 3 进行任务管理,以及 ChatGPT Pro 和 Claude 进行写作。此外,你还应该阅读非小说类书籍,尤其是在生产力领域,这样你就可以不断学习如何提高你的技能和产出。第二十课是保留书面记录并练习过度沟通。现在,如果你正在实习或在工作场所,这尤其有用,因为你有责任向你的经理和利益相关者过度沟通你的进展和成功。看,当你是一名软件工程师时,你的经理不负责找出你完成了什么以及你做了什么。你必须向他们展示并证明你为什么值得晋升。做到这一点最好的方法是维护书面记录。维护书面记录最好的方法是创建一个包含你、你的经理和任何相关利益相关者的 Slack 频道,然后发送每日的日开始和日结束报告,这样他们就可以看到你工作的稳定进展。然后在一次一对一会议中,你可以随时查看该 Slack 频道并向下滚动列表,向他们展示你迄今为止所做的工作。这对于成功的绩效评估至关重要,因为你需要一个坚实的证据堆或一个吹嘘表来证明晋升的合理性。这个协议利用了可用性偏差,确保你的经理始终了解你的表现,即使他们没有回复每一条消息。第二十一课是采用爱迪生式的迭代,这个协议将保证你获得回头录用通知或晋升。本质上,你想不断尝试新事物,寻求反馈,反思并立即调整。事实上,你想主动定期向你的经理或导师寻求反馈,目标是每周三次,而不是等待定期的绩效评估。这种无情的批评寻求迫使你快速纠正错误,并为成功提供清晰的路线图,因为第一天开始的人很少有资格获得全职职位或高级职位。第二十二课是停止问愚蠢的问题。看,如果你问你的高级工程师或经理一些琐碎或愚蠢的问题,它会消耗他们的好感余额。相反,你想通过首先做繁重的工作来展示能力,只有当你仍然无法解决时,才向他们寻求帮助。看,你细致的问题应该解决剩余的 5% 的知识差距,而不是让他们为你做所有工作。在我们公司,我们实行 131 系统。所以,任何时候我的员工或队友被允许问我,CEO,一个问题,他们必须首先确定一个要回答的问题。然后,他们必须给我三个建议或想法,关于他们尝试过的事情或选项,最后给出一个他们认为最好的答案的黄金建议。如果你每次向别人寻求帮助时都这样做,它表明你在思考,并且你只是让他们确认最后的 5%,这将使他们成为有价值的职业倡导者。第二十三课是培养心理韧性,以应对专业软件工程的非结构化环境。看,与学校不同,学校里你被喂养一切,每个问题都有明确的标准和唯一的答案,现实世界的工程需要非线性地解决开放式挑战。你必须为可能需要数月才能取得突破的漫长时期做好准备。我喜欢称之为“踢门”。你可能踢了几个星期甚至几个星期,你感觉不到任何进展,直到门砰地打开,然后你发现下一扇门。所以,你必须能够独立工作,而不需要经理的持续指导。第二十四课是回到起点,并认识到你必须在准备好之前就开始,尤其是在创业世界中。我交谈过的大多数软件工程师最终都想做自己的事情,无论是创办一家软件公司还是在社交媒体上建立一个品牌。大多数人屈服于“想法陷阱”,认为他们需要等待多年才能找到第一个完美的商业理念。但事实是,你的第一个创业项目,无论是社交媒体公司还是软件公司,都很可能失败,因为你没有创业经验。相反,你想经历你所有的失败,你的前 5 到 15 家公司,这样你才能做到第 16、17 或 18 家,这才是成功的。这样,你才能真正学到营销、执行、销售、领导力等技能。看,想象一下,创办一家成功的公司就像在健身房卧推两块杠铃片。想象一下我从未卧推过,因为我想:“我不能卧推两块杠铃片。”你没有意识到,你需要逐步努力才能真正创造出成功的报价和成功的企业。现在,如果你准备好停止猜测,开始获胜,并执行整个系统来保证获得你梦想中的录用通知,请查看软件工程加速器或描述中的第一个链接。感谢大家的观看,我们下期视频再见。