软件工程师经验建议(团队公司的人工作这是)「软件工程团队中的所有角色」

照片由Simon English在Unsplash上拍摄
你好,欢迎
我叫Benoit
在过去的八年半里,我一直是一名软件工程师
我在以前的(也是第一家)公司呆了七年半,然后在2022年初加入了一家新公司
这篇文章来自最近的自我反思,我希望在职业生涯早期开始做的事情,以及我希望自己做得不同的事情
我在这里分享的内容可能对任何希望改进和进步高级及以上头衔的初级到中级开发人员都有用
目录·我的职业演变·我希望我早点开始做的事情:∘写一份工作日志∘离开舒适区∘对其他团队和项目感到好奇∘加入随叫随到团队∘更换团队∘写博客文章·我希望我做得与众不同的事情:∘向团队介绍新事物时要小心∘不要让你的情绪在团队面前占据上∘深入招聘市场·结束思考我的职业演变在深入研究主题之前,以下是我的职业发展:我在一家初创公司(很快就成为一家规模化的公司)实习了三个月
在那之后,我做了整整一年的勤工俭学,在学校呆了三个月,工作了九个月
然后,我被聘为全职软件工程师,并保留了这个头衔三年半
在引入技术职业阶梯后不久,我就晋升为高级软件工程师
我保留了这个头衔三年,直到我离开公司,此时技术团队约占200人
我加入一家拥有数千名科技员工的公司担任软件工程师2
尽管第二家公司的头衔降级(见大型技术招聘是保守的——但为什么?),但我一直试图保持与以前相同的职责(以及更多)
过去8.5年我职业生涯演变的插图
一开始,我是前端团队的一员
该技术组织分为后端和前端开发人员
当时,我们不超过30名工程师
一年后,当我们的新首席技术官到达时,他引入了一个基于功能团队的组织:Spotify模型
虽然一开始有一些摩擦(人们不喜欢改变),但这次重组结果肯定更好
我在同一个专题团队呆了五年多
一开始我就在那里,所以这些年来,我成为该项目的技术参考
最终,我加入了另一个团队,在那里我工作,直到一年后我离开去进行一次全新的冒险
好吧,上下文就够了
我希望您会喜欢阅读其余内容,以下建议将对您的职业发展采取行动
我希望我早点开始做的事情写一份工作日志工作日志是包含您完成的任务列表的文档
粒度和任务类型并不重要,只要你记录你做了什么
您可以按您想要的频率填写此文档
我建议每周这样做一次
一周内完成的任务在周五仍然新鲜,所以你不会很难把它们写下来
为什么这个工作日志很重要?出于以下两个原因:提醒自己在过去6到12个月里你所做的所有事情
这在绩效评估期间非常有价值,因此您可以向经理展示您取得的成就,以及为什么您值得加薪或晋升
跟踪您职业生涯中的项目、值得注意的责任和关键数字(例如,关键服务的延迟减少了X%)
每当你想冒险进入招聘市场时,这非常适合完成你的简历
在离开第一家公司前大约两年,我开始写工作日志
因此,在过去的八年半里,我的工作日志只包含三年的数据(这里和那里有一些差距)
当我不得不在2021年底写简历时,我不得不依靠我的记忆来记住我在职业生涯的前五年里做了什么
至少可以说,我花了一些时间记住所有有价值的东西,我肯定我忘记了其中一些
如果您愿意,您可以使用工作日志模板(这里有一个示例)
就我个人而言,前两年我一直在使用Microsoft Notes,然后我切换到带有要点的谷歌文档(一年中每个月一个列表)
离开舒适区这是学习和成为更好开发人员的最佳方式
舒适区是你在工作中感到舒适的范围和环境
这是你已经认识并每天与之合作的队友,你多年来一直在做的项目,你一直承担的责任,等等
但为什么有人会建议你离开这个美妙的局面呢?因为这种环境不适合进化
当然,如果你呆在这个泡沫里,你就是一个高效的人
您已经知道该与谁谈论特定主题,以及代码库中的哪些文件必须更改
但还有什么比一个高效的人更好呢?几个高效的人
一旦你到达了特定主题的舒适区,你应该寻找:指导人们,让他们对这个话题感到舒服
在你的舒适区之外寻找一些新的事情做
指导是高级职位所期望的职责之一
这是帮助我们的同事快速提高效率的好方法
你成为力乘数
至于要做的新事情,它可以是任何东西
这是一份非详尽的灵感清单:为你以前从未有机会接触过的团队/组织项目做出贡献,例如,因为它总是分配给同一个人(在他们的舒适区)
编写有关您熟悉的主题的文档
目标是分享你的知识并间接指导人们,这样他们就可以比你更快地获得这些知识
此外,写作是一种学习和改进的绝佳技能,无论是文档、电子邮件、即时消息、RFC(评论请求)、博客文章等
自愿参与跨团队项目
在这些项目中,你甚至可以担任领导职务,用一只手养活两只鸟
负责改进工具、监控或团队/组织流程
参加公司组织的聚会
加入公司的社区/公会,参与组织级跨团队项目
通过进行技术面试和/或检查候选人的带回家练习来帮助招聘团队
目标是学习新的东西
绩效评估可以帮助您定义该做什么,以及在走出舒适区时该如何做
但你不必等到这一刻才采取行动
只要你的经理知道,你可以随时这样做
例如,你可以在1-1的会议上谈论它
你的经理的核心目标之一是帮助你在职业生涯中取得进步,所以我强烈建议你在离开舒适区之前与他们交谈
可能有一些你并不真正关心的主题
就我而言,在很长一段时间里,我不想学习任何与机器学习和数据分析有关的东西
但是,我对知识的好奇心和渴望最终引导我走上了这些主题的道路
尽管我没有机会在这些领域从事公司项目,但我很高兴我了解了它们
与同龄人进行有意义的对话真是太好了,它甚至可以帮助我找到没有这些知识就无法获得的想法
如果你想在职业生涯中取得进步,我强烈建议你离开你的舒适区,每次有机会就学习新东西
我很确定这个建议也适用于一个人的个人生活
对其他团队和项目感到好奇这个与前一个接近,尽管您不必认可额外的责任
长期以来,我并不关心团队范围之外的团队和项目
我们的产品与其他团队拥有的服务有一些依赖性,但只要他们和我们之间的API被明确定义,我们就不必了解他们的服务
我们唯一一次不得不打开盒子,看看事情是如何运作的,就是我们必须为这些项目做出贡献的时候
由于我们是在特色团队中组织的,如果我们需要对公司的其他项目进行一些更改,我们必须自己进行这些更改
每个功能团队都有自己的路线图,所以我们不能让另一个团队为我们做这项工作
虽然我们一开始很慢,但在另一个团队的帮助下,我们在为他们的项目做出贡献时逐渐变得更有效率
但是,对于我们没有直接互动的其他服务,我不知道它们是如何工作的,以及它们在系统中的确切作用是什么
几年后,当我加入随叫随到团队时,我真正开始了解公司的所有服务
当我终于了解全貌时,感觉很棒
我更好地了解了当事情出错时,罪魁祸首可能是什么
我知道为什么我们需要这项特定服务,或者我们为什么选择数据存储
最后,在为公司带来价值多年之后,将所有东西拼凑在一起,给人一种“哦,现在我明白了”的美妙感觉
如果可以的话,看看你公司的其他项目和团队
阅读他们的内部维基页面,参加他们的演示,并阅读他们的公共文档
这是你可以不时做的事情;它不一定是持续的努力
奖励:如果你能画一张图表并写一些关于“全貌”的文档,那就去做吧
组织中的很多人可能会为此感谢你
请注意,与之前关于舒适区的建议相比,您不必在这里生产任何东西
你只需要保持好奇心,阅读其他团队的文档,并提出问题
你可能会一路上遇到其他团队的人,你可能会发现你真正想参与的项目
加入随叫随到团队这个可能会让人觉得有争议,甚至在你们公司都不可能
当然,只有当您的公司拥有健康的随叫随到环境时,您才应该考虑这个建议(请参阅软件工程师的随叫随到补偿)
随叫随到的团队由那些愿意在工作时间内外出现问题的人组成,即在晚上、周末和银行假日时进行干预
您的公司可能有一个专门的SRE(站点可靠性工程师)团队,和/或您的团队可能不负责DevOps工作
但是,如果您有可能加入随叫随到的团队,无论是为了您工作的产品,还是为了整个公司(取决于其规模),我建议这样做
以下是加入这个团队的一些优势:你学到了很多关于使公司蓬勃发展的产品和服务的“幕后”的知识
你对同事更有同情心,因为每当有不好的事情发生时,你都会感受到责任的重担,特别是在晚上
当您投入更多时间确保产品和服务按客户预期工作时,您会感到与公司的参与度更高
同样,在承担这些责任之前,需要一个健康的待命环境
在我的第一家公司,我在离开前大约两个月加入了随叫随到团队(负责所有服务)
我希望我早点加入,因为这几个月我学到了很多,这个额外的责任得到了很好的补偿
在我的第二家和现在的公司,我在第一天两到三个月后加入了随叫随到的团队(负责单个产品的服务)
目前,我只在工作时间进行干预,但最终,我将能够在夜间和周末回复页面
更换团队我可以看到你会转到另一支球队的三个原因:你在目前的位置上太舒服了,你想走出你的舒适区
你不太喜欢团队的项目/范围,你希望从事你更喜欢的项目
与同事和/或经理的关系已经恶化,您希望在成为公司一部分的同时呼吸一些新鲜空气
如果你看到自己处于这些情况之一,那么我鼓励你考虑组建一个新的团队,而不是辞职去寻找一家新公司
换一家新公司是令人筋疲力尽的,你可能会失去你真正欣赏的东西,例如同事、工程文化或员工福利
我认为团队跳跃很棒,原因如下:新团队的组织可能有所不同(仪式、合作方式),因此您可以在这个领域获得更多经验
您可以带来从前一个团队中学到的积极变化(改进代码审查流程、工具、库和仪式),从而成为您公司的良好做法倡导者
当新队友必须从事您前团队拥有的项目时,您可以帮助他们(即知识从一个团队高效地传播到另一个团队)
您可以学习新的工具、语言、库、架构和解决问题的方法
换句话说,成为一个更好的开发人员
如果您的变化是由于前面提到的2或3个原因,那么您可能会在更好的条件下工作
在离开第一家公司前一年,我决定转到另一个团队
几个团队要求我加入他们,如果我能把自己分成多个部分,我会很乐意加入他们所有人
当我加入新团队时,我觉得我的高级头衔不再合法了
我必须学习新的代码库、工具和实践
当然,我保留了我的软技能和关于业务/产品的知识,但我的技术技能受到了打击
当然,学习新东西很棒,但我不再是团队的技术参考人了
不过,每当团队必须为我之前团队的项目做出贡献时,我都可以以更有效的方式帮助他们
随着时间的推移,“不配拥有我的头衔”的感觉消失了,随着我积累了更多的技能,我变得更好
话虽如此,我认为更换团队不应该太频繁
我在第一个团队呆了五年多,然后换了一年的新团队,最终出于与这个新团队无关的原因离开了公司
如果您觉得您的情况符合这三个原因之一,我建议您考虑改变,但前提是您至少在当前团队呆了整整一年
我认为一年是合理的时间来感受你是否属于你目前的团队
如果你不能等整整一年,那么这意味着情况非常危急,我建议让你的经理和/或他们的经理参与进来,以解决紧急问题
写博客文章这个应该只是“写”,但感觉太短了
写作是开发人员应该拥有的最重要的技能之一
我们的许多日常工作涉及写作:代码、消息、电子邮件、文档、RFC、会议记录、事件尸检等
写作是与人沟通的最佳异步方式之一
他们可以在适合他们的时候阅读您的信息,并且他们不会在任务过程中被打断,可以专注于它
当然,在某些情况下,同步通信是一种更好的沟通方式,即视频通话、面对面会议等,以解决一些紧迫性或消除模棱两可和误解
但根据我的经验,开发人员更容易接触写作,而不是每天交谈
写博客文章很有趣,原因如下:熟能生巧
提高技能的唯一方法是练习它
如果你不确定自己做得对,你可以向你认为做得好的人寻求帮助,这样他们就可以在这个话题上指导你
您还可以阅读有关它的文档和博客文章
话虽如此,最重要的是开始练习,即使你的第一篇文章有一些缺陷
它迫使你了解你正在谈论的主题
这是实际学习东西的好方法——通过比平时更深入地研究特定主题
它发展你的个人品牌
人们对你的博客文章感兴趣的人越多,你获得的粉丝就越多,你的影响力就越大
您可以在个人博客和/或公司博客上撰写文章
一开始为贵公司写作很棒,因为它已经拥有读者和追随者的基础
然而,你在你想谈论的话题上没有那么自由了,因为这是公司的选择
不要指望在第一篇博客文章后变得受欢迎
需要很长时间才能变得有影响力
你甚至可能永远无法到达那个时刻,这很好
你应该为你写作,以提高你的写作技能,并与社区分享你的发现
你不应该关心你得到了多少点赞或粉丝
是的,获得这种认可是一个巨大的道德推动力,但你的目标不应该是增加这些数字
你的目标应该始终是提高你的写作水平并分享知识
我通过在我第一家公司的工程博客上发布:在网络浏览器中安排功能的最准确方法开始了这段旅程
它甚至在JavaScript每周时事通讯中被提及,感觉很棒
然后,在2021年3月,我开始在Dev.to上写博客文章,我偶尔会继续这样做
我还在HackerNoon上发布了一篇文章,但我不太喜欢他们对标题的编辑,我觉得Dev.to会是我的主要博客媒介,至少目前是这样
我希望我做得与众不同的事情向团队介绍新事物时要小心你越年长尤其如此,尽管即使是大三学生也应该觉得有能力向团队介绍新事物,无论是图书馆、语言、范式、合作方式等等
作为一名大三学生,你将更容易受到团队中资深人士的挑战
然而,你越是年长,就越容易说服人们,特别是年轻人加入
回到我的第一家公司,在搬到另一个团队之前的几个月里,我可以提出......对代码库进行雄心勃勃的更改
那时,我已经学习了几年函数式编程范式,并确信它的优点
几个月来,我向包括我的团队在内的两个团队介绍了功能概念
为了记录在案,这些演示文稿发生在我对代码库进行重大更改之前
我认为这些培训课程足以说服人们采用这种新范式
在那一刻,这是真的:人们在点头
他们了解新概念、利弊,以及我们可以用什么来改进我们的项目
有一次,在这些演讲之后,我们看到了一个机会:那是在夏天开始的时候,所以商业活动在几个月内会很慢
在上半年,我们遇到了一些错误,不得不在我们最古老的系统之一中使用肮脏的变通办法
我们可以使用功能概念和TypeScript(又名TS)的类型,大幅提高该系统的可测试性和开发人员体验
该旧系统最初是作为TS的早期版本开发的,没有提供出色的类型功能
换句话说,这是做一些重构的最佳时机
我向团队展示了概念证明,使用TS的功能和类型级编程,以极大地改进该系统
我们都相信它的好处,并决定进一步进行生产就绪的实施
我负责创建任务,计划可以并行做的事情等
我向Slack频道发布了定期更新,利益相关者可以跟踪进展
我开发了该系统的v2,作为我们自己的代码库中的库,使其成为一个独立的模块,可以测试我们所能想到的每一个可能的边缘情况,因为副作用最终得到了控制
尽管引入了许多新概念、函数和代码更改,但每个人都对此没有意见
我在代码审查期间获得了批准
一些人可能会说,我深受fp-ts库的启发,该库的编码方式与“常规JavaScript”不同
由于我在这里不会提到的限制,我们无法简单地在代码库中导入库,所以我不得不自己重新引入其一些功能和数据类型,并进行小幅调整
我分享了更多关于这些变化的演示文稿,并得到了积极的反馈
缺乏反对意见导致我继续深入兔子洞
一旦新系统完成并进行测试,我们必须更换散落在代码库中各处的旧系统
它被用在很多地方,所以从旧系统迁移到新系统被证明是非常乏味的
我一生中从未如此过度劳累过
我喜欢将旧代码重构为我认为更好的版本,所以我没有计算小时数
两个多月,我每天一定花了大约十个小时工作,包括周末
工作完成后,我休息了两周(他们已经计划了很长时间)
当我离开时,团队不幸发生了一起相当重要的事件
他们努力找出根本原因,并找到解决方法
问题位于新系统内,看起来不像代码库的其余部分
团队不熟悉它,因为我几乎是唯一一个开发它的人
在我的演讲中,人们理解了这些新工具和实践,并同意这些变化
但是,一旦他们独自一人处于所有这些新奇事物中,他们理所当然地感到迷茫了
演示是一回事,但如果你不练习你刚刚学到的东西,你最终会忘记它
此外,单独呈现每个概念与完全使用它们不同
它为已经很难学习的科目增加了复杂性
长话短说,我向我的团队介绍了许多新概念,当他们在我的演讲中加入时,我给项目带来的变化极大地损害了他们在我离开时解决关键问题的能力
当我回来了解这件事时,我提出与他们分享更多的演示文稿,以便他们能够更熟悉新代码
实际上,我一开始就不应该去兔子洞
这不是一个务实的解决方案
类型改进很棒,但整个新功能系统是一个错误
你不应该仅仅因为对这些变化感到满意就给团队带来重要的变化
你必须记住公交车因素
我想我会在那个团队中呆足够长的时间,这样每个人最终都会熟悉新代码,并且我可以一点一点地教他们
但是,在这些事件发生几个月后,我加入了另一个团队
回想起来,我为在离开它们前几个月放弃了这个难以维护的模块而感到难过,并因此几乎筋疲力尽
无论您是个人贡献者(又名IC)还是经理,如果高级队友引入像这些变化这样的重要变化,我强烈建议您真正挑战他们的主张
我相信在我的案例中可以找到更好的权衡
如果你和我处于同样的境地,我鼓励你在承诺之前三思而后行
这真的是一个务实的解决方案吗?你确定范围清晰,兔子洞清晰吗?你这样做是为了团队的利益,还是因为你喜欢它?当你不在身边帮助他们时,团队会对此感到满意吗?不要让你的情绪在团队面前占据上用我曾有过强烈反对经理或同事在会议期间与团队分享的任何事情的强烈反对
我让房间里的每个人都知道这困扰着我,从而公开地开始了一场“冲突”
我想向我的同龄人展示,不同意别人的决定是可以的
然而,这种行为是不健康的:当冲突变得可见/明显时,人们可能会感到不舒服,比如在这种情况下
把他们置于这种境地是不公平的
这可能会在团队内产生分裂,一些人同意A人,其他人同意B人
一个团队必须保持团结才能高效
一般来说,它表明有些缺乏自我控制和纪律,有些无法退后一步来思考情况
我不是说遏制我们的情绪很容易
毕竟,我们是人,不是机器
但是,尊重我们的同龄人,避免扰乱会议进程也很重要
在我看来,正确的做法是等待会议结束,然后立即:在1-1的会议上和对方谈谈
与你的经理谈谈情况,并找到解决方法
重要的是在会议结束后立即触发这个1-1,让你感受到这种情绪的冲动
时间越长,情况就越糟
根据我的经验,与对方交谈总是有助于改善情况
沟通是这里的关键
没有社交互动,我们无法在公司(或我们的个人生活)中走得很远
踏入招聘市场当我作为实习生加入第一家公司时,我与未来的经理进行了30分钟的面试
就是这样
我做了一个简短的“适合文化”的面试,我被录取了
在那之后,我七年半没有涉足招聘市场
一旦我决定离开,我单一而短暂的招聘市场经验显然并不代表我即将处理的事情
当您申请具有大约八年经验的高级职位时,招聘过程绝对不仅仅由“30分钟的行为面试”组成
读完《历史上最热化的科技就业市场》后,我觉得我已经准备好尝试了
我更新了我的LinkedIn个人资料,然后将自己设置为“开放工作”
我感到不知所措
处理所有降临到我身上的工作建议让我筋疲力尽
从2021年9月到2021年10月底,我每个工作日一定收到了5到10个提案
我不得不请PTO(个人休假)来解决这个问题,我花了很多周末来处理它
最初,我能够回答每个招聘人员的信息
但是,当我处于以下情况时:我不得不工作一整天,因为当时我还在现在的公司工作
我正在搬到另一个城市,这对我来说压力很大
我参与了几家公司的招聘流程
我不断收到新的工作提议
回答招聘人员的所有新信息变得越来越困难
我最终编写了自己的消息模板,其中包含我对下一份工作的愿望
我尽可能多地分享了细节:公司规模、工程文化、远程工作、薪酬、技术挑战等
但尽管如此,我还是跟不上所有的信息
对于当时与我联系的所有招聘人员,以及我从未有机会回答他们的招聘人员,我很抱歉
我被这种情况压得喘不过气来
但处理LinkedIn消息并不是最困难的部分
最令人筋疲力尽的部分实际上是进行采访
我以前从未有机会培训DSA(数据结构和算法),因为我从未觉得有必要改变公司
我主要接受leetcode培训,我还买了几本书来帮助我:破解Gayle Laakmann McDowell的编码采访
Alex Xu的系统设计访谈第1卷
此外,我必须记住并详细介绍我参与的一些最具影响力的项目
这就是我们之前提到的工作日志可能是一个非常有趣的资产的地方
一旦我最终接受了邀请,我就把辞呈交给了我的经理
如果我没记错的话,这个新报价增加了+25%的基本工资
有一些额外的补偿,总体上对我的情况(远程工作)有更好的员工福利
我鼓励你尝试不时面试的原因是:一路走来,你会获得一些经验,所以当你最终加入一家新公司时,你会感到不那么不知所措
您可以在市场上查看您的价值,并可能要求您当前的公司进行一些薪酬调整
如果你能得到一份工作,它很可能会帮助你在目前的职位上得到你认为你应得的
在我的第一家公司,除了去年,我的工资增长很高(同比增长7%到10%之间)
尽管我对去年得到的不满意,但我想无论如何,明年我会得到更好的加薪
那一刻从未到来,因为我在它发生之前退出了
由于我在那家公司的大部分职业生涯都得到了很好的加薪,我从来不想检查我在招聘市场上的价值
我希望我早点做那件事
这不一定意味着我会早点离开公司,但至少我会获得一些经验,我可能会要求调整工资而不是加薪
不要误会我的意思:加薪10%是很棒的
但是,如果你的工资比市场告诉你的价值低15%到20%,最终,10%的加薪还不够好
你怎么知道你是否有应得的补偿?通过自己体验那个市场
此外,通过与亲自体验市场的前同事保持联系
面试并不会强迫你离开公司
你可以在留在当前公司时进行数十次面试,只要你不为了面试而牺牲你的工作
这就是为什么我必须参加PTO,我必须在清晨和午休时间进行面试
结束思考首先,感谢您到目前为止的阅读
我希望这篇文章对你有用
我想你注意到所有这些建议都不是真正的技术性建议
他们中的大多数都是关于软技能的
也许我会再写一篇文章,建议更多是关于技术技能或硬技能
如果您对此类内容感兴趣,请告诉我
我想和你分享的最后一件事:与你以前的一些同事保持联系,特别是那些激励你的人
他们是你钦佩的人,因为他们按照你的标准做得很好
他们可能是您真正欣赏的优秀经理或有影响力的技术领导者
这很重要,因为它们将帮助您改进并成为更好的开发人员
他们甚至可能说服你加入他们的公司/团队,只要频率合理,这是健康的
每个人都应该建立一个网络,帮助他们成为更好的人
如果您有机会尝试这个建议,如果它对您有用,请分享您的经验
我真的很想得到关于这个建议的反馈,看看它是否适用于我自己以外的其他情况
软件工程师经验建议(团队公司的人工作这是)
(图片来源网络,侵删)

联系我们

在线咨询:点击这里给我发消息