Appearance
伯斯塔尔法则 Postel’s Law
简介说明
接受多变,输出保守。
要点
对用户可能采取的各种行为或可能提供的任何输入保持同理心、灵活性和宽容。在提供可靠且易于访问的界面时,几乎可以预见任何输入、访问和功能。我们能在设计中预见和规划得越多,设计就会越有韧性。接受用户输入的变量,将其转换为满足您需求的形式,定义输入边界,并向用户提供清晰的反馈。理论背景
该原理也被称为鲁棒性原理 (Robustness Principle),1980 年,Jonathan Bruce Postel 在他编写的最早期的 TCP 协议规范中有提到: Be conservative in what you send, be liberal in what you accept. 对发送的内容保持谨慎,对接收的内容保持自由。(直译)
至此之后,该原理便被称为伯斯塔尔法则 (Postel’s Law) ,广泛应用于计算机协议以及系统控制理论中。虽然最近几年计算机界中出现了一些质疑伯斯塔尔法则的声音,单这并不妨碍其核心思想被应用于 UI/UX 的领域。该原理表达的最核心思想是:系统/产品应保有一定程度的容错能力。
设计案例
允许用户进行任何操作,即便是错的或无效的
正如 Lyle Mullican 在 Your Website has Two Faces 中写到的,应用 (或 Web) 应当具备两幅面孔,一幅给人看,一幅给机器看。
在给人看的那幅面孔中,应用必须接受用户所有形式的,或错的或对的或无效的操作,而在给机器看的那幅面孔中则必须把用户输入的那些“不靠谱儿”的命令转译成机器看的懂的内容。
人的思维和机器的运行模式截然不同,人对任意信息的理解和记忆都偏向于模糊的、可变的和多意的。比如人对数字“9”的记忆可以是“9”、“九”、“nine”、“IX”、“玖”等等等等,而机器只认二进制“1001”,但你的系统绝对不能只允许用户输入“1001”,是这个道理吧?
而在设计 UI 界面时,我们也应当包容用户进行的所有可能的操作,他们可能会在搜索框里输入任何奇奇怪怪的内容,但你的产品不能因为输入的内容奇怪而崩溃、闪退、强制报错。
比如在淘宝,即便我输入的是“phone”、“iphonw”、甚至是“pingguishouji” (注意我输入的是 pinggui),它依然能够给我想要的结果,当然这需要贝叶斯方法的协助,但我们不需要去了解背后实现的概率论原理,我们只需要知道这个结果是符合伯斯塔尔法则的。

案例 1:淘宝搜索的各种自纠正
另一方面,法则中的容错性同样体现在搜索的结果中,用户输入的是错误的信息没错,系统没有崩溃也没错,但是还不够。我们还需要在一定程度上智能修正用户可能输入错误的信息并预测他们的真实意图。帮助用户修正信息和操作,是今后发展的必然趋势。
比如 Bilibili 的安卓端设计得也很有意思,头部区域除了“搜索栏”和其他几个按钮之外,任意地方点击都能够进入侧边栏,即使没有点击到“三条杠”,因为这三条杠实在是太小了,用户极有可能没有点击到,所以干脆扩大了可点击触发的热区,扩大到了整个头部。
有兴趣的同学可以去试一试。 
案例 2:bilibili 安卓端头部可触发侧边栏的区域
对用户可以进行的操作定义边界
可是有时候我们就是不希望用户输入那些奇奇怪怪的内容、进行那些奇奇怪怪的操作啊。
是的,我们不希望用户任性得随意执行 rm -rf ,我们不希望用户输入数字的时候输入单词或是中文,所以我们需要对用户的可操作边界给出明确的定义。

案例 3:步进器输入时的键盘
在进行纯数字输入时,淘宝会强制键盘只显示数字键盘,这是一种明确的边界定义。当然你也会说啊你看还能输入符号啊,没错,的确可以输入符号,输入符号淘宝不会崩溃,但会提示超出范围。
另一个典型的例子就是设定用户名。一般情况下应用或者产品都会非常明确的提示用户用户名应该使用什么样的格式,比如几位字符、字母开头、能不能用特殊符号、可以使用哪几个符号等等。 
案例 4:用户名/昵称的边界定义
如果操作是错的,及时给出反馈
但是定义边界明显还不够,就算给了边界,用户还是可以随心所欲的输入啊,用户能在淘宝输入购买 999 个 iPhone,能在设定用户名时输入任意字符哪怕是边界之外的。
这时候就需要及时的反馈。及时的意思是指,就在用户的错误操作之后立马反馈。

案例 5:淘宝提示超出范围
淘宝会提示我买 999 台 iPhone 是不可能的,我没那么多钱,所以在我输入 999 之后立刻就弹出了 toast 提示框,
注:Toast 是弹出式提示框的一种,具有非模态、弱交互的特征。
阻止了我买 999 台 iPhone 的冲动。
另一个非常有趣的案例是当我们取用户名时,一旦用户名取得不符合规范,网站或应用给出的反馈。用户名是否可用的提示通常分为两种,一种是在用户输入用户名后实时显示该用户名是否可用,哪里不可用等;第二种是用户点完提交才会提示用户名设定错误。

案例 6:用户名设定提示
Medium 与 Pinterest 分别对应了上述的两种不同的反馈思路,个人觉得 Medium 的体验感更好,因为它的提示足够及时。
注意事项
实际上输出保守通常是指程序对人的面孔可以表面笑嘻嘻,但是对机器的必须一丝不苟,即:对“机器”或“系统”输出的命令须严格、严谨——所以伯斯塔尔法则不仅是 UX 原理,也是程序员的法则。但我们也可以稍微引申一下:界面对用户输出的内容同样不能随心所欲。确保用户所看到的界面整洁有序,并且保证他们能够轻易找到自己想看到的内容。

反面案例 1:Amino,过于奔放的视觉输出
结论总结
- 允许用户的任何操作,必要时给出操作边界;
- 无效或错误操作及时给出反馈;