程序员的喵

我的知识管理工具和经验

2021-11-23

知识管理是近些年出来的逼格称呼,通俗点说就是写笔记或者写作,讲究一点可以说成“打造第二大脑”,英文中可以诗意地称之为“Digital Garden”。看看,同样一个事怎么说出来格局完全不同了。

近两年笔记软件这个领域出现了两个很重要的创新:

一个是双向链接,开山鼻祖是 Roam Research ,一个是一切皆对象和可无限嵌套的设计,也就是 Notion

因为这两个大方向上的微创新,现在笔记类软件和系统百发齐放,这是真是最好的时代了。

作为程序员我分享一下自己在这类工具上的使用经验、感受以及建议。

大概十多年前,还在学校的时候,博客文化刚兴起,所以很多记录类的东西我都写在博客里了。那些常见的博客系统我基本都用过,后来很多都倒闭了。当然 Wordpress 现在在非程序员中都非常流行。

后来很长一段时间我都是用 Evernote,国内版本叫做印象笔记。用的人多了各种周边的工具也非常多,比如浏览器插件之类的。这类笔记软件也非常多。

三四年后我又渐渐不使用印象笔记了,因为我用了很多年 Emacs,所以偶然尝试了 org-mode。这东西结合 GTD 可玩的方式可太多了。org-mode 日程管理,日志,文档都在本地,一切都是纯文本的 org 格式,我通过 Github 来做数据存储。一切都是文本并且本地化就可以自动化,我可以自己写一些脚本,自己定义各种模板等等。虽然是纯文本的格式,我也可以很方便地到导出成 PDF , 甚至是做演示。很多人是为了使用 org-mode 才一直用 Emacs,我也曾经认为自己找到了以后一直用的记录工具和方式。

在这段时间,我养成的一个很好的习惯是使用 Github 来存储自己的数据。Github 已经成为最基础的互联网设施,我信任这个平台胜过其他服务。Joe Armstrong 在去世前一年,把自己的文章迁移到 Github,感兴趣的可以看看这篇不错的文章 People Die, but Long Live GitHub

后来,我因为换工作的原因不怎么使用 Emacs 了。最近一年工作内容变了,自己日常开发和业务时间使用 Windows 更多。业余时间基本是用的 WSL,配合 VsCode 日常开发体验很棒。而 Emacs 在 Windows 上使用体验很不好,我也没找到合适的移动端解决方案。虽然最近 WSL 也支持 Linux Gui 了,但我已经懒得折腾,因为我已经离不开 VS Code。

我需要重新找一个笔记类工具,我的需求是:

  1. 本地存储文件
  2. 足够的自定义
  3. 支持 Markdown
  4. 支持双向链接

这个需求其实满足了绝大部分程序员用户,一个文件夹加 Typora 估计都差不多了,但是我觉得双链这个设计确实有一些价值,所以也变成刚需了。

在摸索的过程中我试过 Notion,Wolai,Logseq,Obsidian。

Notion 确实有耳目一新的感觉,而且 UI 的审美很好,用户做出来的笔记可以很美观整洁。而内嵌 Database 可以打造出来很多好玩的东西,甚至可以用来做站点。缺点是服务器在国外,不太稳定。

Wolai 提供 Notion 类似的块编辑以及大部分功能,而且很早就有双链接,服务器在国内所以速度上也很快。版本更新很快,有很多针对中文用户的细节优化。如果不想折腾用 Wolai 也挺好的。Wolai 和 Notion 是比较重的工具,已经超过了通常我们理解的笔记管理软件的范畴。

Logseq 是 Roam Research 的模仿品,但是提供本地存储的方式,也有桌面版软件。很多人赞赏 Roam Research,不过我没有觉得这种方式完全适合我。Roam Research 的正常方式是每天都在日志页面记录,然后写的过程中加上适合的链接,这样你的文档渐渐构成一个网络。如果你日常中经常用到的概念,自然就会经常被链接,那么就会是网络中的一个密集点。所以即使你不建文件目录,这种文档之间的关系也会自然而然形成,并且比目录这种单线的关系更符合直觉。

