软件设计与优雅:论优雅的本质
编者按:优雅这个词我们耳熟能详,而且喜闻乐见。优雅属于那种你见到就会知道的东西。但是,什么叫优雅?优雅有统一的定义吗?如果没有具体可衡量的定义,那么设计就真的只能是一门靠感悟的艺术了。幸好,有人对此进行了探讨。文章来自编译。
就算复杂之中也蕴含着优雅
(资料图片)
实用性、主观性与正式性的混合
就像在其他领域一样,优雅这个词在软件领域也充满了力量。我惊叹于优雅如何以多种形式体现,并一直在自己的工作当中想要找到优雅。但是要想欣赏优雅,就必须对优雅是否总是值得实现保持开放的心态。
优雅的解决方案是不是更易于理解和维护?优雅的文字是不是更加清晰有力?优雅的设计是不是更易于使用?优雅的软件架构是不是更容易实现?事实上,实用性、简单性、可用性与优雅性之间是存在差异的,每一种属性的可取性也各不相同。
首先,何谓优雅?
我们先去发现一下优雅吧。数学就特别的纯粹优雅。欧拉恒等式就是典型代表,它传达了如此多的信息,但形式却如此的紧凑:
欧拉方程
诗歌则是优雅以文字形式的体现,就像爱德华·艾斯特林·卡明斯(e.e. cumming) 的《anyone lived in a pretty how town》里面的这节诗一样:
“anyone lived in a pretty how town”
代码是文字与逻辑的混合,因此文字或逻辑的优雅体现在代码的优雅上。下图展现了用 Haskell 语言编写的两个程序。两个程序做的事情是一样的:都是打印《99 Bottles of Beer On the Wall》这首歌的歌词。但哪个更优雅?是这个:
Haskell 写的“99 Bottles”,版本1
还是这个?
Haskell 写的“99 Bottles”,版本2
在这一点上,优雅的单一定义也许是最不可能的解决方案。我更喜欢迭代归约(reduction by iteration),因为考虑到实现优雅的行为与优雅的结果之间没法区分。我想到的另一个对优雅的定义是在信息水平给定的情况下熵最低的解决方案,将优雅与信息论联系起来。如果用图形学表示的话,给定解决方案空间里面最优雅的结果将位于信息水平恒定的特征平面的低点。
三维信息空间
给定信息水平下熵最低的解决方案。
复杂系统的优雅
人们可能会把优雅误以为就是简单,但优雅实际上与秩序有关。请记住,优雅关乎的是信息的排序方式,因此,随着信息量的增加,优雅的东西不一定就是“简单的”。所以这就是我选择了一个曼德博集合(Mandelbrot set)作为标题配图的原因。这个分形图蕴含着庞大而复杂的信息内容,但在每一个层次上都以重复的模式进行排列,因此非常的优雅。
有序、无序以及复杂性属于混沌理论的范畴,混沌理论认为,混沌复杂系统具有潜在有序的模式,而无序系统则没有。对于外行来说,“混沌”这个词需要一些时间来适应,但基本上,混沌系统的下一个状态基本上都是之前状态的函数。在真正无序的系统里,你是无法预测最后的状态的。
即使是极其复杂的系统隐藏的秩序也会创造出一种很细粒度的优雅。比方说,自然界承载着几乎无限量的混沌有序的信息,这就是为什么我们脑子里对自然的优雅永远都不会厌倦。
大自然永远不会变老
考虑到人造作品需要携带的信息,我们认为人造作品就有序而言是优雅的。这个想法可以追溯到我在 1999 年时读到的一篇论文,《波洛克滴画分形的视觉复杂性》。
杰克逊·波洛克(Jackson Pollock) - 秋天的韵律(第 30 号)
波拉克的滴画也许具有永恒之美,因为它跟自然混沌性的内容很接近。还有一些牵涉到物质的人类实践,由于其融入自然的程度之深,可能永远也不会过时。日本茶道优雅迷人,因为它可能在刻意地自始至终地将自然的混沌元素贯穿其中:茶沫、抹茶的颗粒、浅色木材和竹子,以及不规则形状的搅拌器等。
茶道用具
风格与美学息息相关,这是我们下面要强调的一个重要观点。
流行文化与表达中的优雅
前面我展示了编码的优雅是如何源自数学与文字的优雅的,以及像曼德博集合这样的复杂系统如何成为了数学上的优雅与美学上的优雅之间的桥梁。比方说,剑桥公爵夫人凯特王妃(Kate Middleton)所体现的那种优雅的流行概念又如何呢?她是属于通俗意义上的优雅,但她符合我们的定义吗?如果公爵夫人衣冠楚楚,但衣衫凌乱,那就显得不够优雅了。相反,她经常都是衣冠楚楚并且衣衫整洁。考虑到她要传递的信息是经过了精心安排的,所以她很优雅。
啊,凯特王妃,多好的一顶帽子啊!
着装的优雅
优雅可以延伸到时尚以外的许多人类活动之中。比方说,弗雷德·阿斯泰尔(Fred Astaire)的舞蹈就体现出优雅。阿斯泰尔的舞蹈与复杂有序系统这个概念很搭。我们永远不知道他要做什么,但我们知道他是怎么到达那里的,而且他很优雅;也就是说,他有一种简化的方法,可以保留他想要传达的精彩信息的本质。
运动的优雅
进一步探讨的话,可以看到有些体育艺术天生就融入了优雅。精力善用是柔道的两条基本原则之一,意思是“最大限度地运用好自己的力量”。不妨看看柔道摔(Harai goshi)是如何有效地依靠重力而不是力量将对手扳倒的。
以柔克刚就是优雅
与柔道一样,人类对优雅实在是太着迷了,以至于在某些艺术里,作品都是以其是否优雅来评判的。
布置的优雅
事实上,我对插花的心智体验与我对设计用户界面的体验非常相似。这是为什么呢?不妨回想一下我对优雅的定义,“给定信息水平下熵最低解决方案”。可以将插花问题看作是一个 3 维网络或“边”:
布置的优雅- 抽象形式
每个点代表一朵花或一般信息。根据一些基本公式(公式内容可能包括每条边的长度、不交叉或交叉的边数、边长的变化,可能还有边之间所包含的区域等等),其最佳排列是熵最低的形式。会不会那个公式的最佳解决方案一般不止一个,从而可以做出各种艺术解释,未必存在谁比谁更好的情况呢?还是说可能存在单一的最优性,也就是对于任何给定的一束花,“最佳”的布置只有一种?在思考这个问题时,请记住,如上图所示,解决方案曲面可能位于具有多个最小值的平面内——在这种情况下,即代表着不止一个的最佳艺术解决方案。
一旦我们弄清楚了这个公式,也许我们可以将它的“变体”应用到设计其他东西上面,比方说设计用户界面!这已经有各种各样的先例,尽管是在另一个领域。 彼得·乌菲莫切夫(Pyotr Ufimtsev) 在著作《衍射物理理论中的边缘波方法》里面提供了雷达截面的公式,将隐身的艺术变成了正式的工程实践。说不定用户界面也存在着类似计算的熵公式,从而可以提供优化设计的手段。
优雅的局限性
有一些实际的考虑会限制优雅的运用。比方说,一个优雅的软件解决方案对解决方案所携带的信息可能会过于节省,节省到别人都没法维护的地步。以下是另一个看似不优雅的设计示例,应该是由知道自己在干什么的人故意做出来的:
MSN 截屏
MSN 等主要媒体门户网站将可用性置于优雅之上。这种选择未必永远正确。我有时候觉得谷歌的设计师过于迷恋优雅,以至于陷入到只是为了显得“更”优雅而减少信息的地步,因为他们有时候有“让可发现的界面少一点”的倾向。比方说,Google Docs 往往会让“寻找我知道已经存在的东西”变得不可能。
因此,追求优雅有时候会与设计目标相悖。我曾经围绕着上下文设计过一个界面,这个界面要适应系统的状态,是“渐进式互动”的变体。界面优雅的设计让用户始终与需求贴近,我对自己的设计很满意——但也许这一设计是错误的。在这种情况下,信息似乎已被无偿删除掉了,而界面违反了预期的模式,并且可能还降低了可导览性。注意,不要让优雅变成一种迷信。
优雅设计的自由度
我一直使用的优雅定义是“在给定信息水平上最有序的解决方案”。现在我们不妨考虑一下什么时候可以改变信息,这可以扩大优雅设计的范围:提供足够的信息,以便可以有效地进行必要的推理。换句话说,首先要考虑可用性;这一点和审美上的考虑是 Stuart Feldman 2014 年那篇《一种测量工程制品优雅度的方法》的主要考虑因素。Feldman 其实是通过测量秩序来衡量美学的。
可用性(信息水平)与美学(秩序)共舞在 Tufte 的《定量信息的可视化显示》一文当中得到了精彩的探索。Tufte 的优秀示例包括查尔斯·米纳德 (Charles Minard) 在 1869 年制作的那张著名的图表,上面显示了拿破仑 1812 年远征俄罗斯战役军队的人数、他们的行动以及他们在返回途中的气温情况。
查尔斯·米纳德绘制的拿破仑 1812 年征战俄国行军流动图(1869 年)
在纽约市地铁图的演变过程中,也发生了一场名副其实的美学与可用性之间的较量。这是我第一次乘坐纽约地铁时使用的地图,由 Goldstein、Vignelli 等人绘制。这张地图过分(to a fault)简单了。请注意“错误”(fault)一词。
Goldstein、Vignelli 等人绘制的纽约i地铁图(1972)
70 年代的纽约地铁图清楚地展示了线路与连接,但系统的相对规模未能表示清楚,因此阻碍了乘客制订旅行计划,影响了他们对自己在系统中的实际位置的认识。70 年代后期对地图的更新引入了相对地理精度,如下图所示。
John Tauranac 与 Michael Hertz Associations 绘制的纽约地铁图(1978 年)
自那以后,带有地理信息的地图就开始不断演变,变得越来越尊重实际的地理比例。请记住,这种对优雅的另一种定义牵涉到可用性与美学。我敢说 Vignelli 制作的地图更优雅,但此后地铁图的可用性已经大大提高了。话又说回来,大家的品味自 1970 年代以来已经发生了改变。也许较新的地图对其当前受众来说,在美学上是同样的令人愉悦——还记得我前面提到的风格的改变吗?只要我们将设计与物品综合到一起,随着我们审美的不断演变,其优雅性可能会随着时间的推移而发生改变。
优雅的基本实用性
在众多追求当中,实现优雅不仅意味着对问题的理解,还意味着对问题的精通。物理理论越优雅,可解释的现象就越多,这表明该理论正在接近现象背后的潜在模型;量子力学被认为是迄今为止最好的理论。程序员追求优雅也是同理。虽然问题的近似表述必须不断修正才能搞定不适合的地方,但一个优雅的解决方案可以覆盖所有的情况,因为它与问题完全一致。如果是真正的优雅,就永远都不需要更新,不会因为底层模型不可预见的特性而失败,并且不需要处理异常,而且理解起来也更容易。我曾经用几个月的时间写过一个很复杂的系统。然而就在昨晚,我终于对模型有了一个优雅的理解。然后我把折腾了几个月的工作扔进垃圾桶,并在一天内重新编写了整个系统。
用一个比较的笔记作为结束
这个优雅的定义来自 NASA 的 《设计优雅的系统》(Engineering Elegant Systems: The Practice of Systems Design)。在我看来,它对“丰富性”的使用是信息内容的同义词。
系统工程的合适目标是产生优雅的设计,这个想法最早是 Robert Frosch 在一次演讲中提出的。他指出,当他向系统分析师提出这个问题:“这是解决实际问题的优雅解决方案吗?”的时候,往往得不到回应。他们不明白这个问题是什么意思。优雅这个东西当你看到时就会明白,但定义起来却并不容易,尤其是在系统意义上的定义。Webster 对优雅的定义是“庄重的丰富性(richness)与优美(grace)”。这阐明了意图的态度以及对系统的社会反应。这个定义标识出了关键的系统属性。“庄重的优美”传达出各种应用的使用或操作具有显著的易用性。 “庄重的丰富性”传达的是应用具有显著的稳健性,系统意图获得了完全的实现,未完全指定的意图也得到了满足。雅致(concinnity)这个词可以为这个定义提供进一步的帮助。Webster 将雅致定义为“各部分的巧妙安排,和谐且优雅”。这传达了系统组织得当的想法,且对系统的相互关系做出了巧妙定义。系统美学体现在丰富、优雅与和谐的理念之中。系统布局和构造的效率还体现在系统的“巧妙安排与和谐”上。结构得当的系统必是高效系统。或许可以将系统优雅定义为“该系统应用健壮、完全满足指定以及概述的意图、建构得当且操作优雅”。
资源
关于优雅及其实用性,可以看一篇很出名的论文《在系统设计中用优雅来降低复杂性》(Elegance as Complexity Reduction in Systems Design)。我自己也曾经冒出过类似的想法,这是一般性理论往往会如何意外涌现出来的又一个例证。
译者:boxi。
关键词: