Adolf Hitler viewing the bust of Friedrich Nietzsche in 1931 © Fotoarchiv Hoffman
码农之路一走就是二十年了。前十五年应了陶渊明的一句话:"人生无根蒂,飘如陌上尘",每换一间公司或项目,技术栈也会跟着或多或少地改变。这种状态很难积累到什么有竞争力的技术,有时候幸运可以积累点,有限的大脑内存也因时间和需要腾出空间存放新知识而忘记。
直至五年前,我开始意识到大脑在中年生活杂事和技术学习的双重消耗下已经OOM(out of memory)了。加上自己希望在技术圈留下点什么,再加上中年技术人的职场焦虑。于是开始思考:如何整理与分享个人知识库
。
你或许会问:个人知识库
为何要强调是"个人"? 这和人的学习与记忆方法有关。其实大脑对学习过的东西不会切底忘记,而是把它从内存移到一个发现与唤醒成本高的角落(外存)上,为最新的学习腾出空间。而发现与唤醒旧记忆的钥匙是当时学习场景的再现,因为我们的记忆索引很大程度不是以知识内容的 hash 值来索引,而是以学习时的场景 hash 为索引。
这场景
是什么? 可以是你在学习一个知识点时辛辛苦苦在网上搜到的一篇文章或一个 ChatGPT 回答。对于我,场景多数是把主体内容上下文图文。未开始整理个人知识库前,工作中重重复复地遇到相似的技术问题时,每次都是从0开始搜索,这样做有几个坏处:
- 每次从 0 开始搜索相同内容,时间浪费
- 互联网内容不可控。搜索引擎和LLM算法周期更新,源内容网站也可以 404 文章
- 资料是找到了,但以前的问题场景数据,如 log、 thread dump 还是丢失了
所以我的目标不是建立一个什么都懂的百科全书大模型 LLM ,这只会让搜索结果更多垃圾。而是建立一个专为自己恢复记忆的,记录知识同时记录学习场景的个人知识库。有诗为证:
古人學問無遺力,少壯工夫老始成。
紙上得來終覺淺,絕知此事要躬行。
-- 陸游《冬夜讀書示子聿·選一》
说了那么多痛点,是时候说说我的个人知识库需求(设计)了:
- 尽可能记录学习场景
- 尽可能 fork 一份学习资料保存
- 可搜索
- 可网上访问
- 可选择性公开分享,可入各大搜索引擎
- 未来最好:可与知识库进行 AI 问答互动
尝试
没有适合所有人的通用方案,下面只是谈谈作为一个爱折腾的码农的我的现实方案。
资料库
Markdown Sphinx 资料库
首先每次要学习一个知识点,我都习惯性地在网上搜集资料。搜索结果往往是鱼龙混杂的,需要甄别过滤,这很花时间。为保存自已的劳动成果,避免二次甄别过滤、未来搜索结果的改变以及资料 404, 我会把有意义的资料以 Markdown 为格式,收录到我的个人 的一个相关的 git repo 中。收录时同时加入自己当时学习的上下文(如 log 、dump 、命令行和输出)。这个 git repo 可以生成一个支持目录导航和全文搜索的网站。更好的是资料可以定制是否加入目录导航中以方便所有人导航浏览。
我大概用到了这些技术:
- sphinx
- sphinx-book-theme
- myst_parser
- sphinx_sitemap
- free hosting: https://readthedocs.org/
以我在 DevOps 方面的资料库为例:
访问地址:《Mark’s DevOps 雜碎》,英文名《Mark’s DevOps Chop Suey》
随时随地,只要想回忆,我就可以转到上面网站。可以用分类目录导航浏览,也可以 crtl + k
搜索一步到位。不用再担心文章未来 404 了。收录文章时,我通常是在浏览器中复制到我的 Markdown 编辑器 Typora , 然后直接在 Typora 中记录笔记和高亮关键兴趣点。
Zotero 个人图书馆
对于论文、图书等资料,self-hosting 的 Zotero 个人图书馆更合适。它有随时随地同步与浏览PDF和笔记的能力。我以前过一个文章,有兴趣可转到:准 Self-hosting 的个人在线书架 - Zotero
私人日常琐事记录 - Joplin
曾经有十年时间,我把 “印象笔记” 用作知识库记录资料,但使用起来一直不满。最后我的结论是,用笔记的方法去整理资料,会陷入一个记得太多、访问特慢和无主题无场景的陷阱;还有,资料和个人日常琐事记录放在一起,搜索起来和浏览起来均显得格格不入。后来我 self-hosting 了 Joplin,一年了,实测使用体验是这玩意是最大缺点是功能和界面特别简陋,最大优点也是功能和界面特别简陋,让人专心随时随地记事。本文的草稿,就是用了一周的地铁上下班时间,在 ipad 上使用 Joplin 完成的。有兴趣的同学可见我之前写的:《Self-hosting 个人在线记事本 - Joplin》
升华
造个 Blog
完成资料搜集、学习实践后,如果可以写个总结文章,做个 Blog 就更好了。对于我,于是有了:Mark Zhu' Blog
要写本书吗
几十年的技术学习路,绝大部份时间,对技术界和互联网,我都是在 read only 模式下运行。但最近几年,我开始进入 read & write 模式。以前的我,总觉得自己学艺未精,不能班门弄斧;现在的我同样认为自己学艺未精。但区别是现在喜欢上"班门弄斧"。因为三年前我看到这句话:
你不需要很厲害才能開始,但你需要開始才會很厲害。
三年过去了,感恩周围所有人的支持,一本 draft 英文版本的书终于在 Amazon Kindle Store 上发行了:《Istio & Envoy insider》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。