温泉

© 2022-2024 By Pang

Proudly published with Astro

如何成为一名中级工程师

发布于 # 工作

如何成为一名中级工程师

定义

相比于部分裙带主义行业,开发工程师更加偏向唯实力的精英主义,也就是说能力最大程度决定了你的行业地位。一个开发工程师的能力由哪些因素影响,以及如何根据能力来划分,以下均为本人拙见。

个人认为首先工作年限虽然是一个重要影响因素(目前大多数招聘网站以1-3年、3-5年、5年以上来简单区分),但并不是一个充分必要条件。工作年限越高并不代表能力一定就越强,不同公司对于一个人资历的衡量标准也可能不同。其次,沟通能力更能体现一个工程师的业务水平,尤其是在ToB方向。如果一个人只是闷头写代码,无论在代码还是业务方向上终究沦为随处可见的螺丝钉。在代码方向上,与不同技术水平和方向的人沟通合作,可能远远比你一个人挨个苦读官方文档来的效率高,因为大多数的坑往往不会在文档内给出;在业务方向上,如果只是单纯的完成上级交付的任务,而不去沟通其中可能存在的问题,及理解业务上这么做的逻辑,久而久之就会成为一个可以随时替换的螺丝钉,因为本身并不具备优势。最后,在学习能力上,个人认为无论是在哪个阶段都不能摆烂,由兴趣驱动着去虚心学习新知识和新领域,同时又不能因此自满自大而影响了工作。

目前已踏入这一行业约两年,虽仍正处于初级阶段,但根据自己所思所想以及对周围的观察和网上见解总结了一名中级工程师应具有的特征以及接下来该如何做来进阶为一名中级工程师。

特征

  • 相比于初级,中级工程师拥有解决遇到的大多数问题所需的所有技术能力,不需要再一头扎进各个论坛查找问题解决方法,更多的是如何更高效的利用经验写出代码,并在大多数时候思考为什么会这么做(eg: 为什么使用 RabbitMQ 而不是 Redis作为消息队列)而不是初级时考虑的该怎么做。此时的中级已具备了一定的权衡和优先级能力,能够批判性地思考解决特定问题的不同方法之间的权衡。
  • 可以预见技术/组织的阻碍因素,并通过尽早指出/解决风险来降低风险。
  • 给定一个抽象的问题陈述,可以将其分解成更小的具体部分并交付它们。
  • 成为一个快速学习者,并准备好在不熟悉的领域参与项目,有能力发现还没解决的问题
  • 能够考虑如何在初级和其他中级工程师完成工作的子部分时为他们提供支持。

怎么做

  • 锻炼软技能(即沟通、领导、一般人际交往能力、公开演讲等),乐于助人。随着时间的推移,技术技能会自然而然地形成。但为了继续提高职业生涯,以后将与非技术人员一起工作。了解如何用外行术语描述技术变化和方面,练习功能演示和文档撰写技能。学会以理性、冷静的方式通过来分类问题并设定期望。
  • 花时间了解你工作的整个系统,了解业务如何运作,而不仅仅是分配给你的一亩三分地。在大多数组织中,人们都呆在自己的小角落里,做自己的小事,不太关心他们左右发生的事情。这会导致效率低下并错失机会。
  • **思考和谈论功能问题,而不是思考和谈论具体的技术解决方案,**提出问题多于发表陈述,如客户为什么要求此功能?
  • 开始阅读源代码。这里并不是指的为了读而读,像为了应付面试那种可能过一阵子就忘了。需要结合实际问题去阅读,比如当在使用Spring框架的@Transactional注解时,发现加了该注解并没有回滚,就可以扒一下该注解的源码查询原因。
  • 解决其他开发者不愿意或无法解决的问题
  • 与比我了解更多“东西”的人一起工作或请教(找一名导师)。知道该什么请求别人的帮助也是门学问,可参考https://codewithoutrules.com/2017/12/07/asking-for-help/
  • 谦逊,善于接受建设性的批评,无论你的能力提高多少,你所知道的远远少于你所不知道的
  • 按时完成任务。即具备准确估计的能力,需要足够了解正在开发的系统,以了解陷阱和障碍,知道讨论手头的任务将花费多少时间。
  • 掌握使用的工具(如IDEA)及熟悉**命令行(CLI)**以及相关的通用系统/服务器。了解如何设置和管理服务器将使您在团队中更加有用
  • 大量编写代码和撰写博客,并将所有内容放在 GitHub 上,并尝试让人们为您的项目加注星标并关注您。学习为大型系统设计、架构和构建代码。
  • 创建有用的(和便携式的)工具
  • 学习独立工作的能力,获得从想法到发布的整个项目经验将非常有用。而且,你这样做的次数越多,它对你就越有用(特别是如果你改变了你所承担的团队/角色的类型)。
  • 加入一家小型初创公司(简单粗暴)