背景
这些年一直在做对外的敏捷开发培训,也就是针对其他企业的开发人员进行敏捷全栈开发培训,经过培养之后期望这些开发人员能快速胜任工作。
但是由于大部分的培训最终产出物可能都是一些评价或者一个分数,它并不能很好的反应一个人的能力情况,也不能帮助培训者或者企业更好的识别每个人的能力。
因此,经过多次迭代,归纳总结出了一个针对开发岗的能力识别模型,目的是能够帮助培训者和企业更好的识别他们的能力分布。
能力识别模型是什么
能力识别模型是一个包含4种能力,32种抽象行为的一个模型。
用于识别开发岗的开发人员的各纬度能力分布。
4种能力分别是:
- 技术能力
- 学习能力
- 理解能力
- 沟通能力
每种能力对应了8种抽象的相关行为,共32种行为。
下面就展开详细说一下。
技术能力
顾名思义,技术能力就是指和开发技术相关的各种能力。
它包含的下面8种抽象行为指的是他/她会在过程中使用到或者被观察到能体现这些行为的facts或事实。
1 - 验收思想
验收思想指的是做事情或者编码时能考虑到如何验收。
比如写测试是一种验收,tasking时标明输入和输出是一种验收。
2 - 代码设计
代码设计指的是写代码的时候有代码设计。
比如使用设计模式,比如在Java里面使用stream API,比如有良好的OO设计,比如遵守了SOLID原则。
3 - 独立编码
独立编码指的是能独立编写代码。
比如独立完成Java编程,独立完成react编程,独立完成python编程等。
4 - 整洁代码
整洁代码指的是编写的代码满足clean code。
比如没有明显的坏味道等。
5 - 完成任务
完成任务就是指的能按时合格完成任务。
比如按时合格完成编程练习,比如按时合格完成非技术的画图工作等。
6 - 解决问题
解决问题指的是能解决遇到的各种问题,包括技术问题,非技术问题等。
比如能使用debug修复遇到的bug,比如能通过看日志或者搜索等解决遇到的技术问题。
7 - 利用资源
利用资源指的是能利用一切资源来完成任务。
比如向教练求助,向同学同事提问,上网搜索,使用工具等都属于利用资源。
8 - 探索新技术
探索新技术指的是自己能探索一些新的技术,包括框架,工具,算法等。
比如学习了某种新算法,研究了某个新工具或者新框架,比如没接触过Jenkins但自己研究了如何使用Jenkins,比如没写过python但学习python解决了某个问题。
学习能力
顾名思义,学习能力就是通过不断学习来完善自身的能力。
它包含的下面8种抽象行为指的是他/她会在过程中使用到或者被观察到能体现这些行为的facts或事实。
1 - 迭代思想
迭代思想指的是做任何事情都能小步快跑,迭代式的完成任务。
比如写代码的时候能够小步提交,比如做项目时能迭代开发。
2 - 遵循最佳实践
遵循最佳实践指的是做任何事情都能遵循最佳实践。
比如遵循重构的最佳实践,比如遵循code review的最佳实践,比如遵循TDD的最佳实践,比如遵循站会的最佳实践。
3 - 从他人身上学习
从他人身上学习指的是能学习他人的优秀的技术、习惯和思想。
比如会向他人请教如何做代码设计,比如能学习别人是如何组织站会的,比如code review时能学习别人更好的代码实践。
4 - 每日总结
每日总结指的是每天都能坚持总结一天的所得和所缺,类似于一个人的retro,来帮助自己回忆所学和改善不足。
比如每日会写总结日志,比如每次获得新知识会记笔记,比如经常写博客。
5 - 执行力
执行力指的是完成预定目标的操作能力。
比如code review之后马上就能重构自己的代码,比如获得任务之后马上就能开始计划,比如执行任务的时候没有拖延症。
6 - 优先级
优先级指的是做任何事情都能分清优先级,优先完成优先级高的任务或者环节。
比如做项目的时候能优先完成核心功能而不是选择自己喜欢的功能做,比如编码的时候能优先完成核心功能而不是纠结某个非核心算法。
7 - 工作习惯
工作习惯指的是有良好的工作习惯。
比如编码时能使用快捷键提高工作效率,比如能使用自动化流程来提高效率。
8 - 持续改进
持续改进指的是每天都会根据反馈或者自己总结而持续不断的改进自己的各方面能力。
比如重构就是一种持续改进,比如不断改善站会体验就是一种持续改进,比如额外练习自己不熟悉的编程技术也是一种持续改进。
理解能力
理解能力是一种比较综合的能力,它包含了多种综合行为。
把理解能力拆解一下,也包含了下面8种抽象的行为。
1 - 任务分解
任务分解指的是做事情之前会先tasking,或者会把复杂的任务先列出执行步骤。
比如TDD时先做tasking,比如要调研一个复杂技术时先理清要调研的每个步骤。
2 - 接受反馈
接受反馈指的是能接受他人基于事实的反馈并改进。
比如code review时别人对代码提出的更好的建议能接受并重构。
3 - 需求澄清
需求澄清指的是拿到任务或者需求时都能先做需求澄清,避免产生二义性。
比如做编程练习的时候能澄清所有模糊的描述,而不是自己想象应该是什么样的需求。比如设计功能的时候能和用户以及团队讨论功能需求而不是自行决定。
4 - 理解需求
理解需求指的是能理解每次练习的需求,能理解别人的提出的需求。
比如编程结果里面没有偏离需求的实现。
5 - 发现他人的问题
发现他人的问题指的是能发现他人代码中的问题,或者敏捷实践中的问题。
比如能发现他人代码中不合适的命名,比如能发现他人代码中的逻辑错误,比如能发现他人在敏捷活动中的错误实践。
6 - 理解新知识
理解新知识指的是能理解学到的所有新知识,包括技术知识,敏捷知识以及业务知识。
比如能理解新框架的使用方式,比如能理解新工具的使用场景,比如能理解新的敏捷活动的最佳实践。
7 - 版本管理
版本管理指的是会使用GIT等版本管理工具,并提交有意义的commit。
比如git commit的描述清晰记录了团队要求的所有信息。比如在创建数据库时也会使用数据库版本管理工具。
8 - 业务命名
业务命名指的是在代码中或者故事卡中,都能使用有业务意义的名字。
比如不会出现技术命名,或者毫无含义的命名。比如能在所有编程场景中统一语言。
沟通能力
沟通能力指的是沟通、表达、团队协作等软实力相关的能力。
它同样包含了下面8种抽象行为。
1 - 提供帮助
提供帮助指的是在团队中能积极主动的向团队提供支持或帮助。
比如帮助团队攻克技术难题,比如帮助成员fix某个bug,比如主动承担某个任务。
2 - 积极讨论
积极讨论指的是能积极参与团队的讨论和决策。
比如code review的时候能积极的参与讨论,比如需要某个决定的时候能积极说出自己的想法。
3 - 团队协作
团队协作指的是能积极促进团队正向的成长和前进,体现自己的协作精神。
比如能互相激励完成某个任务,比如能共享资源来帮助团队沉淀知识,比如能取长补短帮助团队前进,比如能组织管理团队的相关事务。
4 - 有效对话
有效对话指的是能在和别人的沟通中产生有效对话。
比如没有多余的废话,或者不会出现沟通完之后依然没有得到答案。
5 - 回答问题
回答问题指的是在工作和学习中能积极的回答问题。
比如教练问的问题,同学同事提的问题等。
6 - 寻求帮助
寻求帮助指的是在遇到困难的时候能积极的寻求帮助,而不会因为个人原因阻碍团队或者项目的前进。
比如遇到不懂的编程问题就直接提问,比如遇到不懂的知识就提问,比如遇到解决不了的技术难题就寻求他人或者网络的帮助。
7 - 给出反馈
给出反馈指的是能在团队中积极的给他人反馈,帮助他人成长,帮助团队成长。
比如在code review中指出他人的代码坏味道,比如在团队活动中给他人给出反馈帮助他人成长。
8 - 分享
分享指的是能积极分享自己的想法或者技能。
比如在站会中分享业务,在code review的时候分享自己学的新技术等。
如何使用能力识别模型
能力识别模型可以被设计成一个二维表格,每种能力对应8种行为,每种行为有1-10分,每种行为默认每个人都具备这些能力,所以默认5分。
如果该行为主动做到所有人中的最好就是10分,如果该行为没有做到或者做得不好就相应扣分。
同时,每种行为都需要观察记录facts,基于事实来支撑打分。所以它大概会长下图的样子。
根据这些数据,最终就可以生成这样一张直观的能力雷达图。
通过雷达图我们就可以直观的看到每个人在不同的能力纬度上的优势和不足,以更有针对新的帮助这个人的成长。
有了这些数据,还可以从多维度去对比不同的人之间的能力差异,获取不同的数据视图,帮助团队更好的定位人才的发展。
未来
这个能力识别模型并不是完美的,它还需要不停的迭代优化,适配各种不同场景的抽象行为。
它目前只是用于帮助企业了解开发人员的一种可视化形式。
未来,有了这个能力识别模型,可以根据不同团队的需要,生成不同的数据视图,来辅助团队的发展。
最后,如果对于这个能力识别模型有任何想法或者建议,欢迎与我讨论。