中级软件工程师资格证

软件开发人员的职业阶梯基本上由三个梯级组成:初级,中级和高级。 业界使用此术语来更好地理解和分配资格等级,以及确定薪资水平和职责。
了解开发人员的资历水平将有助于为特定工程师设定更准确的期望。 此外,这种区别不仅将改善内部沟通,还将增强客户和供应商之间的沟通,使所有交互更加有效。 通过区分这些职位,客户将更好地了解IT行业的能力水平。
在本文中,我们将根据以下标准分析软件开发人员的资历:技术知识,日常职责,独立工作,与团队的互动以及远见。
软件开发专业知识评估的方法
作为资历级别分析的一部分,我们将描述几种评估程序员专业知识的现有方法。 将它们应用于给定的等级将为软件开发的资历提供更广阔的视野。
技能获取的德雷福斯模型确定了获得和掌握技能的5个阶段。 安迪·亨特(Andy Hunt)在他的《 实用思维与学习:重构您的湿软件》中将Dreyfus模型应用于软件开发。 作者使用Dreyfus模型来构造在整个学习过程中发生的根本变化。 这使他可以并置不同阶段的程序员如何看待开发过程和方法问题,以及它们如何形成思维模型。

资料来源:实用思维与学习:安迪·亨特(Andy Hunt)重构您的垃圾软件
软件工程专业知识的七个阶段。 这是Meilir Page-Jones对软件工程专业知识进行分类的另一种方法。 分类将专业知识分为七个阶段,并以生产率为主要标准。 尽管最初在90年代用于评估软件工程,但是该方法可以轻松地重新应用到我们的现实中。

资料来源:Meilir Page-Jones撰写的软件工程专业知识的七个阶段
程序员能力矩阵。 程序员技能集的矩阵是由技术领导者Sijin Joseph开发的,他在设计和构建软件产品方面拥有超过15年的经验。 该矩阵具有三级结构,与初级-中级-高级角色分布相关。 该矩阵还包括0级,我们认为这等于一个见习级软件工程师。 我们将在描述每个资历级别的技术知识期望时参考此资源。

