最近在探索「思维可视化」的一些表达方式,在这方面世界上是有一套标准叫做 UML「Unified Modeling Language」。中文叫做「统一建模语言」,它是非专利的第三代建模和规约语言。

为什么会产生 UML ?

从信息的加工和处理角度,它是一种对信息的编码和存储。统一的编码形式有利于后续的检索和提取。最早是工程师们为了消除语言表达上的模糊性,减小沟通的成本,创造了各种类型的图。

UML 的标准已经经过数十年的迭代,从功能上可分为以下两大类:

  1. 结构信息,体现元素间的层级关系,如类图,架构图等
  2. 行为信息,体现元素间的交互 (interaction) 关系

更细致的分类可以参考下图,我就不展开解释了:

UML-Diagram.png

绘图流程的反思

出于工作上的原因,我平时需要绘制一些图表。目前市面上不乏绘图的工具软件,如 Visio、XMind 等等,甚至有点太多了,这些软件大多是基于图形界面,依赖鼠标拖拽的方式。

鼠标拖拽一方面带来了操作上的便利,另一方面也意味着流程的批量化效率降低了。如何理解?当绘图软件赋予了我们更多调整样式权利的时候,使用者便容易迷失其中。这就是所谓的「果上努力」。这种调整除了让图变得很好看以外,别无他用,但是白白浪费了时间。

如果能够借助某种编程技术——其实就是自动化——来批量产生内容,就可以大大提升效率。经过一番寻找,我找到了「PlantUML」。它是个开源项目,支持用一套特定的语法体系来创建UML图,详见说明文档。开源项目一般都凝聚着很多牛逼大脑的智慧,但一般很少主动宣传,所以知道的人并不多。

PlantUML 直观感受

它的使用方式比较地 Geek,也就是说你需要用一段代码来生成它。以时序图为例,你需要掌握特定的语法。好在语言的使用者毕竟也是人,初衷也是方便人编写嘛,一般语法都以接近自然语言的方式写作,比如 --> 表示箭头。

下面这个例子展示了如何用两行代码绘制一个时序图:

1
2
Bob -> Alice : Nice to meet you!
Alice -> Bob : Nice to meet you, too!

Nice to meet you

(^▽^) →「亲自试一试」← ヾ(❀^ω^)ノ゙

这里我还写了一个简单的 Web 交互界面,点击上方的「亲自试一试」即可。

为什么用PlantUML

似乎看起来并没有简单很多?如果仅是画图的话,确实如此。但在我看来,它更多的使用场景是在于频繁修改的内容关联上。怎么理解?假如我的一个方案设计需要配图表达,那么在设计变更的时候我就需要更新图表,这个操作耗时耗力,既反人类又无必要。

对于文章的撰写者来说也是一样。假如说你为你的文章配备了一个思维导图,你自然希望它的内容会随着内容而更新。倘若我们可以用基于自然语言处理的方式得到一篇文章的主干脉络,就可以把它转成基于文本的UML语言,再将图片绘制出来,这个过程就不需要人为的参与。

想想是不是觉得很酷?更有甚者,假如说自然语言处理可以足够发达。我面对一篇没有读过的文章,我也可以将它处理成某种导图的形式。既然图片本来就是便于大脑的理解和记忆的,那会节省很多的时间,也免去了繁琐的整理过程。

目前的探索只是这个构想的环节之一。它更多的作用是要等全流程搭建完才能充分发挥的,这也是我设想的目标。

易仁永澄 - 系统思维

当然啦,整理思维导图是一个异常复杂复杂的过程,不见得能够完全批量自动化,甚至思维导图这种呈现形式也无法适用于所有的情形。然而,这些机器做不到的东西,恰恰应该是人类应该去做的事情呀!

有的系统流程本身是有一定的复杂度,表现在图上也是,例如下面这个时序图,甚至超出了一个屏幕所能表达的范围。

ComplexDiagramDemo

但是我相信,随着总结的模式越来越多,在更高的层次上,他们就会聚集呈现出某种规律性。只要呈现规律性,就可以被自动化机制所捕获。