快速成长的必备软技能12————知识体系
工作以后,相比在学校系统学习,我们现在接触的信息大多都是碎片化的,对自己掌握了什么技术,我们并没有清晰的了解。
而且根据我多年观察,即使是一些平时工作很认真的人,都没有去好好整理过自己的知识体系,这很可惜。
在我日常工作中,经常会遇到要教新人的情况,每一次带一位新人,我都会要求他/她做这样几件事情。
1. 首先,我会请他用图解的方式,画一下自己会哪些技术;
我第一次跟新入职的同学沟通时,可能最开始往往得到的是一堆的技术名词。
2. 然后,跟他深入聊几个常见问题,比如下面这些问题:
用谷歌浏览器打开一个登录页面,输入用户名、密码,当用鼠标点击登录按钮时,究竟发生了什么?
如何自己做一个框架,去实现 Spring Boot、Flask 或 WCF 等相关功能;自己平时用框架有没有不爽的地方,想要如何改进它?
找一个大家都熟的业务场景,聊一聊如何在技术或非技术层面进行改进……
聊到这里,就会有比较大的差距了,有些能讲很久,但更多的时候遇到的是点状输出,无法整理出脉络。
这个时候,我会根据小伙伴自己的技术栈,帮他 / 她搭一个简单的体系框架,把上面的技术名词归类放好。
然后,对于重点关注的层,还可以进一步展开,直到聊到这位同学的知识边界。
3. 在技术上,我还会问问他,后续的学习发展计划是怎样的,自己想学什么,优先要学什么?
这个时候,我会把同学自己整理的图和可信度高的资料进行对比,根据对比,摘取自己需要的内容,对自己的图进行补充。
这样,你自己的知识体系就有了雏形。接着,对于自己要重点学的内容,进一步展开,比如说,对于锁这个知识点,可以这样拆分:
乐观锁、悲观锁
公平锁、非公平锁
重入锁、不可重入锁
自旋锁、非自旋锁
独享锁、共享锁、读写锁
分段锁、行锁、表锁
分布式锁、共识算法……
之后,对于这些知识点,我们可以用不同颜色进行标记(后面我列出了我自己习惯用的标记方式)。
标记好了以后,你可以把“必须,未掌握,红色”的内容,整理一个清单,排个优先级,作为未来一段时间学习计划的参考。
4. 最后,我会帮他 / 她去逐步建立一个技术栈,并以此为出发点,做一个为期1到3年的技术规划。
这样一张最初的知识体系图就完成了。
这个知识体系就像是一张藏宝图,上面的一个个知识点就是一个个宝藏。
实际使用的时候,我们不用花很大精力去做这个图,也不用限制是何种模式,一个 markdown 文件足够了,对自己有帮助就好。
随着你的积累和进步,每经过一个时期,都可以重新看下这个藏宝图,常看常新。
如果你特别喜欢自己的藏宝图,但图中有不少盲点,那就先找最基础的东西看,探索一段时间,迷雾自然就少了;
如果你的藏宝图虽然很大,但能挖掘的精华有限,建议先找一张对你最有用的图,精力不要过于分散。
如果这张图的要点你都掌握了,就需要扩展知识面,再去开个副本吧!
5. 当然,复盘迭代也是不可或缺的,除了纵向技术栈,也可以横向打通多个技术栈来看待问题
随着不断的学习,我发现不同的技术栈,的确有很多相似的地方,就像是同一类型的宝藏。然后去看细节,又会发现不一样的地方,就像每个宝石,纹理都不一样。比如:
以操作系统及虚拟机为例,没有想过 Linux、Windows、Android、iOS、Docker、VritualBox、JVM、CLR、V8,都在管理哪些事情呢?
虽然这些技术并不在一个层面,其实很多要做的事情,却是很相似的。比如,都需要 CPU 管理、内存管理、任务管理、处理同步问题、文件管理、I/O 管理、资源隔离、提供统一而稳定的 API 等。
然后,从任务管理这个角度再去看,还能看到优先级、时间片、抢占式、沙盒、命名空间、配额、欺上瞒下、甩手掌柜、单脑回路等等精彩的宝石纹理。
6. 最后,建议大家多尝试输出
相信很多小伙伴都知道费曼学习法,把别人教会才算真懂。
写博客有很多好处,可以帮自己整理思路,可以加深对知识的理解,可以帮到别人。
加油!