程式师的使用介面设计手册第一章:控制你的环境使你快乐

作者:周思博(Joel Spolsky)
译:Paul May 梅普华
Monday, April 10, 2000 A part of Joel on Software, http://www.joelonsoftware.com

大多数我认识的C++程式高手都_厌恶_ 写使用介面的程式。这让我觉得相当惊讶,因为我觉得使用介面程式设计的本质既容易又直接有趣。

说它_容易_ ,因为用到的演算法不会太复杂,最多只是让在某个矩型正中央画出另一个矩形。说它_直接_ ,因为有错误时马上就能看到并且立即修正。说它 有趣 ,因为工作的成果马上就能看得到。感觉起来就像是直接雕塑出程式。

我认为大多数程式员会害怕撰写使用介面的程式,其实是害怕使用介面_设计_ 本身。他们认为使用介面设计就像美术设计一样:是那些全身黑衣喝着拿铁极富创造力的家伙创作出艺术品的神秘过程。程式员自认是分析性逻辑性的思考家:擅于推理而缺乏艺术判断力。所以认为自己无法做使用介面的设计。

事实上我发现使用介面设计是相当容易而且合理的。它并非那么神秘,不一定要拿到艺术学位还要偏爱染亮紫发才会。使用介面是有合理的方法的,利用一些简单符合逻辑的准则就可以改善程式的介面。

我并不是要写「使用介面设计之道」。使用介面不是艺术也不是佛教,它只不过是一套规则。一种有方法合乎道理的思考方式。这本书是为程式员设计的。所以我会假设不必教你 如何 建立功能表,而是要你思考要在功能表里面放些什么(或者是否需要功能表)。我会告诉你一个所有良好使用介面设计共通的通则,而且非常容易理解

我第一份真正的工作是到一家大型的面包工厂做事。这家工厂的设计有六条面包生产线。每两条生产线有一个生面团搅拌机,可以搅拌出180公斤的面团再送到左边或右边:

Oranim_As_Designed.gif

不过这只是原本的设计。实际上搅拌机C还有生产线3和生产线5都还没弄好。所以实际的安排如下:

Oranim_As_Implemented.gif

细心的读者可能会觉得奇怪「面团怎么能由搅拌机B送到生产线6呢?」。没错,这就是约耳我出场的地方。你可能不会相信,我的工作就是站在搅拌机B的左边,用推车 接住 搅拌机吐出来的180公斤巨大面团,再把车推到生产线6,然后用类似绞车的装置把面团抬起来放上生产线6。由下午10点起到凌晨4点,我每十分钟就要重复一次这个动作。

麻烦还不只这样。生产线6实际上并不能一次处理180公斤的面团,所以我得用一份大刀把面团切成10份。我根本不想描述这有多么辛苦。

当然啦,工作前几天我很痛苦。这事看起来根本是不可能做到的。我全身每根骨头都在痛。水泡一直消不了。全身没有一个地方不痛的。

最初我根本没办法持续把面团送到生产线6。当面团来不及送到时,生产线上就会出现一个大缺口。等缺口流到炉子时,炉子(在较少的面团上消耗相同的能源)的温度就开始上升并且把面包烧焦。有时候生产线6会乱成一团停止动作,可是搅拌机却还在不停的制造面团,这时推车可能全都装满面团。这时候我就得把地板清乾净然后上油,再把面团倒在地上,等会再刮起来。这个作法其实相当有用,因为当面团放超过约30分钟后就会发酵,发酵后就做不出好的面包。这时候只能把面团切成5公斤的小块,等新面团来时每次混进一块。

过了一个多星期我渐渐熟悉整个过程。如果没记错的话,在每次10分钟的面团处理过程中我可以休息到2分钟。我把整个时间弄得非常清楚,还学会在生产线停摆时让搅拌机停一次。

于是我开始思考为什么啤酒广告会说_some days are better than others_ 。

