Skip to content

Latest commit

 

History

History
101 lines (47 loc) · 6.08 KB

Personal. 高级软件工程师的职责.md

File metadata and controls

101 lines (47 loc) · 6.08 KB

Personal. 高级工程师的品质

本文来源于 towardsdatascience 的一篇关于工程师的文章,对于进阶成为一位高级工程师,应该是很好的一个指引同时也包含了一位 Senior 工程师该有的优秀品质: 原文指引

我一直都说我现在学到的东西基本上都是来自两个 Mentor 的功劳(耳濡目染下成长),他们都具有优秀高级工程师应该具备的品质

一个关于责任和工程师角色的小故事

  • Eldar Jahijagic 最近接到了一个自家公司需要招聘高级工程师的任务,实际上接到任务的时候,他第一时间想到的是: 什么成就了一位优秀的高级软件工程师呢?他自身的回忆中,从初级,中级,到高级软件工程师,他看到了各式各样对前面这个角色所下的定义,也想到了很多,在工业界对于这个角色的描述有很多相通之处,下面的一些关于高级软件工程师的"职责",可能是一个高级工程师或者与用人单位职位相匹配的人才。

Definition

  • 高级工程师在团队内需要直接汇报给团队的 Leader

  • 从技术上而言,Team Leader 和高级工程师在团队内的定位跟其他的角色不会有太大的差别,二者都具有很高的技术工程水平,同时会参与团队的管理,关心团队的动向,驱动团队整体实力的前进,唯一不同的应该是 Team Leader 会是团队最能 go-to person 的人(也就是团队的多面手,最核心最中坚的人),会承担更多管理型的任务,不过一个工程师要胜任高级职位的工作,他也必须能做到未来某个时间机会点,能带人带队,承担 Team Leader 的角色

  • 高级工程师还有一些集成的工作,可以是推动人主观能动性,带来更有价值的事情,达到传递稳定的和提高团队工程解决能力的目标

端对端工程生命周期

  • 软件(系统)开发的生命周期是一个重要的管理软件开发的模型,可分为多个阶段,下图为几个端对端的不同的生命周期阶段

  • 对于不同的公司甚至不同的团队,阶段可能各不相同,但是最终目标都是将项目和产品从最初的想法和观点演变成开发上线发布,生命周期通过下面六点组成:

    • 计划、分析阶段

    • 设计、原型阶段

    • 软件开发

    • 软件测试

    • 集成、部署

    • 维护

  • 高级工程师会参与以上所有的流程,不仅仅停留在开发阶段,对于以上每个阶段,高级工程师还会负责最有争议的模块,要理解和承担整套业务需求,将业务需求提炼出来,设计整套解决方案,最终推动落地实施,测试,集成,使得项目能良好的维护。(不得不感叹高级工程师需要负责的部分是真的非常细致)

  • (无论能理解或者不能理解)主人翁意识是个很重要的点,虽然有点虚,但是这是真实存在的。

高级工程师必须在每个方面都能体现其主人翁精神

  • 高级工程师不只是执行任务,执行这一点也许是职级更小的人员专精专职负责的范围。在推动整个团队落地的同时,还需要更设身处地的贴近业务侧思考问题。

  • 高级工程师日复一日的工作范围其实没有一套预定义的方法论存在,但是他们需要排优先级,排查问题,讨论琐碎的事情,对于存在的风险做一定的辨别和排除,高级工程师要经常和产品负责人合作,必要时也会遇到跨部门跨团队合作的情况。

  • 高级工程师有能力去处理涉及多系统联动且比较复杂的问题,一步一步将问题简化,相当于充当团队产品的"架构师",有需要的时候,会给业界输出可复用的轮子。他们还为整个公司或者部门做谋划,不局限于整个团队。

  • 一些额外必备的技能也是十分重要的,比如对整个团队进度的把控,敏捷流程制定,提供最佳实践,给团队的其他成员做 Mentor 等等。

硬是要列一些职责的话,也不是没有,浅浅列下几点:

  • 高质量进行软件设计架构工作

  • 自驱力强

  • 关心团队动向

  • 给其他工程师提供指导

  • 给团队各个方面提供价值

高级工程师与其他工程师相比还是会有一些指标的,通常包括:

  • 对公司或者部门级别产生影响,无论这个影响是技术解决方案方向,还是工程流程方向等等

  • 产品的性能,比如软件的质量,为软件的吞吐量和整体的响应时间负责

  • 产品的可用性

  • 代码质量

  • 想法落地的质量

  • 架构的可拓展性,设计、优化

  • 自动化流程

  • 好的敏捷实践(中国互联网公司可能没有真正的做到这一点)

  • 给其他工程师做导师并提供指导

summary

  • 定义一个工程师的指标和属性实在是太多了,上面的可能只是凤毛麟角,同时也是对于一个企业而言高级软件工程师所能做到的事情。对于个人而言,一个高级工程师需要对技术有深层次的理解(这里的技术不单单指的是库),这些技术将来会参与到产品建设中去,选择适合的技术解决问题而不是盲目的根据个人喜好选择使用过的框架。

  • 同时,个人也需要认清某些行为会给自己或者团队带来长远的影响,其他部门的同事参与到开发中时,能否为不同的人提供技术上,设计上的建议,无论这些建议是中听的还是不中听的,为了做到这点,高级工程师必须接触过各类问题并成功解决,对于每个解决方案(有效或无效)的原因得出准确的结论。代码的提交次数并不代表个人在负责整个项目中有很重大的意义,除非能给产品带来一些有价值的想法和产出。

  • 当然了,上述总结只是个人的观点,可能十年后(不知道还在不在)这些观点会被我吐槽或者改的天翻地覆,谁知道呢