最终我一直保持使用的是 Obsidian。Obsidian 支持本地存储数据的方式(也可选择付费远程同步)。我使用一个 Git 的插件自动同步到 Github。

Obsidian 的客户端做得如此出色,而且扩张性极好,已经形成很成熟的插件生态。这是我的记录汇成的网状。

在使用 Obsidian 一段时间后我又体验了 Flomo,这是一个不错的软件让我们迅速把日常的想法记录下来。我想如果 Flomo 的数据能够同步到 Obsidian 就好了。

看了一下 Flomo 的接口,我觉得干脆还不如自己动手重新实现来练练手。我就动手自己实现了一个 Web 单页应用 obweb,然后部署在自己的服务器上。这个应用提供一个简单的页面来记录日常的想法,文字或者图片都能迅速提交。数据提交后同步到 GitHub。这个 SPA 页面可以内嵌在微信浏览器,所以使用体验和一个小程序差不多。

而后我又增加了搜索的接口,这样我所有 Obsidian 的数据都可以在手机端检索和查看,而且我也能做一些简单的编辑。实际使用下来这真的比一个独立的手机应用更方便。

最近我又新增了一个 Rss 阅读的功能,后台会自动根据我的订阅列表抓取 Feed,甚至会尝试把网页和图片都下载下来,这样即使是一些”内网”不能直接访问的文章也可以在手机端无障碍阅读。

在这个过程中我学会了 svelte 这个前端框架和 Rust 写服务端接口这些东西。虽然我的 UI 设计和前端技能简直就是渣渣,但是这就是完全贴合我的使用习惯的软件,我可以做到所有细节的定制化。

这是一种渐进式的开发体验,每隔一段时间我会在使用过程中摸索一个需求,然后我会稍微等一等,如果这个需求还是存在并且我考虑好了如何实现,我就会加上去。

折腾这么多年这类软件后,我的感受是工具的使用都是非常私人化的选择,作为程序员我们有能力使用自己的技术来定制化工具来提高效率。最近看到这篇文章 You’re Allowed To Make Your Own Tools 很好的阐述了这个观念。这就像是住房子一样,如果你自己是设计师,估计不会满足房地产商提供的统一装修,而是根据自己的喜好和习惯来重新设计。房子也不是越富丽堂皇就越好,简单但实用即可。

所以在文档和写作这块,数据本地纯文本的方式是对程序员更好的方式,你可以自己写程序来处理这些数据,而不是完全依靠软件或者第三方的功能。比如这篇文章就是我在陪小孩上课的过程中,用手机在 obweb 上敲出来,服务器上的脚本会自动转成 Hexo 里的 Markdown 文件,提交发布到我的博客。

最后,我们现在有很多华丽的工具来用,也要避免让自己变成一个纯粹信息的收藏者。

‘数字花园’不是一股脑地往后院搬东西就行,需要花时间精心打理和修剪。工具并不能本质地解决问题,难的是日复一日坚持记录自己的想法和理解,整理知识。柳比歇夫使用纸和笔记录了自己奇特的一生,并且完成大量研究工作。

记录的过程并不是学习本身,而是思考。通过记录这种形式,把自己的理解写下来促进思考,才能产生最大的价值。

更多参考:


题外画:

一个有趣的事是,除了 Roam Research 和大厂的传统产品,目前兴起的这些笔记类软件和服务大多是中国人开发的,包括 Notion、Obsidian、Logseq 等。我们可能真的比较喜欢这类东西,“好记性不如烂笔头”乃民族真传。

另一个事实,Roam Research,Logseq,以及另外一个开源的类似产品 Athens Research 都使用了 Clojure 这门编程语言来实现。Clojure 作为一门 JVM 上的 Lisp,其热度还没进过前 30 吧。这门语言对于数据处理这样的项目是比较合适的,只是不太适合大团队使用。

公号同步更新,欢迎关注👻