某一天想着这个问题的时候,我注意到有一架堆车的轮子很脏,没法子转得很顺。有时候根本不朝我推的方向走然后撞上东西。有件事有点讨厌。在拉链子要把推车吊起来时,有时会被链条上的金属刺刮伤(只是轻伤)。另外还有一件事,当我推空车去装搅拌机射出的面团时,可能会踩到地上的油渍滑倒。只是一点小困扰,算不上什么大麻烦。

有时也有些小小的胜利。我学会精准地计算面团产出的时间,让新面团刚好在旧面团刚用完后几秒送达。这样就能确保有最新鲜的面团并且制作出最好的面包。另外还有些更微细的胜利:搅拌机有时会溅出小粒面团黏在墙上。这时我会用插在后口袋的油漆刮刀把面团刮下来丢进垃圾桶。没错!就只是这样。当我把面团切成小块时,有时会切到很 很_顺_ 。当我能控制我周遭的世界时,即使是以再微不足道的形式控制,还是能获得小小的满足。

这就是那一段日子的情形。很多小小的挫折还有很多小小的成功。不过这些挫折和成功都是会_累加_ 的。即使微不足道的挫折也会影响你的心情。看起来人的情绪并不在意事件的大小,反而著重在事件的数量。

于是我开始注意到,我最快乐的时候都是遇到很多小成功而挫败的次数很少。

多年以后当我上了大学,我学到一个重要的心理学理论,就是由Dr。Martin E。P。Seligman发展的习得无助感(Learned Helplessness)。这个理论有着多年的研究结果支持,是说很多次的沮丧会累积成一种_无助_ 感(也就是无法控制环境的感觉)。

你愈觉得自己能控制环境,而且所做的动作确实有效,就会觉得愈快乐。当你发现自己沮丧愤怒烦乱时,很可能是发生了某些你无法控制的事,甚至是很微细的事情。键盘上的空白键不太正常。结果打字时几个字接在一起。这会让人沮丧,因为你按了空白键可是 什么都没有 。大门的钥匙不对劲,转动的时候就卡住了。这又是另一个挫折。这些事会累加起来;日复一日就让我们变得闷闷不乐。虽然这些事实在微不足道,不应该挂在心里操心(我是说非洲还有人在 挨饿 ,看在老天份上我实在不能为_空白键_ 烦心),可是就是会影响我们的心情。

让我们休息一分钟,然后把主题拉回电脑。

我们要虚构一个典型的视窗高阶使用者「皮特」。当你在考虑使用介面时,想像一个虚构的使用者会很有帮助。虚构使用者愈真实,考虑他们使用产品时效果就会愈好。皮特是在某家技术性书刊出版社里工作的会计师,使用视窗有六年经验,主要在办公室用,偶而也会在家里用。皮特很能干而且很技术性。他会自己安装软体;会阅读PC Magazine,甚至还能写些简单的Word巨集协助办公室的秘书开发票。他家里有装缆线数据机。皮特从来没用过麦金塔。「太贵了」他会告诉你说「128MB RAM的700 Mhz PC才多少钱…」 好了,这就是皮特。我们都知道了。

有一天皮特的朋友珍娜有电脑问题找他帮忙。珍娜有台麦金塔iBook,因为她喜欢那种半透明的外壳。当皮特坐下来试着用麦金塔时,很快就遇到挫折了。他说:「我恨死这些玩意了」。到最后皮特还是能帮上珍娜的忙,不过却变得暴躁不悦。他说:「麦金塔的使用介面怎么这么烂。」

烂?他在说什么啊?大家都知道 麦金塔有个优雅的使用介面,对不对?这可是最容易使用的_典范_ ?

下面是我对这个问题的分析。

在麦金塔上要移动视窗时,用滑鼠抓住视窗任何一边就可以移动。而在Windows上一定要按住标题列才行。如果你按到视窗框边,就会改变视窗大小。皮特在帮珍娜时想拖拉视窗右框边把视窗变宽。结果却移动了整个视窗,而非照他预期的改变大小。

