打造适合自己的知识库

终生学习,终生教育。


引语

对于知识工作者来说,知识库是持续支撑整个职业生涯的重要基础。程序员,算是半个知识工作者工种。

知识库可以看做是海量资源库的本地缓存。它的特点是:少而精要,重点突出。

知识库建设,基本步骤包括:搜集、分类、整理和提纯。


目标

  • 工作所需触手可达,避免重复搜索
  • 积累足够深度和广度的专业领域知识
  • 阅读/创作/小记
  • 温故而知新
  • 素材库

内容

搜集内容的目标是为工作、生活和创作提供持续动力,解决实际问题。

  • 原理、问题、方案、思路、优化、踩过的坑、经验教训等;
  • 好用的命令、有益的示例、有用的官方文档;
  • 有益的方法、独特的见解、清晰有条理的总结;
  • 生活的经验与感悟,随手记等。

搜集

准备一款笔记软件,方便搜集和整理各种来源(包括自己写的)的文章和内容。

  • 能够在 PC、移动端自由编辑、管理和同步内容;
  • 能够方便地从各种来源拷贝感兴趣的文章和内容;
  • 有浏览器插件、微信公众号文章分享等插件拷贝到笔记软件。

我目前使用的是为知笔记。基本满足以上要求。当然,印象笔记的“剪藏”功能也好用。

搜集内容的基本标准是:

  • 具备实用性或思想性;
  • 侧重原理和设计。

搜集来源和途径主要有:

  • 优秀网站、博客、微信公众号;
  • 好书段落精彩摘录;
  • 论文、官方文档。

避免重复搜索

思考第一个目标:工作所需触手可达,避免重复搜索。如何做到这一点呢?

一个实际场景是,有时会临时写一个脚本或执行一个命令,比如要 for 循环处理一个文件或列表,或者执行一个 mongo 查询语句,但是我对语法记得不熟,总是忘记。怎么办呢? 就可以建一个 for 代码片段或 mongo 命令片段的笔记。需要的时候,直接从笔记里拷贝并修改。

另一个实际场景是要去查询环境信息和一些常用命令。也可以记在笔记里,而不是去翻飞书群和聊天记录。

这不,我就建立了一个“环境与工具”的文件夹,有“环境”、“脚本”、“命令”、“代码片段”四个细分类,下面放的是各种常用的工具、脚本和命令,方便随时取用。这些命令和脚本可以有两种方式来积累:

  • 集中搜集。常用的命令,建议集中搜集,一次搞定,多次使用。例如,工作过一段时间,想必对需要用到哪些命令比较熟悉,就可以集中搜集下。日常工作中,安装和更新软件、搜索文件、搜索日志、拷贝文件、文本析取与替换、压缩与解压、Git 操作、Docker、K8S 等;
  • 日积月累。 适用于不怎么常用的命令,在需要的时候搜索后立即记录下来。比如视频截取、文件格式转换等。

日常工作中,未必有时间在聊天软件与笔记软件之间切换,这时,可以顺手记录在聊天软件上,消息发给自己。有空时再去整理。

工欲善其事,必先利其器。

知识卡片VS完整文章

一般来说,做笔记倾向于建立完整性的文章。之前我也一直是这么做的,非完整的文章甚至觉得有点不适应。不过,知识卡片的思想令人眼前一亮。

文章虽然具有完整性,但如果比较长,翻起来就比较麻烦,而且往往难以记住自己想要的内容在哪里。知识卡片则类似于“微文”,一个知识卡片就承载着一个小知识,很适合于搜索和快速获取。

因此,如果是优秀的观点文章,可以原文保留,领略其风范;如果是知识类摘录,适合“大卸八块”后做成知识卡片。不是一脑古全扔到一篇笔记里,而是一个知识点一篇微笔记。

如何避免“50%的概率都不会去读”的“悲惨结局”

之前的亲身实践证实:无脑拷贝到笔记里的文章,基本上大半年都不会读一次。换句话说,可以假设:摘录的文章,至少有 50% 的概率很长时间都不会去碰它。

那么,如何避免这种情形?如何不重蹈覆辙呢?有什么可能性是会吸引自己去读呢?那当然是优质文,值得反复阅读。因此,在网络上搜集知识和文章时,就要遵守“质优+严进”准则。最好能至少读完一遍,觉得确实可以(值得分享的那种)。或者只拷贝所需要的内容。切忌囫囵一看,无脑全文拷贝。摘录的时候多花一分钟,就不会面对零乱的摘录内容和凌乱的格式的莫可名状的心情了。

食之乏味、弃之可惜的文章,要忍心舍弃删除。我已经把之前技术文摘的 99% 文章全部删除了。重新来过。😦 其实还有一种办法,应用“知识卡片”的思想,将这些文章“大卸八块”,把精华的内容制作成知识卡片。emmm…… 删都删了。

只保留优质的文章。只保留核心有用的内容。

该读书还是得去读书

