双链工作流个人使用经验

本人在接触思源笔记后很早就看到了双向链接时代的快速无压记录这篇堪称双链领域圣经的文章,不过一直没有彻底投入 Daily Note 流程的怀抱,只在日记中零散写了一些有待整理的东西。后来有一天想整理一下知识管理的笔记,系统回顾了此前的一些无甚逻辑的随记和看过的网络文章,温故知新颇有所悟,进而开启了 Daily Note 承载万物的笔记策略,在实践中逐渐加深了对双链工作流的理解,这篇分享因此诞生。本文简单介绍个人对双链工作流的理解与使用,可以认为是对这篇帖子的致敬。

大佬的认知境界与思维深度显然是望尘莫及的,而普通人在面对笔记时要考虑的就多了,一般人往往是在学习工作实践中先遇到什么问题然后寻求解决方案,所以最在乎的事情其实是:

  • “有什么东西能满足我的需求?”

显然,每个人的需求与使用目的都是不同的,单纯说记笔记或者知识管理很有意义是没有意义的,任何笔记方案和整理方案都不可能完美贴合所有人的需求,得到所有人的认可。

理论上,每个人应当根据自身的功能需求搭建一套适配率百分百的个性化笔记方案,而这显然是一件不切实际的事情,很多人连自己到底需要什么都想不清楚,更别说设计出一个独属于自己的笔记策略了。而想要寻求一个具有足够普适性的通用笔记方案,就必然会面对拷问:什么需求更普适、更通用、更本质?

认知的有限性

人的记忆和理解能力都是有限的,可以说输入带宽有限,输出带宽有限,处理缓存有限,这些都在《金字塔原理》中有所论证。可以说,思维的有限性与信息的无限性组成了认知学习的根本矛盾,因此必须把注意力聚焦于有限的内容,尽一切可能地降低认知压力。降低人与信息交互过程中的认知压力可以说是各种笔记需求和知识管理需求中绝对普遍、绝对正确的追求,将压力降下去才会让人愿意去发挥能动性,践行将信息提炼为知识的加工过程。

一切工具的本质都是为了增强人的机能,而笔记则是对认知机能的延拓,理想的笔记方案必然有利于认知减压。知识管理不是构造精美笔记或宏大图谱的过程,而是在获取信息时减压、提炼整理时减压、组织表达时减压的过程;这个过程不会因为笔记不好看而崩溃,但会因为减压失效而崩溃。在将知识的关联组建成框架的过程中可能维持知识结构有序自洽的难度超出人的认知能力,这正是笔记体系坚持不下去的常见原因。

为了降低认知压力,除了探索先进的知识结构,还需要在信息交互的过程中进行难度拆分,将输入与整理分离,整理与输出分离,这就来到了双链工作流擅长的领域。

无压记录 & 传递型双链

双向链接各种神乎其神的用法,本质上依托于两个特性:

正向链接关注当下的关联,反向链接关注未来的关联。

以上是比较高级的说法,其实就是正链作引用,反链作汇总。

假设我忽然有了一条绝妙的点子,得益于科技发展绝对不会出现电子文档写不下的状况,那么就应当用最快的速度把内容记录下来防止下一秒就忘了(经常发生)。写完后审视内容可以将其归类到某个主题,就在其上层添加对主题的引用,这就是「当下的关联」。等以后进入这条主题想进行一次整理了就打开反链将引用汇总,这就是「未来的关联」。把整理推到未来实现输入与整理分离,这就是 Daily Note 无压记录的基本流程。

无压记录的输入流程非常简单,只要快捷键打开今日日记然后如上记录就可以了,而在实践中可能会产生一些疑问:

  • 记录完了,怎样进行整理呢?

见后文。

  • 主题引用在上方内容在下方,为什么先写内容后引用?

因为笔者年纪大了记忆释放得比电容放电还快,先思索主题归属很容易下一刻就忘了本来要记啥。

  • Daily Note 能否记录工作内容,与个人条目分离?

只要在所有工作内容上层添加 [[项目任务]],下层对不同项目工作各自引用主题,就可以在 [[项目任务]] 的反链中汇总近期工作事务,过滤个人条目。

  • 在日记里记录和直接进入主题记录有什么区别?

还是参考这篇文章,一方面直接开写速度更快,另一方面可以保留记录时的情景上下文,其他优势见后文。

  • 这和用标签分类内容有什么区别?

使用列表大纲组织内容,主题引用位于上层,记录内容位于下层,形如:

- [[练字]]
    - 倾斜偏旁可以压缩其横向空间
    - 字与字既要充分紧密,又要毫无接触

