前言
想着从业几年来,我的困惑比我交的女朋友甚至是认识的女孩子多多了。开始为学习一种什么样的语言发愁。后来由于项目用C语言我没的选择只好从Pasical和VB转业。在偶尔的机会要让我做一个把各种复杂结构的数据串行和重组,苦于C语言实现的复杂低效,我进入了C++的大门。再到后来,发现公司牛人不少却发现项目管理一团糟,所以迷上了软件工程。觉得软件工程的确要严格遵守。严格的经历过瀑布式开发,尝试着进行了迭代式开发,最后发现结果仍然不是想象的那么好。国内那红火的ISO9000、CMM我还没怎么经历它就从媒体上冷却了。Bug依然是一波接一波。于是觉得自己的设计能力不够强。于是乎,执着于设计模式,重构方法。别人敲响了过度设计的警钟,老板也告诉自己做的这个精巧的采用了新技术的软件不够赚钱。在讨论是否将软件嵌入系统内核中间时,在看别人用很老套的方法写的软件却很赚钱时,我突然发现,纯追求技术的高精度,高难度是吃力不讨好的。你的方法再先进,你的设计再严密,最终还是用户说了算。用户从来不会认为你那个搜索引擎架构如何之好代码如何漂亮对他有多重要,他们只需要有有一个文本输入框能输入文字然后一点搜索就能找到他们的最想就可以了。他们从来不觉得一个简单的文本框配上一个强大的搜索引擎是不伦不类,鲜花插在牛粪上。同样,无论你是小作坊开发,无论你用最拙劣的实现方法,用户是不关心的。用户最关心这个软件是自己需要的吗?好用不?便宜吗?只有他们满意了,他们掏腰包了,你的价值才实现了。
怎么让用户满意,这个问题简直就如爱情的哲学一样复杂。我只想说点简单的、容易找到资料的,就形成了以下的有关于人机界面的文章。重点的地方我会注明来源,好让你们看不懂了再重新看看原著理解理解。J
良好界面的重要性
想一想Windows发展的历史,从那种命令行模式的DOS,再到DOS环境下运行win命令出现Windows窗口的Windows 3.1,再到Windows 95,再到Windows NT, XP等等,微软靠一次又一次的升级造就了今日的微软帝国。似乎用户也是特别的傻,他们一边抱怨新的操作系统让他的机器落后于时代,一边抱怨Windows就是病毒,一边又忙不迭的安装升级包,为了装一个操作系统去更新他们机器的硬件配置。是微软逼它们的吗?显然不是。Windows的成功真正的原因大体来说应该是在于它不断的满足了用户的需要,不断的提高程序的可用性,不断的提高了界面的易用性,并且采取了有效的市场推销策略。
总的来说,软件不成功的原因可能不尽相同,但软件成功的有一点是相似的:它们都具有友好的界面。
好的界面不仅仅是好看,也是软件成功的必要条件。你在界面的投入不仅仅在于满足软件现有用户的需要和支持,而且可以争取更多的用户使用你的软件。所以,你在界面的投入直接影响到软件现在及将来的市场。
随着计算机硬、软件环境的不断提高,用户对界面的易用性,美观性要求也会逐步的提高;如果你的应用程序的声音现在还是那种PC扬声器发出的嘟嘟声,你的程序还是256色位图,你的程序在1280x768的分辨率下乱糟糟的,这样的程序(除了CMOS配置程序)会有人用吗?对于功能差不多的媒体播放器软件如Winamp, Windows Media Player,QuickTime和RealOne Player,如果要你付钱的话,你究竟会买那一个?我想,你可能会选操作最简便的那个吧。再者,如果你的软件产品是一种新型技术的产品,比如说是现在的智能手机软件,你如何让用户更快的上手呢?(你可以调查一下周围的手机操作界面,你发现不同品牌的软件操作方式大相径庭,键盘布局变化无穷,你就会发现手机是一种很难用的东西)。如何让你的软件的用户更快的享受到你所创造的价值呢?
如果你的软件在国内卖得很好而你想扩大市场,你想走向海外。你要做些什么呢?你只要将你的软件和文档翻译成各国语言就可以了吗?不,不,绝对不是如此。为了让你的外国用户使用上手,为了降低你的客户支持成本,你必须想办法让你的软件更符合外国用户的使用习惯,不能有因文化差异而造成软件的误用。让你的软件操作方式尽可能的与操作系统的操作方式一致,这会降低你的服务成本同时更快的让用户上手,而且可以吸引更多的用户使用你的软件。
所以说,用户界面的好坏直接影响产品的竞争力,所以,在推出市场之前,我们要关注人机交互界面的设计。
下面,我就简单的说说用户界面的设计原则。这很多来源于《Windows用户体验》一书入门章节。
用户界面的设计原则――用户为中心
一切在用户掌控之中
一个用户界面设计的原则是用户应该感觉是自己在控制软件而不是软件在控制他们。这有几点说明:
1. 操作的主体是人而不是软件或者计算机。程序可以自动执行一些任务,但用户可以控制这些任务。
例 1 Windows XP服务控制窗口。Windows服务进程不能通过任务管理器里杀掉,但大多数服务仍然可以通过服务管理器把它停止。请同时注意Windows考虑到这些高级控制的复杂性,特别为普通用户提供了解释信息以及还有命令超链接。
2. 由于用户自身的不同情况和喜好,界面必须允许用户做一些个性化设定。操作系统在这方面提供了很多途径让用户自由设定。所以,你的软件必须适应于由于用户更改了系统的诸如颜色,字体等属性而引起的变化。
例 2 Microsoft Office Word 2003 选项对话框给用户提供了个性化设置的接口
3. 你的程序应该尽可能的保持互动性能。应尽量避免程序处于不可操纵状态。不可操纵状态是指某个时刻限制用户做某些操作或者根本不允许用户操作。比如说,你尽量应该不让光标变成沙漏状态(当然,如果需要沙漏状态时,要一定将光标变为沙漏状态);还有,尽量让负载进程在后台运行而让界面仍处于可交互状态。比如打印时虽可能不能重新打开别的文档但还是可以最小化窗口。
例 3 Windows XP在更改桌面主题时整个桌面的变化。这时候虽然用户不能操作计算机,但Windows提供了非常好的反馈,特别是那个从彩色渐变到全灰度图片的场面让人过目不忘。
直观性
软件的设计目标应该是让用户直接看到操作的结果。无论是用户拖放一个目标对象移动位置或是将打开的文档翻页,用户都应该直接从屏幕上看到他们所操作的结果。可视化的信息和选择可以减轻用户负担。
使用相类似的比喻可以更直接和直观的让用户操作对象。比喻可以更容易的帮助用户预测要发生的结果和更快的让用户掌握软件的使用方法。
当使用比喻的时候,你没必要严格与现实情况一一对应。比如说,不像普通的文件夹,计算机中的文件夹就可以将打印机、计算器等归类到一起。
例 4 微软Windows XP回收站图标与苹果Mac OS X垃圾箱图标有异曲同工之妙。只不过Mac OS X的垃圾箱实在是漂亮,真想取下来拿回家里用。J
一致性
一致性允许用户将老知识和经验应用到新的环境中,这样保证了用户学得更快,更加将注意力集中到未解决问题上,因为他们并不需要花时间记忆使用过程中得差别。通过一种稳定的、一致的延续,可以让用户对界面产生熟悉的感觉和更加明确的预测交互的结果。
界面中的所有元素都需要保持一致性,包括命令的格式,信息的可视化表示,操作方式,在屏幕和窗口中的组件的摆放等。为了将一致性切实落实到软件之中,你必须要考虑以下几点:
1. 程序内部保持一致:对于常用的功能要使用大体一致的命令和界面。就"拷贝"命令来说吧,要避免在一处采取直接执行的方式而在另一处则通过弹出一个对话框要求用户输入目标地址然后拷贝的方式。也就是说,同一个命令在所有地方的操作方式都应该是一致的。
2. 和操作系统行为保持一致:操作系统力求所有的交互都达到一个高度的一致,这样如果你的程序的交互行为和操作系统一致,用户就不用学习新的东西就能使用你的软件。
3. 采用一致的比喻:如果喻体的某些行为和本体的行为不大一致,用户就会对两种事物的联系感到困惑。比如说,如果将一个东西从焚化炉和从垃圾箱中取出,那意义是绝对不一样的。
当然,界面兼容历史版本的一致性(显示一致性,操作一致性)有时也会造成软件维护和维护添加新功能的困难。其实界面设计和程序设计一样,也需要考虑可扩展性。可扩展性也可以说是一致性的延伸能力的体现。如何提高界面的一致性和可扩展性,也是一个非常值得考虑的问题。纸短话长,就此打住。
容错性
用户喜欢尝试着使用一个软件。有效的界面设计会和用户交互从而帮助用户使用这个软件:它们只将可以操作的选项列出,而会让那些使系统或数据发生潜在危险或破坏的命令在执行之前警告用户,而更好的界面则提供了回退或恢复的行为。如很多编辑软件中的回退(Undo)功能。
即使是设计的最好的界面,用户也会有误操作。原因有可能是物理操作失误(比如说点击了错误的命令或数据操作失误),也可能是而由于意识上的错误(比如用户对命令或数据做了一个错误的决定)。一个有效的设计会消除导致用户误操作的可能性。当然也可以允许用户犯错误而你要提供一个方法使得用户可以从错误状态恢复。
例 5 Adobe Photoshop的history控制面板。用户的每一步操作都会在控制面板中所反映。如果用户觉得某个上面的某个操作不当,可以点击该项,通过右键菜单取消这个操作;也可以通过将此项拖到右下角的垃圾箱图标中取消这个操作及以后的所有操作。
反馈
总是要对用户的操作提供反馈。好的反馈是输入的响应结果,也是区别不同操作的特征。好的反馈是适时的并且尽可能的符合用户交互的习惯。即使计算机正在执行一个特别的任务,也要告诉用户当前的运行状态并且可能的话提供一个"取消"的命令。没有哪个界面比一个失去响应的屏幕更让用户烦心了。一般的用户对这种状态只能有几秒的容忍时间。
当然,使用合适的反馈也是同等重要的。你可以使用光标指针形状的变化或者状态栏信息来表示一些简单的信息;而对于一些复杂的任务,你可能需要显示一个进度条或者消息框来表示反馈。
例 6 Windows XP的搜索对话框使用列表式文字言简意赅的说明系统现在的动作,同时配以造型生动的动画增加趣味性,从而提供了充分的反馈来缓和用户因为长时间等待而产生的焦虑;同时提供"停止"命令来允许用户随时取消命令。
美学
视觉设计是程序界面设计的一大部分。可视化属性对于交互中特定的对象提供了有价值的印象和交流。同时也一定要注意到在屏幕上显示的每一个可视元素都会夺取用户的注意力。每个元素一定要给用户提供一个清晰而又一致的环境从而让用户理解界面提供给用户的信息。图像及视觉效果的技巧对于设计来说具有不可估量的作用。
换句话说,避免在界面上安排过多的信息。尤其要谨慎使用色彩、声音和图像,设计者往往倾向于使用过多的这类表示而导致界面混杂,这不但不能帮助用户寻找相关信息,反而会分散用户的注意力,让用户反感。
例 7 Windows Media Player 9缺省界面保持它一贯的前版本的风格。整个方形的界面被几条曲线所风隔,并且每个区域都有各自的特色,或平面或立体或采用渐变。每个区域的对比度都是非常好的,使各自的内容非常清晰。主次功能的按钮由大小,排放位置来区别;有联系的按钮通过圆弧来连接表示它们的关系。总体来说,命令控制区域都用高光来强调而信息显示区域用柔和的颜色来填充。
简单性
对于多数非计算机专业用户来说,计算机仍是一种很难用的东西。软件的某些功能对于开发者来说太简单而用户却不可理寓的认为它很难操作;甚至某些用户找不到他们想用的功能;还有些用户根本不能描述他们想要做什么。
许多用户都期望计算机应该是非常简单,易于操控,可靠。他们希望使用他们惯用的方法去操作他。所以,在你的软件中保持用户以往的操作习惯是一件很有价值的事。
用户界面应该是简单的(但不是硬性删简),易学和易用的。界面应该提供了访问该程序的所有功能。创建强大的功能和保持界面简单是具有矛盾的,有效的设计做出了有效的折中。
保持简单的一个方法是尽量压缩交流的信息。比如说,菜单命令及消息一定要简明扼要。词不达意或罗里罗嗦的信息会给用户发现想要的信息造成困难。另一个办法设计简单有效的界面原则便是使用自然的映射和语法。元素的摆放位置和显示状态会影响用户的理解。
简单也和相似有关。相似的事物会让用户觉得简单。无论何时,都要将用户的现有知识和经验和要设计的软件联系起来,让用户感到熟悉而简单。
例 8 这就是强大的搜索引擎Google的主界面的所有内容。无人不说它简单。它使用cookie可以将你的个性化设置记忆。同时为高级用户提供了高级搜索的入口。简单的界面没有忽略它的文化特色,它的logo图片反映了那天世界上发生的重大事情或者重大节日。
你可以采用递近的信息显示方法(progressive disclosure)来降低界面的复杂度。递近的的显示方法就是仔细的组织信息从而让它只在需要它出现的时候它才出现。通过无用消息隐藏,使得用户减少了信息的处理量。比如,你可以使用菜单来显示命令项或选择项列表(平时则是隐藏的),也可以用对话框来显示选项列表(只有使用的时候才弹出)。
递近的信息显示方法并不是说要采用新型方法来显示有意义信息,比如说需要一个组合键才能使用软件的某项常用功能或者要让用户进行一系列的交互才能让用户找到他想要的功能。如果是这样,这只能提高软件使用的难度。
例 9 Microsoft Office Word 2003的在线帮助,每当F1呼出,它缺省出现在Word窗口右部。非常符合上述的条件。同一个界面通过有层次的信息及命令组织,巧妙的分别为初级,高级用户提供了对应的帮助接口。
界面提高要点
程序界面设计含盖了从用户运行安装程序开始安装,一直到用户卸载这个程序的全过程。安装程序要尽可能的简单及减少用户的干预;初次使用要给用户留下简单美观有效的好印象;当用户在安装之后决定不会马上卸载时(如果用户找不到卸载程序,他一定会对你恨之入骨),你的程序才有可能在这个计算机上安家落户。只有通过了这一关,你的软件才可能真正的发挥用处。这要讲的就更多了。省事起见,我就摘录了一些Windows界面的检查要点,出自MSDN所附的《Windows用户体验》一书的入门章节里:
图 1 Windows User Experience是一本如何写一个标准的Windows程序界面的好书
1. 程序的安装步骤少而简单。
2. 程序安装结束不需重新启动系统。
3. 在使用程序之前,用户无须阅读Readme。
4. 用户创建的数据文件的缺省目录在"我的文档"里。
5. 程序避免把有怪异文件名的文件让用户看到。
6. 程序不会在"Program Files"文件夹之外创建文件夹。
7. 程序不会在硬盘根目录下写文件。
8. 如果程序使用磁盘缓存,那么应该在"磁盘清理工具"里注册。
9. 在"开始"菜单中,不应该有"帮助"、"Readme"及"卸载"程序链接。
10. 如果用户没有允许,程序不应该在桌面上创建快捷方式。
11. 如果程序会在系统一开始就启动,启动过程中不应该有启动屏幕和弹出对话框。
12. 程序不应该使用系统托盘区作为状态显示,启动程序和应用,或者查询程序属性的地方。系统托盘区是用来警告用户系统发生重大变化的地方。
13. 如果用户通过"显示属性"设置了不同的显示色彩等方式,程序应该正常显示。
14. 程序是可以使用键盘完全操作的。
15. 系统缺省字体大小的改变不会造成程序字体显示不正常。
16. 如果可行的话,程序支持标准快捷键(如Alt+F4等)。
17. 如果文件、注册表值等不是用户创建的,那么程序创建的这些对象卸载后都应该全部消失。
18. 程序中应该不会出现专业术语,除非用户能够正常理解这些术语。
19. 如果用户改变了屏幕分辨率或到多显示器状态,程序应该自动调整并正常显示。
看看您的程序能达到几条?如果您说上面的条条框框没什么意思,那我觉得您可能对挣钱不感兴趣J。