大致整理下所摘录的文章,会发现:很多文章多是一两本书上的知识集合,少有系统阐述或者有着独特见解的文章。这说明:要获得系统有条理的知识体系,还是得静下心来读书。想办法收集优质的技术类电子书和教学视频。网络文章主要是作为补充,而非主餐。

分类

分类相当于对知识做了索引,能够快速找到同一类别的文章,同时为知识体系化勾勒轮廓。

建立知识库,分类是一个仔细要下的功夫。

存与取

笔记类软件,无非是要做两件事:灵活存,高效取。存容易,胡乱一扔,也算是存进去了;取,可就不那么容易了。如何能够高效地取出感兴趣的已存入内容,并组织起来呢?

取,主要是索引和搜索功能。索引,即是建立目录和标签;搜索,则是根据关键字进行文本定位。

索引,可以根据自己感兴趣的或者有重要实用价值的建立大类,或打上标签;搜索,则依赖于笔记软件的搜索功能了。一般来说,使用者主要是做好文档和知识索引。

主题-大类-细分类

应用基本的分类思想,可以将整个笔记空间分成三层:主题、大类、细分类。最多三层。避免嵌套过深。

主题是关于一个大方向的概括。囊括工作与生活。比如我定的主题有:生命与爱(ME、碎碎念)、总体设计(规划与方法论)、工作(业务、工程、团队、方案、项目、备忘等)、生活(感悟、往昔)、札记(自己写的小结与感悟)、技术文摘、环境与工具、思维与技能、知识、写作札记、阅读札记、公众表达、网摘素材。

大类是某个主题下的有重要实用价值的分类。细分类是大类下的细分范畴。大类侧重一个特定方向或分支,细分类则细化到实用的点。

比如札记是一个技术输出类主题。里面有“系统设计”、“结构与算法”、“代码修行”、“工程质量”、“软件开发”、“职业生涯”、“编程技术”、“问题启示录”等大类。“系统设计”下又有“设计思考”、“设计方案”、“设计实践”等细分类。

我的笔记和微信收藏作为一个过渡,里面的文章会进一步归类到各个主题、大类或细分类里。

要注意的一点是:一开始不要分类太多太细,预先只分少量最感兴趣的类别,待需要时再添加。

分类的烦恼

知识分类的一个常见困扰是,有些知识,可同时归类于多个不同的大类或细分类。归类准则是:价值优先,精确优先于通用。其次看文章内容的侧重,侧重在哪里,归类到哪里。这个准则是自己定的,适合自己的口味和需求就好。

比如 redis 性能优化相关,既属于 “缓存-redis”细分类 ,又属于 “系统设计-性能与稳定性”细分类。由于缓存是很重要的大类,redis 是精确垂直领域,优先归类于“缓存-redis”。“系统设计-性能与稳定性”倾向于是一种经验的普遍总结,而不是具体细分知识。当然,这种视角不是唯一的。如果从问题求解角度来看,归类于“性能与稳定性优化”分类更合适,因为性能与稳定性优化是研发求解问题中的不可或缺的组成部分,也是职业进阶、获取更好待遇的技术优势和阶梯。

标签的用法

大多数笔记软件都提供了标签功能。标签是用来做什么呢? 标签至少有两种使用场景:

  • 大类和细分类无法覆盖所有的主题,且知识往往是关联的有跨越性的,可以归类于多个细分类。但文档只能归类于一个大类和细分类。怎么办呢?这时候,可以给文档打多个标签。比如“一道关于二叉树的字节面试题的思考”,就可以打上“二叉树”、“数据结构”、“代码”、“面试”标签。

  • 同一类别的知识,有的是你的心得体会,有的是网络摘抄,而你不想把两者混在一起,又希望在某个时候都搜索出来,怎么办?可以给归到不同大类和细分类的相同知识打上同样的标签。比如面试相关,有自己的感悟,也有别人的经验,不想都放在一起,又希望能够一起搜索出来,就可以都打上“面试”的标签,分别归类于“札记-面试”和“技术文摘-面试”细分类里。

标签是更灵活的“归属”方式,可以起到“聚合同一类别知识”的作用。比如“代码”就是一个标签,任何类别中的文章只要包含代码,就可以打上“代码”的标签;“喜欢”是一个标签,任何类别的文章,无论是工作还是生活,只要是自己喜欢的内容,都可以打上“喜欢”的标签。

有位 UP 主分享了使用标签的一种心得:随手记录自己的生活,然后打标签。定期回顾标签的内容,就会发现自己的一些不好的习惯,从而去改进。运用之妙,存乎一心。

为了打标签省力一点,我的标签采用全英文。这样,利用软件的自动补全功能,通常只要输入一两个字符即可,无需切换中文输入。还能顺便学下英文(备个有道词典)。此外,如果标签下只有一篇文章,且显得比较孤立,则会删除该标签。

之前的笔记都没有打标签,一度觉得打标签是个比较繁重的活。不过为了利用上标签的功能,还是给绝大部分文章打上了标签。可以分拆到几周,一周给一个主题打标签。另外,标签也要尽量通用一点,不然每个文章都有很多“专有”的标签,标签过多,也不好维护。

