人都喜欢美好的事物,所谓爱美之心人皆有之,设计自然也要讲究美学。Vitruvius曾有句断言:好的建筑架构要满足“坚固,效用和情趣”的要求。这个断言已经被证实了:穴居人会在洞穴墙上绘制图案,美国原著民会装饰他们的帐篷,史前英国人会用手工雕刻品装饰瓷器,再回到我们文化底蕴丰厚的祖国,更不必多言。软件设计就是跟程序打交道,谈及程序,比起美学,严谨更加适合它,那么软件设计就可以不必追求美学了吗?显然不是,软件设计要追求的是逻辑美。
逻辑美有很多要素,首先是简约。“优雅”需要简约,在数学中对优雅的一个定义就是“使用更少的元素完成更多的处理”。人们也倾向于将简约作为编程语言的设计原则,计算机设计必须将简约放在重要的位置上。这里以编程语言的学习喜好来说,并没有编程语言比较的意思,我们都知道C/C++作为可以触及底层的语言,它们有一种结构严谨的魅力,但要是谈及简约,或者说非常方便学习上手,大部分新手都会选择python,往往几行代码就能实现的效果放在其他语言上就需要翻一番代码量。
逻辑美的第二要素就是结构清晰。只要写过一段时间代码,看到那些条理清晰的模块代码感觉自然而然就上来了。公式化说明的话,人们希望语言或者计算机架构具备某种程度的坦率性,从想要说到如何说要有个直达线路,而不是谜语。技术设计中的“优雅”就是让人们易于理解,看一眼就知道是什么流程,即使是繁琐一些的逻辑,至少能在解释的情况下让观众消化理解。
第三要素就是一致性。这方面代入一些例子更好理解,比如你要出席一场宴会,白背心配西装裤显然不太合适,给人一种强烈的违和感,如果是一身西服正装,再给人的感觉就不太一样了。让观众从逻辑上认为你的设计是“配套”,不显突兀的。作者在讨论这方面知识时以计算机架构为例,谈及设计原则。从一致性的角度看,设计原则分为正交性,适宜性与普遍性。解释为不将独立的东西链接起来;不要引入无形的东西;不要限制固有的东西。一致性是通过不断加强与自我学习实现的,它与环境因素有很大的关系,目前的技术思路与十几年前肯定有所分歧,对一致性的敲定自然有所偏差。一致性会证实并鼓励我们的期望,解决易用性与易学性之间的冲突。
美学中自然有关于风格的定义,如抽象派,唯美派,卡通派等等。那么技术设计中有没有风格?当然有,而且答案显而易见,严谨,一致,简约就是我们最基础的设计风格。程序是不带感情的执行者,它只会按照你给定的情况运行下去,我们只要满足需求就可以了。那如果想在此基础上整些花活儿呢?就要看设计者的功底了,这显然需要花时间去学习。