PingCAP CTO 黄东旭:如何做出让人爱不释手的基础软件( 五 )


PingCAP CTO 黄东旭:如何做出让人爱不释手的基础软件
文章图片
当我们复盘一些故障时 , 经常会得出「使用者操作不当」的结论 , 但是这真的是根因吗?我在之前的公司曾经历过一个事故给我留下了深刻的印象:当时内部有一个自己做的分布式文件系统 , 就像所有的文件系统一样 , 它有一个shell , 可以支持一些UNIXStyle的命令操作 。
有一次 , 一个工程师执行了一行命令:rm-rf/usr/local/...(注意/usr后边的空格) , 然后系统很听话的开始删除自己...最后这件事情的复盘并没有责怪这个操作者 , 而是惩罚了这个系统的设计者(当时那个公司的老板) , 因为这是个坏的交互设计 , 哪怕在删除重要文件夹前确认一下或者通过权限系统保护一下都不至于发生这个事情 , 机器确实在按照逻辑工作 , 这个地方也没有Bug(甚至这个删除还很高效 , 毕竟分布式系统LOL) 。
在后来作为工程师漫长的岁月中 , 我渐渐理解到一个道理:最好的工程师能在逻辑和感性中间找到一个平衡 , 良好的设计源于对技术和心理的理解 , 毕竟我们是在为人写程序 。
作为软件的使用者 , 我们与其说是在使用 , 不如说我们是在和软件「对话」 。 那既然是对话 , 那么就意味着这是一个交互的过程 , 什么是一个好的交互体验呢?我试着总结一些写给软件设计者的原则 , 试着第一次干这事 , 不排除以后会补充 。
9、没人读文档:一条命令启动和探索式学习
承认吧 , 没有人会看说明书 。 我们拿到一部新的iPhone时候 , 第一反应一定是开机(很神奇吧 , 我们似乎下意识就知道开机键在哪)肯定不是看说明书找开机按钮 , 开机就开始通过手指来探索新的世界 , 很浅显的道理 , 为什么在系统软件领域就要先熟读文档才能上岗呢?
我经常教育我们年轻的产品经理:“你的用户充其量会在你的GitHub首页或者文档的QuickStart部分上停留10秒 , 甚至连看完这个文档的耐心都没有 , 他们的潜意识会寻找「深色背景的字」(shell命令) , 然后把里面东西复制到自己的终端里看会发生什么 , 除此之外啥都不会做 , 如果这第一条命令失败了 , 不会再有后面什么事了 , 所以记住你只有一次机会” 。
一个小例子就是当时在做tiup(TiDB的安装部署工具)的时候 , 我反复告诫tiup的产品经理 , 首页里不要废话 , 就一句命令 , 贴进去就能用:
PingCAP CTO 黄东旭:如何做出让人爱不释手的基础软件
文章图片
tiup的首页(tiup.io)截图
其实这个例子可以更延展一点 , 我记得疫情之前有一年我在布鲁塞尔参加FOSDEM , 晚上在会场附近的酒吧和一位来自英国的DevOps聊天 , 可能也是喝多了 , 他说:“不能用一个apt-getinstall就安装成功的系统软件不是一个好软件 。 ” , 话糙理不糙 。
那你可能要问 , 如果确实有一些信息或者概念需要传递给用户 , 如果用认知心理学里面的概念 , 可称之为构建MentalModel(心智模型) , 最好的方式是什么呢?我自己的经验是:探索式的学习 。 支持这种认知构建模式的系统通常需要有Self-Explanatory的能力 , 即告诉用户第一步(例如iPhone的开机)之后用户的每一步都能够利用上一步行为的输出 , 决定下一步的行为完成学习 。
举个例子:MySQL的系统表想必MySQL的用户都不会陌生 , 你只要用一个交互式的mysql-client链接到一个实例上 , 也不用等着系统告知INFORMATION_SCHEMA里面有什么 , 只需要用户SHOWTABLES一下就知道了 , 然后再使用SELECT*FROM语句就可以一步步探索INFORMATION_SCHEMA里面具体表的内容 。 这就是一个Self-Explanatory的绝佳例子(这个例子里面有个前提就是SQL作为统一的交互语言) 。