极客时间已完结课程限时免费阅读

31 | 画图:一图胜千言

31 | 画图:一图胜千言-极客时间

31 | 画图:一图胜千言

讲述:刘飞

时长09:42大小4.45M

对于写作这种展现形式,有一种最好的补充手段就是画图。有时文字描述了半天还不如一张图来得清晰,正所谓:一图胜千言。这对于程序员特别需要的技术性文档或文章写作,都是最好的补充注解,有时甚至起到了画龙点睛的效果。
以前我在网上发一些技术博文,就常有读者留言问我是用什么工具画图的。其实我感觉他们很可能问错了问题,因为我曾经为了画好图尝试过各种不同的画图工具软件,但最后发现能不能画好图和工具的关系并不大。

一、为何?

程序员不是主要写代码的么,为什么需要画图?
有些程序员会认为写好代码就好,画好图有什么用?程序员成为架构师后是不是就天天画架构图,成为了所谓的 PPT 架构师?曾经读过一篇文章《在首席架构师眼里,架构的本质是…》,里面提出了一个架构师能力模型图,(我重新绘制)如下:
架构师能力模型图
结合我自己的经历和经验,这个能力模型针对架构师这个岗位来说还是比较符合的。程序员出色到了一定程度后想成长为一名架构师,就需要看看能力模型中的其他方面。而掌握好画图技法,对这个能力模型有什么帮助吗?
前面讲系统设计的文章《多维与视图》中我已经给出过结论:“用更系统化的视图去观察和思考,想必也会让你得到更成体系化的系统设计。”
在今天这个时代,我们都体验过各种各样的地图软件,一个国家,一个城市,一个街区,地图软件总是在不同的抽象维度上来展示地图。而对于一个复杂的软件系统,也需要类似的不同抽象维度:系统的全貌、不同子系统间的关联和交互、子系统内部模块间的接口和调用、某个关键实现点的处理流程等。一个架构师应该可以在这些不同的抽象维度上把系统或系统的一部分清晰地描绘出来。
而画图对于能力模型中的 “抽象思维” 就起到了一种锻炼,其作用就是帮助你在不同的层次上去思考系统设计,并具象化这个设计。既然具象化了设计,那么再基于此去沟通交流自是事半功倍。成为架构师之后,你自己明白还不是主要的,要让别人明白才更重要。
此外,站在一个多层次、全方位的系统架构图面前,在不同抽象维度上描绘了系统的各个重要方面,想必更容易看到问题的本质,也能更好地发现和找到系统的症结。如果解决系统的问题就像走迷宫,那么你是直接钻进去反复尝试寻找出路,还是站在更高的维度去俯视迷宫然后再找最佳的问题解决路径呢?
想必在更宏观和全局的视野下,与系统所有相关人员进行清晰准确地交流,直击问题本质,那么再进行正确而适当的技术决策与平衡取舍也没那么难了,对吧?至于 “多领域知识” 和 “技术前瞻性” 这两方面好像确实和画图的关联性不强,但如果“多领域知识”不限于程序技术领域,那画图也算一个领域的知识吧。

二、如何?

上一节探讨了画好图有什么益处,这一节我们看下如何画好图?画一个清晰易懂的技术架构或交互流程的说明图例需要什么专门的绘图知识与技巧么?另外为了画好图会花费大量的时间么?
过去几年在关于如何画好图这个课题上,我做了好些摸索和实践,想取得效率(即,画图花费的时间不会比用文字来描述同样的内容更多)和效果(即,图例表达的效果应该比文字描述更好)的平衡,在这个过程中我收获了下面一些基本认知和感觉还不错的实践方式。

1. 图形

我画技术图例时只会使用一些最基础的图形,比如:矩形、圆、三角、菱形、气泡、箭头,这些最基本的图形几乎所有的画图软件都会自带的,所以工具的依赖性很低,但真正画时的操作效率却又很高。
当然,一些著名外部系统可能都有各自知名的 Logo 图标,如果有时为了表达和这些著名外部系统间的交互,也会直接使用它们的 Logo 图标。如下面图示,就是我常用的一些画图图形元素。
我的一些常用画图元素

