伯斯塔尔法则
可以共同解锁本知识库所有章节
简介
接受多变,输出保守。
伯斯塔尔法则也被称为鲁棒性原理 (Robustness Principle),指系统或设计在面对变化、不确定性或异常情况时,能够保持稳健性和良好性能的性质。这个原理在不同领域都有应用,包括工程、计算机科学、经济学等。
在计算机科学中,鲁棒性通常指的是程序或系统在面对不合法输入、错误操作、或者异常情况时,能够继续运行而不崩溃,并且能够以合理的方式处理这些异常情况。一个鲁棒性良好的程序能够更好地应对现实中的各种不确定性和变化,提高系统的可靠性和稳定性。
详情
1980 年,Jonathan Bruce Postel 在他编写的最早期的 TCP 协议规范中有提到:
Be conservative in what you send, be liberal in what you accept.
对发送的内容保持谨慎,对接收的内容保持自由。(直译)
至此之后,该原理便被称为伯斯塔尔法则 (Postel’s Law) ,广泛应用于计算机协议以及系统控制理论中。虽然最近几年计算机界中出现了一些质疑伯斯塔尔法则的声音,单这并不妨碍其核心思想被应用于 UI/UX 的领域。
该原理表达的最核心思想是:系统/产品应保有一定程度的容错能力。
I. 允许用户进行任何操作,即便是错的或无效的
正如 Lyle Mullican 在 Your Website has Two Faces 中写到的,应用 (或 Web) 应当具备两幅面孔,一幅给人看,一幅给机器看。
在给人看的那幅面孔中,应用必须接受用户所有形式的,或错的或对的或无效的操作,而在给机器看的那幅面孔中则必须把用户输入的那些“不靠谱儿”的命令转译成机器看的懂的内容。
人的思维和机器的运行模式截然不同,人对任意信息的理解和记忆都偏向于模糊的、可变的和多意的。比如人对数字“9”的记忆可以是“9”、“九”、“nine”、“IX”、“玖”等等等等,而机器只认二进制“1001”,但你的系统绝对不能只允许用户输入“1001”,是这个道理吧?
而在设计 UI 界面时,我们也应当包容用户进行的所有可能的操作,他们可能会在搜索框里输入任何奇奇怪怪的内容,但你的产品不能因为输入的内容奇怪而崩溃、闪退、强制报错。
比如在淘宝,即便我输入的是“phone”、“iphonw”、甚至是“pingguishouji”,它依然能够给我想要的结果,当然这需要贝叶斯方法的协助,但我们不需要去了解背后实现的概率论原理,我们只需要知道这个结果是符合伯斯塔尔法则的。
另一方面,法则中的容错性同样体现在搜索的结果中,用户输入的是错误的信息没错,系统没有崩溃也没错,但是还不够。我们还需要在一定程度上智能修正用户可能输入错误的信息并预测他们的真实意图。帮助用户修正信息和操作,是今后发展的必然趋势。
比如 Bilibili 的安卓端设计得也很有意思,头部区域除了“搜索栏”和其他几个按钮之外,任意地方点击都能够进入侧边栏,即使没有点击到“三条杠”,因为这三条杠实在是太小了,用户极有可能没有点击到,所以干脆扩大了可点击触发的热区,扩大到了整个头部。
有兴趣的同学可以去试一试。
II. 对用户可以进行的操作定义边界
可是有时候我们就是不希望用户输入那些奇奇怪怪的内容、进行那些奇奇怪怪的操作啊。
是的,我们不希望用户任性得随意执行 rm -rf ,我们不希望用户输入数字的时候输入单词或是中文,所以我们需要对用户的可操作边界给出明确的定义。
在进行纯数字输入时,淘宝会强制键盘只显示数字键盘,这是一种明确的边界定义。当然你也会说啊你看还能输入符号啊,没错,的确可以输入符号,输入符号淘宝不会崩溃,但会提示超出范围。
另一个典型的例子就是设定用户名。一般情况下应用或者产品都会非常明确的提示用户用户名应该使用什么样的格式,比如几位字符、字母开头、能不能用特殊符号、可以使用哪几个符号等等。
III. 如果操作是错的,及时给出反馈
但是定义边界明显还不够,就算给了边界,用户还是可以随心所欲的输入啊,用户能在淘宝输入购买 999 个 iPhone,能在设定用户名时输入任意字符哪怕是边界之外的。
这时候就需要及时的反馈。
及时的意思是指,就在用户的错误操作之后立马反馈。
淘宝会提示我买 999 台 iPhone 是不可能的,我没那么多钱,所以在我输入 999 之后立刻就弹出了 toast 提示框[],阻止了我买 999 台 iPhone 的冲动。
另一个非常有趣的案例是当我们取用户名时,一旦用户名取得不符合规范,网站或应用给出的反馈。
用户名是否可用的提示通常分为两种,一种是在用户输入用户名后实时显示该用户名是否可用,哪里不可用等;第二种是用户点完提交才会提示用户名设定错误。
Medium 与 Pinterest 分别对应了上述的两种不同的反馈思路,个人觉得 Medium 的体验感更好,因为它的提示足够及时。
总结
- 允许用户的任何操作,必要时给出操作边界;
- 无效或错误操作及时给出反馈;
参考
- Robustness principle — Wikipedia.
- Lyle Mullican. Your Website has Two Faces.
- Jeremy Keith. Robustness and least power