高级工程师的角色特征一直是个颇有争议的话题。从工作年限来划分,显然是不合适的。这篇文章写得非常好,清晰地讲明白了什么是“高级工程师”应该具有的品质。

软件工程师的成长阶段

Junior Developer 初级工程师

A good junior developer can be given a known task, and be expected to execute it quickly, and well.
优秀的初级工程师可以被分配一个可控的任务,并可以跟期望的一样,很快很好地完成任务。

初级程序员大多刚从学校里毕业出来工作。他们懂了很多知识,却在接触到现实工作问题的时候,马上意识到学校里学到的实在有限。初级程序员需要更多的指引、监督和辅导(mentoring),否则会长时间处于初级阶段而不能提升。这个阶段就是不断吸取经验,每日提升技能。

Intermediate Developer 中级工程师

A good intermediate developer needs less supervision. They can be trusted to raise issues of code design, and play a valuable role in design discussions. They are also the “workhorses” of the dev team. However, further mentoring and higher level supervision is still vital.
优秀的中级工程师需要极少的监督。他们可以提出代码设计中的问题,并在设计的讨论中扮演很有价值的角色。同时,他们也是开发团队里的“高产者”。然而,他们仍需要进一步的辅导和更高层次的监督。

中级工程师致力于寻求如何使用正确的方式构建系统的答案。他们会积累经验,阅读书籍,以及与其它工程师交流。初级工程师会做跟构建一堆算法相似的工作,而中级工程师则参考“设计模式”和“领域驱动设计”的书籍进行构建系统。尽管通过这些书籍学习了如何构建大型面向对象系统,但一些应用实例采用此类理论,将会导致过度工程化的系统在不重要的地方很灵活,很重要的地方却不够灵活。

Senior Developer 高级工程师

A senior developer is intimately familiar with their own failure.
高级工程师深谙他们遭遇失败的原因。

他们写过设计不足和过度设计的代码,并遭遇了由此引发的失败。他们反省自己所做,能够睿智真诚地评估处理问题时的成功和失败。高级工程师不再喜欢复杂,崇尚简单。

A senior developer stops classifying developers based on their knowledge, and instead understands that there is a spectrum of strengths and weaknesses.
高级工程师不会根据掌握的知识来评判开发者,而是明白每个人都有相对的优势和劣势。

他们比其他人更了解自己的优势和劣势,并尽量发挥自己的优势。

A senior developer thinks in terms of “context” when applying theory.
高级工程师在应用理论时,考虑背景和环境。

他们知道并没有绝对正确的方式去构建软件。构建好的软件唯一可行的方式就是让理论适应终端用户、代码库、团队、工具和组织的需求。

高级工程师很清楚在软件行业,所有的东西必须有所取舍,并在此基础上找到适合的设计模式、组件、框架和流程。

A senior developer thinks of more than just themselves. They are aware of how their organization and their clients work, what their values are, and what is both important and not important for success.
高级工程师会考虑很多超越自身的问题。他们会考虑自身组织和终端客户如何运作,各自的价值在哪里,以及双方都要获得成功所需的重要的和不重要的东西。

当有问题发生的时候,高级工程师总是尽力去解决问题。他们从来不会在出现问题的时候说“这不是我的工作”。

A senior developer will understand that this job is to provide solutions to problems, not write code.
高级工程师明白这份工作就是给问题提供解决方案,而不是写代码。

正因如此,高级工程师会权衡他们付出的努力与做这些事情为自身和客户带来的价值。当中级工程师埋头于枯燥工作的时候,高级工程师会退一步想导致工作很枯燥的问题的本质。他们会评估解决根本原因的成本,要么直接解决本质问题,要么齐心协力干掉枯燥的任务。

A senior developer understands that you cannot do everything yourself, and that their primary role is to help their team get better, in many of the same ways they themselves strive for personal improvement.
高级工程师明白个人所能做的有限,所以他们的首要工作是参考自身提升的经验,帮助团队成长。

A senior developer understands that leadership is not about power, it is about empowerment. It is not about direction, it is about serving.
高级工程师明白领导力不是权力,是授权。领导力不是指路,而是服务。

如果你的团队没有至少一位高级工程师承担领导角色,项目很可能会走向失败。如果你的团队全是中级工程师也可以推进工作,但是所构建的软件的生命力有限。结局无非是要么关闭软件,要么从成本和风险的角度考虑重写。高级工程师是唯一有能力去选择技术和平台的人,而不是那种从第一天就开始挖坑的人。