2. 颜色

有时系统的组成比较复杂,只用基本图形不足以表达所有不同的系统组成部件,这时就需要用颜色来区分了。
那么下一个问题就来了,该用哪些颜色呢?我的答案是使用大部分人觉得美的颜色。那大部分人觉得美的颜色是什么呢?彩虹色,当然这一点也我没有做过专门调查,只是凭经验得来。所以我一般用的颜色就是彩虹七色,外加两种经典色:黑、白。这样就有九种颜色加上好几种基本图形,可以组合出几十种表达不同组件的图形元素,基本也就够用了。
彩虹七色包括:红、橙、黄、绿、青、蓝、紫。但七种颜色的选择也是有优先级,在一本讲设计的书中 Designing with the Mind in Mind(中文译本《认知与设计》)提出了下面一些色彩使用准则:
使用饱和度、亮度以及色相区分颜色,确保颜色的高反差,因为人的视觉是为边缘反差而优化的。
使用独特的颜色,因为人最容易区分的颜色包括:红、绿、黄、蓝、白和黑。
避免使用色盲无法区分的颜色对,比如:深红-黑,深红-深绿,蓝色-紫色,浅绿-白色。
使用颜色之外的其他提示,对有颜色视觉障碍的人友好,而且也增强了可理解性。
避免强烈的对抗色,比如:红黑,黄黑。
以你看为什么交通灯是:红、黄、绿?为什么乔布斯选择这三个颜色作为 Mac 操作系统中所有应用窗体的按纽颜色,这也是暗合人类的视觉认知原则的。所以我现在多选择的是白底、黑字、黑色线条,色块优先选择红、绿、黄、蓝,实在不够用了才会选择橙、青、紫。
当然红有好多种红,绿有好多种绿,该用哪种呢?看下图所示,给出了 RGB 三原色的配色数值,这属于个人偏好,在 Mac 的显示器下看起来很舒服。但若用在其他场合,比如投影什么的,就可能需要根据投影实际效果进行微调了。
个人偏好的颜色配色参数

3. 审美

除了基本的图形和颜色选择之外,另外一个关注点是审美。
审美对最终的效果呈现有很大影响,这得感谢苹果总设计师乔纳森·伊夫(Jonathan Ive)把大众的审美倾向全部带入到扁平化时代,所以实际中我只需要把图形弄得扁平,去掉立体、阴影什么的,看起来就还不错了。毕竟我们画的是系统设计图,不是美术设计稿,审美方面的追求就适可而止了。
审美效果示例图

三、几何?

探讨了如何,我们再接着看看几何。此 “几何” 不是数学里的几何,而是掌握画图技法到底代价几何?又价值几何呢?
好些年前了,我画的技术图示(来自以前的一个分享 PPT)大概是下面这样的,总是觉得不好,不太满意,却又不知道不好在哪里,以及该怎么改进。然后就归咎于工具不好用,从一开始用 Viso 画,后来尝试了 Mac 下的专业绘图工具 OmniGraffle,觉得太复杂,后又找到个在线绘图网站 draw.io,感觉还可以,但由于是国外网站,访问效率不太好,没多久就又放弃了。
“优化前”的技术图示
之后需要做一些胶片演示时,用了 Mac 下的 Keynote(相当于 Windows 下的 PPT),需要画技术图示时想如果直接在 Keynote 里画最省事了,然后就开始用 Keynote 画了。按 “如何” 一节的指导原则,我重新画了下上面那个技术图示,如下:
“优化后”的技术图示
这花费的时间绝对不会比画上面那个多,但呈现出的效果却要好很多。所以,学会使用一种简单的软件,使用简单的图形和配色,在最有效率的情况下画出一幅效果还不错的图例,也是很有价值的。
当然你可能会认为只有写出的代码才有价值,其实这里你可能忽视了一个大部分程序员都认同的观点:代码也是写给人看的。程序员不会认为一份机器能运行而人很难看懂的代码是好代码,而画好图就能更好地帮助你去思考代码的组织和呈现方式。
曾经问我关于画图工具的人,我知道他们差的不是一个画图工具,而是对于 “画图” 本身的思维认知与技法打磨。所以在本文我分享了我近些年一直在使用的一种极简绘制技术图例的技法,毕竟我们画图只是为了追求讲清楚一个技术方案或展示一个系统,而不需要考虑任何多余的艺术性。
最低的代价,还不错的效果,在效率和效果之间取得性价比最高的平衡。曾几何时,你想象中很麻烦的事原来也可以如此简单。
关于展现的第二种形式:画图,今天的分享就到这里。你平时是如何画技术图示的?在用什么工具?欢迎你在留言区和大家分享分享。
分享给需要的人,Ta购买本课程,你将得20
生成海报并分享

赞 16

提建议

上一篇
30 | 写作:写字如编码
下一篇
32 | 演讲:表达的技术
unpreview
 写留言

精选留言(18)

  • 渔夫
    2018-10-12
    前辈,你好,我想请教一下,作为非科班出身的程序员,如果不把计算机学科知识,比如计算机组成原理,操作系统,编译原理,网络协议等,系统学习一下,是不是很难走的远,以致最终被淘汰?

    作者回复: 基础不牢,工作可能会感觉困难一些,上升的天花板会低一些

    13
  • 固态U盘
    2018-10-13
    一幅图确实能把抽象的事物具体化,以下是自己绘制技术图的经历。见笑了: 1. 机械系的运维一枚。在读书时用的是AutoCAD进行绘图(机械图、流程图等)。 2. 后来毕业接触了Gnu/Linux、Vim、Emacs、TeX等开源产品。使用的是TeX周边的工具(MetaPost、Asymptote、Tikz)进行技术图的绘制,这种工具不是所见即所得的类型,绘制起来比较费时,不过精确度比较高。 3. 后来用到了付费的产品Graphic(198¥)、EdrawMax(599¥)、XMind(899¥)、Sketch(90$),确实挺方便的,可以输出不同的格式。 4. 后来又开始使用Keynote进行幻灯片的制作,很少用它来绘图。 通过今天的学习,看到了老师通过简单的方法就可以做出优雅且美观的技术图,很受教。而且配色看起来很舒服,以后就采用老师的这种方式进行技术图的绘制,经济实惠而且优雅美观。
    展开

    作者回复: 机械制图都能搞定,这些都是小意思😄

    8
  • JarvisLei
    2018-10-16
    文不如表,表不如图
    5
  • weineel
    2018-10-12
    我用的比较多的是OmniGraffle,对今天所讲深以为然。自己有时候太纠结用什么画图工具了。 不知道老师对画流程图有什么见解,或有什么好的学习资料?还没成长到化系统架构图的级别,虽然平时也画流程图,到总觉得不得要领,很难把握重点,经常画的很啰嗦。

    作者回复: 一张图画一个流程,不要把全部的流程画在一张图上,那样可能太复杂,让人抓不到重点

    5
  • 行问
    2018-10-12
    1、在sublime里面以树形结构的书写 2、思维导图 还没有做过PPT的画图,可能是我接触的开发还很少很少,基本就是以这2种方式来解决需求、定位问题等。不过,思维导图感觉会很受限。 话外题:高手都是用Mac开发吗?新手程序员买不起,只能用Windows。而且,我从工作开始就只用Vim或在编辑器装Vim插件,却是一个异类,有几次请教问题,都会被人鄙视你用这个有什么用(因为他无法使用我的键盘),还不是不懂代码。然后,我就在心里把ta划去,因为在ta说出这句话时,我的技术、视野和思维已经超过ta了。
    展开

    作者回复: 工具自己用着舒服高效就好,但在团队协作时就要考虑整体的效率了,有时要牺牲一些自己的习惯偏好

    4
  • 行问
    2018-10-12
    1、在sublime里面以树形结构的书写 2、思维导图 还没有做过PPT的画图,可能是我接触的开发还很少很少,基本就是以这2种方式来解决需求、定位问题等。不过,思维导图感觉会很受限。 话外题:高手都是用Mac开发吗?新手程序员买不起,只能用Windows。而且,我从工作开始就只用Vim或在编辑器装Vim插件,却是一个异类,有几次请教问题,都会被人鄙视你用这个有什么用(因为他无法使用我的键盘),还不是不懂代码。然后,我就在心里把ta划去,因为在ta说出这句话时,我的技术、视野和思维已经超过ta了。
    展开

    作者回复: 高手不滞于工具,而且会制作裁剪自己趁手的工具

    5
  • 2018-10-14
    阅后留痕 首先,非常赞同一图胜千言这个观点,这个我觉得不仅在编程领域是这样,其他各个领域都基本如此,这是由于人的思维认知来决定的,复杂的逻辑通过文字的描述不一定能所有人都能理解,画图其实也是一样,不过同样的逻辑描述,使用图一定比使用文字更好一些,图更加的形象、更加的直观、更加的令人有印象感。 不过我觉得画图的痛点不在工具,颜色如何?图标如何?也是后话,关键是思维,画什么?画的图表达什么?能否表达清楚?图中的逻辑关系是否符合逻辑?画的图能否让受众更加容易和直观的接受?把自己想法装入别人的脑袋毕竟不是已经容易的事情。这些东西不是一撮而就的,要不然架构师的价值就大打折扣了 我平时工作多是整理东西画思维导图,然后就是代码的流程图,业务的逻辑图,使用viso基本能满足自己的需求。
    展开

    作者回复: 表达逻辑的方法在前文《多维与视图》中谈了一些软件系统的展现逻辑,每个领域都有自己合适的展现逻辑

    3
  • Mr.H
    2021-05-27
    processon画图用起来很顺手
    3
  • Sch0ng
    2021-02-23
    作图我也纠结过,下面是我的探索。 第一阶段,纠结啥工具画的好 第二阶段,看到李笑来说的一句话,英语说不出来是因为脑子里没有想清楚不知道该说啥,类比过来,图画不出来,是因为没想好要表达的是什么 第三阶段,刚好看到一个作图的最佳实践 第四阶段,二跟三结合在一起,才发现作图也就那么回事 最佳实践,其实也很简单,图形对齐紧凑,善用工具上的居中、对齐、上下平均分布、水平平均分布、组合,字体加粗,背景色用色板的第一排;作图之前画好草稿,拆分好组件,制作好组件,最后拼装起来。
    展开
    3
  • Joke
    2020-06-09
    draw.io有各个平台的本地客户端的
    3
  • third
    2018-10-16
    1.架构师其中一个抽象思维能力,需要用画图来表达和锻炼 2.如何画图, 图形用简单的即可 3.颜色 方便区分 对色盲足够友好 避免强烈的对比色 画图,我一般直接掏出白板纸(随身携带),直接画,如果需要电子版,在用PPT或者Word画
    展开

    作者回复: 我会用白纸画一个大概的草稿

    3
  • 艾尔欧唯伊
    2018-10-12
    抽象的、结构性的东西,图形相比文字更具有表现力。。 但是具体的东西就要结合文字描述来说明,对于coder来说,最好还能来段典型的代码大餐就完美了

    作者回复: 需要描述更高抽象维度的设计时,代码就不够直观了

    2
  • Corsica
    2019-04-16
    图形,颜色和审美,最重要的还是如何表达思想,思维的过程如何呈现出来

    作者回复: 你说得很对,思维逻辑清晰很重要,表现是锦上添花

    1
  • L
    2018-10-16
    mark 一下。以后应该会用得上。
    1
  • Demon.Lee
    2020-03-17
    draw.io 现在偶尔还用用😂,我厂CTO画图颜色用:四色模型,分享下。
    1
  • 梁浩
    2019-10-11
    架构师的能力模型挺好的
  • Ripper
    2019-06-13
    曾经也在尝试各种画图工具,最后觉得自己缺的不是工具,而是思维与技巧。 哈哈,竟然跟你想的一样~

    作者回复: 😁

  • 北风一叶
    2018-12-20
    我认为只要能画出你所要表达的主题就好了,别的都锦上添花