因为我提倡一种非标准的方法,Jon Galloway在一段评论里点了我的名:
Web表单已经成为一种规范。用户已经被培训了10年,他们很清楚怎么去填写这些表单。如果采用其他方法,用户会感到困惑,有些人还会落荒而逃(丢掉购物车,等等)。Web表单很有效,我们都知道如何使用它们。你给出的例子在很大程度上违背了“别让我思考”的原则。
从某种意义上来说,他是对的。就编码而言,正如Steve Rowe指出的那样,协调一致总是优于标新立异:
Peter在课堂上反复强调的一些建议才是本文的重点。可能有人会问,“我难道不能以一种时髦的方式来做这件事吗?”他回答道,“你可以,但是没人希望你那样,因此你也别那样做。”他的立场是,作为程序员,我们不要自作聪明。我们应该尽可能采用与其他人一样的方式去做事情。为什么呢?因为在编码这件事上,你不是单兵作战。即使真是你一个人,你下一次接触那块代码也将是1~2年之后了。如果你做了些玄妙的东西,后面的人看到代码之后将不能马上理解。其结果无非就是下面的二者之一:他们必须花上10分钟才开始有点明白你当初的意图;或者更为糟糕的是,他们认为你做错了,然后以一种不太玄妙的方式来“纠正”你的错误。两种结果都是不理想的。除非你是单干,而且代码是一次性的,否则你必须以一种容易被理解、从而容易被维护的方式去编写代码。
在写代码方面,抱着“试一试这种方式怎么样”的态度显然是不明智的。AlexPapadimoulis很风趣地指出了这一点:
有个客户请我定制了一个货架,还要我帮他安装。在我准备把货架固定起来的时候,我碰到了一个问题:我该用什么来敲钉子呢——旧鞋跟还是玻璃瓶?
a) 这就得看情况了……如果你是在往诸如干板墙的东西上钉一个20磅的小钉子,你会发现用瓶子要容易得多;尤其是在你的鞋子还很脏的情况之下。但是,如果你要往木头上钉一个很粗的钉子,那还是用鞋子比较好一点——要不然,瓶子会砸碎在你手里。
b) 你做这件事的方式存在根本性的错误。你需要使用真正的工具!没错,这意味着你要去打开工具箱(甚至跑一趟五金店)。但是,用正确的方式做事会节省你的时间和金钱,还会延长产品的使用寿命。除非你真正理解构造某样东西的基本要素,否则你不应该花钱动手去做。
然而,如果说到用户界面,一致性却并不总是好的。用户界面应该内部保持一致,但横向与世界上的其他应用程序保持一致就没必要了。也就是说,有些UI元素在大众文化里已经根深蒂固了,为了一致起见,它们应该被保持。典型的例子有:
- 右上角的搜索框;
- 左上角的商标(Logo),并且点击之后能回到主界面;
- “前进” 按钮和“后退”按钮。
但是,不是所有用户界面规范都是同等重要的。有些是久经考验的;有些就是缺省情况下被使用的,它们的存在只是因为没有人正儿八经地提出足够的质疑;还有些已经不合时宜,变得越来越不适用了。问题是,我们怎么来区别真正有益的规范和不合格的“规范”呢?
答案当然是,尝试多种不同的方法,收集用户使用数据,并以此来判断什么可行、什么不可行。这种做法(相对而言)对于Web应用是容易的——亚马逊、雅虎和谷歌经常这么干,他们在这方面已经“臭名远扬”——他们把一些试验性质的功能特性推给一小部分用户,收集数据以分析这些功能是如何被使用的,并把这些数据作为决策的依据。
在用户界面方面,如果我们总是墨守成规,超级好用的Tivo UI还会诞生吗?还会有惊艳的Windows MediaCenter吗——它的电视界面可完全不像Windows?Office 12会抛弃传统的工具条和菜单,转而使用新颖的功能区来组织界面吗?真见鬼,我们还会从纯文字年代过渡到GUI年代吗?
我认为,用户界面方面的试验不仅值得去做,而且也是必要的。如果不做试验,我们的用户界面就不会进化。关键是,我们必须采用正确的做事方式:
- 全面了解当前的规范以及它形成的缘由;
- 偏离这个规范需要有理有据;
- 在试验过程中收集用户使用数据;
- 基于数据做决定。
如果你不收集用户使用数据,或者你的理由是“这样看起来更好”,那么你就是在犯错误,还不如老老实实遵循规范吧!