资历陷阱
这是我的著作《资历陷阱》的节选。我将分享每一章的部分内容。更多内容请查看#thesenioritytrap 。
也许你曾有过类似的经历,也许你很快就会遇到类似的情况。也许你所在的公司根本不会发生这种情况。然而,我们大多数人至少都听说过一些知识渊博、所谓的资深开发人员,他们大部分时间都花在了代码之外的事情上。换句话说,他们去办公室上班,却不做自己最擅长的事情。
有些老板可能会讽刺地说:“哦,高级开发工程师先生,您已经3周零2天6个小时没写代码了?真是太可惜了!您有比钻研技术更重要的事要做!对了,您的TPS报告都发了吗?”
你可以通过不同的方式达到这个目的。
- 你一直在寻找减少编码的机会。
- 你被告知这是晋升的途径。
- 这事就发生在你身上。
让我们快速看一下这些路径。
你一直在寻找减少编码的机会。
也许你对非编程活动感兴趣,是因为你觉得编程很无聊,毕竟你以前没学好。又或许是因为你学得太好了,想休息一下。这都没关系,这是你想要的。
还有一种更有趣的情况是,你觉得自己编程学得太好了,但实际上并没有。这很危险,因为你会对优秀工程师应具备的素质产生错误的认知,从而影响你交付高质量代码的能力。
我曾经参与过一个相对较新系统的一个漏洞修复工作。当时的情况是,需要将一个主流应用程序完全重写成更现代化的系统。但进展并不顺利,因为管理层只招了缺乏经验的人,而没有确保团队中资深员工和初级员工的比例合理。此外,项目总是延期,而管理层却一味催促,一再催促交付。
最终结果的一小部分是一个长达 600 行的函数,其中包含大量复杂、有时相互矛盾、有时完全重复的 if 语句。
规格说明?是有的,我们找到了,但是和代码不符。
几个月前就有人发现了这个漏洞,但他不想修改这个糟糕的代码。于是他做了什么?他把这个函数又用一堆if语句包裹起来。不出所料,这些if语句也漏洞百出。很快他就受够了,离开了公司。
那我还能怎么办呢?
我将封装后的函数又封装到另一个函数中。
当然不会。我宁愿离开也不会那样做。
我深入底层,尽可能地将代码提取到不同的类中,并创建了许多小型且——至少我希望——命名良好的函数。我对所有内容进行了单元测试,并记录了所有与规范的偏差。
当发现规范与实际实现不符时,你有两种选择。你可以修改代码,但这样做可能会改变用户依赖的行为,风险很大。更稳妥的做法是分离代码并编写文档——最好是通过单元测试。
这需要时间。
几天后,负责我工作的经理来到我的办公桌前,委婉地询问进展情况。我向他解释了情况,并展示了我发现的问题。他告诉我,产品经理抱怨我修复这个bug花费的时间太长,她以前也是开发人员,她确信修复bug不会花那么长时间。
我停了下来。我转过身,面对着经理乔治。我看着他的眼睛说:
也许这就是她不再从事开发工作的原因。
他竭力掩饰住笑容,告诉我他明白了。他不会把我说的话转告别人,他会照顾好她的。
在我看来,她完美诠释了那种自以为是、其实能力不足的人。整个团队都对她有类似的困扰。她总是追求速成,结果拖垮了我们的代码库。我们的开发人员当时太年轻、太害羞,不敢反驳。看看她几年前写的代码……你知道,git 永远不会忘记……这就是她交付代码的方式。幸运的是,她后来换了岗位。
你被告知这是晋升的途径。
第二个导致你陷入“资历陷阱”而代码量减少的可能性非常简单直接。你被明确告知,这是晋升为高级开发人员并获得更高薪酬的途径。
人们的动力来自于精美的礼品、懒人沙发、有趣的技术和iMac电脑,而不是高薪。
真是一派胡言。
人们工作是为了赚钱,如果薪水过低,大多数人最终都会感到不满。大多数雇主目光短浅,只愿意支付勉强够用、不至于让员工立即离职的薪水。很多人在某个时候都会问,他们必须做些什么才能获得更高的薪水。
希望你不会被给枪,也不会被问到一些下流的问题。
仔细想想,也许这些并不是最糟糕的选择。
你会被告知要协调这个项目,领导该方向的各项活动,并且可能会得到认可。换句话说,你得做项目经理的工作,却拿不到相应的薪水。但你有一个不太可靠的承诺:如果你坚持足够长的时间,做得足够出色,天时地利人和,甚至连所有宗教的神明都对你赞不绝口,那么有一天,你的收入或许会比你的经理少一些,但比现在多一些。
公平地说,你会在这个过程中学到重要的软技能,也能体验到一些黑暗面的生活。
它很有用,但主要问题是,对于许多公司来说,它仍然是唯一的出路。
第二个选择的好处在于它并不出人意料,完全符合预期。你会拿到两粒药丸,然后由你来决定。
这事就发生在你身上。
但最后一种情况并非如此,它纯属偶然。你只是在不知不觉中落入了资历陷阱,等到为时已晚才有所察觉。
如果你是一位年轻有为、个性鲜明、对晋升加薪不太急躁的软件工程师,你的工作将会逐渐发生变化,直到你落入陷阱。
你会越来越擅长编程,你可能会想到如何提高效率,以及如何让其他人也更高效。
管理层起初会很高兴,但很快你就会意识到,他们其实并不怎么愿意帮你实现这些想法。除非你成功地把你的想法包装成他们的想法。不过,以你目前的职业阶段来看,可能还没那么精明。
所以,如果你真的想要更好的生活,你就必须主动承担起领导责任。
一旦你完成了那件事,而且没有把所有事情都搞砸,那么接下来类似的任务就会很快找上你。
您将被要求协调这项活动,在会上做演示,在其他会议上做旁听等等。
很快你就会意识到,你已经很久没有写代码了,因为你只是在协调项目并为你的老板做报告,而你的老板自认为很了不起,因为他把很多任务都委派给了毫不知情的下属。
三种情况下最终结果几乎相同。你最终会成为一名几乎不写代码的高级开发人员。你最终几乎会成为鲍勃叔叔手下著名的非程序员架构师,只是薪水更低。
出口
那么解决方案是什么?
这取决于你的需求。
就像生活中其他事情一样,最重要的是,你必须知道自己想要什么。
如果你想离开编程行业却仍然留在IT行业,那就别走这条路。你应该继续前进,努力成为一名开发人员经理或产品负责人之类的职位。这没什么错。只是别做那种几乎不写代码、代码质量下降、收入却不如真正经理职位的开发人员。
如果你知道自己想要什么,最好一心一意,跳过一些晋升步骤,直接告诉你的上司,然后全力以赴。
如果你喜欢编程,但又不想最终从事非编码开发人员的工作,该怎么办?
如果你所在的公司里,开发人员的晋升与编码无关,而是与其他活动相关……嗯……这并不容易,但你必须保持专注。
别忘了你是一名开发者,你想成为一名更优秀的开发者。
尽力让你的经理满意,但也要努力寻找能帮助你提升技术水平的业余活动。
别误会我的意思,软技能很重要,会使用Excel也很有用,但这并不是你的主要目标。
对我来说,有帮助的辅助活动包括组织编程道场、知识分享会以及帮助扩大我们内部的技术指导计划。
如果你感兴趣的某些活动尚未开展,你需要先确认它们是否受欢迎。如果受欢迎,那就积极参与。如果你能成为部门或整个公司这些活动的发起者,那么潜在的回报将更加丰厚。
记住一点:无论做什么,你都必须向老板明确你的工作重点。你必须学会说“不”,而且要经常说。这将是你最重要的技能:委婉而坚定地拒绝机会,专注于真正重要的事情。
例如,如果你优先考虑的是至少一半的时间用于 C++ 编码,那么即使你觉得编写 Ansible 脚本很有趣,也不要接受一个时长未定的项目。
如果你实在无法忍受,我能理解。或许你应该专注于某个细分领域,做咨询顾问,或者干脆去规模较小的公司工作,那里还没有这种晋升机制,开发人员可以专注于开发本身。
至少你是这么想的。别忘了,在小公司里,你往往要承担很多在大公司里由不同部门负责的工作。比如维护服务器、云服务,或者在虚拟机中嵌套虚拟机等等。
再说一遍,如果你必须做这些事,那也没什么问题。你只需要了解自己的需求和可控条件即可。
你也可以放弃所有那些能带来更体面头衔和更高薪水的活动,专注于成为一名更优秀的程序员。你可能不会成为管理层眼中的明星,也不会获得大幅加薪,但到那时,你将成为一名杰出的开发人员。
值得吗?值得,但或许迟早你都得换工作。虽然我们工作不只是为了钱,但我们也不喜欢拿低薪,对吧?
结论
今天我们看到了几种让自己几乎不用写代码就能晋升为高级开发人员的方法。我称之为“资历陷阱”。
如果你陷入了这个陷阱该怎么办?
想想你想要什么。如果你想改变你的职位,那就改变你的职位;继续努力争取晋升;或者直接告诉你的管理层你喜欢什么、不喜欢什么,你的目标和梦想是什么。
毕竟,我们谈的是你的目标和时间,而不是你老板的。你的职业生涯由你自己负责,而不是其他人。你必须接受一些取舍,这没关系。但事情不应该只是被动地发生在你身上。你应该了解正在发生的事情,以及哪些事情在你的掌控之中。
尽你所能,表达你的想法和需求,努力工作,并接受你无法改变的一切。
感兴趣吗?快去Leanpub看看《资历陷阱》吧!
更深层次的联系
如果你对本章内容有所共鸣,想要获取更新信息,请订阅我的个人博客,我们也可以在推特上联系!
文章来源:https://dev.to/sandordargo/the-seniority-trap-20bn