原文出处:如何定义和区分高级软件开发工程师

在软件开发领域,高级开发工程师通常是指那些编写代码超过3年的人。这些人可能会被放到领导的位置,但经常会产生非常糟糕的结果。Matt Briggs是一名高级开发工程师兼Scrum管理员。他认为,单纯使用年限来划分开发人员存在问题,两个同样具有10年开发经验的开发人员可能大不相同。近日,他发表了一篇博文,根据开发者所能发挥的作用划分软件开发工程师的成长阶段。

初级开发工程师

初级开发工程师通常是指那些刚刚结束学生生涯的开发者。他们以为自己什么都懂,但是面临问题时却又一筹莫展。他们不熟悉用到的工具,也不了解当前代码库。因此,他们需要监督,需要大量的培训和指导,否则可能几年过去了,他们仍然是初级开发工程师。

一名优秀的初级开发工程师应该能够快速完成他人分配的工作,并且保证质量。

中级开发工程师

中级开发工程师不像初级开发工程师那样只专注于代码,他们开始通过试验、文献和与其他程序员的讨论寻找构建系统的正确方式,也就是说他们会学习软件构建理论。

一名优秀的中级开发工程师不需要监督。他们可以自己提出代码设计的问题,并在设计讨论中发挥重要的作用。他们也是开发团队的主力。但是,他们在遵循“设计模式”和“领域驱动设计”等理论方法设计系统时,可能会出现过度设计的情况。因此,有必要对他们进行进一步的指导和更高层次的监督。

Briggs指出,绝大多数的高级软件开发工程师和团队负责人实际上都是中级开发工程师,只是大部分人都没有意识到这一点。

高级开发工程师

高级开发工程师抛弃了支配中级开发工程师的复杂性,追求简单至上。他们不再按照知识划分开发者,而是了解每个人的优势和不足。在理论运用方面,他们重视“上下文”,而不是一味地追求“正确方式”。他们知道,构建优秀的软件,唯一的方式是改造理论方法,适应客户、代码库、团队、工具和组织的需求,在设计模式、库、框架和流程之间寻找平衡。

高级开发工程师更多地为别人考虑,了解组织和客户如何工作,知道他们的价值所在。他们从来不会说“这不是我的工作”。他们的工作是提供问题解决方案,总是考虑他们的工作会为组织和客户带来什么价值,而不是他们会有多大的工作量。

中级开发工程师会钻研一些令人厌烦的工作,但高级开发工程师会退一步,看看是什么导致了这样的工作。他们会评估修复问题根本原因的成本,从而决定是直接修复,还是先让系统运行起来,后续再修复。

高级开发工程师清楚地知道,他们的主要作用是让团队变得更好。同时,他们也深知,领导不是权力,而是授权,不是命令,而是服务。

Briggs指出,如果团队没有高级开发工程师担任领导角色,那么项目注定要失败。高级开发工程师是唯一有资格选择技术和平台的人,因此,从项目开始的第一天起就应该有一个这样的人。

Briggs承认,这种划分方式过分简单,却也可以提供一些有用的信息。他建议,企业在招聘时要考虑团队和组织的人才构成。