关于笔记
卢曼方法
从我开始读 How to Take Smart Notes 已经三年多了吧,那书我其实只看了一半,因为看到一半的时候我就感觉已经读明白了。这几年我又看了大量介绍笔记方法的文章和讨论,我觉得从第一性上讲,卢曼方法(或者叫卡片盒方法)其实仅仅是一个以学术写作为最终目标,并且笔记之间的关联带上下文的系统。其中「以学术写作为目标」是基本假设。卢曼方法在这一点上是极端硬核的,一坨理想状态下的卢曼笔记应该能达成你只要依次复制粘贴就能生成一篇文章的效果。我觉得卢曼本人那么高产,他的笔记大概就是这种状态。而且卢曼方法仅考虑写作这一目的,你想快速检索?第二大脑?GTD?这些都不是考虑范围,如果你发现卢曼方法干别的也很方便,那是一种副作用。
这种对学术写作的极端追求就确定了这个方法中一些表面看起来非常麻烦的做法,比如严格区分闪念笔记、阅读笔记和永久笔记,而且要定期读闪念和阅读笔记,把它们转化为永久笔记。这其实就是把你最终写作的工作量分散了,这样最后你可以直接复制粘贴永久笔记。这个「分散工作量」的理解基本是共识了,比如这篇文章里说,
It is possible to produce more in less time, but not with less effort per time.
卢曼方法还有其他看起来麻烦的做法。为什么需要有顺序的编号?因为这样你可以无脑按顺序复制粘贴。为什么笔记之间的关联要带上下文?这些上下文其实就是成品中相邻章节之间的过度,同样可以复制粘贴。为什么永久笔记中不能摘抄引用的原文,而必须是自己重写一遍?因为你写论文不能直接把别人文章的内容抄过来。
另外关于「有顺序的编号」这点,似乎有很多人觉得这是卢曼方法的精髓,我认为完全不是这么回事。大家都知道卢曼的笔记是树状的,而他的编号其实就是一种把树线性化的方法(这可以是个 LeetCode easy~~)。为什么需要线性化?当然是因为他的笔记是写在卡片上装在盒子里的,他只能一片一片地线性排列,而已。换句话说,卢曼方法的基本假设(写作主导和带上下文的关联)并不是线性编号的充分条件,他的编号方法是一种副作用。如果你是个卢曼原教旨主义者,也想写卡片装盒子,那你也得这么编号,但是如果你是个正常的电脑用户,完全不需要这个编号。前面链接的文章也说了,
Luhmann didn’t use the term “hypertext”, but he probably would if he lived today. This organic growth is also precisely how wikis and their wiki-link feature works.
当然这些都是我在使用中逐步明白的,同时在使用中我也感觉这个方法不是特别适合我,而且这个「不适合」是根本上的,因为我现在已经不需要学术写作了。我的经验是这个方法并不适合其他种类的写作(比如写博客),因为从笔记里复制粘贴出来的文章读起来体验很差。这点在读 How to Take Smart Notes 的过程中感受非常明显(作者说了他是用卢曼方法写的)。这书读起来最大的特点就是啰嗦,车轱辘话来回说。从卢曼方法的角度出发,这个非常好理解:由于你的笔记都是关于同一个主题的,永久笔记的内容必然会出现重叠,最后复制粘贴以后这些重叠就变成了车轱辘话。要避免这点只有两种方法:重写,但是这就抛弃了卢曼方法最大的优点;或者你在写永久笔记的时候先把其它所有永久笔记都看一遍,确保内容没有交集,但是这样你的工作量随着笔记的增多是平方增长的⋯⋯当然这里并不是说阅读体验对于学术文章来说不重要,而是大部分学术文章在这点上都很烂,所以一般大家愿意忍🙃。
这个车轱辘话的问题就是我没读完那本书的原因。其实我觉得读一半都多了,直接读别人写的总结就行,这方法没什么复杂的。这里我建议读 Tiago Forte 的读后感。
PARA
这样就自然引出了我想说的第二个笔记方法:PARA。(天哪这简直是神级过渡🫠~~)PARA 是 Tiago Forte 发明的一套笔记方法,主要文献是 Building a Second Brain 这本书。这个方法也是两部分,第一部分是笔记的分类,分成 projects, areas, resources, archive (PARA);第二部分是流程:capture, organize, distill, express (CODE)。PARA 的分类方法对我很有用,CODE 其实无所谓,因为 organize 和 distill 我一般会在 capture 的时候自动做,我想分开也做不到⋯⋯同时这个方法不要求我时不时地把笔记过一遍,因为 retrieval 靠软件搜索。
理论上讲,这个方法完全可以和卢曼方法在同一套笔记上共存,只要软件支持多于一种建立拓扑的方法即可。比如可以通过目录结构实现 PARA,在此基础上通过链接实现卢曼。我短暂实践过这个,但是由于前面提到的原因,我放弃卢曼了。
⋯⋯说了这么多我其实就是想说,我的笔记是 PARA 的。
我的笔记进化历程
学生时代就不细说了(虽然其实很有得说),我当时的笔记就是一些大的 ConTeXt 文件,期末的时候打成一本书带去考试。工作以后不需要写公式了,所以换成了向往已久的 org-mode。当时我的记录方式就是一个巨大的文件,按照领域和项目分章节,并且打上 TODO 标签。我觉得还是挺好用的。后来又试了下 Joplin,这软件倒也没啥不好用,就是似乎 bug 挺多,没两天我的笔记就挂掉了。
后来就知道了卢曼方法,想实践一下,网友都说需要支持双链的软件(我到现在都不知道为什么)。当时的双链笔记软件有三大巨头:Roam Research,Obsidian 和 Logseq。对我来说这个选择一点都不难,因为只有 Logseq 是免费的。Logseq 这软件真好,笔记组织方式异常灵活,而且我很喜欢它写啥都是一条一条的特点。我已经准备把我的笔记都迁移过去了,然后发现工作电脑不让用🤣(因为 AGPL)。于是左思右想,找到了两个小众的:org-roam 和 Trilium。这个选择也完全不难,作为一个资深 Emacs 用户,我肯定是选 org-roam 对吧?Org 笔记、双链、完全在 Emacs 里工作,简直是完美对吧?我也是这么想的,所以我刷刷两下就配置好了,并且把我的笔记都迁移过去。但是我很快就发现了第一个问题。我有工作和个人两套笔记,分别在两个目录里(因为要分开同步)。所以我需要 org-roam 能同时维护这两套笔记。Org-roam 的文档里说这是可以的,只要在这两个目录里分别写好 .dir-locals.el 就好了,但是实际使用的时候根本就不是这么回事。不知道为什么 org-roam-capture 的时候它总是会使用全局 org-roam-directory 的目录,而且我进笔记目录再出来以后这个变量会重置为默认的 ~/org-roam⋯⋯另一个问题是我完全搞不懂那个 org-roam buffer。这东西为什么不能自动打开?为什么有时我切换到另一个笔记这个 buffer 不会更新?我当时还遇到了其他相关问题现在都忘了⋯⋯
我在纠结这个的过程中发生了一件事,就是我当时正在改变我的整个数字生活方式(包括技术栈,详见 2024 总结),其中一个改变是放弃黑客风格的流程。我对「黑客风格的流程」定义是「当用户同时也是开发者的时候才会用到的流程」,这其中就包括所有依赖文件同步的流程,另一个「黑客风格」的例子是静态博客。在这之前,我用的笔记软件都把笔记存在本地,需要另外的文件同步系统和其他电脑上的笔记同步。但是我用过的所有文件同步系统,包括 Dropbox、群晖自带同步、BT Sync、Syncthing,都丢过文件或者发生过文件冲突。所以最后笔记软件就只有一个选择了,就是 Trilium。这个其实是我最不想用的,因为⋯⋯它是 JavaScript 写的⋯⋯而且比较难看。但是 Trilium 有服务器模式,可以只在服务器上安装,平时通过浏览器访问,这样就不需要同步了。工作笔记完全分开,本来就没什么同步的必要,所以我就直接回归原始的 org-mode 了。
两套笔记我都做好了 PARA 的框架。Trilium 里我直接用了目录结构,没什么好说的。Org-mode 里实现 PARA 方法就太多了,可以用文件系统的目录,可以用章节结构,可以用属性标注,可以用标签标注⋯⋯我最后选用了标签。我在 .dir-locals.el 里定义了一套标签:
(org-tag-alist . (
;; Projects
(:startgrouptag)
("projects")
(:grouptags)
("SSD")
("Telemetry")
;; ...
(:endgrouptag)
;; Efforts, called “area” in PARA
(:startgrouptag)
("effort")
(:grouptags)
("Manager1On1")
("Release")
("Interview")
;; ...
(:endgrouptag)
("Resource"))))))
除此以外笔记还有另一套分类,就是每个笔记都是任务、阅读和会议这三类中的一个,没有“永久笔记”,因为所有笔记都是永久的。
然后我写了一个文件叫 index.org,里面是这样的:
* Shortcuts
- [[elisp:(org-tags-view nil "SourceType=\"design doc\"")][Design docs]]
- [[elisp:(org-tags-view nil "CATEGORY=\"reading\"")][Reading]]
- [[elisp:(org-tags-view nil "CATEGORY=\"meeting\"")][Meetings]]
- [[elisp:(org-tags-view nil "CATEGORY=\"meeting\"&DATE>\"<-1w>\"")][Recent meetings]]
* Projects
[[elisp:(org-tags-view nil "projects")][List]]
** SSD
[[elisp:(org-tags-view nil "SSD")][List]]
** Telemtry
[[elisp:(org-tags-view nil "Telemetry")][List]]
...
* Efforts
** Manager 1:1
[[elisp:(org-tags-view nil "Manager1On1")][List]]
** Releases
[[elisp:(org-tags-view nil "Release")][List]]
* Resources
[[elisp:(org-tags-view nil "Resource")][List]]
* Archive
这样我就可以通过这个文件快速找到某个分类或标签。我还设置了 capture templates 用来快速记笔记。org-capture 默认会把抓取的笔记放到一个 journal 文件里,我目前的规则是如果一个笔记没有内容(我就是想记住有这么个事),就留在 journal 文件里;如果有内容,我会用一个函数把它拎出来写成单独的文件。笔记文件大概长这样:
* TODO Storage metrics are broken? :SSD:
SCHEDULED: <2026-03-31 Tue>
:PROPERTIES:
:CATEGORY: task
:Bugs: 12345
:END:
All storage_oob and storagecontroller_oob metrics are empty (at least
in prod0 which I checked).
Not sure if this is related to the new log paged added recently
bug 13579. Also for some reason prod0 log is not visible from
troubleshoot. I had to go to the machine and find the individual tasks
and see the logs from there...
这套系统的终极目标(除了记东西以外)就是解决我是谁「今天该干什么」的哲学问题。每个任务类的笔记都有一个 scheduled 时间。我每天的第一件事就是打开 org-agenda 看任务列表,把所有 scheduled 时间在过去的任务设置为今天,然后把所有今天的任务过一遍看看有哪些能推到以后的。为次我还加了几个按键绑定,按 . 把任务设置为今天,按 > 把任务设置为明天,按 / 把任务设置为下周一。
所有任务都有一个 TODO 状态,这个状态除了正常的 TODO 和 DONE 以外,还根据我的工作风格有如下几种:
-
WAIT:需要等别人干一些事,现在我啥也做不了。
-
CANCELED:老子不干了。
-
SOMEDAY:不急,以后有时间再说。基本等价于 CANCELED⋯⋯
-
POTTED:已甩锅。
总之就是突出一个能拖就拖,能不干就不干。
Org-agenda 可以说是 org-mode 的杀手级应用,我目前还没有发现其他笔记软件能做成这样的。有这个功能的一般都是项目管理软件。
以后的规划
目前这套系统已经稳定运行了两年左右,没什么太大的问题。但是我觉得一切很快就要改变了,原因当然是 AI。
很多人都说笔记不能用 AI 写,因为只有自己写才能记住,而且自己写是一个学习的过程。我觉得这完全正确,但是这里有个前提,就是记笔记是为了学习和帮助记忆。这不是我记笔记的目的,在我的经验里,学习只能靠练习和输出,记笔记都是为了考试(也就是 retrieval);我也不靠写笔记来加强记忆,因为我老年痴呆,再怎么记也记不住。我记笔记的目的就只有两个:个人离线知识库(也就是 Tiago 说的第二大脑,和考试的时候看笔记是一回事)和任务管理(org-agenda)。既然如此,为什么不能让 AI 帮我记笔记呢?尤其是工作笔记,上个破班,学什么习?记什么忆?

我现在其实已经在测试让 AI 帮我做一些简单的笔记工作了。为此我写一套 Trilium 的 skill 和一套管理我工作笔记的 skill(因为要维持类似「所有任务都有 scheduled 时间」这样的结构)。目前还没有用太多,但是已经能做到「把 bug 12345 加到我的笔记里记成一个新任务」这样的事了,前面那个笔记文件的例子就是 AI 自己记的。非工作笔记这边,我在写这篇博客的时候旁边就开着另一篇笔记,里面是 AI 生成的关于笔记的笔记的总结。
当然这套系统最终应该完全 AI 驱动,我应该不需要接触任何笔记的本体,所有输入和输出都通过 AI 完成。这时笔记的格式和软件也完全不重要了,因为这其实已经不是我的笔记,而是 AI RAG 的一部分,具体后边到底是一坨井井有条的 org 文件还是一坨数据库还是一坨 markdown 屎山都无所谓。只要 AI 能自动帮我记新任务,并且每天早上自动告诉我今天应该做什么就好。