这种结构常称为传递型双链,链接所指与链接下文内容为上下层关系,即传递型双链的“上下文”内容归属于引用目标。对于无压记录,在进行引用时不一定关注链接本体内容,起作用的是引用目标处的反链;而只有反链的引用本质上与标签功能无异,因此传递型双链可以使用标签代替,使用文档级引用而非块级引用软件也不是不行。

当然,与其说传递型双链的本质仍然是标签,不如说反链为主的传递型双链覆盖了标签的作用。与标签相比,双链引用具有更灵活的转换能力,思源笔记中块引用右键菜单功能包含转换为动态锚文本、静态锚文本、纯文本、单向链接、星号静态锚文本、纯文本 + 星号静态锚文本、嵌入块,以及引用和本体(或本体包含子块)转换,标签的互动性被薄纱,仅剩的优势在于全局性和可嵌套性。当然思源特地做成了标签与双链解耦的架构有利于二者同时使用,参考这篇文章的标签用法。

既然反链为主的传递型双链与标签近乎等价,那么有没有正链为主的传递型双链呢?单就形式而言,传递型双链的特征是一层列表中只含块引用,其余内容位于上下层,如果以正链为主那它大体上可以视为一层 MOC,描述的不是整理归属而是逻辑关联,不过本质上起得还是分类作用。

一般而言,不表达整理归属的引用被称为关联型双链,用于内容间关联或指代,其本质上是用引用的本体补充锚文本,或者说把锚文本用作比内容块更小的粒度。考虑到传递型双链的形式特征明显,还是很容易与关联型双链区分的,例如在思源中可以用以下 SQL 语句查询文档的传递型双链:

select * from blocks where id in (select block_id from refs where def_block_root_id = '20240225124718-d7c6wb7') and markdown in (select markdown from refs where def_block_root_id = '20240225124718-d7c6wb7') order by created

配合文档流插件可以获得完美的整理体验。

使用 Daily Note 无压记录的过程非常舒适,我们自然会去想有了输入之后怎样去做整理输出,毕竟笔记需要整理是一种不敢忤逆的政治正确。对笔记和知识管理的批判超出了本文的讨论范围,这里只介绍 Daily Note 输入的内容怎样在需要时进行后处理。

日记内容的整理

双向链接时代的快速无压记录中介绍了通过反链汇总内容与直接将内容拖进正文的处理方法。这种操作的优势在于很容易确保内容唯一性,省得为笔记付出更多精力;缺点则是将内容移走会丢失原始上下文,而保留上下文一方面可以留存信息来源,另一方面为未来再次回顾提供了可能,从未来的自己对过去的自己的知识碾压中产生成就感。当然这都不是必须的,只有在实践中着实体会到对信息原始生成情境的需求才有必要额外加以考量,降低认知压力永远是第一要义。

本人过去习惯于将日记挪到正文以清理主题反链中的传递型双链,直到后来才意识到问题:为什么必须把日记作为笔记整理的前期存储,而非内容本体呢?

使用正链引用日记内容

根据无压记录流程,日记中的传递型引用指向主题分类,主题的对应反链为待整理内容;而主题的非传递型反链即关联型反链表达内容关联即“知识结构”,那么问题来了:

  • 日记的反链有什么用?

了解过使用 MOC 面向主题地管理笔记后,应当理解了怎样根据主题拆分内容、使用链接引用内容;而有了块粒度的引用,完全不必纠结内容本体的位置,只要在用到的地方加一个正向链接,就可以用锚文本代替本体使用。因此,清理传递型双链时完全不用将日记内容移走,只要在主题中对日记内容进行引用即可,这样日记中的块级反链指向内容的实际上下文,而原本的传递型引用可以转换成纯文本按需命名,反正在主题中出现的只是引用的锚文本。这样主题的反链也清理好了,内容也整理好了,日记中的原始上下文也无需变动,整理速度仅次于不整理。

这种策略相当于对传统的 将内容拆分成文档后引用 的方法进行改造,将内容拆分成块放进日记后引用,也是只有块级引用才能支撑的用法。这里块引用的概念指的仍然是用锚文本指向本体,而不是原封不动的内容嵌入。嵌入块存在不利于修改、不能随意转换、失效后难以追溯等问题,个人不喜欢多用。

用指向日记的正链做整理解决了上下文问题,规避了锚文本和嵌入块编辑体验差的问题。但如果有人想保留原文中的部分文本并进行修改,或者说在保留原始上下文的基础上调用内容重新表述,怎样解决静态锚文本差的不行的编辑体验?

重述型双链

