背景

年初的时候,我搭建过一个个人知识库发布流程 md-wiki,大体上是通过一些 elisp 代码将不同 主题的页面通过链接和层级关系串联起来。当时决定做这件事情时,特意发了条pyq以表达兴奋的心情。然而大半年过去,gknows(我的个人知识库的名字) 已经很久没有更新了。

为何做一件事情之前的想法(觉得很有必要且会长期使用)和 工具开发完后的实际使用会有偏差?是因为刺激我多巴胺分泌的是折腾工具的过程,而非使用工具?还是从一开始自己就没有想清楚为何而出发?(我真的需要一个个人知识库嘛Q^Q)。

分析

要回答这个问题,让我先从为什么要写这篇文章谈起。

昨天,在咖啡馆自习时刷了几道算法题,解题过程中发现自己对一些概念了解得不够清晰。于是搜到几篇文章,打算深入理解一下,本着“不做重复劳动”的原则,将关键点记录在了笔记里。然而,在了解一个概念时又会牵涉到另一个概念,但对这另一个概念我暂时只需要有大概的了解,不必深入探究。于是对这个概念新建了一个page单独记录,留作未来补充,用链接将两个页面进行关联….

等等,你发现没,这不就是典型的wiki嘛?我现在正需要它呢!

我想到了先前废弃的 gknows。也是花了时间折腾的,最终却没有被使用,这个问题很值得反思啊。这就好比,公司做一个项目,时间、人力、物力、财力全投入进去,上线后甲方说方案不被采用,这意味着什么不言而喻。我可以安慰自己说开发的过程也是涨了经验的,不算徒劳无功,但随后要仔细反思背后的原因。

这背后的原因就是:先前的折腾没有从自己实际的需要出发,而落在了一个高屋建瓴的概念(个人wiki),这个概念满足了当时我追求新鲜感的需求,却没有考虑是否真的需要它。那时我不需要,而现在我需要,因此要“重拾个人知识库”。

其实那时,我也可以有这个需求,因为需求是可以被创造的。什么情况下会产生需求?当面临实际要解决的问题时,这是一种;另外一种是,先理清有了这个需求会对自己产生什么实际的好处,这种好处不似被动的解决问题,而是主动的优化(工作流、生活方式)。当说服自己接纳这些好处时,便产生了新的需求。

基于这个理论,先前正是没有想清楚“个人知识库可以给自己带来哪些帮助”这个出发点,才没有将gknows用下去。尤其是开发一些实验性的项目之前,要先找好立足点,明确的列出需求点。

需求点

“知识库"将所有的知识以高度凝练的语言,用特定的结构组织起来,知识与知识之间互相关联。它是一个大的框架,任何时候都可以往里添砖加瓦。

尽管我现在有明确的要解决的问题,还是要理一理“我为什么需要一个个人知识库?”,或许这些回答也可以启发读者去探索和构建自己的个人知识体系。

我的回答主要分三个层次:

1.知识存储

当我们学习了一个新的概念时,把对这种概念的理解写入知识库中,下次再遇到时可以快速检索和复习,而不必再去网络上搜索。这时,知识库扮演的是存储的角色,相当于第二大脑。

2.知识总结

简单的复制粘贴搜索到的知识,而不加以自己的总结,那么知识库就会沦为“收藏夹”、“稍后再看”一类的工具。“个人知识库”应当要对搜索到的信息做甄别和提炼,用自己的话做精辟的总结,这样才能加深对知识的理解。

3.知识探索

“统一存储知识和总结,方便检索和复用”只是知识库最基本的功能。更重要的是,记录和完善知识体系的过程会倒逼自己对问题的探究。比如,我想弄清楚什么是“哈希表”: “哈希表是将value存储在,通过哈希函数计算的key对应的数组的特定位置的一种数据结构。利用数组的特点,可以实现在O(1)的时间复杂度内查询。不同的key值经过hash计算后可能会被映射到数组的相同位置,这称为’哈希冲突'…”

这是我看完文章后,对哈希表的总结。你看,哈希表的概念里面除了它本身,还包含“哈希函数”,“哈希冲突”等。如果不了解,自然会想去研究:“有哪些哈希函数”,“哈希冲突如何解决”等问题。在研究这些问题的过程中很有可能会产生更多其他的问题,涉及更多的概念、领域。不断探究下去,通过输出来倒逼知识的输入和探索。