你为什么不是高级软件工程师
软件工程师获得头衔的方式似乎很武断。从你开始在这个领域开始的那一刻起,你就渴望得到光荣的高级软件工程师头衔。大多数工程师,都将其视为成功的顶峰,除了那些想要走管理路线或自己创业的工程师。
但你是如何获得它的呢?如果它不能被具体地衡量、跟踪或估价,那么我们只是在瞎想。我承认这有点空洞,但这不是武断的。我在这个行业工作了11年,与高级、中级、初级别的工程师一起工作了这么多年后,我会告诉你我所看到的结果:你的工程水平是你的知识和经验之间的累计增量。
知识与经验
你的知识和经验是一枚硬币的两面。它们就像是对同一疑问句的回答,其中一句是肯定的,另一句是否定的。知识意味着你知道如何做一件事。经验就是知道如何不去做一件事。你可以通过各种教育方法获得知识,这是你学到的信息。但是你只能通过做错事、犯错误或失败来获得经验。
一些非凡的人比其他人更有能力从别人的错误中吸取教训。这项技能对工程师来说并不常见,但如果你拥有它,它就是一种超能力。
在你作为软件工程师工作的第一个正式工作日,你的经验为零,但知识量却非常丰富。这些知识可能来自大学课程,或者就我而言 — YouTube。这一天你是一名初级工程师,相对于你的经验,你拥有太多的知识。但是我想说的是太多的知识也是一个问题,接下来我将告诉你为什么。
初级工程师相信他们是对的。但他们错了,他们只是还不知道,因为他们没有经验。当你有经验(同样是错误和失败)时,它会敲打你的头,提醒你你可能是错的。拥有丰富知识和完全缺乏经验的初级工程师通常甚至不考虑他们的想法偏离正轨的可能性。
我不是在那里抨击我的后辈,我曾经也是初级工程师。我清楚地记得站在一个小会议室里,大约是我作为工程师的第三年,手里拿着记号笔,对着白板疯狂地挥舞着,争论着,好像我的生命取决于它。我确信用户必须有能力选择他们自己的用户名来做登录,如果他们被迫使用他们的电子邮件登录,系统就会崩溃(实际上也不会)。
现在回想起来,这件事是那么的微不足道…
对于我们的用例,用户名系统存在许多缺陷。高级工程师 Dave 看出来这个问题,他试图警告我,但我不听。当时我们完成了这个项目,Dave 非常友好地向我指出了这一点,但是我没有改。
虽然我很后悔这个决定,但我很感激,因为它提供了宝贵的经验。我现在再次了解基于用户名的帐户系统时,我知道了这个陷阱,我知道我做错了,这就是经验。
如果你是一个批判性思考者,你可能会注意到,基于用户名的帐户系统不一定是错误的。我知道。我并不是说我的感觉是正确的。经验的价值不在于它如何改变你的观点,而在于它如何教会你你可能是错的。没有人是高级工程师,因为他们的意见都是正确的。
在我的职业生涯中,有很多次发生争论时,我都会回想起与 Dave 的那块白板,以及我是如何毫无理由地相信自己是正确的。这让我质疑我目前的信念,并考虑我错的可能性。
拥有更多经验
没有人愿意成为一名中锋,迷失在初级和高级之间的空白中。这是一个中间的等级,提醒你你没有成为高级工程师。一旦你有足够的经验来质疑你的知识,你就正式成为中级工程师。这使它成为一个真正重要的步骤和阶段。
当你认为自己知道答案时,你就会知道自己在那里,但无论如何你都会查找替代解决方案。当你在争论中时,你不会坚持你的观点,就像它们提供你呼吸所需的氧气一样。
经验多于知识
当你的经验超过你的知识时,你就是一名高级工程师。在这一点上,也可能成为你的一个错误的信念。在你所做的工作中,你从错误和失败中获得的教训比从教科书和博客文章中获得的要多。
我在这里做的一个重要假设很重要。技术行业包含几乎无限的信息,可供学习和吸收为知识。你的知识和经验是垂直受限的,它们并不适用于整个行业。
我是一名全栈网络开发工程师。我熟悉云、API 设计、前端 JavaScript 工程以及你期望从网络开发人员那里获得的其他东西。围绕这些主题,我积累了很多知识和经验。如果我决定加入 SpaceX 的嵌入式编程团队,编写 C 代码,加载到控制火箭臂俯仰角的伺服器上的微处理器中… 我丰富的经验将一文不值。
关键是,高级工程师在特定主题方面是资深的。如果你还年轻,想知道是应该深入某个领域还是广泛涉足多个领域,请牢记这一点。成为一名真正的全栈工程师并深入研究前端和后端是可能的,但我可以告诉你,这可能会占用你 20 多岁的大部分时间。
这几年,我一直主张自己必须有高级工程师以上的头衔。根据我的经验,高级工程师是个人贡献者或任何其他亲手编写代码的人的上限,这根本没有意义。我见过在一个完全不同的层次上工作的工程师,最近我加入了他们。
我一直深入研究代码,但在过去的四年里,我一直是一名技术主管(以不同的身份和头衔)领导高级工程师。我发现自己的想法完全正确是不可能的。你总是错的,如果不是现在,那么可能在未来的某个时候。
问题在于业务发生变化、客户需求发生变化、市场发生变化、产品转向、工程团队及其专业知识发生变化等等。所有这一切都意味着我们作为工程师构建的东西最终有一天必须改变。
这是另一个层次的认识,需要随着时间的推移大量的经验才能看到。如果十年后 AWS 破产,选择 AWS Lambda 而不是 GCP Cloud Run 作为基础设施将不是正确的选择。有些事情是你无法控制的,你无法预测。
作为一名最终级别的工程师,你要确定你可以控制和预测的事情,并围绕它们构建你的软件。其他一切都是外部性,你的系统应该从中抽象出来,以便快速、轻松地进行更改
如何将应用程序中连接紧密、根深蒂固的元素抽象为框架的底层基础设施?那是另一篇文章写的。
相对主义:这有什么意义?
关于错误和正确的注释。有时你错了… 但有时你是对的。并非所有的想法、设计、解决方案或实施都是平等的。有些解决方案比其他解决方案更好。
知识是油门,在争论中驱使你前进。你有事实、代码样本、文章、最佳实践和 Martin Fowler 一书中的整整一章。这些东西助长了你的想法和本能,认为你是对的。他们把踏板往下推,把论点向前推。
经验是突破口,是减缓和停止争论的生命线。让你知道你以前记忆和解决方案实际上不会奏效,并为你考虑他人的观点打开了大门。
有时候你是对的,当你是对的时候,用力。团队、公司和项目依赖于做出的正确决策。有时你错了,如果你所拥有的只是驱使你向前进入一场争论的知识,那么当你错了的时候,你将看不到它。
你如何具体评价一个人的知识和经验?我还不敢确定,我正在做这件事。目前,我只知道这就是解决之道。
本文翻译自国外论坛 medium,原文地址:https://medium.com/vanguards-of-code/youre-not-a-senior-software-engineer-9056ef9ffb96
关注公众号【waynblog】每周分享技术干货、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力!
·END·
因公众号更改推送规则,点击右下角“赞”和“在看”按钮第一时间获取博主精彩技术分享
往期原创热门文章推荐: