程序的设计美学

对于把编程当作兴趣的人来说,编程越久越会觉得『编程是一种艺术创作』。很多人认为程序员一定爱编程,但真相并非如此,从我周围的统计数据来看,真正爱编程的程序员不足10%,大部分人都是把编程当做营生的手段。

从付出回报比来看,编程是近几年收益最高的职业。即使是零基础,到培训班魔鬼训练三个月后也能找一份薪资待遇不错的工作。为了追求更好的生活,很多不适合当程序员的人也干起了写代码的活。在当前大环境下,大部分程序毫无设计可言,在市场推崇的『敏捷』开发模式下难见好的设计,只是培养了无数CRUD Boy与SQL Boy。

设计的好的程序像一件艺术品,对使用它的人来说思想上能得到升华。每次遇见时,都会嘴上赞不绝口,心里意犹未尽。同样一件艺术品,一千个人看就有一千个哈姆雷特,程序也是这样,你觉得完美无暇,其他人可能并不认同。但是别放弃,总有规律可寻。

在看完『设计心理学』之后觉得收获很多,结合程序设计谈谈自己的理解。

Affordance

示能:指一个物理现象与人之间的关系,也就是物品的特性与决定物品预设用途的主体之间的关系。简单概述为,有形的物品如何传达出人们与它们互动的重要信息。

用直白的话说就是事物通过自己的外在形态,向人们展示自己具有的功能。比如,你看到一张桌子,你就知道它可以放东西;看到一只铅笔,就知道它可以写字;看到一顶帽子,就知道它可以佩戴;

你会通过自己过去所拥有的生活经验去预设你与某个事物之间的关系,就像你会不自觉的给周围的人打标签。你的一个朋友是牙医,之后任何和牙齿有关的事情你都会想到这个朋友。你的一个朋友是律师,之后你有法律相关的问题肯定会想到这个朋友。这就很奇怪,为什么人会不自觉的给周围的朋友打标签,并且为标签赋能?其实不是我们主动为他人打标签,而是每个人都有Affordance。

你的Affordance是什么?这个问题值得每个人去思考。每一段程序也都有自己的Affordance,程序拥有什么样的Affordance由程序员决定。比如PHP的Affordance就是快速开发,性能糟糕,世界上最好的语言(贬义)……

Signifiers

意符:以前产品都比较简单,比如勺子、镜子,他们的功能一目了然,但是随着科技的发展,产品也越来越复杂,很多时候单纯靠外观根本分辨不出这些东西到底具备什么功能,如何使用。比如企鹅,很可能会被认为是QQ(聊天软件)。这个时候,就需要借助设计的智慧将产品本身具有的功能通过一些方式展现的更加明显,让人一眼就可以知道,它能用来做什么,怎么用。

比如,看到门上的把手就知道门后有房间,顺时针转动就是开门;看到墙上的开关就知道能控制电源,接通或者断开。意符不只包含物品自身所表达的含义,而是通过场景化的方式让人产生联想,从知道物品有什么用,到怎么用。比如你有个朋友是牙医,你总是看到他肩上有厚厚的头屑,你会怀疑他是个不讲卫生的牙医,以后看牙肯定不会将他作为第一选择。再比如你发现你的律师朋友喜欢背后说人坏话,也会让你对他的专业性产生质疑,你有一套理论支撑自己快速的完成从A到B的演算,这就是Signifiers。

你的Affordance是什么?比如我是程序员,很多人会为我打上木讷的标签。但是看了我的文章之后,觉得我爱瞎扯,程序一定也写的差。那么我的Signifiers就是程序写的差的程序员。意符,就是让人看到后产生联想,从而得出正确的结论。比如大家都知道Node.js速度很快,但是试了下回调和同步编程后觉得很不适应,于是得出Node.js不适合写后端项目的结论。

Mapping

映射:映射源于数学概念,它指在使用产品时人们对产品进行操作、控制等行为与其进行这些行为之后产生的结果之间的关系,这种关系叫做映射。

比如,你想使用遥控器转换电视节目,按向下的按钮,电视频道进入下一个节目,这个向下的按钮就是电视频道跳转下一个的映射。这种映射已经记录在人们的大脑中,这种映射还能正反转换,比如你想看下一频道,肯定会去按向下的按钮,这是正向映射。你不小心多按了一次向下的按钮,你心里很清楚频道会切换两次,这就是反向映射。

映射在编程中用到的极为广泛,比如hashTable,编码解码,内存映射等等。

Feedback

反馈:指在进行一次沟通行为之后的结果,结果必须是即时的并且能提供有用的信息,还要以一种不显著的方式展示出来。

最常见的就是按钮,例如电视的开关按钮,在按压之后会有弹起和很小的机械声,弹起的反馈能让你的触觉接收到,声音能让你的听觉接收到,在接收到信息之后就知道这次按压的沟通行为成功了。再比如空调,按一下遥控空调会发出『滴』声,你听到声音后就知道这次沟通成功了。反馈要以一种不显著的方式展示出来,如果按一下空调遥控板,空调『滴』了一分钟,这就是太显著的反馈,会适得其反。

反馈在UI设计上用的非常多,这里不展开讲。我们说说TCP三次握手的问题,为什么要三次握手(那么多)?为什么要三次握手(那么少)?这个问题要分成两部分来回答。

A和B的微信聊天记录:

A:做我女朋友吧?

B:好的

到这里A和B沟通了两次,但是B并不知道A收到他的消息没有,心脏都要跳出来了。所以A这个时候应该马上回一句话(反馈),表示自己收到了。所以3次聊天才是两个人确定关系的最少次数。当然你可以聊几万句使得关系更稳固,对谈恋爱的人说很重要,但对程序来说没那个必要。做任何事情,及时且不打扰的反馈都很重要。

Conceptual Mod

概念模型:通过抽象得到高度简化的流程,用来展示事物如何工作。比如电脑中的文件夹、文件,就是在帮助人们建立一些概念模型。其实电脑根本不是按照文件夹这种方式存储文件。

通过概念模型可以使用户能够预测自己行为的结果,比如你将A文件拖动到B文件夹下,即使不打开B文件夹你也能预测到A文件肯定在B文件夹中。好的概念模型就是产品的呈现模型接近用户心理模型,这一点iPhone和微信都做的很好。比如在iPhone上删除软件,长按软件图标之后图标会一直抖动(一些无法删除的软件不会抖动),然后点击删除软件就被删了,非常符合预期。而Windows和Android只是删了个图标,真正的软件并没有删除,并不符合人们脑中的概念模型,这就是糟糕的设计。

编程本身就是一种概念模型,计算机并不能执行我们写的代码。代码需要通过编译器编译成二进制机器码后计算机才能执行。利用概念模型,人们可以将编程语言设计的更符合人类的思维模型。

写了很多,希望大家能将这些设计方式用于日常生活与工作中。如果想看源代码,我推荐PHP的Symfony,一个非常符合设计美学的项目。

打赏时请留下微信号