技能树可视化

Author Avatar
zccz14 1月 21, 2017
  • 在其它设备中阅读本文章

关于自身的能力,很多地方都会提到一个词——技能树

技能树是指个人技能的集合,包含个人掌握的各项技能;同时强调其树形结构,有明显的归属关系;并且每个节点具有权值,致使父节点也具有一个权值;结构随时间变化,历史数据也具有参考价值,因此最好是一个可持久化数据结构。

现讨论其可视化形式,给人一个直观的感受。

表达形式

  • 表现个人技能的全集、偏好
  • 表现个人技能的专业度(Proficiency)
  • 表现个人技能的变更历史

技能变更

什么引起了技能的变更?

  • 时间流逝带来技能的衰退
  • 经常使用技能会变得熟练
  • 学习技能会开拓新的节点
  • 触类旁通能造成联动效应

借用 Redux 的理论,技能树是一个 Store,产生 Action 并经由 Reducer 改变 Store 的值。

每个 Action 都会使得我们构造出一个新的 Store,用可持久化数据结构去维护这个 Store 我们就得到了一个可以回滚的技能树。

既然技能树应该由 Action 经过 Reduce 得到,我们就应该只需要记录 Action 而由程序生成完整的技能树。

那么 Action 应该包含什么?

  • Action 产生的时间

    时间在技能树的历史参考中具有重要的意义。

    但是你可能不记得你之前经历过的事件的准确时间,甚至连是否经历过都已经遗忘。

    由此观之,人自身也有一个 Reduce 机制,如果我们不记录 Action,它们就会遗失。

    不过没关系,我们可以用一个等价 Action 来代替这些未观测的 Actions。

  • Action 的内容

    地点、人物、起因、经过、结果?加上时间就是“记叙文六要素”。

    没错,Action 就是记叙文。

    我们真的可以通过写记叙文,或者说日记的形式来跟踪我们的技能变更吗?

    可以,但很难。显然从自然语言书写的文章中处理分析出关键信息是比较困难的,涉及到自然语言处理的相关知识,但这里可以先保留这个机制接入的途径,而不讨论它具体的实现。这里相当于声明了 Action Creator 接口。

    方便实现的角度来看,我们更倾向于建立模式,用表单收集数据的方式,用户可以选择合适的表单,通过几个简明的表单项来创建一个 Action。这是上述 Action Creator 接口的一种简单实现。

    预先研究并定义 Action 的类型,然后采用固定的逻辑进行 Reduce。(Action Type 设计)

    例如:

    • 时间段 Timespan

      在一段较长的时间内,例如在某个公司任职或做某个项目时,可能高频率地使用某项技能。我们可以只在这段时间的开始与结束时创建 Action。这避免了我们每天都要记日记,有时忙起来还会忘记的窘境。

      从功能上说,我们可以据此分析个人某项技能的增长与衰退。

      具体使用什么模型来 Reduce 暂时待定,个人想法暂时比较简单,持续时间段的开始标志着相关技能自然衰退的停止,持续时间段的长度与相关技能的专业度的增量呈正相关……

    • 评测 Test

      例如测验、考试等评测事件,会对个人技能认知产生巨大的影响。而且现实是很多人也只能通过评测事件来了解自己的姿势水平。

      评测类 Action 可以被很容易地 Reduce,特别是给出分数的考试。

    • 反思 Reflection

      人类是一种能通过反思,不借助新的外界输入便能进步的生物。真是神奇,我坐在房间里,也没有阅读什么资料,凭空就想出了这篇文章。

    我们尽量避免对生活的过度记录,一方面过小的 Action 影响不大,另一方面记录本身太浪费时间反而降低了生活效率。另外多个小 Actions 完全可以等价代换成另外一个较大体量的等效 Action

记录 Action 流而不是直接提供技能树数据出于几个考虑:

  • 标准一致性

    通常你很难量化你的技能的专业度,凭感觉估计自己的专业度是一件很主观的事情。

    而利用 Action + Reduce 的机制我们可以站在一个相对客观的角度去评价自己。

    同时也降低了系统的耦合度,变更标准时只需要变更 Reducer 的实现即可。

  • 自动技能分解

    我们需要尽量地分解技能,又不至于过于琐碎,便于我们估计。

    类比项目管理中的 WBS 概念,这里也可以建立一个 SBS 技能分解结构的概念,它们的性质与功能是非常相似的。

    你可以手动分解你的技能,但我更倾向于直接从 Action 流中建立这个结构。

    手动目录与自动目录,你更喜欢哪个?