最后一个笔记系统
或者说个人知识管理系统。
动机
人类、书籍、LLM、搜索引擎都不能保证带给你简单无误的答案。当你重复寻找以前找到过一遍的东西时,你意识到应该把确认有效的信息记下来,节省未来自己的时间。
这是笔记最直接的动机。如果你的动机是这以外的东西,甚至是“大家都在这么做,所以我也这么做”,那么你可能根本不需要它。
当你以为自己需要实际并不需要的东西时,就会有人趁虚而入。不要让生产力贩子趁虚而入。
当你有了做笔记的正当动机,笔记的数量开始增长,以至于开始需要一个方法论来整理笔记时,笔记系统才有理由存在。没有需求却刻意制造需求,只会徒增烦恼而已。
为什么Wiki不适合作为个人知识管理系统
人们之所以会尝试把Wiki作为知识管理工具,很可能是因为从Wikipedia上看到了众包百科全书的强大力量。但是,个人的知识管理与公共百科全书的编撰有很大差别,使这种路径依赖变得相当无效。
绝大多数时候,人们都是在以读者身份使用Wikipedia,而非作者。即使人们在以作者身份使用Wikipedia,也只是在编写几个条目而不是领域内的所有条目,更不会以维护整个Wikipedia为目标。当个人将Wiki作为知识管理工具时,很容易低估维护它的难度,高估个人维护它的能力。
实际上,Wikipedia也只在几个语言上比较成功。很多语言的Wikipedia条目都只是英语条目的翻译,并且很快就会落后于其原始版本。如果将知识从一种语言翻译到另一种语言后继续维护都是如此艰难,那么创造理想的百科全书则需要付出极大努力。
尝试把Wiki作为知识管理工具的结果无外乎两种:
- 失败,认定这条路走不通。
- 假装自己有一个能维护的个人知识库,但实际上没有。
Zettelkasten的神话
如果你没听说过Zettelkasten,那么你少走了一些弯路。如果你听说过Zettelkasten,那么我可能了解得比你早。当我已经为Zettelkasten方法编写了自己的工具链的时候,这个词都还没有被引进中文世界。而在兜售该方法的生产力贩子们还没有像雨后春笋般出现的时候,我就已经放弃了它。
人们希望有一个操作起来不繁琐,且看似有效的个人知识管理方案。Zettelkasten的重新发现恰好切中这一需求,生产力贩子的推波助澜为使用者进一步制造取得生产力进步的幻觉。
当你寻找支持Zettelkasten的理由时,你会找到它的发明者Niklas Luhmann以及其他使用此系统并取得成就的人。生产力贩子吹嘘Zettelkasten的效果就好像Niklas Luhmann等人的成就全部归功于这套笔记系统一样。
要推翻这套叙事并不困难:
- 在Zettelkasten的使用者取得成就的年代,信息不像现代这么膨胀。
- 信息化时代之前,整理笔记的方法非常有限,人们的选择余地不多。Zettelkasten是其中一种方法,独立发明出类似的东西也并不很困难。
- 有没有可能人们取得成就不是因为他们使用了Zettelkasten,而是因为他们有能力?使用Zettelkasten而没有留下成就的人不会被记录,这是幸存者偏差的一个例子。反过来看,你就会意识到这有多荒谬:有多少取得成就的人不曾使用Zettelkasten?
整个Zettelkasten系统里最被高估的部分是它最形式化的部分:小卡片形式的笔记,以及由链接组成的笔记网络。有趣的是,这些最被高估的部分被普遍用来代表Zettelkasten方法,因为形式化的东西更容易作为商品贩卖。
遭到形式化的Zettelkasten是原子化版本的Wiki,也是一个更缺乏可维护性的个人知识管理系统。由于采用了扁平结构,当笔记数量达到一定规模时,其弊病就暴露出来。
例如,由于你不知道一篇笔记记录内容的边界应该在哪,导致普遍的冗余内容分散在多篇笔记里,从而降低系统的可用性。冗余内容不会因为笔记之间建立起链接就变少,当一篇笔记的链接数量过多时,系统可能因为会牵一发动全身而变得难以维护。
通过使用Zettelkasten,你平息笔记系统中的混乱所付出的成本将远大于你从笔记系统中获得的收益。你会得到一张漂亮的笔记网络拓扑图,但这拓扑图就跟其他类型的数据可视化一样,除了助长生产力幻觉外毫无用处。
可维护的笔记系统
笔记系统不是规划出来的,而是生长出来的。只有当你的笔记系统是生长出来的,它才有足够的韧性应对变化,适应你的需求,而不是反过来。
要发展笔记系统,需要有一个可维护的笔记系统作为发展的基础。什么是可维护?
可检索
一个可维护的笔记系统是可检索的,并且检索起来应该很方便。
唯独文本
对可检索性的要求使得笔记强制使用文本作为主要的数据,因为这是唯一能准确检索的数据。
这意味着如果你的笔记是手写的,或者笔记大量包含图表、媒体甚至可交互内容,那么你将很难形成笔记系统,因为检索不方便。的确有一些方法让文本以外的数据变得可检索,但再怎么优化方法,最后也不过是到达文本的起跑线罢了。
纯文本
你的笔记最好是纯文本,而不是富文本。
纯文本的主要优势是你的笔记系统不会被锁定在特定的文本编辑器上,这将明显让笔记系统更健壮。
此外,通过程序处理笔记会更方便,因为文本是一种通用数据类型。例如你可以直接用ripgrep作为笔记系统的搜索引擎。
将笔记视为写作
Evernote等笔记软件通过浏览器插件为用户培养依赖复制粘贴的笔记习惯,这种剪贴簿式的笔记方法完全不适用于可检索的笔记系统。这些便于囤积信息的功能一定程度上是为了让用户产生生产力提升的错觉,让原本不做笔记的用户开始相信自己应该使用笔记软件,实际上被囤积的信息多半是石沉大海,再也没有看过。
你不应该往笔记系统里囤积任何没经过大脑消化的东西。摘抄等原样照搬内容的行为需要被视作对笔记系统的污染。
为了让笔记达到最佳的可检索性,你应该把笔记视为一种写作:
- 因为你理解了知识,所以记下的知识是为你量身定做,当你忘记时才会真正有用。
- 因为这是你的写作,而写作是思考过程中间结果的输出,这种输出符合你个人的语言习惯,所以你才能在未来检索到这段知识。
少数情况下,可能有例外。比如你发现一段完美的内容,好得难以置信,以至于任何形式的改编都会降低它的价值,这才值得原样将它输入笔记。
你仍然可以有用来归档资料供日后查找、引用的剪贴簿,它是什么形式都无所谓,只是不要把它和笔记系统混为一谈。
可阅读
一个可维护的笔记系统是可阅读的,并且阅读起来应该很轻松。
显然,你的笔记有多可读,很大程度上取决于你的写作本领有多好。对写作没有自信的人也不必担心,笔记写作也不需要你成为一个多好的作家。实际上,满足几点就可以大大提升文本的可读性。
简洁
如果我有更多时间,我会写一封更短的信。—— Blaise Pascal
简洁(Concision)是一项常见的英语写作原则,但它显然不仅适用于英语。
你的笔记写作应该简明扼要,切入重点。这让你的笔记花费更少的阅读时间,并且编辑起来更容易。
最开始,你可以追求绝对简洁——机械地寻找和删除句子中不必要的成分,比如把修辞全干掉,移除所有重复等。随着笔记系统的发展,你会明白自己对笔记文本可读性的审美舒适区,明白怎么简洁才更明智,从而真正掌握这条写作原则。
包含上下文
做笔记的人应该有过这样的经历:看不懂自己记下来的东西。这是因为当阅读笔记的时候,已经脱离了记录笔记时的背景。
为了让笔记能在未来可以被读懂,需要在写作时有意识地融入必要的上下文信息。好的笔记是那种在离开这一领域几年后,回来依然能读懂的笔记。
如果你对笔记写作不够熟悉,你会很难控制到底需要保留多少上下文才能让未来的自己读懂。没关系,你根本不需要一次成功。由于你的笔记系统是发展的,你大可以在笔记时尽可能多地记录上下文,然后在下次检索到这部分内容时再编辑它。未来的你比首次记下笔记时的你更清楚哪些上下文是多余的。
明智的排版
你可以在文本层面做平面设计。
一致的风格
不仅编程语言代码需要维持一致的编码风格,标记语言也需要。即使你不使用标记语言,而是用富文本,你也需要维持一致的风格。
除了维持一致外,你还需要意识到一些风格明显优于其他风格。以Markdown这种方言众多的轻量标记语言为例:
Level 1==Level 2--### Level 3This is a [hyperlink](https://en.wikipedia.org/wiki/Hyperlink).# Level 1## Level 2### Level 3This is a [hyperlink].[hyperlink]: https://en.wikipedia.org/wiki/Hyperlink尽管渲染结果相同,但第二种源文件要显著优于第一种源文件。
手动换行
Markdown等标记语言需要两个换行符才会产生新的段落,不是每个人都知道该怎么利用标记语言的这种特性。
你不应该这样写:
多年以后,面对行刑队,奥里雷亚诺·布恩迪亚上校将会回想起父亲带他去见识冰块的那个遥远的下午。那时的马孔多是一个二十户人家的村落,泥巴和芦苇盖成的屋子沿河岸排开,湍急的河水清澈见底,河床里卵石洁白光滑宛如史前巨蛋。世界新生伊始,许多事物还没有名字,提到的时候尚需用手指指点点。而是应该这样写:
多年以后,面对行刑队,
奥里雷亚诺·布恩迪亚上校将会回想起父亲带他去见识冰块的那个遥远的下午。
那时的马孔多是一个二十户人家的村落,泥巴和芦苇盖成的屋子沿河岸排开,
湍急的河水清澈见底,河床里卵石洁白光滑宛如史前巨蛋。
世界新生伊始,许多事物还没有名字,提到的时候尚需用手指指点点。或者这样写:
多年以后,面对行刑队,
奥里雷亚诺·布恩迪亚上校将会回想起
父亲带他去见识冰块的那个遥远的下午。
那时的马孔多是一个二十户人家的村落,
泥巴和芦苇盖成的屋子沿河岸排开,
湍急的河水清澈见底,
河床里卵石洁白光滑宛如史前巨蛋。
世界新生伊始,
许多事物还没有名字,
提到的时候尚需用手指指点点。一个合格的渲染器对于上述三种源文本风格,其渲染结果在视觉上应该完全相同。
相比第一种源文本风格,后两种源文本风格具有这些优点:
- 文本结构更清晰。
- 对Vim等文本编辑器更友好。
- 对diff等文本差异工具更友好。
即使你不使用具有这种特性的文本标记语言,或者渲染器行为不正确,采用后两种源文本风格仍然有优势,因为它们本质上就比传统的紧凑排版要易读。
这种手动换行的做法非常古老,被大量写作者使用,在历史上有多个名字。它曾被称作Ventilated Prose,后来有人叫它Semantic Linefeeds。在我写这篇文章的时候,发现了一个专门介绍它的网站,称其为Semantic Line Breaks。
良好的层次结构
笔记需要有良好的树形层次结构,能将笔记按内容分类,具有适当的标题,让相关性高的主题距离更近。这种分类不必多严谨,但应该足够实用,且修改阻力应该尽可能小。你很可能无法一次就获得良好的层次结构,没关系,层次结构将通过对笔记系统的维护逐步获得改进。
理想情况下,你使用的标记语言和文本编辑器都应该给树形层次结构的维护提供足够的方便。例如标记语言应该允许树具有无限的深度,但像Markdown这些主要以HTML为渲染目标的标记语言只支持6个深度,因为HTML级别最小的标题标签是h6。例如文本编辑器应该支持大纲视图和以树中节点为单位的移动/深度增减,但大多数文本编辑器也就只支持到节点的展开/折叠罢了。这导致你若想要在纯文本上获得完美的树形层次结构编辑支持,基本只有Emacs的Org-Mode这一条路可以走,这使得很多人都不能体验拥有良好树形层次结构笔记时的好处。
层次结构的意义
“如果一个内容同时属于多个主题怎么办?”这是组织树形层次结构时相当常见的问题,不回答这个问题就无法继续发展笔记系统。
如果你的笔记系统是可检索的,这个问题会变得非常不重要,以至于你可以不解决它。为什么?因为你并不真正通过层次结构导航来定位笔记内容,而是通过检索关键字来定位笔记内容。因此,一个内容可以同时归属于两个主题,这是完全可以接受的——把它放在任一主题的节点下都不会损害笔记系统的可用性。如果你够幸运,在笔记发展到一定程度时,相关内容可能会自行演化出它的位置,问题便迎刃而解。
如果你将这种基于检索的解决方案与其他解决方案对比,会发现它优于其他所有解决方案——创建标签系统、创建超链接或将内容分散为多份,本质上都在加重笔记系统的维护负担,而基于检索的解决方案什么负担也没有增加,这使得这种笔记系统的维护成本显著更低。
尽管笔记系统依赖检索关键字来定位笔记内容,但积极维护层次结构仍然很有意义:
- 使你在维护笔记时能够觉察主题之间的分界线,从而防止内容跑偏,提升笔记的可读性。
- 层次结构能够提供一个更高的视角来观察主题之间的关系,有助于系统性地梳理知识。
笔记不是文章
需要指出,指望一个笔记系统变成一个产出文章的工具,这件事本身是不现实的,是对笔记系统的错误期望。
文章与笔记在组织结构和文本风格上有着巨大的不同:
- 如果你用文章的结构和风格做笔记,那么笔记的可用性就会大幅下降。
- 如果你用笔记的结构和风格写文章,那么文章的流畅性就会大幅下降。
这决定了不可能只是单纯做着笔记,然后在笔记突破某个临界点后就突然收获一篇文章。
至于指望靠拼贴的方式,将笔记拼成一篇文章……就好像搭积木似的——最好还是断了这个念想,除非你对文章的要求真的如此之低——迄今为止,最接近这一目标的做法是把你的笔记交给LLM,让它给你糊弄出一篇不堪卒读的玩意儿。