如果你不雇佣初级员工,你就不配雇佣高级员工
更新:我已将这篇文章修改为2023年版本!如果您想阅读更新版本,请访问我的博客:https://isaaclyman.com/blog/posts/junior-developers/
让我给你讲一个非常成功的公司的故事,它做出了一个非常愚蠢的决定。
我们不雇用初级开发人员或实习生……如果你没有养小狗,你就不必收拾它的烂摊子。
~ Netflix
我真是大吃一惊,居然有哪个公司蠢货想出了这么个办法,把小狗描绘成负面形象,结果人们还一直听个不停。我的意思是,小狗是地球上最纯洁的生物。它们真的由玩耍和毛发构成。是孤独世界里的一抹亮色。不过我跑题了。
很多公司都效仿了“我们只招老年人”的策略。问他们为什么这么做,他们会这样回答:
- 我们没有时间或资源来雇用初级开发人员;我们的进展太快了。
- 公司可以负担得起高级开发人员,因此没有必要雇用初级开发人员。
- 我们现在不能犯任何错误。风险太高了。
- 我们的组织给予员工很大的自主权。我们没有为初级员工提供所需的指导。
- 我们希望在雇用任何没有经验的人之前,先将基础软件产品安装到位。
言下之意是,初级开发人员是一种负担,公司出于责任感或预算紧张才会聘用他们。言下之意是,也许其他公司可以承担企业慈善项目和不达标的工作,但我们肯定负担不起。
顺便说一句,美国有超过10万家科技公司,我从未听过哪位CEO说过“我们的错误无关紧要”或“我们需要想办法花掉这些闲置的现金”。所以,所有“只招高级开发人员”的家伙,无论你们认为自己走了什么捷径,无论你们认为自己在用什么系统作弊,事实是,你们只是在自欺欺人。把初级员工拒之门外没有任何竞争优势。而且,你们已经暴露了自己是一家管理不善的公司。
招聘和对待初级开发人员的方式,是衡量组织、产品线和内部文化健康状况的重要指标。高级开发人员深知这一点。如果这还不够有力,那么,合理分配初级开发人员的人数也是一个明智的财务决策。
防止混乱
如果你因为初级开发人员制造“麻烦”而拒绝聘用他们,那么你就是在无意中传递出一个强烈且关于公司文化的信息:不容许犯错。你把自己描绘成一家每次服务器宕机就会解雇员工的公司。无论你支付多少薪水,没有人愿意在一个工作安全岌岌可危的环境中工作。试图恐吓开发人员减少错误只会传播一种恐惧和胁迫的文化,这对员工的心理健康和工作效率都是灾难性的。
你可能会认为,这种态度鼓励开发人员谨慎行事,并实施防范错误的流程:自动化测试、质量保证、故障转移、访问保护和可逆代码更改等等。但这种理论完全是本末倒置的。如果公司准则鼓励使用此类故障保护措施,并且公司为开发人员提供时间和资源来实施这些措施,那么“不允许犯错”的文化就没有必要或毫无价值;大多数问题早在投入生产之前就能被发现。而且,每位开发人员,无论初级还是高级,都能在一个强大的开发流程保护他们免受最坏情况影响的环境中蓬勃发展。
那些突破了你设置的每一层预防措施的错误怎么办?把它们视为巩固防御的宝贵机会。诚然,初级开发人员通常比高级开发人员更早发现这些机会。所以唯一的问题是,你是想尽早调试流程,还是想延后调试?任何经验丰富的开发人员都会告诉你,“永不”不是一个选择。如果某件事可能出错,最终它就会出错。无论多少经验都无法避免人为错误。
当然,你需要一些高级开发和运维领导者来奠定基础,并为抗错开发周期树立先例。没有人说你应该只雇佣初级开发人员。但如果你真的拥有一个重视错误的工作环境——也就是说,一个能够尽早发现错误并经常发现错误的环境——初级开发人员将会非常适合。而且,各个级别的开发人员都会获得更高的工作满意度,因为抗错能力让他们能够专注于构建优秀的软件(而不是不断地救火),并保护他们的夜晚和周末。
省钱
根据 Indeed 的数据,初级软件工程师的平均年薪为 55,394 美元,而高级软件工程师的平均年薪为 117,374 美元。高级软件工程师的薪资是初级软件工程师的两倍多。
这种成本通常是合理的。高级开发人员的预期生产力应该比初级开发人员更高。但这并非全部,如果轻率地将其归结为业务成本,既懒惰又昂贵。
并非所有应用程序代码都需要多年的经验才能编写,甚至写得好也并非易事。每个程序都包含“胶水代码”,它以普通的方式连接各种输入和输出。谁来写这些代码并不重要。你可以付给某人每小时28美元,也可以付给某人每小时59美元。无论哪种方式,结果都差不多。如果你只雇佣资深员工,那么你就是为大量的入门级工作支付了高昂的费用。
不同应用程序的代码差异也很大,熟悉程度是影响生产力的关键因素。大多数情况下,在团队中拥有六个月经验的初级开发人员会比刚入职的高级开发人员更有效率,原因无他,仅仅是因为他们对相关领域熟悉。
前面提到的粘合代码和领域特定代码至少占所有开发工作的一半。剩下的代码才是真正需要高级开发人员专业知识并受益的代码。即使是这类代码,如果初级开发人员能够获得充足的教育资源和经验丰富的导师指导,也能出色地完成。
出于这些原因,一名初级开发人员和一名高级开发人员的组合通常相当于两名高级开发人员,而且成本不到总成本的75%。如果您的目标是以最小的成本实现最高的生产力,那么这种初级/高级组合应该是您组织的基本组成部分。
顺便说一句,这些数字中有一个无法解释的因素:高级开发人员普遍倾向于争论一些最终变得无关紧要的话题,例如算法、微秒级优化和代码风格。如果一个组织只雇佣高级员工,并且没有一个稳固的决策流程,那么数百小时的工资可能会因为这些争论而损失。初级开发人员很少遇到这种问题。
职业生涯发展
如果您不雇用初级开发人员,那么您发出的另一个信息就是您不知道职业发展如何进行。
再次强调,这与企业公民身份或“在科技界尽一份力”无关。这是为了让你的公司成为一个舒适的工作场所,以便吸引开发者加入你的公司,并长期留在那里,产生积极影响。
我听过一些开发者说:“我不再换头衔了。我只想永远做高级开发者。” 然而,我从未听过有人说:“我希望我永远不要加薪,永远不要学到新东西,永远不要再因为我的成就而获得认可。” 而且,令人不快的是,维持雄心勃勃的晋升者与自满但充满热情的高级开发者所需的资源几乎相同。你需要衡量和认可出色工作的方法、丰富的教育资源以及开发流程中各种新旧项目。你需要创造一种进步感,即使对于那些不想晋升的少数人来说也是如此。
但别纠结于这些人。他们只是少数。大多数科技界人士并没有打算一干就是40年的高级开发人员。我们梦想成为软件架构师、团队负责人、首席技术官和创始人。一家公然宣称对职业发展漠不关心的公司,在我们的潜在雇主名单上肯定会排在最后。
开发人员在面试时听到的最令人印象深刻的一句话是:“你好,我是团队负责人,在这里工作了八年,我是以实习生的身份加入公司的。” 这样的评价令人印象深刻,却也非常罕见。这样的人对公司来说至关重要——他们对产品线了如指掌,阅历过方圆百米内所有项目的代码,并且与公司里的每个人都共事过。他们能够在公司内部进行创新,而这种方式很少有人能做到。公司也从这些人的工作中获得了难以估量的回报,因为他们找到了让这些员工保持兴趣长达八年的方法——这大约是他们预期寿命的十分之一。这是公司文化成功的标志。这标志着一个士气高涨、优秀工作得到认可、并且充满乐趣的项目随处可见的职场环境。
另一方面,说“我们不招初级员工”就等于公开承认你的公司还没有准备好成为某人职业生涯的一部分。这实际上宣扬了停滞不前:公司期望经验丰富、才华横溢的开发人员加入公司,无限期地做出贡献,而他们除了薪水之外什么也得不到。有些人可能愿意这样做,但你永远看不到他们最好的作品。
另一方面,如果您的公司真正致力于职业发展,那么对初级开发人员的任意限制只会缩小您的招聘渠道并缩短员工的可能任期。
制作出色的软件
初级开发人员拥有一些他们经验丰富的同事通常缺乏的独特特质。其中之一就是盲目乐观。另一个就是乐于跟随。但或许初级开发人员最宝贵的特质是他们没有包袱。高级开发人员见证了技术的兴衰、项目的失败、团队的内斗以及科技行业所有其他的陷阱。他们形成了强烈的个人观点,并且常常以偏概全,认为对一个团队或一个项目有效(或无效)的方法对另一个团队或项目也一定同样有效。这可能表现为不愿学习新问题领域的细微差别。
有时,项目经理的工作就是说:“我知道那个方法在那里行不通,但也许在这里行得通。” 而初级开发人员通常是检验这一理论的最佳人选——他们可以构建概念验证或原型,而不会带上高级开发人员多年来积累的任何偏见。作为一名初级开发人员,我经常承担这类工作,尝试新的工具和技术,以不同的方式重建事物,验证其他人过快判断的想法。我经常发现更好的构建方法,公司的软件也因此得到了实质性的改进。有些情况下,页面加载时间提高了一个数量级;多个页面被压缩成一个,节省了数周的未来维护时间;或者公司能够排除可能导致大量时间浪费的不足技术。全新的视角和全新的视角带来的好处不容忽视。
很多公司可以把一群高级开发人员聚集在一个房间里,让他们就如何解决问题和构建产品达成共识。但如果能加入一些初级开发人员,让他们把时间花在一次性实验和大胆的想法上,就能为你的产品带来意想不到的改进。
谈到软件质量,初级开发人员也做了一项重要的工作,但通常不被重视:他们对高级同事可能编写的复杂、过度设计的代码进行限制。
如果你把上面推文中的“平均或平庸”替换成“初级”,你就能明白其中的道理。代码库是贡献者批判性思维方式的抽象记录。初级和高级贡献者的健康组合为简化代码创造了机会,随着时间的推移,这使得功能更容易构建。
总而言之,科技界普遍存在的“只招资深开发者”的心态低估了初级开发者的价值。这对每个人都有害,尤其是那些错误地认为只要拒绝缺乏经验的候选人就能让事情变得更容易的组织。尽管其中一些公司在财务上取得了成功,但它们可能已经浪费了巨额的金钱和机会。
如果您的公司在这个问题上领先一步——如果您知道如何招聘、培训和留住初级开发人员——那么您将获得我之前描述的优势。您的公司比竞争对手拥有更低的人员流动率、更高的多元化水平和更低的运营成本。您的软件更不容易崩溃,更容易让人满意。当然,还有其他因素在起作用。但积极对待初级开发人员是为各个级别的开发人员打造高质量工作环境的重要标志。
文章来源:https://dev.to/isaacdlyman/if-you-dont-hire-juniors-you-dont-deserve-seniors-48kb