又是周末了,简单写点碎碎念。

为什么用思维导图?

最近时不时会关注一些关于高效学习的文章,“思维导图”是一个非常经常被提到的词。我之前会偶尔在纸上随手画画,但是从来没有系统地研究和使用过。我从最近的一些阅读里所理解的思维导图,基本上就是从一个话题发散,并分叉出很多子话题的大型树状图。有些变种还支持不同子话题的联系,可以用一条虚线连接(如图),这样就更像计算机算法中描述的“图”了。

v2-c311da71765f3f00e01ff41d59f317d9_720w

我对思维导图帮助学习和消化的理解是:人的短期记忆是有限的,因此很难线性地去理解一整个话题。一个思维导图能够简单明了地高度概括一个话题,阐明不同子话题之间的关系。之前可能需要 O(N) 定位的一个概念,可以在 O(logN) 时间定位。自己建立导图的这个过程也是一个有力的学习和消化的过程,因为导图在这个过程中会引导你厘清不同概念之间的关系。树状的结构能够符合很多概念之间的关系,也符合人在理解和学习时的思考方式。

在我看来,通常一本技术书的目录其实就是一个简单,高度概括的思维导图:目录和子目录解释了一个话题包含的各个概念,只不过是一条条罗列出来的。思维导图就是将他们以视觉上更友好的方式呈现出来并加以更多的解释。

另外,思维导图还有支持小组内头脑风暴,协助长期的复习和记忆的功能。我在看一些技术博客的时候也会遇到有不少博主会将一个话题的学习以思维导图的形式展示。说明思维导图还是很受欢迎和承认的。

工具和分享

小试了几款思维导图工具,有些看上去非常专业(据说能够类似于幻灯片展示),有些非常花哨带有很多功能。目前最让我满意的应该还是 XMind。这款软件核心功能开源(见 https://github.com/xmindltd/xmindhttps://www.xmind.net/),但高级功能收费。XMind 的格式是开放的,已经被各个脑图软件支持了。另外还有 MindMeister 和 MindManager,百度据说也有一个类似的产品。

比较遗憾的是,目前好像还没有找到一个比较好的纯文本的导图格式。XMind 支持 Markdown 导出,但是并不能够保留所有的信息(比如不同子话题之间的联系)。因为 Markdown 轻量,你可以手写 Markdown 然后直接导入导图软件(比如 XMind)。这对不少习惯在命令行或是编辑器里生存的程序员是个不错的功能。最重要的是,这也便于分享和再创作:这是开源精神的体现,让知识自由传播和分享,鼓励分支和再创作。这也就是为什么我希望看到更多的支持“Hack”的导图分享格式,而不仅仅是一张图片文件。

如果有更强大的轻量标记语言能够记载更多信息,我觉得会对思维导图,乃至程序员甚至各个行业人的思考方式带来更大的极大的提升。如果你不相信我,可以参考 Markdown 格式的诞生:Markdown 概括了文档中最重要的格式内容,极大简化了文档的编写,并且将封闭(Word),或是复杂格式(XML/HTML)的文档转为了更加用户友好的,更加开发者友好,更加统一的格式(比较糟糕的是 Markdown 因为各种历史原因并没有完全统一),获得了各大平台的支持,使得文档之间的分享,改进,协作和再创作变得非常容易。比如,我可以简单地提交一个纯文本的 Diff 给 一个 Markdown 文件,但对私有的思维导图格式的改进要求就比较困难。

顺带提一句,Markdown 的诞生时的很多想法来自于天才黑客少年 Aaron Swartz 的工作。他一生一直致力于推进信息的自由传播,分享。所以他合作创造 Markdown 并不是一个巧合。

对于思维导图,我个人目前更加支持采用 Markdown 方式的分享,但我觉得 Markdown 对思维导图还有更大提升空间,比如 Markdown 目前好像还没有很好地支持标题属性,标题之间的互联,和等等其他的文档属性。如果有种格式能够加入这些支持,用户完全能够使用任何编辑器编辑自己的思维导图,并以这种开放的格式分享,并导出更加展示友好的格式,比如 svg 和 HTML,而不是一张图片。

我觉得 Org-mode 可能会是一个不错的选择。

Org-Mode Is One of the Most Reasonable Markup Languages to Use for Text

Org-mode 在 Emacs 里有原生支持,而我是一个重度 Emacs 用户,因此也偶尔使用过 Org-mode。这是一款非常强大的标记语言,但你不需要太多的知识就能够上手,并且不断学习新的技巧,不断发掘其强大的功能,包括上文提到的标签,归类,等等功能。可惜因为快捷键太多太复杂,目前新一代的编辑器(Atom,VSCode 等等)里对 Org-mode 快捷键处理没有太好的支持。但这不妨 Org-mode 成为一款强大但通用的标记语言。如果它能够像 Markdown 那样发展其生态圈,将会是一个丰富的宝藏,对刚才提到的思维导图也会有非常重要的意义。

一个思维导图例子

目前在自学关于分布式系统的一些相关内容,作为例子分享如下(当然,包含了 Markdown 格式)。欢迎讨论指正。

Markdown: https://gist.github.com/hxy9243/4fbf69d16bf41fd178f02f4ac8ce70b6

更多思维工具

最近还在关注一些其他的思维学习工具和概念,比如“费曼学习法”,和 Michael Neilson 的 Anki 速记法。在我有更深入的了解之后,再抽时间分享我的一些心得和想法。