用户体验和用户界面设计的目的是什么?有哪些步骤呢?一些没有经验的工程师觉得,“我先把代码写好,然后有一些会画图的人来把界面改一改就好了……”,这种想法是非常幼稚和有害的。另一方面,如果认为工程师只能等着设计师的线框图才能开始工作,这也是同样幼稚的。

用户体验的设计步骤和目标

用户体验设计的一个重要目的就是要降低用户的认知阻力(Cognitive Friction),即用户对于软件界面的认知(想象某事应该怎么做,想象某操作应该产生什么结果)和实际结果的差异。我们来看一个具体的例子,如果用户(一个生活在中国二线城市,有高中文化水平,有基本计算机基础的成年人)要在一个文稿中写居中的一句话,在下表所列的各种工具中,用户是怎么才能做到的。

倘若认知阻力大,学习曲线就会比较陡;但是经过学习和练习,如果用户适应了新的认知模式,工作效率便会有较大的提高。

作为练习,同学们可以讨论一下,如果用户用的是 VI(或者 Vim 等变种),如何完成这一任务,这个编辑器的认知阻力有多大。一般用户对于 VI 这种强大编辑器的抱怨是,它有好几种模式(Mode),同样地敲键盘,有时候是输入文字,有时候是控制,我们常见的“纸和笔”没有这些不明显的“模式”。

需要指出的是,软件工程师往往以熟练掌握认知阻力大的工具而自豪(例如命令行操作、VI、Emacs 等编辑器),这对于工程师的工作是有帮助的;但是大多数用户的心理是要躲避认知阻力。

用户体验设计有哪些步骤呢?一个成熟和常用的方法是分阶段进行设计和探讨(下表由左至右不断迭代细化)。

QQ20170627-231009@2x.png
QQ20170627-231009@2x.png

评价标准

那么对于一个软件的用户界面,我们有没有什么评价标准呢?可以参考费茨法则(Fitts law)注释 12、Nielsen 启发式评估十条原则以及其他经验。

下面是作者在自身实践的基础上总结的一些原则:

1.尽快提供可感触的反馈
系统状态要有反馈,等待时间要合适。现在程序发生了什么,应该在某一个统一的地方清晰地标示出来。一个目标用户能够只靠软件的主要反馈来完成基本的操作,而不用事先学习使用手册。系统的反馈可以是视觉的、听觉的、触觉的(例如手机振动)。但是要避免简单重复的提示。

2.系统界面符合用户的现实惯例
与用户沟通,软件系统要使用用户语言而不是开发者语言,所用的概念要贴近生活实际,而不是用学术概念或开发者的概念。我们说的生活实际,最好是目标用户的实际生活体验。例如,在用户没有期待对话框的时候,软件从奇怪的角度弹出对话框,或者给用户提示“找不到对象”。

QQ20170625-142045@2x.png
QQ20170625-142045@2x.png

3. 用户有控制权
操作失误可回退,要让用户可以退出软件(很多软件都没有退出菜单,这是导致用户反感的一大原因)。用户可以定制显示信息的多少,还可以定制常用的设置。

4. 一致性和标准化
在软件中,对同一事物和同类操作的表示用语,各处要保持一致。例如,某词典软件有“帮助用户收集生词并且背诵生词”的功能。这个功能要有明确一致的称呼,不能混杂着叫“单词本”、“生词本”、“Word List”、“Word Book”、“单词文件”……等等。

5. 适合各种类型的用户
我们的软件要为新手和专家提供可定制化的设计。一些操作方式,如快捷操作,用户可以自行调整。我们还应该为存在某些障碍的用户(色弱、色盲、盲人、听力有缺陷的用户、操作键盘鼠标不方便的用户等)提供一定程度的便利。对于长期使用某个软件的用户,软件应该能适应用户的使用习惯,让用户越用越顺手,最后产生感情上的好感和忠诚度。

交互设计的一个原则是:如果某个看似不明显的交互操作解释过一次之后,就很容易理解,那么这就是一个好设计。

6. 帮助用户识别、诊断并修复错误
软件的关键操作要有确认提示,以便帮助用户及早消除误操作。要注意使用朴素的语言来表述错误信息。错误信息需要给出下一步操作提示(我现在出错了,那下一步怎么办)。必要时提供详细的帮助信息,并协助用户方便地从错误中恢复工作。

让所有的用户都可以通过电子邮件或者表单来提交反馈意见。有些程序用一对简单的笑脸/哭脸符号来鼓励用户提交反馈,这也是很好的办法。

7. 有必要的提示和帮助文档
不需要文档,用户就能使用自如,当然更好,必要时还可以提供在线帮助。有些软件在首次启动时会通过图示或动画展现某些新功能的用法,或引导用户进行一些基本的设置(例如第一次使用输入法时,让用户选择候选词的个数、字体大小,等等)。这些都是不错的方法。


《构建之法》读书笔记之三