Conor 工作流中对重述内容的做法是使用 * 锚文本指向原文,思源笔记也支持将引用一键转换为 文本 * 的形式,其中的文本就是原本引用锚文本转成的纯文本,而星号则是对原本内容的引用。无论形式如何,这种双链形式既不同于传递型双链的上下层归属,也不同于关联型双链的锚文本指代本体,其实际发挥的是以下效果:

  • 链接所指与内容为重述关系,即在保留原始上下文的基础上对内容重新表述;
  • 引用与本体内容相同或相近,即具有因果参考关系,而非关联型双链中用本体补充引用的调用关系。

这种双向链接可以称为重述型双链,其形式与作用均区别于传递型双链和关联型双链。采用时髦一点的说法:

传递型双链是函数声明,关联型双链是封装调用,重述型双链是多态重载。所以这个世界就是一个巨大的程序员

使用重述型双链能够尽可能确保内容来源具有唯一性,同时到处使用内容而保留各处上下文。但功能越灵活使用越复杂,一份内容各自表述必然会增加笔记复杂性,想要维持其可用性就要用到两条双链笔记记录规则

  • 引用应指向最详细的块

最详细的块信息最丰富,可以作为某段主题内容的唯一本体块,其他与该内容有关的引用均指向该本体块。对于重述型双链,所有块是对同一内容的复述,引用指向本体块而非链式引用可以最大程度确保正链易用性;而本体块的反链面板可以按创建时间查看迭代形态,无需反复跳转。

  • 引用应指向关系最密切的块

使用重述型双链时需要尽可能精确指向,避免内容重构时引用歪掉。

由此,在对日记进行整理时可以将内容复制进本体块后在原文段末或上层建立指向本体块的重述型双链,不带星号的自然成为本体块便于搜索定位,这就是基于重述型双链的整理方法;而静态锚文本可以只用在关联型双链中,不用于费劲地承担内容重述。进一步可以用以下 SQL 语句在文档反链中排除重述型双链:

select * from blocks where id in (select block_id from refs where def_block_root_id = '20240714215737-c86znvl' and (not content = '*')) order by created

其中把 not 去掉则是筛选出重述型引用。


以上两种整理方法是个人的笔记方案,使用重述型双链整理碎片内容,使用正链引用整理结构化内容。无压记录 + 内容整理结合基于链接 MOC 的主题管理已经足够完成输入与整理分离、整合的过程,最后要考察的就是怎样组织内容输出。

整理 & 输出

虽然通常语境里会将双链工作流划分成前期记录后期整理,不过输出才是真正意义的后期工作,整理只算中期。不过如果笔记面向的只有自己,那么从输入到进行一定程度的整理就已经完成了知识的获取提炼,没有必要花更多精力折腾笔记了,认知减压腾出的心智盈余应该投入到其他更有意义的事情比如在实践中应用知识。如果一定要进行输出表达,就要认识到这是比记录和整理更为困难的事情,因为:

输入和整理过程始终围绕自身的认知展开,而输出必须要同时考虑表达者和接收者的认知减压。

采用先记录后整理,输入与整理分离的策略,一方面有利于碎片化输入,而更重要的是因为初次输入信息时的理解程度必然低于有所积累后的理解程度,先碎片式输入进行“练级”,等认知升级再来回顾整理,就能形成等级压制,更轻松地完成此前做不到的内容,这就是渐进输入的原理。而等到想进行输出时,表达者对欲输出内容的理解程度必然高于接收者,因此应当承担将内容组织成易接收形态的责任,降低接收者获取信息的输入压力。这种组织工作虽然同样颇为艰难,但对于表达者而言肯定比对于接收者而言更简单,因为前者在自身的输入整理过程中已经经历了“练级”,在输出前已经对所要表达的内容及其知识背景有更完整清晰的理解。因为要兼顾信息输出与输入两重减压,所以才有必要将整理与输出分离,不能指望自己已理解的内容直接发出来就能让别人理解。搞过深度学习的人都知道跑别人代码第一步先要配环境,环境不一致就会各种报错;同理在组织输出时不能指望读者与作者的认知图景完全一致,所以需要合理地将用到的知识 import 进去对齐认知基础,把表达内容转化成更容易吸收的形态。

上面一大段只是为了论证为什么应该将整理与输出分离。双链工作流产生的整理所得只能用于表达的大纲规划、作为输出的内容材料,不能反链汇总直接当做输出,因此双链的功效到这里就结束了,真正撰写文章组织排版其实不太用得到双向链接,最多用嵌入块偷懒。不过对于表达者而言一篇输出文章本质上是对自身已有内容的重新表述,因此可能要考虑怎样使用重述型双链连接原始内容而不影响输出排版,比较简单的方法是:

