软件开发人员的职业阶梯基本上包括三个层次:初级、中级和高级。行业应用这个术语来更好地理解和分配资格的程度,以及确定工资水平和职责。
了解开发人员的资历级别将有助于为特定的工程师设定更准确的期望。此外,这种区别不仅会改善内部沟通,也会加强客户和供应商之间的沟通,使所有的互动更加有效。通过区分这些职位名称,客户可以更好地了解IT行业的能力水平。
在本文中,我们将根据以下标准来分析软件开发人员的资历:技术知识、日常职责、独立工作、与团队的交互以及远景。
软件开发中的专业知识评估方法
作为资历级别分析的一部分,我们将描述几种现有的评估程序员专业技能的方法。将它们应用到给定的级别将提供一个更广泛的软件开发中资历的视角。
技能习得的Dreyfus模型(The Dreyfus model of skill acquisition )
确定了获得和掌握技能的5个阶段。Andy Hunt在他的书《实用思考与学习:重构湿件》( Pragmatic Thinking and Learning: Refactor Your Wetware)中将Dreyfus模型应用到软件开发中。作者使用Dreyfus模型来构建在整个学习过程中发生的根本变化。这使他能够并列出不同阶段的程序员如何看待开发过程和解决问题,以及他们如何形成心理模型。
德雷福斯模型的五个阶段说明了从新手到专家过程中最重要的变化
资料来源:《实用思考与学习:重构你的湿件》,作者:Andy Hunt
软件工程专业知识的七个阶段。
这是Meilir Page-Jones对软件工程专业知识进行分类的另一种方法。这一分类将专业知识分为七个阶段,并将生产力作为关键标准。尽管在90年代最初用于评估软件工程,但这种方法可以很容易地重新应用到我们的现实中。
效率曲线
来源:Meilir Page-Jones的《软件工程专业知识的七个阶段》
程序员能力矩阵。
这个程序员技能集矩阵是由Sijin Joseph开发的,他是一位在设计和构建软件产品方面拥有超过15年经验的技术领导者。矩阵有一个三级结构,这与初级-中级-高级角色分布相关。这个矩阵还包括0级,在我们看来,这相当于一个培训生级别的软件工程师。在描述每个资历级别的技术知识期望时,我们将引用这个来源。
实习(Trainee):刚从学校毕业
一些公司有实习项目,他们招收基本只有理论知识、没有工作经验的初级工程师。在这种情况下,初学者的职称将是见习生。
根据Meilir Page-Jones的经验,我们将开发者职业生涯的早期阶段分为三个阶段:天真、暴露和学徒(Innocent, Exposed, and Apprentice)。
最初,工程师很少接触到真正的开发。公开的开发人员向以专业的方式编码迈出了第一步。最后,一个学徒已经基本具备了处理实际项目的能力。
谈到技术知识,受训人员主要局限于使用IDE作为文本编辑器进行编码,而没有利用IDE的附加功能。他们很少处理API,经常需要查阅文档。除了他们所擅长的核心平台之外,学员们对任何框架都不熟悉,对数据库也只有一个模糊的概念。
初级开发人员:通过试验和错误
作为一名初级开发者,你很难迈出第一步,因为他们经常来来往往。为了降低合同成本,雇主倾向于以自由职业者或短期合同的形式雇佣初级开发者。
尽管如此,初级员工的王牌是激励和活力,而许多高级员工已经不具备了。年轻的人知道他们付出的努力会得到回报,因为他们能更快地进入下一个阶段。
替代方法。参照Dreyfus模型,我们可以将初级阶段分为新手和高级初学者两个阶段。
为了让游戏顺利进行,新手开发者需要通用的与上下文无关的规则。他们没有耐心,想要立竿见影的效果。同时,错误也会使他们瘫痪,因为他们不知道如何处理错误。
高级初学者从遵循固定的规则开始,根据他们处理过的类似情况制定出一般的原则。主要的问题是,他们忽略了更大的背景,也许认为它无关紧要。
使用Meilir Page-Jones的分级,我们可以指一个初级执业者。当开发人员开始通过试验和错误采用新技术并将其应用于公司项目时,他们的生产力就会充分提高。
初级技术技能和职责
方面 | 能力 | 备注 |
IDE | 低级用户使用任务栏浏览界面并有效地操作ide | |
API | 他们知道如何处理最常用的API | |
框架 | 初级开发者使用过一些框架,并知道哪些流行的框架值得在他们的语言堆栈中使用。 | |
数据库开发 | 初级人员了解DB的基本设计技术、ACID属性和事务。此外,初级用户还可以编写简单的select语句来从数据库中检索信息。 | |
编程语言 | 初级开发人员通常只熟悉一种编程语言。他们会立即选择它,并实现一个半稳定的解决方案,解决某些用例中的大多数问题。 | |
平台和工具 | 初级开发人员有三种平台的专业经验。他们对平台内部结构的了解只是肤浅的。他们知道流行和标准工具的替代品。 | |
日常的职责 |
初级员工通常会得到最不复杂的任务,那些对最终产品影响很小的任务。 初级团队精神和视角 |
初级开发者的团队合作和视角
独立工作 |
当然,下级需要被密切监督。他们需要强有力的指导来提高他们的技能。 在团队中工作,初级员工必须保持专注,并从团队中吸收尽可能多的知识。 |
|
团队合作 | ||
愿景 | 初级程序员的问题在于他们关注代码,而不是开发。这阻碍了他们对大局的把握。 |
中级开发人员:编程世界的主力
拥有3年以上经验的初级开发者可以利用自己的技能成为中级专家。中级开发人员有时被称为“编程世界的主力”,他们用例程代码提供了最具影响力的功能。
替代方法。德雷福斯模型将中间开发者描述为称职的。在这个阶段,它们还可以很好地进行故障排除和调试工作。
有能力的程序员有高度的主动性和足智多谋。他们在团队中扮演领导角色,并能指导新手。然而,有能力的开发者仍然缺乏经验,无法在项目中优先考虑他们所关注的焦点,他们几乎无法反思自己的错误。
根据专业知识的七个阶段,我们可以认为中级开发人员是熟练工。他们努力磨练自己的技能,提高生产力。熟练工的能力足以成为软件工程建议的来源。
中级开发者技术技能和职责
方面 | 能力 | 备注 |
IDE | 在使用IDE一段时间之后,中间开发人员已经记住了大多数常见操作的快捷键,从而真正加快了工作。 | |
API | 中级水平人员对主要API有深入而扎实的知识 | |
框架 | 中间用户精通各种框架,这些框架可以帮助他们编写更清晰、更短的代码。 | |
数据库开发 | 中级学生擅长管理数据库。他们可以设计规范化的DB模式,同时考虑将发出的查询。中间开发人员精通使用数据库视图、存储过程、触发器和用户定义的数据类型(UDT)。他们擅长对象-关系映射技术(ORM),该技术用于在不兼容的类型系统之间转换数据。为了加快查询过程,他们应用索引语法的知识来创建自定义的聚集索引和非聚集索引。 | |
编程语言 | 中级开发人员了解函数式编程,知道何时以及如何在任何语言中应用函数概念。 | |
平台和工具 | 中级开发者已经在四种以上的平台上工作过,并且对平台的功能(包括代码执行)有深刻的理解。他们对自己的包管理器工具非常满意。 | |
日常的职责 |
中级软件工程师通常不会被委托承担可能需要深入工程知识水平的高度复杂的任务。与此同时,他们的任务可能是设计应用程序的一部分,为进一步过渡到高级开发人员做准备。它们已经能够将票据转化为解决方案,提供任务评估,并协助分解工作的更大部分。 |
中级开发者的团队合作和视角
独立工作 | 在被分配到相对常规的任务时,中层员工可以在较少的监督下完成工作。 | |
团队合作 | 中间派积极与团队成员合作,包括设计人员、业务分析师和架构师。 | |
愿景 | 中间开发人员已经加深了他们对开发周期场景的理解,这使他们能够更准确地实践敏捷方法。他们看到问题发生的结果,并学习如何在未来避免这些问题。 |
达克效应
许多中级开发者都受到了达克效应的影响,这阻碍了他们职业生涯的进一步发展。这种心理现象描述了掌握一点知识实际上是多么危险的事情。因为自信,开发人员可能会高估他们的技能,这阻碍了他们的进步。也就是说,这种情况是软件开发中的一个大问题。虽然这种认知偏差可能发生在各个级别的员工身上,但中层员工最容易受到这种偏差的影响。
事实上,许多工程师无法描绘出比他们目前正在实施的方法和实践更好的方法和实践。有过一系列失败项目的程序员可能会屈服于这样的信念:一个项目通常都是一场噩梦。
在相反的情况下,有时软件工程师可能会意识到他们知道的很少,还有很多东西需要学习。这就是程序员开始向更高级别过渡的时候。
Dunning-Kruger效应对开发者的影响取决于他们的资历和知识。
为了减少不准确的自我评估对技能获取和整体职业发展的影响,开发人员应该通过扩展他们的知识领域和从业务的不同部分收集反馈来不断提高他们的能力水平。他们应该总是找时间反思自己的进步,得出正确的结论。
高级开发人员:问题解决者
拥有深厚专业知识和详尽经验的开发人员可以指导他们的同事,他们被称为资深人员。此外,高级开发人员在他们所支持的业务领域也有丰富的知识。他们的能力甚至可以扩大,以帮助市场营销和整体业务发展。高级开发人员总是会考虑他们所做的工作给业务带来了多少好处。
简而言之,他们的工作就是为问题提供最好的解决方案。实际上,一个高年级开发作者正在试图预见问题并在它发生之前解决它。作为一个问题解决者,senior必须提前考虑到系统的瓶颈,并时刻记住工具使用不当造成的漏洞和问题。
在领导一个项目时,一个资深的人会根据该领域的最佳实践知识做出合理的关于软件设计和实现的决策。
替代方法。根据Dreyfus模型,资历可分为熟练(初级专家)和专家两个阶段。
熟练的程序员会取得重大突破——他们能够反思自己的工作表现,分析错误,并从中吸取教训,得出正确的结论。通过利用反射和反馈,熟练的开发者可以显著提高自己的表现。这种方法是敏捷项目管理的核心。
现在开发人员知道上下文是成为专家的关键。因此,他们不是严格遵守规则,而是实现各种方法来调整它们以适应特定的环境。
专家是德雷福斯模型中最高级的。根据安迪·亨特的说法,一个人可以通过超过10年的艰苦而坚定的练习达到这个目标。因此,专家是一种罕见的物种。这些高级开发人员已经将他们的专业知识转化为直觉。
专家们从他们对不同角色、技术和情况的广泛经验中直观地了解最佳实践。
就软件工程专业知识的七个阶段而言,这个层次有两个阶段:硕士阶段和研究员阶段。
师傅是一名熟练的技术人员和优秀的教师,有深厚的方法论基础。更重要的是,该开发人员了解产品背后的业务价值。
研究员是高级开发人员,从一个特定的项目转向一般的方法研究。研究人员追踪软件工程技术中的缺陷并加以改进。他们也寻求新的问题,以找到解决这些问题的方法。
高级的技术技能和职责
拥有较高的技术技能,高级开发人员能够熟练使用多种技术。老年人应该以获得可转移的知识为目标,使他们能够识别和编写任何编程语言的优秀代码。这一知识也有助于适应不断的技术变化。
方面 | 能力 | 备注 |
IDE | 高级开发者的专业知识允许他们编写自定义宏来优化工作流 | |
API | 高级职员已经编写了一些库来添加更多的功能,或者自动化最常见的流程,而不需要为它们编写代码。 | |
框架 | 有足够的知识建立自己的自定义框架。 | |
数据库开发 | 高级职员精通数据库管理、性能和索引优化。通常,它们会做一些精细的工作,如组合高级选择查询。由于老年人从内部了解给定的数据库结构,他们熟悉数据库维护特性,特别是数据库镜像和数据库复制。这些是将数据从主数据库传输到辅助数据库的方法。前辈们理解用于协调分布式事务(commit/abort)的两阶段提交算法(2PC)。在可能的情况下,它们可以用更高效的JOIN语句代替缓慢的基于指针的操作。 | |
编程语言 | 除了函数式编程和面向对象编程,它们还可以使用并发语言和逻辑语言,例如Erlang和Prolog。 | |
平台和工具 | 资深人士有6个以上平台的专业经验。他们已经创建了必要的调试器或其他工具来增强平台。资深人士是平台内部的来源建议。 | |
日常的职责 |
多方面的责任远远超出了编码。高级开发者集思广益,想出解决复杂问题的正确技术方案。他们负责团队,协调其工作流程以持续产生业务价值。 |
高级开发者的团队合作和视角
独立工作 | 高级开发者是提供指导的人。 | |
团队合作 | 高级开发者把团队放在第一位,总是试图找出他们能做什么来帮助成员。他们有良好的软技能,同时在客户和团队之间保持平衡。 | |
愿景 | 高级开发者看到了最终的目标——完成的应用程序必须解决的问题。长期愿景是为最终用户带来价值的关键。 |
高级开发人员之后是什么?
高级开发者是晋升阶梯上的一个很好的起点。一些高级开发者想要进入更多的技术岗位,另一些则更喜欢管理岗位。以下是一些高级开发者可以考虑转岗的选择。
- 架构师。这是技术职业阶梯上的最高级别。架构师的工作是设计将由高级和初级开发人员组成的团队实现的复杂系统。根据业务问题的重点,有企业架构师、技术架构师和解决方案架构师。你可以在我们专门的文章中了解更多。
- 产品经理。一个有编码经验的产品经理将更容易领导产品交付。从内部了解开发过程,他们将能够更有效地管理产品工作。
- 高级领导人。高级领导的工作与编程几乎没有关系,而全是与人打交道的技能:激励、激励、领导和制定战略。在做出决定公司方向的高层决策时,高级领导要确保所有员工都遵循这些决策,并相信公司的使命。
影响资格等级的外部条件
在定义开发人员的资历级别时,重要的是要考虑以下显著影响级别的可变因素。
- 技术堆栈。在机器学习方面,一个人可以成为专家,但在web开发方面只能保持中级水平。与此同时,开发人员甚至可以在许多其他领域成为初级开发人员。
- 项目。一个项目可以水平扩展,也可以垂直扩展,这需要不同的技能和专业知识。
- 组织。招聘组织的特点也应该考虑在内。考虑公司的规模和他们为候选人设定的个人要求。小型企业通常会寻找拥有更广泛技能和职责的专家。例如,小型企业的工程师可以同时负责产品开发和部署。相比之下,一个更大的组织可能需要高度专业化的专业知识,比如DevOps生命周期的特定阶段的工程师,他们将使用特定的自动化工具。
此外,每个组织对这些术语都有自己的含义。因此,根据工作场所的不同,两个高级程序员可能是非常不同的。《卫报》数字开发团队的高级开发经理Robert Rees对此评论道:“在招聘时,我们需要向自己和组织外的人解释什么是高级开发人员。有时候,我们也有一项困难的工作,就是向那些目前拥有“高级开发者”头衔的人解释为什么我们不认为他们是《卫报》的高级开发者。”
关于为您的项目选择具有正确专业知识的开发人员的技巧
与就业有关的一个重要问题是这项或那项任务需要什么专业知识。如果您对能够满足您的项目的能力水平只有一个抽象的概念,那么雇用一个开发人员通常会很乏味。以下是一些有用的建议,可以帮助你在招聘过程中找到正确的选择。
有一个清晰的项目目标,并对实现该目标所需的专业知识水平有一个基本的了解。
考虑你可以支配的时间和预算。虽然初级员工需要更多的时间进行培训,但高级员工不需要太多的提升,并且会立即开始做出贡献。然而,雇用这样的员工要贵得多。
关注团队和组织人才构成。从第一天起就让高级开发人员担任领导角色是组织工作流程的必要条件,因为只有高级开发人员才完全有资格为项目选择合适的技术和平台。
停止根据职位招聘。拥有头衔与拥有在工作岗位上取得成功的技能和能力是不同的。一个人在成为高级开发者的过程中所积累的经验比获得的游戏更重要。因此,为了保持现有的角色有意义,我们必须抵制头衔膨胀。
本文:http://jiagoushi.pro/node/1458
讨论:请加入知识星球【超级工程师】或者小号【It_training】或者QQ群【11107767】
- 登录 发表评论
- 677 次浏览
最新内容
- 1 week 1 day ago
- 1 week 1 day ago
- 1 week 1 day ago
- 1 week 1 day ago
- 1 week 1 day ago
- 2 weeks ago
- 2 weeks ago
- 2 weeks 3 days ago
- 2 weeks 3 days ago
- 2 weeks 3 days ago