编译|作者赵云|罗伯托·甘布齐(RobertoGambuzzi)评论|Ethan什么是“首席软件工程师”?许多公司给出了不同的定义。圈内有人称他们为“参谋工程师”(StaffEngineers);在另外一些公司,他们是受欢迎的teamleader,一些接触不多的朋友,“领导”(Lead)和“leader”(首席)(Principal)搞混了。那么,首席软件工程师到底是什么存在?核心职责是什么?RobertoGambuzzi一直担任总工程师,同时也是Magento认证开发人员(Magento,专业的开源PHP电子商务系统)。从1997年开始,Roberto成为一名程序员,25年来,曾多次在AWS、Google等几家巨头公司担任首席软件工程师,不得不说Roberto是稳健的第一代程序员,在各个科技行业给出的定义非常不一致的情况下,他是如何看待这个角色的?根据自己的实际经验,Roberto总结出6个定义职位的关键概念IndividualContributor(IC):codingcircle的leader很多人认为这个职位一旦被命名为“Chief”,就意味着这个角色需要参与参加大大小小的各种会议。但这不是首席软件工程师。事实上,要求他们参加的会议并不多。总工也是工程师,编码依然是“天职”。他们仍然需要处理代码:执行系统设计、修复错误、优化数据库等。在编码世界中,他们探索其他程序员不敢去的地方。他们要应对各种疑难杂症:繁琐的外部依赖版本升级,关注测试覆盖率,解决外部库和内部代码的安全问题;他们审查其他开发人员的代码,通常会一一惹恼他们:代码的关键部分需要更多的日志记录、更多的指标、更好的错误处理、更好的算法。最烦人的是他们知道什么时候可以不那么严格并降低这些限制。并非所有软件功能都同等重要,Roberto在这里举了一个例子。在电子商务中,必须始终有效的功能包括:查看产品、添加到购物车、为购物车付款。其他如:推荐、订单历史、运费预览、营销邮件等,相比之下就不那么重要了。因此,这些模块的程序一般都会出错。当然可以,但无论如何,这些bug必须尽快修复。不要盲目跟风:为正确的任务选择正确的技术。他们了解很多技术,可以为真正有价值的任务选择合适的技术。“首长”当然要“有见识”,这一点毋庸置疑,只有技术上“有见识”,才能让这个角色有底气“固执己见”。他们必须知道语言、数据存储和其他粘合技术之间的区别。另外,总工程师不能一味追求炒作,而要深入了解其背后的特点和原理,不能肤浅。例如,Postgresql数据库仍然是解决大多数问题的最佳方式,而将数据存储在S3上并使用AWSAthena可以解决其他问题;Java可以有效解决很多场景下的问题,而Go往往擅长解决其他问题。同样的问题是Rust很快,但构建时间很痛苦;Python可以用于请求密集型API吗?是的,如果任务不是CPU密集型的。如果你想成为首席软件工程师,请按照常态不断更新自己,不要追随炒作。不说时下流行语,却不知道自己在说什么。轻轻推动:更新公司的技术堆栈首席软件工程师必须不断推动公司现有技术菜单的界限,但要轻轻推动。当然,公司必须始终对变化持开放态度。因此,当总工程师上任后,往往会被赋予更新公司技术栈的重任。在推广新技术时,尊重以前留下的历史很重要。一个公司选择技术的背后有很多原因,而推动变革需要公司内部的“政治资本”——对于那些通过内部提拔而来的人来说,这个资本已经存在,因为他们已经在公司内部花了很多时间建设与利益相关方的关系。在直接雇佣的情况下,你需要一些时间来影响“现状”,因此首席工程师也需要良好的沟通能力。我在这里说“沟通技巧”而不是“软技能”的原因是,在罗伯托看来,“软技能”这个词的明显含义让人认为这些技能很弱,但事实并非如此。对于软件开发人员来说,他们可能更擅长与机器交互,而不是与人“斗智斗勇”。与此同时,首席工程师需要提出新的想法。整个过程中可能会有阻力,这是人之常情,也在意料之中。推广新技术,要学会用数字和指标说话。如果你能证明从Java迁移到Go会使AWS账单成本降低十分之一,那么老板肯定会很乐意接受Go方案。影响:跨团队辐射业务中“高级”和“首席”是否有明确的分界线?答案很明确,那就是影响范围的大小。首席软件工程师必须跨越多个团队。他们从不同的角度了解公司的业务。达到这个水平需要时间。首席工程师可以被分配到一个团队,但也可以在团队之间跳槽,每次都在不同的项目上工作。参与各种项目,更多的是个人/公司的决定。在大公司(比如亚马逊AWS),首席工程师的影响力至少可以达到50名工程师,而在小公司可能更少。那么,小公司需要首席工程师吗?对于小公司来说,首席技术官和总工程师往往是同一个人。如果CTO不够熟练,则需要首席工程师,但解决问题的范围较小。导师:指导非技术人员也很重要大多数时候,指导开发人员很有趣。他们想学习,共同点是帮助人与人之间传递信息。但并非参与软件开发的每个人都是软件工程师。产品经理、用户体验设计师等也在那里。首席工程师必须用更简单的语言解释公司正在使用的技术的局限性,可以做些什么来改进它,以及技术决策将花费公司多少成本,而不是太深入技术实施。不要使用流行语或首字母缩略词。例如,PM有时会要求无限期保留用户数据,以便在网站上获得更快的用户体验,但这一切都是有代价的。首席工程师必须能够解释所有这些并帮助找到权衡。多产且高效领导领导首席工程师不是经理。他们不必进行冗长的汇报。让其他程序员更快乐不是这个角色的工作。首席工程师的作用是让开发人员高效地工作,而不是像经理一样使用组织技术来改善公司内部的开发体验。一个需要三天才能运行的管道,首席工程师将努力让它在30分钟内运行。或许这样的结果会让大家更加开心。但是首席工程师不处理其他类型的问题,这些问题通常是经理问题,如绩效、晋升、个人问题……晋升为首席软件工程师好吗?晋升总是好的,每个人都喜欢更高的薪水和头衔。选择首席工程师意味着:虽然你的会议会更多,写代码的时间会更少,但你的代码会产生更大的影响。如果您决定担任该职位,请考虑以下几点:首先,在这个级别获得晋升或录用是不同的。回到“影响”这个话题,作为新员工加入这个级别的公司具有挑战性,因为同事、经理和整个公司都希望看到这种影响。但作为新成员,你需要适应公司的标准和技术。其次,更不用担心更名的问题。在当前公司被称为“高级”的人可以成为其他公司的“负责人”,反之亦然。所以要注意这一点。薪水是衡量工作水平的一个很好的指标。如果一家公司为您提供首席软件工程师职位,其基本工资与您目前的高级职位相同……那么那家公司可能是一家小公司。你是否必须仅仅为了这个角色而接受这份工作?答案是否定的。在罗伯托看来,工作是为了金钱或经验,而不是为了头衔。如果以同样的薪水在另一家公司担任首席软件工程师可以教会你一些东西,那就去做吧。光是追求“首领”的称号,得不偿失。最后,记住:“能力越大,责任越大”。总结“首席”是一个带光环的词,技术圈也不例外。从“高级”、“高级”到“主管”、“经理”、“负责人”、“CTO”等等,开发人员的职业发展都绕不开这些。P岗和M岗的选择这里就不展开了,但是如果你选择在技术岗位上深度发展,那么首席软件工程师是一个非常合适的岗位!代码世界的魅力,需要有人带头发扬光大。既不像CTO那样更注重业务角度顾全大局,也不像深陷某个项目组。可能有点歪曲,但对于热衷于推动新技术的开发者来说,这会很有意义!参考资料:https://blog.hulacorn.com/2022/06/02/what-is-a-principal-engineer/