见习生:刚从学校毕业
一些公司设有实习计划,聘用入门级工程师,这些工程师基本上只具有理论知识,而没有工作经验。 在这种情况下,初学者的职位将为见习生。
应用Meilir Page-Jones的专业知识阶段,我们将开发人员职业生涯的这一早期阶段分为三个阶段: Innocent , Exposed和Apprentice 。
最初,工程师很少或根本没有接触过实际开发的经验。 暴露的开发人员以专业的方式迈出了编码的第一步。 最后,学徒已经具备了应对实际项目的最低限度的设备。
说到技术知识,受训人员主要限于使用IDE作为编码的文本编辑器,而没有利用其附加功能。 他们很少处理API,常常不得不查阅文档。 除了他们专门研究的核心平台之外,受训人员对任何框架都不熟悉,对数据库是什么只有模糊的认识。
初级开发人员:通过反复试验
作为初级开发人员很难进入,因为它们经常来来往往。 雇主倾向于雇用初级开发人员来从事自由职业者或短期合同,以期降低合同成本。
然而,大三学生的王牌是许多老年人不再拥有的动力和能量。 大三学生知道,他们投入的精力将使他们更快地进入下一个阶段,从而获得回报。
替代方法。 参考Dreyfus模型,我们可以将初级阶段分为两个阶段: 新手阶段和高级初学者 。
为了使一切顺利,新手开发人员需要通用的上下文无关规则。 由于急躁,他们希望立竿见影。 同时,由于错误不知道如何处理,因此错误会使它们瘫痪。
高级初学者开始遵循固定的规则,并根据所处理的类似情况制定通用原则。 主要问题是,他们可能忽略了更大的背景,也许认为这无关紧要。
使用Meilir Page-Jones的等级,我们可以将大三称为Practitioner 。 那就是当开发人员开始通过反复试验采用新技术并将其应用于公司项目时,其生产力得到充分提高的时候。
初级技术技能和职责
IDE。 初级用户使用任务栏导航界面并有效地操作IDE。
API。 他们知道如何处理最常用的API。
构架。 初级开发人员已经使用了一些框架,并了解了值得在其语言堆栈中使用的流行框架。
数据库开发。 三年级的学生知道数据库的基本设计技术,ACID属性和事务。 此外,初级人员可以编写简单的select语句以从数据库中检索信息。
编程语言。 初级开发人员通常熟悉一种编程语言。 他们将立即选择并实施一个半稳定的解决方案,以解决某些用例中的大多数问题。
平台和工具。 大三学生具有大约三个平台的专业经验。 他们对平台内部知识的了解很肤浅。 他们知道流行和标准工具的替代方法。
日常职责。 初级人员通常会完成最简单的任务,而这些任务对最终产品的影响很小。
初级团队合作和观点
独立工作。 当然,大三学生需要密切监督。 他们需要强有力的指导来提高自己的技能。
在团队中工作时,初级人员必须保持参与并从团队中吸收尽可能多的知识。
视力。 大三学生的问题是他们关注代码,而不关注开发。 这样可以防止他们了解大局。
中级开发人员:编程世界的主力军
具有三年以上经验的初级开发人员可以利用他们的技能成为中级专家。 中级开发人员有时被称为“编程世界的主力军”,它们对常规代码的影响最大。
替代方法。 Dreyfus模型将中间开发人员描述为Competent 。 在此阶段,他们还可以在故障排除和调试方面做得不错。
称职的程序员非常主动并且足智多谋。 他们在团队中担任领导角色,并可以指导新手。 但是,有能力的开发人员仍然缺乏在进行项目时优先关注其注意力的经验,并且他们几乎无法反思自己的错误。
就专业知识的七个阶段而言,我们可以将中级开发人员视为“ 旅人” 。 他们致力于提高技能并提高生产力。 服务员足够胜任,可以成为软件工程建议的来源。
中级技术技能和职责
IDE。 在使用IDE一段时间后,一名中级开发人员记住了大多数常用操作的快捷键,从而确实加快了工作速度。
API。 中级水平对主要API有深入而扎实的知识。
构架。 中间人精通技术,其框架有助于他们编写更清晰,更短的代码。
数据库开发。 中级擅长管理数据库。 他们可以设计标准化的数据库架构,同时考虑将要发出的查询。 中级开发人员精通使用数据库视图,存储过程,触发器和用户定义的数据类型(UDT)。 它们擅长用于在不兼容类型系统之间转换数据的对象关系映射技术(ORM)。 为了加快查询过程,他们应用了索引语法知识来创建自定义的聚集索引和非聚集索引。
编程语言。 中级开发人员了解功能编程,并且知道何时以及如何以任何语言应用功能概念。
平台和工具。 Middles已经与四个以上的平台合作,并且对平台如何执行功能(包括代码执行)有深入的了解。 他们对软件包管理器工具非常满意。
日常职责。 中级软件工程师通常不会承担高度复杂的任务,这些任务可能需要深入的工程知识。 同时,他们可能需要设计一部分应用程序,以准备进一步过渡到高级开发人员。 他们已经能够将票证转化为解决方案,提供任务估计并协助分解较大的工作部分。
中层团队合作和观点
独立工作。 在分配给相对常规的任务时,中层可以在较少的监督下完成工作。
团队合作。 Middles与团队成员(包括设计师,业务分析师和架构师)积极合作。
视力。 中级开发人员加深了对开发周期方案的理解,使他们可以更准确地实践敏捷方法。 他们了解出现问题的结果,并学习如何在将来避免这些问题。
邓宁-克鲁格效应
许多中级开发人员都受Dunning-Kruger效应的影响 ,这阻碍了他们进一步的职业发展。 这种心理现象描述了一点知识实际上可能是一件危险的事情。 由于自我保证,开发人员可能倾向于高估自己的技能,从而阻碍了他们的进步。 也就是说,这种情况是软件开发中的一个大问题。 尽管这种认知偏见可能发生在各个资历级别的工人上,但中产阶级最容易受到这种偏见的影响。
事实上,许多工程师无法比他们目前正在实施的方法和实践更好。 曾经有过一系列不成功的项目的程序员可能会相信,一个项目通常是一场噩梦。
在相反的情况下,软件工程师有时可能会意识到他们所了解的知识很少,还有很多东西需要学习。 那就是程序员开始向更高的资历过渡的时候。

