Gather ye rosebuds while ye may

Do One Thing and Do It Well


刀是人类最古老的工具之一,至少在石器时代已经出现。纵观时间线,这种工具没有太多变化:自博物馆到后厨,刀具都保持着类似的形态:单边开刃、具有把手。

工具即函数

人们通常使用时间或空间复杂度来评价算法的有效性。同样的,我们也可以使用软件工程中的指标对工具进行评价:

  1. 可靠,不取决于其他条件(例如时间、环境)而每次都能实现同样功能;
  2. 效果符合预期;
  3. 不渴求使用者的素质,它接受通用的指令,实现稳定的功能;
  4. 能良好配合其他工具,实现更多的功能。

著名的 World 1-1 让即使没有经验的人也能快速上手电子游戏。四十年前的超级玛丽兄弟是这样,直到本世代的游戏也是这样。优秀的代码总是自解释的,只有懒惰的开发者才会为复杂工具设计无数操作指引。

刀具不需要说明书,没有图例或是蒙层弹出来:这叫把手那个叫刀刃,请捏住把手,将刀刃贴上需要切割的对象。

亚马逊公司大约在十年前推出过一款叫做 Dash 的硬件,这是一种纯粹的物联网硬件,用户可以将对应的 dash 按钮放在触手可及的地方,一旦家里某样东西出现短缺 —— 例如猫砂 —— 用户只需要按一下按钮,第二天便可收到亚马逊配送的猫砂。发布三年之后他们取消了对 Dash 按钮的支持,取而代之的是 Alexa。

看似 Alexa 能够接受任意语音指令,处理各种问题。但当使用者没有能力清晰描述复杂需求时,Alexa 不会处理任何事情。开发者在分解复杂问题、定义函数的过程中,常见的错误是隐藏关键条件、尝试设计大而全的执行过程。显然,现今无法分析用户意图的 Alexa 就是一种 大而全 的尝试。

大型工具类产品应提供更小的工具,以推动功能的不断演进,或是辅助解析需求。莱泽曼就是提供细分工具以演进功能、解决泛用问题的好例子。设计这种工具时不应过多考虑如何解决使用者的需求,而应侧重于使用者如何解决需求。


特定需求有特定解决方案的时代已经一去不复返了。看看各大软件商店的 Editors’ Choice,再看看下载排行榜,其间的差距 —— 从 Dash Button 到 Alexa 的差距 —— 就是证明。我们聊天、导航、拍照的时候,there’s only one App for that。虽说现实如此,但是编辑们还是年复一年地选出他们心目中的宝刀。

Do one thing and do it well.