以问题求解为中心

工作的核心内容是解决问题。各种各样的问题。大范围的,比如研发管理,或者小范围的,电脑卡慢。笔记的目的不是为了表面拥有这些知识,而是能够灵活运用于实际解决问题。

提出一个问题,然后围绕这个问题搜集所有相关的知识和经验。优先以“问题求解为中心”的视角。


整理

整理步骤主要是文章排版整理。文章排版整理是一个相对繁重琐碎的事情。试想,在阅读之前,还要费力气去把文章的排版格式弄好一点,那阅读的心思就折了一半。最好是在保存时就保证文章的排版基本整洁。

目前自己写的文章,统一用 Markdown 了。不求样式绚丽,只要平实质朴。尽量少为样式耗费精力。

对于网络摘录,将网络内容拷贝到笔记软件有三种办法:

  • 直接手动拷贝。优点是,可以避免将网页的格式和不相干的内容混进来,减少排版整理步骤的繁琐。缺点是,长文手动拷贝略微费点力气。
  • 利用工具摘录。利用现成的工具(比如公众号文章分享、浏览器插件、App 工具等),优点是非常便捷,缺点是,容易把网页的格式和不相干的内容混进来,后期排版整理可能会比较费力麻烦。
  • 摘取核心内容。仅拷贝核心内容。可以省去后续“格式化”、“内容提纯”步骤,摘录后的内容和段落是清爽有价值的。缺点是摘录时要多费点脑力。

亲身实践表明:文章摘录之后,几乎不愿意再集中整理。因此,最好在摘录的时候一次性做好,把整理成本分摊到每一次摘录中。让笔记时时保持清爽的状态。正如让软件时时处于可交付状态一样。

整理后的文章格式统一使用 Markdown(尤其技术类文章)。 如果原文排版问题不大,加标题、润色,保持原排版亦可。

为知笔记有个“清除样式”和“只拷贝文本”的功能,当文章的原排版过于“花里胡哨”或者“不堪入目”时,可以使用该功能,让其立即“卸妆”,恢复“素颜”。此外,可以保持字体统一,去掉不必要的“装饰”。


提纯

到了知识库建设的最关键环节:知识提纯。 知识提纯,是将已摘录内容的重要有价值的部分提炼出来。知识提纯最显功力。

俗话说:把书读薄。意思是要把知识读透彻。从纷繁复杂的现象中提炼出精炼的本质。

知识提纯的基本准则:简明扼要。不必固着于“文章”的形式,一两段落,甚至几个关键字即可。即“把书读薄”。

知识提纯是一个再学习、温故而知新的过程,可以培养内容重点提炼的能力。内容重点提炼能力是“信息过载”时代必不可少的重要技能。

技术类文章,可以遵循“基本思想或思路-关键点-技术实现”或者 “问题-方案-新问题-方案完善”的路线来解析一篇文章。

知识提纯,主要有如下情形:

  • 有的文章行文思路清晰、内容和细节丰富、图文并茂,保持原样即可。
  • 有的文章的重点部分只有少数一两个段落,提炼出来,原文可删除(可保留原文地址)。
  • 重复主题和内容的相关文章,内容提纯后合并成一篇文章。

知识提纯相关,可以再写一篇文章。我也在探索中。

高效搜索

有序存进去,还要高效取出来。只存不取,就会导致“50%的概率都不会去读”的“悲惨结局”。

分类和标签,可以很好地索引文章,但要定位到所需要的知识,还得再进一步定位。

如何做到高效取出来呢? 一般笔记软件都提供了全文检索的能力,即根据关键字来搜索相关文件。当你要选用一款笔记软件时,一定要先“考核”下它的全文检索能力。速度以及准确性,是否符合期望。

那么,文件标题可以好好琢磨下:

  • 简单:使用关键字拼接,比如 Log commands, K8S commands 。这样,搜索 log 或 commands 就能很快找到对应文章。 写成英文主要是为了避免中英文切换,少输几个字符。emmm, 最“伟大”的程序员总是最“懒惰”的。我不伟大,但也懒惰。
  • 常用:使用常用的关键字,比如写作、交往、财富等,不使用生僻的关键字。

文摘与札记

对于程序员而言,技术文摘和札记是专业类知识库的重要组成部分。技术文摘是输入,札记是输出。需要将技术文摘的内容消化后,整理成札记,才算是真正的学习了。

之前读书,囫囵吞枣,过后即忘。打算: 每读一章节,就写一段复述、分析和评价。如此来训练知识提纯能力。


小结

个人知识库是持续支撑职业生涯的重要基础,最终目标是为工作、生活和创作提供持续动力,解决实际问题。知识库建设,基本步骤包括:搜集、归类、整理和提纯。其中知识提纯是核心。

上述步骤的螺旋上升式循环,形成良性有力的知识库建设节奏和职业的有力支撑。

参考

posted @ 2022-06-18 12:31  琴水玉  阅读(569)  评论(0编辑  收藏  举报