图片来源: 初级开发人员: Amando Abreu, 您不再是初级
为了减少不正确的自我评估对技能获得和整体职业发展的影响,开发人员应通过扩展知识领域并收集企业不同部门的反馈意见,不断提高自己的能力水平。 他们应始终抽出时间反思自己的进步并得出正确的结论。
高级开发人员:问题解决者
具有深厚专业知识和详尽经验的开发人员,使他们可以指导同龄人,被称为资深人士。 此外,高级开发人员在他们所支持的业务领域中也很有知识。 他们的能力甚至可以扩展以帮助市场营销和整体业务发展。 高级开发人员将始终在考虑自己在做什么,从而为业务带来多少收益。
简而言之,他们的工作是为问题提供最佳解决方案。 实际上,一位长者正试图预见并解决问题。 作为解决问题的人员,长者必须事先考虑系统瓶颈,并牢记由不当使用工具引起的漏洞和问题。
在领导一个项目时,一位高级管理人员会根据该领域的最佳实践知识,对软件设计和实施做出明智的决策。
替代方法。 根据Dreyfus模型,资历可分为两个阶段: 熟练 (初级专家)和专家。
熟练的程序员取得了重大突破-他们能够反思自己的工作表现,分析错误并向他们学习以得出正确的结论。 通过利用反射和反馈,熟练的开发人员可以显着提高其性能。 这种方法是敏捷项目管理的核心。
现在,开发人员已经知道上下文是成为专家的关键。 因此,他们不遵守规则,而是执行各种方法来将其调整为特定的上下文。
专家是Dreyfus模型中的最高等级。 根据安迪·亨特(Andy Hunt)的说法,经过十多年的坚定实践,人们可以到达那里。 因此,专家是稀有物种。 这些高级开发人员将他们的专业知识转变为直觉。
专家将从其广泛的经验中汲取最佳实践,并具有不同的角色,技术和情况。
就七个软件工程专业知识阶段而言,该级别有两个: 硕士和研究员 。
硕士是一位熟练的技术人员和良好的指导者,具有深厚的方法论基础。 更重要的是,该开发人员了解产品背后的商业价值。
研究人员是高级开发人员,他正在从特定项目转向一般方法研究。 研究人员追踪软件工程技术中的缺陷以改善缺陷。 他们还寻求新的问题,以找到对解决这些问题有用的技术。
高级技术技能和职责
具有较高的技术技能,高级开发人员对多种技术很满意。 老年人应该以获取可转让的知识为目标,这将使他们能够识别和编写任何编程语言的良好代码。 这些知识还有助于适应不断变化的技术。
IDE。 年长者的专业知识使他们能够编写自定义宏来优化工作流程。
API。 大四学生编写了库,以添加更多功能或使最常见的流程自动化,而无需为其编写代码。
构架。 老年人有足够的知识来建立自己的自定义框架。
数据库开发。 一位资深的人精通数据库管理,性能和索引优化。 通常,它们会做复杂的工作,组成高级选择查询。 由于老年人从内部了解给定的数据库结构,因此他们熟悉数据库维护功能,尤其是数据库镜像和数据库复制。 这些是将数据从主数据库传输到辅助数据库的方法。 年长者了解用于协调分布式事务(提交/中止) 的两阶段提交算法(2PC )。 在可能的情况下,它们可以用效率更高的JOIN语句代替基于游标的慢速操作。
编程语言。 除了功能编程和OOP外,它们还与并发和逻辑语言(例如,Erlang和Prolog)一起使用。
平台和工具。 老年人在6个以上平台上拥有专业经验。 他们已经在创建调试器或其他增强平台所需的工具。 年长者是有关平台内部的源建议。
日常职责。 多方面的责任远远超出了编码范围。 老年人为复杂的问题集思广益,寻求正确的技术解决方案。 他们负责团队,协调其工作流程以持续产生业务价值。
高级团队合作和观点
独立工作。 前辈是提供指导的人。
前辈把团队放在第一位,并且一直在努力弄清楚他们可以做什么来帮助成员。 他们在客户和团队之间保持平衡的同时具有良好的软技能。
视力。 老年人看到了最终目标-完成的应用程序必须解决的问题。 长远的眼光是为最终用户带来价值的关键。