使用 HTML 注释放置非输出内容

将重述型双链置于 HTML 注释中:

<!--
****
-->

每个星号表示一个重述型引用的锚文本,既不影响输出又能表达引用关系,非常完美。

使用补充

以上介绍了个人对于双链工作流使用的理解,除了输入与整理分离、整理与输出分离外,还有一些值得补充的功能用法。

转移引用

这个功能是将将一个块的被引用链接(入链)转移到指向另一个块上,使用方法参考转移引用功能使用详解,使用转移引用插件还可以更细致地选择对一个块的哪些引用进行转移。有了转移引用功能可以对输入后的整理进一步兜底,例如:

  • 在无压记录时不必担心引用主题不合适,可以等整理时根据全新的理解将其转移到正确指向目标;
  • 进一步的,甚至可以在建立传递型双链时直接写 [[待整理]],把分类工作都推到未来,想初步整理时再转移引用;
  • 在整理时想重构某部分笔记体系了,可以新建文档后利用转移引用重新规划内容结构,旧笔记体系及其链接有用转移没用直接忽略掉。

需要注意的是,目前思源笔记的单向块链接不支持转移引用,因此不建议将块引用转换成单向链接。

列表大纲

思源作为以块为基础的文档型笔记软件,先天具备完备的表达能力和统一的块粒度,完全继承了文档型笔记的传统优势;而与此同时,以 JSON 为基础的列表块在性能与操作手感上能够碾压以 Markdown 语法为基础的列表,使其完全可以当成一般的大纲笔记使用而毫不逊色。在思源笔记中使用列表组织双链工作流具有以下优势:

  • 列表项是最稳定的块类型,且列表的树状层级逻辑具有高度鲜明的结构化特征,统一使用列表项可以避免容器块引用挂掉的问题;

  • 引用列表项可以在浮窗或反链中显示子层列表,展示内容更丰富;

  • 自定义块样式插件能将列表转换为表格、导图、看板,提供更丰富的布局,例如:

    1

  • 列表配合 Daily Note 的性能优势:

思源笔记的性能对文档数与块数不敏感,而对块大小敏感,因此先分散记录后汇总整理可以避免在单个列表块中记录使其大小不断膨胀而不断面临性能下降的问题,减小为加载性能额外付出的整理成本。准确而言,这是将列表块的大小变化从周期锯齿形转换为周期冲激形,只需要在每次汇总时处理大列表块,平时就不会遇到性能衰减。

在使用列表项时需要注意块引用的操作细节:

  • 对列表项块标或圆点右键块菜单复制的块引用、嵌入块对应于列表项层级,包含圆点符号和子层列表;
  • 光标在文中使用 Ctrl+/ 块菜单,或光标不在文中时对内容使用右键块菜单,所得的块引用、嵌入块对应于列表项中最内层块如段落的块链接,不包含圆点符号和子层列表
  • 使用 Ctrl+拖拽块标 复制块,使用 Alt+拖拽块标 复制块引用。例如先将已有反链的块移动到目标位置,再复制回原处并建立重述型双链。

最后吹一下思源笔记,纵观本地笔记软件,思源好像缺少一个标志性的宣传词,显得颇为中庸。事实上思源笔记可以说集百家之长,糅合了各种笔记理念,各种用法至少都可以付诸实践,很适合作为通用知识管理方法论示范软件。


以上是近期学习使用双链工作流的一些经验心得,希望本文能让读者对思源和双链有些新理解。作者才疏学浅,仅作抛砖引玉。

无理取 N

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22337 引用 • 89380 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Imuvux

    正统的 Markdown 支持 HTML 语法,所以 HTML 注释会不被显示,可以在注释中写东西还不影响 Markdown 文档的渲染效果;而思源内不支持直接使用 HTML 语法,放在注释中的内容会正常显示出来。理想情况是在写作时把一些不需要显示在发布中的内容放在 HTML 注释语法里,然后导出 Markdown 文档在预览时不会将其显示出来。现在看来这个操作其实局限性不小,最好还是具体情况具体处理。

  • 其他回帖
  • Wetoria 1 赞同

    我主要是看看你的写法,结果如我所料。

    系列文下周开始更,当时候交流吧。

  • anyeyq

    使用 html 注释放置非输出内容这一块没有看懂,楼主可以讲详细一些吗?为什么这招会“既不影响输出又能表达引用关系,非常完美”?

    1 回复
  • mark-j 1 1 赞同

    无论什么形式,双链说白了就是希望能保留“原文出处”,方便回溯。其余用法就按传统笔记去用就行了

  • 查看全部回帖