领域知识的不同层级分析
写在前面
俗话说,“活到老学到老”。对程序员而言,尤其如此;或者说的严重一点,程序员唯有此一条路。然而,无论是职场新人还是职场老手,能够坚持学习的人却凤毛麟角。一方面是因为坚持学习需要很强的毅力,而人有偷懒的劣根在;另一方面则是因为学习目标模糊,不知道该学什么,也不知道该怎么学。
如果把坚持学习看做一个习惯,如何培养这个习惯本文不做讨论,大家可以先自行思考;本文只尝试分析知识的层级,从而便于我们认清自己应该学习什么以及应该怎么学习。
知识的不同层级
假设任何领域的知识分为不同的层级。
(↑实践)
############################################################
L3 (domain knowlege) | L3-1 | L3-2 | | L3-3 | L3-4 |
#########################|##############|##|##############|#
L2 (practice knowledge) | L2-1 | | L2-2 |
############################################################
L1 (general knowlege)
###################################
L0(low-level knowledge)
###########################
(↓理论)
(某个领域的知识等级图)
L0 代表底层基础层,表示那些比较少涉及到的知识;L1 代表通用知识层,表示只要涉及当前领域的工作就需要掌握的基础知识;L2 代表实践层,这个层级的知识开始出现领域上的初步分化;L3 代表领域层,包含更为专业的领域知识。越往下面越偏向理论,越往上面越偏向实践。直白地理解,越往下越接近课堂里学习到的知识,越往上越接近工作中用到的知识。
作为一名编码者,理想情况下需要从 L0 到 L3 逐一训练自己的能力。但是在精力限制以及时间限制的情况下,无法顾全所有,只能有选择性地进行学习。
自己应该学习什么
在讨论知识的时候,庄子曾讲“吾生也有涯,而知也无涯”,那么多知识根本学习不完;这对于学习者来说算是一个坏消息。但是并不意味着放弃学习是一件睿智的选择(其实放弃学习是很愚蠢的选择),因为还有一个事实,解决工作上的实际问题并不需要所有的知识,有时候解决一个问题只需要掌握一小块知识就足够了;这对于学习者来说算是一个好消息。
自己应该学习什么?如果目前工作中需要某个技能,但是自己不具备这个技能,投入时间精力学习吧!如果自己未来的工作中(工作转型)需要某个技能,但是自己目前不具备这个技能,也投入时间学习吧!
如果自己不知道当前的工作需要哪个技能,也不知道自己未来的工作需要哪个技能,说明自己处于迷茫阶段,不妨尝试一些别的事情。对于非 IT 领域的同学,可以尝试学习一门编程语言;对于已经是 IT 领域的同学,可以尝试通读一下某个编程语言的手册文档;等等。
知识的分类(应该怎么学)
根据我的学习经历及工作经验,我发现基本上可以把知识分成下面几类:
- 死记硬背型的知识点(比如九九乘法口诀)
- 系统理论型的知识点(比如乘法竖列式)
- 一系列的知识点形成的领域栈只是(比如仅 python 技术栈包含了成百上千个知识点)
- 只有经历过才会有的知识(也就是一般所说的经验)
这四类里面,死记硬背型的知识点需要花费时间进行记忆,如果记忆力比较好短时间可以掌握;系统理论型的知识点主要凭借逻辑思维能力进行学习,如果理解能力好也可以短时间内掌握。但是接下来的领域栈知识和经验知识都需要时间上的打磨,尤其经验,没有时间上的积累几乎是不可能有成绩的。
如果读者朋友已结束学生时代并步入社会,或许已经意识到:很多聪明的小孩子认为凭借自己的聪明才智可以很容易地收获知识,从而不付出努力进行学习,这是一件愚蠢的行为。有的知识本就是耗精力耗时的性质,没有捷径真正掌握它。
如果确认了自己应该学习的领域栈,不遗余力地学习这个领域栈的知识点,然后想尽一切办法实践这些知识点吧!
小结
本文属于理论上的罗列,希望读者反思自己学习的过程,理解为何有的知识学起来简单而有的知识学起来那么难,同时希望读者反思所学内容对自己职业生涯的意义。