译:软件工程师的软技能(三)
资历
我们渴望在我们的职业生涯中成长,无论是在我们的角色或能力方面。虽然有些人对高级技术职位感兴趣,但其他人希望担任领导或管理职位。无论哪种情况,资历较高的人都会表现出一些关键特征。 在您的整个旅程中,您可能会有导师来指导您的成长。这是我培养可以为高级职位做好准备的素质的方法。
资历和战略思维
对于不确定的东西,不要不做决定或不采取行动。
很多时候你会发现做任何决定总比不做决定要好。它至少可以让其他人知道你倾向于什么方向。有时,作为领导者,我们没有花足够的时间来思考团队希望我们做出什么样的决定,但事实并非如此,因为我们不能 100% 确定我们掌握了所有事实。我们应该尝试尽可能完整地了解做出自信决策所需的细节,但这并不总是可能的(例如在时间紧迫的情况下)。这可能会导致团队长时间的等待/不确定性,即使在信息有限的情况下,它也可以帮助积极地提高自己的决策水平。领导者是拓宽视野、进行战略思考并为他人制定路线图的人。理想情况下,您的战略性思考和计划能力以及将您的想法应用于更大范围的能力应该随着经验而增长。作为个人贡献者,您可以专注于分配的任务或您正在处理的功能。当你爬上梯子时,你的工作的影响超出了特定的任务和项目。在权衡选项时,您将学会从利益和限制的角度来看待更大的情景。软技能的应用范围也在扩大。例如,如果早些时候您为团队做出决策或与团队中的其他工程师交谈,那么随着您的成长,您的选择和沟通会影响多个团队。
以身作则
教你的团队如何解决问题。不要总是为他们解决问题,而是引导他们培养解决问题的能力。
领导者授权给工程师处理工作。当你处在更高级的岗位时,让你的团队取得成功,这就是您工作衡量有效性的方式。这可以通过多问好问题来完成,而不是仅仅给出答案。您在评估具有挑战性的问题时以身作则,并在有人提供解决方案时提出相关问题。技术领域的资深人士负责团队内外的协调、谈判和建立共识。 他们有助于提高整体团队的产出,而不仅仅是他们自己的。 作为一名高级工程师,您可能偶尔会编写代码以获取新技能或了解实际情况,但这不是您工作描述的一部分。 相反,您是确保架构图中没有任何缺失部分或代码中没有漏洞的人。 您应该能够用证据或理由来解释您的决定,说明它们将如何提供技术或商业价值。高级工程师应该擅长架构软件系统和领导团队。 你可以领导一个多元化的工程师团队,将任务委派给他们,指导他们关心代码质量/性能/简单性。 您可以在需要时提供反馈,并在必要时为他们辩护。 同时,您应该能够推销您自己、您的工作以及您解决具有挑战性问题的能力,从而在组织中获得知名度。总体而言,您应该管理与团队中的人员和管理层的关系。
团队效率
世界上最好的工程壮举是由工程师团队完成的,而不是个人。所以,如果你想要完成更多的任务,或者表明你已经准备好在公司里变得更“资深”,那就通过合作和指导来提高你的效率。证明这不仅为你自己,也为你团队的其他成员增加了价值。当我意识到要提高自己的效率,我必须把我的思维模式从“我”转变为“我们”时,我感觉我正在成为谷歌的高级工程师。通过与他人合作,分享我学到的东西,并专注于提升我周围人的技能和专业知识,我们开始完成更多的工作。当你开始作为一个独立的贡献者,你可能没有一个专门的“团队”,你领导,但你可以找到志同道合的人合作(也许与你的目标一致),一起工作,完成比你一个人可以完成的更多。当你的职位越高,你就会越倾向于构建团队,不断提高自己的效率。
冒名顶替者综合症(将成功归因于运气,而不是自己的努力或能力)
允许自己犯错、不知道答案或寻求指导,这有助于克服冒名顶替者综合症。
我们所有人都曾在某些时候觉得自己不适合某个特定的角色或工作。冒名顶替者综合症是真实的,非常普遍。它甚至可以影响那些明显成功的人。你可能会觉得自己像个冒名顶替者,尽管其他人都在向你寻求建议。你可能永远无法治愈这种综合症,但它会促使你保持好奇心,学习新事物。
指导
指导他人
指导他人,及时提供信息,这样你的学员就不会走到完全错误的地方,而是通过自己做事情来获得掌握。
在你的职业生涯中,你可能会发现自己在不同的时期担任导师或学员的角色。指导不一定是一个正式的过程。你可以找机会指导别人,或者允许自己接受非正式的指导。指导他人给了你一个学习人际交往技能的机会。以下是指导时需要记住的一些要点。
- 指导是引导人们自己发现答案,而不是给他们现成的解决方案。在解决问题时,允许你的学员进行实验。他们处于评估风险和收益的最佳位置。但是,请给他们寻找答案所需的工具。如果这是一个技术问题,建议一些想法和选择去尝试,但是让他们去做实际的跑腿工作。让他们分享他们的想法,仔细倾听,问问题,参与对话。
- 如果有人不能自己找出解决方案,向他们展示你将如何处理这个问题,以及为什么你选择了一个特定的模式来解决它。教他们如何分析结果或调试问题。在你诊断问题、尝试解决方案、实施和调试的过程中分享你的想法。分享你解决问题的技巧,而不仅仅是答案。
组织范围内指导
确保指导是高级工程师角色的一部分,也有助于在有人跳槽到另一个团队、职位或组织时保留关键的领域知识。
假设你对指导某人是真诚的,这也是你工作描述的一部分。在这种情况下,你必须在你的时间表中为指导活动腾出时间。这将允许你正确地做它,并使你的徒弟的生活有所不同。一些组织可能还根据职业发展阶梯和每个步骤的要求,为导师/学员的讨论制定了明确的过程。
辅导者的角色
导师可以为你提供建议,但你是唯一一个可以采取主动并按照任何建议来管理你的职业和成长的人。
假设你是一个初级工程师,希望在一个组织中成长。在这种情况下,我只有一个建议给你。找到能帮助你在成长阶梯上导航的强有力的导师。在你的职业生涯中,你会遇到你尊敬的教练、导师或同事。他们可以给你建议如何发展你的技能,但你是那个能采取行动的人。在接受建议时,要注意有关技术的笼统陈述。不同的情况需要不同的原则,适用于一个项目的原则可能并不适用于另一个项目。
高效的团队
建立信任
信任可以团结团队成员为一个共同的目标而工作,而官僚主义会使他们分裂。
当工程师们聚在一起进行思想开放、不偏不倚的头脑风暴时,就为推动创新的新想法和不同观点铺平了道路。这将导致高效和多产的团队。然而,只有当团队成员之间的沟通和关系是健康的,团队成员之间的有效合作才有可能。下面是一些建立、维护并成为高效团队一员的建议。建立信任是团队建设最关键的组成部分。跨层级的团队成员之间的信任是快速完成任务和团队高效的必要条件。团队成员可以使用不同的软件工程过程,例如审查和测试,来审查项目运行状况。然而,如果没有信任,这些过程就会变得繁琐和官僚。例如,如果您信任某个拥有代码的工程师,那么在代码评审过程中您可能就不会那么挑剔了。
理解业务模式
理解变更的业务影响。
当您收到一组新的需求时,理解它们背后的动机。不要浏览需求文档的“目的”或“业务目标”部分。提出问题以理解业务模型及其与这些需求的关系。现有的代码库或与领域专家的交谈可以提供关于领域和体系结构的见解。参考文档将功能和用例映射到系统流程和数据流。
许多软件工程师喜欢解决具有技术挑战性的问题。了解事物的商业方面并能够提出具有成本效益的解决方案会更有回报。请记住,您的用户也是试图完成他们的工作的人,就像您一样度过一天或一周。尽量不要让他们的生活比现在更艰难。
增加你的影响
对商业软件等式的洞察力和机敏会增加你工作的影响。
获得全面的业务和产品视角有助于你积极地为团队和项目做出贡献。如果你了解销售或市场营销的思维方式,你就能更好地做出正确的决定,并从事高影响力的工作。随着你对团队成功的影响增加,你的工作满意度和薪酬也会提高。你的上级会认识到你的主动性,你可以在没有监督的情况下独立工作,通过做适合团队、项目和业务的事情来提高整体效率。
工作和生活的平衡
如果您已经掌握了技术能力、人为因素和领域知识,那么您作为软件工程师的技能将不可避免地受到需求。你的团队和组织中的人会向你咨询。除了您的工程任务之外,您还将成为协作过多的受害者。特别的要求会占用你的时间,阻止你做你热爱的事情。
时间管理
为深度工作优化你的日程表
在你的日历上为专注的深入工作留出时间。我已经这样做了很多年,发现它在编写设计或策略文件或处理棘手技术问题时非常有效。深度工作是一种不受干扰、高度集中的工作,能在短时间内创造大量价值。Cal Newport的《深度工作》很好地涵盖了这个话题。
注意力残留是卡尔谈到的一个观点,这就是为什么长时间深入工作是如此有益。每当你从一项任务切换到另一项任务时,你的注意力就会残留在对前一项任务的思考中。这使得你很难集中精力在真正重要的事情上。深度工作通过专注于一项任务来最大化你在有限的时间内挤出的生产力。没有干扰,没有推特,没有聊天或电子邮件。你把有深度的工作留给需要认知的任务。我强烈推荐你尝试一下。
我还发现,改变工作地点有时对深度工作有帮助。我们有时会把一个特定的地方(如桌子、房间或建筑物)与一种特定的任务联系起来,增加一点变化可以帮助我们恢复活力。
避免打乱工作时间
当一个小时的工作因为分心而被分割成几分钟时,你就会感到压力。找出让你分心的原因(不管是你自己还是别人),然后解决它。否则你的一天就不会那么有效率。
过度工作不是良好职业道德的一部分
你永远不可能比世界上的任何人都更努力。许多公司把过度工作的员工作为“标准”,错误地认为这与良好的职业道德是一样的。成功来自于许多因素,而不仅仅是过度工作。
不断超越自己的标准是不现实的
我一直为此感到内疚。如果你想保持冷静,避免疯狂的工作环境,你必须适应足够的环境。作为一个经理或领导,你的团队可能会在如何处理这个问题上由你来领导。“知足”可以树立一个好榜样。
时间是有限的。不要试图争取更多的时间,把不必要的任务都删掉
很多指导都说要更好地重新安排工作。真正的问题是一开始就想完成太多的事情。消除掉不必要和浪费时间的工作,设法管理有限的时间。
你不需要知道每件事
我们中的许多人都害怕错过每一个新的故事或更新。这就是人们沉迷于每小时查看Twitter、Reddit和Instagram的一个原因。我确实经历过这些。实际上,这些信息大部分都不是那么重要。相反,试着切换到这条新闻的摘要视图,或者限制查看它的频率。在杰森·弗里德的《工作中不必疯狂》一书中,对这个话题有了进一步的思考。
最好是通过学会说“不”,知道什么时候停止,计划你的时间包括工作之间的休息,来主动避免自己的疲惫
时间管理和保持良好的工作与生活平衡对所有级别的工程师都至关重要。经常加班会导致精疲力竭和压力。压力会导致其他身心健康并发症。在结束之前解决一个问题可能很有诱惑力,但随着时间的推移,这可能会成为一种习惯。
鼓励你自己和你的团队休息、假期和休假
你的健康和家庭至关重要。作为一名高级工程师,如果你意识到这一点,并为团队中的其他人树立了良好的榜样,这将促进整体的幸福和快乐。另一方面,疲惫和倦怠会导致工作场所的毒性。
随着您对问题理解的提高,更新估计
几乎总是会有一个客户或您工作的涉众想知道项目或任务何时可以交付,以及这个成本是否值得。这是完全合理的。有时他们想要匹配一个截止日期,或者在其他地方有需要支持需要规划的工程工作的依赖关系。软件截止日期是出了名的难以准确预测。只有当项目处于特定阶段时,才应该给出基于估算的截止日期。随着时间的推移,当我们更多地了解团队解决问题的能力(“知情的”评估)时,评估应该得到更新。第一个估计(“大小”)通常是最不可靠的,但它是一个可以随着时间而改进的起点。这个初始估计通常是非常保守的——如果产品需求、用户体验或依赖关系不清楚,一个较大的保守估计通常对第一个“规模”是有帮助的。在这里,当与项目经理合作处理这些评估时,我通常会取得最好的成功,因此我们都在完善它们的同一页面上。
软件评估的问题在于,当第一个粗略的评估被确定为记录计划而不是初稿时。当处于关键路径上的团队采用它,但将对估计的调整视为工程上的一个小问题(与步骤1/n的知情估计相比)时,这可能是一个问题。一旦项目获得批准,就要更好地弄清细节——这可能意味着,基于对满足需求的更深入理解,三个月的估计将变成两个月(或四个月)。
您几乎总是希望评估驱动您的计划,而不是在可能的情况下让计划驱动评估。在我的团队中,虽然我们有时会有固定的截止日期(例如会议),但如果估算超过了这些日期(通常)也没关系——更改消息(例如会议)。“预览”)、设定(“在不久的将来”)或展望未来总是我们可以与领导讨论的选项。当然,我承认这并不总是微不足道的。当你真的要把工作安排出来的时候,你可以把工作分成“必须要做的”和“很好的要做的”两部分(并把它们放到未来的冲刺阶段),然后检查这些“必须要做的”是否在截止日期前完成。
如果时间安排仍然太紧,你还可以问其他问题,例如“我们是否可以为这个项目增加额外的工程师?”以及“是否可以上线一个有很大的功能削减的项目?”
取消项目有时是正确的做法
我讨厌这一点,但取消一个项目有时对团队和组织来说是最健康的长期决定。如果它在发布之前就被取消了,因为它的人员配置无法再维持,最终不得不被弃用。我读过《被谷歌杀死》。目标是尽可能减少导致项目被取消的情况。我最近取消了一个多年的项目,非常艰难。
这什么时候能发生?你可以在某个时间点做出投资新项目的正确决定。在那个时间点,环境可能已经对齐(市场适合,组织购买,人员承诺),使它完全有意义。一年之后,情况会发生变化——市场、领导层、项目的重要性。定期检查你在项目开始时所做的假设是否在整个项目生命周期中都是正确的,这一点很重要。
你越能保持对假设仍然正确的信心,你的项目就越有可能成功启动并继续得到支持。取消项目是很难的,原因有很多,其中一个重要原因是,有真实的人,有真实的情感,他们投资于他们希望推出的项目。作为一个领导者,引导人们从一个被取消的项目中回到其他成功启动的项目中是复杂的,但对于让人们回到心理安全、信任和快乐的地方很重要。在客户端,要注意用户信任以及您的长期决策如何影响用户信任。
关于技术债务:一点的预防抵得上大量的治疗
Titus Winters将技术债务定义为“我们现在拥有的代码和系统与我们希望拥有的代码和系统之间的差异”,其中某些类型的债务比其他类型的债务具有更高的影响。有些债务可能是由于没有及早发现的错误(疏忽),有些是由于事后学到的东西(后见之明),还有一些是由于技术系统的变化(环境)。我发现始终优先处理技术债务是困难的,因为你不能总是量化没有出现的bug或没有发生的中断,因为你“偿还了足够多的债务”。保持团队对这类工作的兴趣,并在绩效评估中给予奖励也非常重要。然而,一旦问题随着时间的推移开始堆积,“治疗”的成本可能会高得多。与污染类似,在多年的过程中,预防技术债务是一种比以后减缓更便宜的策略。
你能做些什么来防止债务累积?除了构建新功能外,技术领导还应该定期投入时间进行清理和偿还债务。审稿人应该意识到短期速度的推动可能会导致后续的问题。经理和主管应该注意批准与现有项目重叠的新项目,除非你确定这样的权衡是值得的。在现有体系中解决债务问题与建立新体系相比是不值得的)。除此之外,监视项目运行状况非常重要。
没有休息和良好的工作/生活平衡,你或你的团队可能会精疲力竭
职业倦怠是由于工作压力没有得到有效控制而导致的一种筋疲力尽的形式。我看到许多工程师在疫情期间因为工作压力而精疲力竭,但这种情况一直存在于科技行业。这些天,我问我的团队:“你们的压力水平怎么样?”我能帮上什么忙吗?”
我对精疲力竭的经验是,它发生得很慢,最终以冷漠告终。慢慢地,你开始觉得精力不足,没有动力,在尽你所能应对工作压力的同时,你会精疲力竭。你怀疑自己是不是出了什么问题,却没有意识到你的身体正在加班加点地工作,以弥补你所缺乏的能量。你一直逼自己越来越努力,但最终你觉得自己已经没什么可付出的了。
大约5年前,我感到精疲力竭,但我很高兴地说,我扭转了颓势。是什么导致的呢?事情就像雪崩一样。多年来,我一直把工作放在第一位,工作时间越来越长,说“不”还不够。我从来没有足够的休息和假期。我平均每晚睡5个小时。当我在家的时候,我是如此的无精打采,以至于我没有像我应该为我的家人做的那样多的“在场”。“补救”的方法是做与这些事情相反的事情:休息、多睡觉、从工作时间中挤出更多的价值、更好地委派工作,并为工作设定一个明确的“停止时间”。
作为管理者,为了避免我们的团队精力被耗尽,我认为鼓励我们的团队利用假期、休息和定期检查人们在压力方面的表现是很重要的。
在大型组织中执行可能会感觉很慢。有很多方法可以解决这个问题
我曾与工程师进行过多次对话,他们的问题可以归结为:“为什么在(大型组织)中发布X登月项目如此困难?”Alex Komoroske做了一个很好的类比,将大型组织比作黏菌。也就是说,即使是执行简单的事情也会开始感觉比你预期的要慢得多,这是由于协调的阻力。组织有复杂的系统、结构和动态,当必须协调一个项目的人数增加时,阻力就会上升。
这里有许多因素在起作用,包括低估他人任务的难度(例如,如果他们正在建立依赖性)。你不能忽视这些问题,因为它会使功能障碍扩散。克服这种逆风的一种方法是尽可能地将事情解耦,这样它们就可以在一个合适的时间轴上降落,并最终收敛于交付X。而不是从一开始就解决所有的X问题,你可以避免只瞄准月球射击(大风险努力),而是定义屋顶射击(解锁价值的安全步骤),让你更接近自己的目标。如果这个问题听起来很熟悉,我强烈建议阅读Alex的桥牌。
关注问题和项目
让我们想象你的用户有一个未解决的需求(例如一个问题)。当你是一个参与特定项目的工程师时,你通常会问你的特定项目将如何解决这个问题(局部极大值)。在一个拥有类似项目的大型组织中,很可能会看到多个工程师试图以这种方式独立思考(“我的项目如何解决这个问题?”)。然而,当您拥有一个项目组合时,这可能并不十分明确。如果用户可能同时使用您的多个项目呢?如果他们各自用稍微不同的方式解决问题,而不知道对方的方法,这不是很奇怪吗?相反,您想要问“这个问题的正确的端到端解决方案是什么?”并回顾到哪些项目或一系列项目的变更能够最好地整体解决这个需求。这可能需要让从事多个相关项目的人员进行更深入的合作。然而,这最终会为用户带来更好、更少困惑的故事。
结论
“让自己置身于卓越的环境中,并与最优秀的人一起工作。”——Brian Staufenbiel
与你可以学习的人建立友谊和关系。接受他们的指导,接受他们的成功和失败。永远不要害怕寻求帮助或见解。在很多情况下,这只是一个问题。
在每个阶段,在给定的组织中,对技术、业务领域和人力资源的掌握必须随着时间的推移而培养。一个公司没办法从另一个公司那里雇佣从第一天起就能高效工作的精通者。如果你是一名优秀的工程师,你将为公司的发展做出贡献。作为回报,你会得到新的机会,让你获得新的技能和成长。
本文来自博客园,作者:IAyue,转载请注明原文链接:https://www.cnblogs.com/zmj-pr/p/16573321.html