一致性和其他妖魔
by Joel Spolsky
Saturday, April 22, 2000
User Interface Design for Programmers 第五章
原文链接 http://www.joelonsoftware.com/uibook/chapters/fog0000000061.html
Microsoft Office套件的主要程序,Word和Excel,是微软自己开发的,但是其他的是在外面的公司买来的,最有名的是FrontPage(购于Vermeer)和Visio,购于Visio。这两个程序有共同点吗?他们原来的外观设计就像Microsoft Office里的应用程序。
决定模拟Office的UI并不是为了"奉承"微软,也不是把公司定位于被收购;其实,FrontPage的开发者Charles Ferguson一开始就承认自己厌恶微软;他一再为Redmond Beasties(直到他把他的公司卖给了他们,使他的立场变得更复杂了)的事情向司法部门求助。实际上Vermeer和Visio看起来是抄袭Office的UI主要是因为这是有效的:这比重复发明轮子更简单更快速。
当Mike Mathieu,微软的程序经理,从Vermeer的网站上下载了FrontPage并试用了,它非常容易使用。而且它的易用性立刻给他留下良好的印象。
现在,当微软立刻对一个程序有了良好的印象,他们会大约支付1亿5千万美元。你的目标可能更谦虚;你想要给你的客户留下良好的印象而支付你39美元。但是根本想法是相同的:一致性使得它容易使用,而使得它给人留下好印象,从而赚到更多的钱。
一致性对人们学习和使用种类繁多的程序有多大的帮助很难被高估。在有GUI之前,每个程序重复创造最基本的用户界面。即使是一个像"exit"的简单操作对每个程序都完全不一致。在那些日子,人们只能靠记忆,至少要记住一般程序的退出命令,以使自己能运行和退出他们会用的程序。vi狂热分子记住用":q!"退出以防止他们会不小心陷入Emacs,而Emacs用户记住用"C-x C-c"(Emacs甚至有自己表示控制命令的方式)退出。而在Dos的领地,如果没有那些愚蠢的塑料键盘模板提醒你使用Alt+Ctrl+3的功能,你甚至用不了WordPerfect。我只是记住了F7,这个键能帮你使用它。
还不止这些,还有一些微小的不一致像默认的输入方式(重写或插入)会把你逼疯。在Windows应用程序中我习惯于用Ctrl+Z使用"Undo"功能,当我用Emacs时候我经常错误的最小化窗口(Ctrl+Z)。(有趣的是Emacs用Ctrl+Z来最小化窗口就是为了与csh保持一致性,这是UNIX的C Shell。)这是那些小挫折中的一个,但是这些都加起来会使你觉得郁闷。
说一个更小的例子,Pico和Emacs都用Ctrl+K来删除行,但是有一点细微的区别,每次我在Pico的时候这些细微的区别经常会弄乱我的文档。我肯定你有很多你自己的类似的例子。
在Macintosh的早期,在Microsoft Windows之前,Apple的传道者告诉每个人Mac用户平均使用的不同程序的数量比DOS用户使用的数量要多。我不解的确切的数量,但是我相信应该是DOS用户平均1或者2个程序而Mac用户平均12个程序。原因是在Mac上学习使用新程序是非常简单的因为它们都以类似的方式工作。
一致性是优秀UI设计的基本原则,但是这只是"使程序模型符合用户模型"这一公理的推论,因为用户模型被用户看到的其他程序的使用方式所影响。如果用户知道双击文本表示选择一个单词,你可以向他们展示他们以前从来没有用过的程序,他们也会猜测选择一个单词的方式是双击它。而现在,当他们双击的时候那个程序最好能选择单词(如果不是,比如是,从词典中查找这个单词),否则你就有可用性上的问题。
如果一致性的好处如此明显,为什么我要浪费你的时间和我的时间来宣传它?不幸的是,存在一股黑暗的力量与一致性对抗,这股黑暗力量就是设计师和程序员天然具有的创造性。
我讨厌做那个告诉你"不要有创造力"的人,但是不幸的是,为了使用户界面容易使用,你应该将你的创造力发泄在其他地方。对于大多数UI,在你决定之前,你绝对应该察看其他流行的程序是怎么做的,而且尽量模仿它。如果你在做一个某种文档编辑程序,最好看一下类似Microsoft Word的软件,让相同菜单项的快捷键相同。你的一些用户会使用Ctrl+S来保存;有些人会使用Alt+F,S来保存,而且还有人会用Alt,F,S(释放Alt键)。还有一类人会在左上角寻找软盘图标并点击。所有这四个最好都能用,否则你的用户要按他们不喜欢的方式操作。
我看到过一些公司的经理对自己在做与微软不一样的事情很自豪。"只是因为微软这样做,并不意味着这样是正确的,"他们这样吹嘘,然后无故地创造了一个与用户习惯的界面完全不用。在他们开始念叨"只是因为微软这样做,并不意味着这样是正确的,"请考虑两件事情:
- 即使不是正确的,如果微软在流行的软件像Word,Excel,Windows,or或Internet Explorer这样做了,然后数百万人认为这样是正确的,或者至少,他们会假设你的程序以同样的方式运行。即使你认为(就像Netscape6.0工程师就是这样的)Alt+Left并不是后退的最佳快捷键,但是有几百万的人仍会使用Alt+Left后退,而且如果你因为信仰Bill Grates是邪恶的化身,而拒绝使用这个快捷键,然后你就无故的毁掉你的程序以使你能自我满足,但是你的用户并不会因为这个而感谢你。
- 你不要这么肯定认为这不是正确的。微软在可用性测试上比你投入了更多的钱,他们通过几百万的技术支持电话来使统计各个细节,因此他们更有机会做正确,因此他们比你更有机会按用户能明白的方式设计界面。。
为了给程序创造可用的用户界面,你必须把你的信仰丢掉,谢谢。微软可能不是唯一一个你可以抄袭的:如果你正在做网上商店,你的网站至少应该和Amazon在语义上保持一致。Amazon会把你的购物车保留90天左右。你可能认为你特别聪明,因此24小时后就清空购物车。如果你这么做了,那在你的网站里把东西放进购物车的Amazon顾客,2个星期后回来期待那些东西还在。当发现购物车的东西被清空的时候,你会失去你的顾客。
如果你正在做一个给图形专家用的高端照片编辑器,我能肯定你用户中的90%知道Adobe Photoshop,因此你最好让你的程序与PhotoShop的重叠功能部分能表现一致。如果没有,人们会说你的程序太难使用,即使你认为比PhotoShop简单,因为这和他们期待的方式不一致。
还有另外一种流行趋势,重做Windows默认的通用控件。就不要让我从Netscape6开始说了。曾经有一段时间你可以辨认出用Borland的C++编译器便器的程序,因为他们用很大的OK按钮,按钮上有很大的绿色的钩:
好的,这个非常漂亮,但是中间带着一条线的O(实际上表示"否")让我想起了"OK",而且标准的Windows中OK按钮会在左边,因此我很多次都按错了按钮。用这种滑稽的符号替代"OK"和"Cancel"的唯一作用的向人们展示了你多么有创造力。如果人们因为Kai的创造力而犯了错,这只是为表现艺术必须要付出的代价。(这个对话框的另外一个问题是,它不像标准的对话框那样有标题栏,因此你不能拖动它。如果弹出了一个对话框,这个对话框问了一个问题让你回答,而这个对话框遮住的位置正好是你需要看的答案,那么算你倒霉。)
现在有很多光滑的,好看的用户界面。像kai一样的优秀的图形设计是令人喜爱的而且会吸引人们使用你的程序。做到这一点的诀窍是不要打破常规。你可以改变一点对话框的外观,但是不要破坏他的功能。
当写完Juno的第一个版本时,它拥有标准的登录对话框,让你输入你的用户名和密码。当你输入用户名,你会按下TAB切到密码栏输入密码。
现在,Juno的一个程序员经理心烦意乱,他使用UNIX比使用Windows有更多的经验,因此他经常输入用户名后按下ENYER来切到密码栏(而不是TAB)。当你写的程序的目标用户是Windows的普通用户时,一个UNIX的程序员通常不是一个理想的代表用户,但是这位经理非常坚持按下回车应该切到下一栏而不是Windows标准的"OK"。"只是因为微软这么做,并不意味着这是正确的,"他这样叫着。
因此程序员花了相当可观的时间重新写了非常复杂的对话框代码,改写Windows的默认行为。(不一致基本上需要比平台默认方式更多的工作量。)这段代码在维护时成为噩梦;当从16位转移到32位操作系统的时候运行得并不好。它和人们期待的方式不一样。而且当新的程序员加入团队的时候,他们不能理解为什么这里有一个如此奇怪的对话框子类。
最糟糕的是程序员去重写各种通用Windows控件,从按钮到滚动条,再到工具栏,再到菜单栏。(Microsoft Office团队最喜欢干的事情就是重写)。Netscape6.0已经在重写每个通用Windows控件这条路上走了这么远了。这通常会带来不可预见的不良影响。最好的例子就是编辑框了。如果你重写了编辑框,很有很多你甚至都不知道的功能会丢失(像中文输入,Windows双向版本中支持从右至左的文本)因为Windows不能识别非标准的编辑框。一些审核员在审核Netscape6.0的预览版本的时候发现它的URL框使用了非标准的编辑控件,它不支持一些通用控件的特性,像右击弹出内容菜单。
当你发现你正在和反微软主义者或富有创造性的图形设计师争论一致性的时候,他们会错误的引用Emerson的话:"与他人保持一致是头脑偏狭人士心中的妖魔。"原话是"愚蠢的与他人保持一致是头脑偏狭人士心中的妖魔。"优秀的UI设计师聪明的利用一致性,可能这并不能炫耀他们的创造性,但是从长期来看这会让用户更高兴。