写作动机
最近我在查看社区集市的时候,十分惊喜地发现闪卡插件支持了摘录和分组挖空功能。经过一番尝试之后,我发现虽然思源笔记离真正的渐进阅读系统还有一定距离,但已经不远了。因此,我写了这篇文章,总结思源笔记在渐进阅读功能上的现状,探寻思源笔记还差哪些功能才能成为真正的渐进阅读软件。
正文
满足渐进阅读的最小定义
首先,我们根据这一篇文章可以看到渐进阅读的定义渐进阅读的最小定义 - 知乎 (zhihu.com),基本定义是需要拥有以下功能:
- 间隔重复
- 摘抄
- 挖空
- 阅读点
- 优先级
- 重复的自动排序和自动延时(这是什么?)
- 知识树中的摘抄和挖空层次结构
- 易于从网络上导入
- HTML 渲染
- 图像引用传递(这又是什么?)
里面有两条功能是我不太理解的,如果你理解,请在回帖里告诉我吧。
可以发现,配合闪卡增强插件,思源笔记拥有上述的大部分功能,比如说要把一篇文章加入阅读队列,直接 ctrl+A+A 再 alt+Q 就行。但是,其中仍然有几项功能是缺少的:
- 阅读点
- 优先级
- 知识树中的摘抄和挖空层次结构
其中,“阅读点”指的是每次推送摘录卡片时,会自动下滑到上次摘录的地方。这对于长文章来说至关重要。否则渐进阅读的大部分时间都是在滑鼠标滚轮。
然后,是优先级队列了。严格意义上来说,思源也不是没有优先级队列的!当我们只摘录不挖空的时候,用的排期算法依旧是 FSRS。这样一来,我们想让优先级低一点就选“简单”,想让优先级高一点就选“困难”,变相实现了优先级队列。其他渐进阅读软件的优先队列算法也都比较简单,如 Dendro 是按照 tag 的顺序排序,太记里的 fishing 是按照笔记的入度排序,入度越高优先级越高。supermemo 的我不太了解,但据我观察,摘录少、推迟多的卡片优先级会变低。
但是个人认为这还不够。无论是 Supermemo 还是 Dendro,都是支持某一个分组之下自动使用某一个默认优先级的。比如说“学习”分组的优先级一般都会比“感兴趣的知识”要高。这样,能够把时间花在优先级最高的、也就是最宝贵的地方。这对于文章太多学不完的情况非常有用。参见渐进阅读:卡片刷不完?拥抱优先级! - 知乎 (zhihu.com)。
进一步地,还可以设定某一个分组之下自动使用某一个默认遗忘率,重要领域遗忘率就低一点。当然,这都是后话了。
此外,最好提供修改卡片 FSRS 参数的 API 让用户自由地对每一个卡片修改优先级,这样的话,可以编写一个类似于其他软件的优先级面板插件,用于更改单张卡片的优先级,闪卡增强插件也可以根据摘录的情况更改优先级。(补充一句,我没细看 API 文档,如果本文提到的 API 已经有了,就当我没说)
还有一点就是知识树中的摘抄和挖空最好满足层次结构,这其实也不能说没有实现,只不过知识树的顺序有点问题,见下图:
本来顺序应当是内容 1-内容 2-内容 3,但因为新插入文档默认是在知识树的上端,所以顺序整个乱了。问了插件作者,他说:
于是我在反馈区发了个帖:API 接口建议:创建文档时建议默认插入到子文档中的最下方而不是最上方,或者提供决定插入位置的 API - 链滴 (ld246.com)
成为更好的渐进阅读软件
如果能够成功实现以上三点,那么思源笔记就可以自称为“免费渐进阅读软件”啦!不过,要成为体验更好的渐进阅读软件,个人认为以下功能是除了上述最小定义以外比较重要的:
-
提前与延迟复习。这个其实很简单,只需增多/减少当天的最大卡片即可,FSRS 可以处理。高级一点的就是根据保留率来决定当天最大卡片数量。也可以提供 API,让社区来完成,想怎么做就怎么做。
-
语义复习工具,说白点就是筛选组来复习。思源本身就有很强大的 query 功能,不能白白浪费了。可以添加一个功能,只学习 query 到的卡片。
-
超长文章(即书籍)的处理。这一点其实 spermemo 也没做好!在 Supermemo 里,一般有三种处理方法:
- 不管它,直接一本书当做一篇文章。
后果就是,超级卡!能想象加载一本书需要卡好几十秒,进行一次摘录需要卡十几秒的痛苦吗?
但是,如果不考虑卡顿,这种方法反而是效果最好的最自然的。 - 把书拆开,一个章节当做一篇文章。
后果就是,不同章节推送的时间分布是差不多的。也就是说,有可能在你前面章节还没学会就把后面章节推给你。但是,一本书的知识往往是连贯的,你必须学会了前面的才能学后面的知识。碰到后面的章节时,只能一直推迟推迟,等前面章节学会。可这会导致后面的章节优先级很低,这期间又有新的材料补充进来,这些靠后的章节恐怕是永远也学不到了。 - 用 Supermemo 里的 Pending 队列。
这和传统阅读有什么区别?而且一次还只能读一本,必须这本读完才能读下一本。
这篇文章同时阅读上百篇文章?渐进阅读之程序员视角(IRAPP) - 知乎 (zhihu.com)揭示了渐进阅读的高效之处,就是“同时阅读”。使用 Pending 队列,完全无法吃到这个好处。更糟糕的是,Pending 队列是不存在于 Supermemo 的复习队列里的!也就是说我要学 Pending 队列里的书籍,我还要自己记得去看,用户也拿不准多久看一次好,增加了用户的心智负担,而渐进阅读的优势之一就是以最小的心智负担学最多的知识,有人称其为“自动喂饭机”,我很是赞同。不过这个话题有点扯远了,以后再单独写一篇文章。
- 不管它,直接一本书当做一篇文章。
我眼中完美的超长文章处理方法:
-
选择方案 1,直接一本书当做一篇文章,但并不是一下加载一本书,而是只加载阅读点所在的那一章节,可以通过按钮进入下一个或上一个章节
-
或者也可以这样描述(和上文是同一个方法,只不过描述不同)
- 每一本书按照章节划分成一个 Pending 队列
- 一个 Pending 队列只有一个阅读点
- 每一个 Pending 队列都是复习队列里的一个元素
- 加载 Pending 队列时,只加载阅读点所在的 Pending 队列元素(也就是只加载阅读点所在的那一章节)
-
可以通过标题 H1、H2 等拆解书籍。
结语
我是非常看好思源笔记成为下一代渐进阅读系统的。依托于优秀的笔记功能,思源笔记有着其他渐进阅读软件难以比拟的美观度、编辑功能、导入功能、反链功能;在笔记软件上实现渐进阅读,避免了“笔记”与“闪卡”的割裂,闪卡与笔记有机结合,记笔记的同时制作闪卡,刷闪卡的同时可以和笔记进行联系与组合;活跃的社区与插件系统的加入让略显小众的渐进阅读用户也能够用上令自己满意的软件。我也会努力学习有关插件的知识,争取为间隔重复用户提供一些有用的插件。
最后的最后,感谢思源笔记开发者 D 和 V,没有你们就没有今天的思源笔记;感谢插件系统的开发者 @zuoez02 ,大大降低了社区参与的门槛;还要感谢闪卡插件的开发者 @zxhd86 ,让间隔重复功能完善许多。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于