Windows显示讯息框时,可以按enter键_或_ 空白键把讯息框清掉。而在麦金塔上按空白键是无效的。通常必须用滑鼠来点。当皮特在看到警告时,他照着过去六年来潜意识的动作想按空白键清除讯息,按第一次没有用。皮特不自觉地更用力的按空白键。因为他认为问题一定是空白键按得太轻,以致于麦金塔没有侦测到按键。事实上麦金塔是有侦测到按键的,不过这个键当时没有作用!最后皮特改用滑鼠。这又是另一个小挫折。

皮特也知道按Alt+F4可以关闭视窗。不过这在麦金塔上却是更换_磁碟机_ 。皮特想点选桌面上的Internet Explorer图示,不过图示却被另一个视窗遮到了。所以他按Alt+F4关闭视窗并且立即在图示所在位置连按两下。Alt+F4并未关闭视窗而是叫出电脑上的碟碟机,所以他的连击就按到原先想关闭视窗上工具列中的Help按钮,然后开始叫出求助视窗。他想关闭一个视窗结果却还有 两个 视窗开着。

又是一个小挫折。不过老兄你要知道,挫折是会累积的。等那天结束的时候,皮特已经变得暴躁不悦了。当他试着控制事物却徒劳无功。空白键和Alt+F4键都「没有反应」

简直就像这些键坏掉一样。想把视窗拉宽时视窗也不听话,只会像开玩笑般到处动,完全没有变宽。真是烂视窗。虽然整个过程都是潜意识的,失控的微妙感觉却会变成无助感,让人觉得很惨。「我喜欢我的电脑,」皮特说。「我都设定好了,会照我喜欢的方式作业。可是这些麦金塔又烂又难用。根本是在折磨人。如果苹果公司这些年专心做MacOS而不是去乱搅什么Newton PDA,他们的作业系统才不会这么糟呢。」

没错,皮特。我们很能了解。虽然 麦金塔真的很容易使用(就Mac使用者而言),皮特还是会有这种感觉。要按什么键关闭视窗完全是随意的。微软的程式员(假设是抄麦金塔介面的那批人)可能认为自己增加了一个很酷的新功能,可以拖拉任何一个边框改变视窗大小。而MacOS 8.0的程式员可能认也觉得自己加了一个很酷的新功能,让你可以拖拉任何一个边框移动视窗。

大多数看到有关使用介面的论战都弄错重点了。因为Windows提供_更多方法_ 可以改变视窗大小,所以比较好。那又有怎样?这根本不是重点。重点是使用介面是否依照使用者所_期望_ 的方式反应?如果没有,使用者会觉得无助失控,就像我想推推车却撞上墙壁的状况一样。

使用介面重要是因为它会影响感觉,情绪以及使用者的心情。如果使用介面不好,让使用者觉得他们无法控制你的软体,他们_绝对_ 不会高兴,而且会怪罪你的软体。如果使用介面很聪明,让事情都能照使用者所想的进行,他们完成一件小事时就会很高兴。嘿!我拷好一片光碟了!这个程式 可以用耶!真是个好软体!好耶!!!

你必须让人们觉得他们似乎能控制环境,才能使他们快乐。要达到这个目的,你必须_正确地_ 解释他们的动作。介面必须依照他们所期望的方式作用。

因此所有使用介面设计的通则就是:

如果程式的行为与使用者的期望完全一致,就是一个设计良好的使用介面。

希列(Hillel, 犹太思想家)说过:「除此之外全部都只是注释(everything else is commentary)」。同样的,良好使用介面设计的其他所有规则也都只是演译所得。

bullet.gif 下一章:[找出使用者的期望](/wiki/The_Joel_on_Software_Translation_Project:%E4%BD%BF%E7%94%A8%E4%BB%8B%E9%9D%A2%E8%A8%AD%E8 %A8%88%E6%89%8B%E5%86%8A%E7%AC%AC%E7%AB%A0 “The Joel on Software Translation Project:使用介面设计手册第章”)

这些网页的内容为表达个人意见。
All contents Copyright 1999-2002 by Joel Spolsky。All Rights Reserved.