想来好久一阵子没有管理我的博客了。这里面,既有技术的原因,也有非技术的原因。 之前,从emacs阵营转到了atom,自然的,hexo也需要从org转为markdown。
实习期间,我已经数不清楚有多少次脑海中曾充满了各种有条理的技术细节和想法, 而一觉过后,似乎一切都烟消云散了。
这让我迫切的意识到,完善的知识管理体系是多么的重要,而博客就是这其中的一环。
终于,抽了一个星期天,忍受着卡成狗的实习宿舍wifi,对hexo进行一番小小的折腾,把这个事情搞定了。
本篇博文就来谈谈我在知识管理上,经过无数的试错,目前摸索出来的当下的“最佳实践”。
1. 知识管理的目的
自从上大学起,折腾研究各种技术时,我就开始使用文本文件记录觉得有用的一切。
起初,我好像不太能辨别信息的价值,无论什么信息都能被我找出貌似有价值的点。
这样的后果是,我的笔记库沦为了毫无价值的复制粘贴一团乱麻。
我就像有囤积症的人一般,酷爱囤积各种信息,却忽略了对它的加工 – 哪怕最原始的加工。
知识管理的目的,很显然的,是为了弥补人身上的在知识的记忆,知识的加工等方面的不足。
因此,好的知识管理方案应该能成为人的左榜右臂,
对于人由于自身弱点而难以应付的场景,应该都能给出良好的解决方案。
2. 人的弱点
基于我自己不断的体验,思考,复体验,复思考。。。我列了一份清单:
人的瞬间和短时记忆力很短暂。在折腾技术的一瞬间我胸有成竹,该技术的各种细节都了然于胸。
然而,1天后,只能讲出昨天最重要的20%了,一星期后,只剩下些许的记忆片段了。
一段时间后,连最基本的技术细节都忘记了,何谈深入?何谈升华?人有一种幻觉。当看到一篇教程时, 看懂了 ,就误以为自己 学会了 。
实际上,真正理解一个东西,过程中必定有 大脑的思考 。那种感觉是很微妙的,
以我的体验,大概是脑子里有一种统一的感觉,注意力会集中在大概大脑的上方某些位置。
还有一个评价方式是,合上电脑或书本,自己按照自己的理解绘制知识结构,复述某些重点知识。人将注意力集中与A事件的时候,很容易将与A事件无关的时间忘记光光。
有可能之前我折腾了一个很重要的很有启发性的技术,然而。。。。都烟消云散了。人的长期记忆力也是有限的。现在是信息大爆炸的时代,最基本的技术细节(像某个库函数什么的),
只要你愿意,能找出无数个,这些都靠脑子记吗?不现实。人对于结构化的知识的记忆能力,比杂乱无章的东西更容易记忆一百倍不止。
3. 对知识的理解/知识的属性
知识管理作为弥补人类弱点的一个工具,是连接人类和知识的纽带。
上面分析完了人类,接下来该分析分析知识本身的特点和属性了。
在技术的不断的学习和总结提炼中,我直觉上觉得技术上的知识分为三种性质:
- 道
- 术
- 器
形而上者谓之道,形而下者谓之器。
插句题外话,一直以来,我钦佩并尊重追求 道 的物理学家,科学家,律师们等。
也鼓励自己即使步入浮躁喧嚣的社会,也要保持一颗追求道的赤子之心。
思而不学则殆。后来我发现我一直想破脑袋的东西,前人早已经总结好了。
DIKW知识体系就是一种对知识的分类。这四种种类,都是性质截然不同的东西。
如果说DIKW是针对对知识本身的特点的一种分类,那么接下来这种分类则是人在学习的过程中,
对同一知识处于不同的理解层次造成的:
- WHAT类型。(RSA加密算法有什么优缺点?)
- HOW类型。(RSA加密算法内部是怎样实现的?)
- WHY类型。(RSA加密算法为什么要这样实现?)
这是一位前辈总结的。不过,按照我的经验和习惯,我会再给它加一个类型:
- 应用场景。(RSA加密算法有哪些应用场景和案例?可否找一些有价值的DEMO代码?)
4. 知识管理应用场景
谈论完 道 ,该讲讲 术 了。
在讨论具体的工具之前,我想先列举几个应用场景,一来明确需求,二来对知识管理的方案有个可检验的标准。
以下的应用场景都是和技术密切相关的:
系统性的学习一种技术。比如说,最近我在系统性的阅读spring的文档。
那么,我应该如何的合理的将这些信息记住,不沦为机械无意义复制粘帖,
并且下次只要一打开自己的知识库,就能立刻唤醒曾经学习时尘封的记忆?临时性的为一个现实问题寻求一种解决方案。比如说,我现在配置的dubbo服务为什么狂抛奇怪的异常?
经过查询10多个网页的资料解决了问题。如何记录刚才所做的解决方案?
当下次有时间时,有了知识库的辅助,我能知道深入探究该问题的必要信息吗?接触到了以前就懂的技术,但是是一个以前没有接触过或思考过的一个点。
那么,如何将其整合进原有的知识体系中?
并且当对着知识体系时,不感到无聊困卷,依然能做到”温故而知新“?闲来无事干,想梳理下某个技术。那么,我的知识管理体系能够对我梳理该技术产生多大的帮助?
实践中碰到了一个新的问题。那么,我如何知道以前解决过这个问题?
如果是,我如何快速的在知识体系中找到需要的资料?我所记录的知识是处于不断变化的。对于笔记库中记录的知识,我也需要经常去变更它吗?
5. 知识管理工具
有了以上后,现在该讲讲我个人在知识管理方面的工具了。
经过不断的试错和改进,现在我的知识管理工具组非常的简单,但是又能很好的应付我需要的场景。
我的工具分为:
- 浏览器书签。
- 使用atom管理的笔记库,使用markdown + git管理。
- 博客,博文部分使用git管理。
- 若干存储于bitbucket私有的示例代码库。
还有个evernote其实也很有用,但是我发现管理技术知识用不到这个,管理人文方面的知识目前还在摸索中。。。。
那么,它们分别有什么样的含义呢?
这四者其实都能方便的跨设备同步。浏览器书签不用说,浏览器自带同步即可。
而笔记库和博客都用git管理,代码库天生用git管理,存入bitbucket私有仓库。
我是一个注重隐私的人,使用git + bitbucket,这是我能找到兼顾功能,便捷,隐私三者的最佳的方案了。浏览器书签用来管理网络大块的信息。大概有三种东西。
第一,某个非常有价值网站,比如某博客。
第二,某些技术文档的页面。比如spring文档,vue文档等等。
第三,某些能独立成篇,思路清晰,以某一技术点为主题的有较大参考价值的网络文章。
当然,使用浏览器书签的文件夹功能,将这些东西组织的有层次。注意,最好将这三类不同的资源分开。atom的markdown笔记库用来存储这些东西:
第一,知识结构。 第二:知识简单描述。 第三,知识重点。
为什么这样做?计算机科学里有两个很重要的智慧,
第一是cache。将较小容量但是能较快读取的存储空间作为更大更慢存储空间的缓存,能大大提高数据查询的性能。
第二是索引。将杂乱无章的数据按照某种方式组织成有结构的数据结构,如果构建得当,也能大大提高查询性能。
索引的一个非技术应用就是书籍的目录。
将cache和索引思想应用到知识管理系统上来,那么,一个好的笔记库应该是完整知识的cache和索引。
在一次查询中,过程是这样的:
人脑中的关键字 –> 按照 索引 查询笔记库得到 知识简单描述 –> 根据描述中的”指针“寻址”到互联网上的完整知识
实际上,在知识管理体系中,索引的真正作用倒不是优化查询,而是在给自己回顾时一个更清晰的逻辑和知识结构,这有利于大脑的思考和记忆。博文和示例代码库。
如果我有些想法,想总结一篇原创的完整文章,怎么办?
如果是”道“的范围,我很乐意在笔记库中给它们一个位置。
但是实际上更多的都是”器“的范围,如果不想放入自己的笔记库,那么最好的方式还是以博文的形式发表出来。
至于示例代码库,就没什么好说的了,cache思想的一个很粗暴的应用。
写博客的习惯,还是得继续坚持下去。
6. 最后
夜深了,不知不觉已经写了两个多钟头。深入的东西都很费时间,但是却都很有趣。
感谢曾经对我在知识管理摸索中提供无私帮助的许许多多不知名的作者们。
让我们接力把爱心传递下去吧。