高级开发人员之后会怎样?
高级开发人员是梯子上另一个梯级的良好起点。 一些前辈想升任更多技术职位,另一些人更喜欢担任管理职位。 以下是高级人士可能考虑采用的一些选择。
建筑师。 这是技术职业阶梯上的最高等级。 架构师的工作是设计复杂的系统,该系统将由高级和初级开发人员团队实施。 根据业务问题的重点,有企业,技术和解决方案架构师 。 您可以在我们的专用文章中阅读更多内容。
产品经理 。 具有编码经验的产品经理会更轻松地领导产品交付。 他们从内部了解开发过程,就能更加有效地管理产品上的工作。
高级领导。 高级领导者的工作与编程无关,而与人的技能有关:鼓舞,激励,领导和制定策略。 在制定决定公司发展方向的高层决策时,高级领导者应确保所有员工都遵循这些决策并相信使命。
影响资格水平的外部条件
在定义开发人员的资历级别时,重要的是要考虑以下对等级有实质性影响的可变因素。
技术栈。 在机器学习方面 ,可以是专家,但在Web开发中仍处于中级水平。 同时,开发人员甚至可以成为许多其他领域的初级人员。
项目。 一个项目可以水平和垂直扩展,这需要不同的技能和专业知识。
组织。 招聘组织的特征也应考虑在内。考虑公司的规模和他们为候选人设定的个人要求。 较小的企业通常会寻找具有广泛技能和责任的专家。 例如,较小企业的工程师可以负责产品开发和部署。 相比之下,大型组织可能需要高度专业的专业知识,例如将与某种自动化工具一起使用的DevOps生命周期特定阶段的工程师。
而且,每个组织对这些术语都有自己的含义。 因此,根据工作场所的不同,两个高级程序员可能彼此非常不同。 《卫报》数字开发团队的高级开发经理罗伯特·里斯(Robert Rees)对此评论道:“ 在招聘时,我们需要向我们以及公司外部人员解释高级开发人员的含义。 有时,我们也很难向目前拥有“高级开发人员”头衔的人们解释为什么我们不认为他们是《卫报》的高级开发人员。”
选择适合您项目的专业知识的开发人员的提示
与就业有关的一个重要问题是,这项或这项任务需要什么专业知识。 如果您对满足您的项目的能力水平只有一个抽象的想法,雇用开发人员通常会很乏味。 以下是一些有用的提示,它们将帮助您浏览整个招聘过程,从而为您提供正确的选择。
- 对项目目标有一个清晰的了解,并对达到该目标所需的专业知识有基本的了解。
- 考虑您可支配的时间和预算。 大三学生需要更多时间进行培训,而大三学生并不需要太多的准备,而是会立即开始贡献自己的力量。 但是,这样的员工将变得更加昂贵。
- 专注于团队和组织人才的组成。 从第一天开始,由高级开发人员担任领导角色是组织工作流程的必要条件,因为只有高级人员才有资格为项目选择合适的技术和平台。
- 停止根据职称招聘。 拥有头衔不同于拥有成功胜任工作所需的技能和能力。 在成为高级开发人员的过程中积累的经验比获得的头衔要重要得多。 因此,为了使现有角色有意义,我们必须抵制职务膨胀。
最初发布在AltexSoft技术博客上 “ 软件工程师资格等级:初级,中级和高级 ”
翻译自: https://hackernoon.com/software-engineer-qualification-levels-junior-middle-and-senior-f2229591df1c
中级软件工程师资格证