用户友好

原文链接

Any intelligent fool can make things bigger and more complex… It takes a touch of genius - and a lot of courage to move in the opposite direction


什么是对用户友好?

我们可以把机器和人看作同一个系统:

  1. 这个系统有多个模块,包括机器模块和人类模块。
  2. 机器模块之间的界面使用通常的程序接口。
  3. 人机交互的界面就是机器模块和人类模块之间的接口。
  4. 每个界面必须提供一定的抽象,用于防止使用者得到它不该知道的细节。这个使用者可能是机器模块,也可能是人类模块。
  5. 抽象使得系统具有可扩展性。因为只要界面不变,模块改动之后,它的使用者完全不用修改。
    在机器的各个模块间,抽象表现为函数或者方法的类型(type),程序的模块(module)定义,操作系统的系统调用(system call),等等。但是它们的本质都是一样的:他们告诉使用者“你能用我来干什么”。很多程序员都会注意到这些机器界面的抽象,让使用者尽量少的接触到实现细节。可是他们却往往忽视了人和机器之间的界面。也许他们没有忽视它,但是他们却用非常不一样的设计思想来考虑这个问题。他们没有真正把人当成这个系统的一部分,没有像对待其它机器模块一样,提供具有良好抽象的界面给人。他们貌似觉得人应该可以多做一些事情,所以把纷繁复杂的程序内部结构暴露给人(包括他们自己)。所以人对“我能用这个程序干什么”这个问题总是很糊涂。当程序被修改之后,还经常需要让人的操作发生改变,所以这个系统对于人的可扩展性就差。通常程序员都考虑到机器各界面之间的扩展性,却没有考虑到机器与人之间界面的可扩展性。

什么样算是良好的界面

一个良好的界面:它给予用户的界面,应该只有一些简单的设定。用户应该用同样的方法来设置所有程序的所有参数,因为它们只不过是一个从变量到值的映射(map)。至于系统要在什么地方存储这些设定,如何找到它们,具体的格式,用户根本不应该知道。这跟高级语言的运行时系统(runtime system)的内存管理是一个道理。程序请求建立一个对象,系统收到指令后分配一块内存,进行初始化,然后把对象的引用(reference)返回给程序。程序并不知道对象存在于内存的哪个位置,而且不应该知道。程序不应该使用对象的地址来进行运算。

如何对用户更加友好

  1. 统一:随时注意,人是一个统一的系统的一部分,而不是什么古怪的神物。基本上可以把人想象成一个程序模块。
  2. 抽象:最大限度的掩盖程序内部的实现,尽量不让人知道他不必要知道的东西。不愿意暴露给其它程序模块的细节,也不要暴露给人。“机所不欲,勿施于人”。
  3. 充要:提供给人充分而必要(不多于)的机制来完成人想完成的任务。
  4. 正交:机制之间应该尽量减少冗余和重叠,保持正交(orthogonal)。
  5. 组合:机制之间应该可以组合(compose),尽量使得干同一件事情只有一种组合。
  6. 理性:并不是所有人想要的功能都是应该有的,他们经常欺骗自己,要搞清楚那些是他们真正需要的功能。
  7. 信道:人的输入输出包括5种感官,虽然通常电脑只与人通过视觉和听觉交互。
  8. 直觉:人是靠直觉和模型(model)思考的,给人的信息不管是符号还是图形,应该容易在人脑中建立起直观的模型,这样人才能高效的操作它们。
  9. 上下文:人脑的“高速缓存”的容量是很小的。试试你能同时想起7个人的名字吗?所以在任一特定时刻,应该只提供与当前被关注对象相关的操作,而不是提供所有情况下的所有操作供人选择。上下文菜单和依据上下文的键盘操作提示,貌似不错的主意。

欢迎大家关注小白菜!
github:yuanyi0510
个人博客:你说_

猜你喜欢

转载自blog.csdn.net/yuanyi0501/article/details/79530212
今日推荐