刚成为软件工程师时,招聘人员总会向我介绍所谓的绿地项目,我在面试中经常遇到很多和编程语言相关的测试,数学也是我大学课程的重要部分,而“无估算”运动也在业界引起了一些关注。
在软件工程师的职业生涯中,随着经验的积累,你会逐渐领悟到四个重要的真理,这些可能是你之前从未被告知的,或者与你初入行时的经验截然相反。
1. 高级数学并非必需
在我的职业生涯中,我参与过许多复杂行业的项目,从世界领先金融机构的交易平台到全球规模的广告搜索平台,我几乎从未用到过高级数学。
当然,偶尔你可能会用到一些数学知识,但这些通常都是基础水平的。
在我们这个行业的进步中,逻辑流程和模式比数学本身更为复杂。而且,许多复杂的数学内容都被抽象层隐藏起来了,我们大多数人很少直接接触到这些内容。
当然,也有一些例外情况,比如在航空工业、火箭导航或科学研究领域开发软件。但从事这些工作的工程师相对较少。
如果你想成为一名优秀的软件工程师,掌握高级数学并非必要条件。
2. 基础知识胜过语言和框架
优秀的软件工程师利用对基础知识的理解,选择最适合完成任务的技术,并真正理解如何在新的墙上砌砖而非简单掩盖裂缝。他们是真正的工程师。其余的只是语法细节。
我们的行业发展迅速,仅仅依赖于特定的语言和框架是不够的。学习基础知识,你的技能将永不过时。
在我职业生涯的早期,甚至在我找到第一份工作之前,我的技术面试通常都非常侧重于具体的编程语言。
作为一个初级工程师,我曾经面试过一个优惠券代码网站的职位。那次的技术测试是一个关于 PHP 函数的选择题。测试是在严格的时间限制下进行的,而且我不能使用互联网。最终我没能得到那份工作(我保证我已经不在意了)。即便是在这个行业工作了近 20 年,我也可能无法通过这样的测试,因为我不可能记住所有知识点,而我觉得我做得还不错。我会像其他开发人员一样,上网搜索自己忘记的内容。
每个开发人员都会经常使用 ChatGPT、Stack Overflow 或 Google 来获取帮助。在面试中禁止使用这些重要工具,显然是与实际工作情况背道而驰的。
要求软件工程
师对某一语言或框架有详尽的了解,这暗示着你将在一个像流水线般的开发环境中工作,你只需反复做自己那一小部分工作,而没有机会参与架构设计或发挥领导潜力。
作为一名软件工程师,如果你专注于理解核心原理和基本概念,而不是局限于某一种语言,你会走得更远。
3. 人们总是喜欢估算
不管怎样,你总会被要求进行估算。人们对估算有着天生的喜爱。没有任何行业能够完全避免这一点。
给出一个合理的估算的技巧是:先估出一个最高的时间,然后再加上 50%。如果听起来有点夸张,那你就对了。
虽然存在一个反对估算的运动,但在你的行业经历中你会听到他们的声音。坦白说,我理解他们的愿望和论点。但在我的经验中,从未有过业务部门不需要估算的情况。
这不仅仅是团队内软件工程师构建软件的问题。可能还有销售团队需要计划演讲,市场部门需要策划活动,财务部门需要对你将构建和发布的关键功能进行预测和预算。他们都需要时间来准备。为了做好这些工作,他们需要一个时间和目标时间范围。整个业务部门不能只等着技术团队告诉他们“我们已经完成了”。这是一个团队合作的过程。
4. 几乎每个人都在处理遗留代码(Legacy Code)
当我寻找软件工程师的职位时,经常会看到职位描述中提到“参与一个令人兴奋的绿地项目”。这种描述通常过于美好,以至于不太现实。他们没有告诉你的是,你可能需要花费六个月时间来学习如何处理庞大的遗留代码库,以便迁移一些端点。
每个企业都有遗留代码。一旦你发布了你的代码,它就成了遗留代码。
如果你寻找的是一个只需要处理新事物、不需要修复错误、不必偶尔深入了解遗留代码库的职位,那么你在职业生涯中可能会经常感到失望。