融合简洁与复杂(Combining Simplicity and Complexity)

有一篇关于简洁与复杂优劣的 进行中的 辩论 文章。有些人宣称:“人们想要简单易用的东西!”

另一方则高呼:“胡说——他们想要复杂而强大的行为!”双方争论不休,咬牙切齿,挥舞着键盘。

我认为问题在于 术语混淆,作者们暗示了但没有明确说明。将简洁与复杂放在一场虚拟的笼中赛中对立,制造了一种虚假的二分法,或者说是你必须二选一的信念。其实两者可以兼得。

这不是一个逃避的答案,“我们不能和平相处吗?”我认为真正的问题是我们混淆了术语。简洁与复杂其实可以成为朋友,不必斗个你死我活(就像Kirk和Spock,他们是最好的朋友,即使打架也只是假装的)。

当我们争论某样东西是简单还是复杂时,我们无意中在问两个更高层次的问题:

  • 理解起来有多容易?
  • 它能做什么?

这些问题正是我们试图用“简单”和“复杂”这两个词来回答,但效果不佳。不幸的是,两个词不够;我们需要四个词来回答这两个问题:

理解起来有多容易?

  • 简单(Simple): 易于理解,直截了当
  • 复杂(Complicated): 难以理解,错综复杂

它能做什么?

  • 高级(Advanced): 功能多,强大
  • 基础(Basic): 功能不多,简单

这样来定义问题,让我们能够为每个问题区分出好的和坏的答案。

简单或复杂是好事。过于简单(Simplistic)是可以接受的事。复杂(Complicated)是坏事。我们来看看原因。

情形一:简单且基础

简单和基础是 简单的刻板印象:我们以为容易理解的东西往往能力有限。

这在很多时候是对的。想想一块石头、一支桨或一把勺子。这些是基础工具,易于使用,但似乎做不了太多事。在软件世界,我们有记事本:它易于理解,但功能不强(没有拼写检查、嵌入式图形等)。

notepad.PNG

简单、过于简单的东西好吗?当然。它们完成了它们(简单)的工作。而且易于理解是一个巨大的优势:这对教育目的极好,而且很多时候我们并不需要自认为需要的那么强大的功能。事实上,简单行为往往带来更高的可靠性——与发动机相比,一支桨“出故障”的频率有多高?

此外,你完全可以利用多个“弱”项目来创建一个强大的项目,就像用细线拧成粗绳。我稍后会谈到这一点。

在我看来,岩石、勺子和记事本都不错:它们各有用途。

情形二:复杂且基础

啊,这倒是个奇怪的家伙。什么东西既难理解又没什么大用呢?

鲁布·戈德堡机器. 这是一种为完成基本任务(比如降下招牌)而设计的装置,却用了极其复杂繁琐的方式。我是说:

这些装置既复杂(你能立刻看出它要做什么吗?)又基础(降下招牌并不令人惊叹)。从实用角度看,它们很糟糕,但确实在娱乐、艺术或教育方面有可取之处(如何 建造一个装置)。

不幸的是,有些软件就像鲁布·戈德堡机器(Rube Goldberg machine),比如给 VCR. 设置时钟本应是一项简单的任务,但却常常涉及复杂笨拙的步骤,因为 VCR 的界面并非为此设计(“按频道上键来选择日期…”)。

奇怪的是,人们似乎并没有从看到这种复杂性中获得娱乐价值。他们感到沮丧,这是个坏兆头。这类物品应该避免。

情形三:复杂且高级

这是大多数强大设备的刻板印象:是的,它们能做很多事,但确实很难用。

一个现实生活中的例子是直升机。它可以垂直上升、后退,并以任何想象得到的方式机动:它极其强大。不幸的是,操作它需要大量的训练。我从未驾驶过,但显然它需要动用全部四肢和大脑才能 操作它.

helicopter.jpg

这个领域的物品通常处于前沿。它们是我们最先进的可用技术,但我们仍在摸索过程中,发现使其更易用的模式和优化方法。

计算机最初既复杂又先进。早期的计算机功能强大(虽然慢,但能执行任何计算),却非常难用。你必须使用穿孔卡片,甚至通过开关手动输入信息。随着时间的推移,我们开发了键盘、图形界面和更好的编程语言。我们得以用更简单(易于理解)的方式输入指令。

编程仍然不是极其简单: 简单性和易用性是一个范围但很明显,计算机比过去简单得多(更易用)。底层技术——微芯片——为了简化计算机而变得更先进(强大)也更复杂(难以理解)。曾有一段时间,一个人就能理解微芯片或操作系统——现在不行了。

复杂且先进的设备“还行”——它们确实能完成困难的工作,但使用时你常会想一定有更好的办法。而通常也确实如此。

情形四:简单且高级

啊,这就是圣杯。这是数学家通过“优雅”方程、科学家通过美丽理论、设计师在产品创造中所追求的东西。考虑爱因斯坦的著名方程:

\displaystyle{E = mc^2}

能量与物质是等价的——你可以将一种转化为另一种。这一概念惊人地易于理解(简单),却描述了极其强大的行为(核反应)。许多物理方程都是如此:重力、牛顿定律或麦克斯韦方程。它们都是一行式,指引我们理解强大的行为,即宇宙的运作方式。

谷歌是极其强大行为——在网络上找到任何文档——的简单界面。iPod(我从未拥有过)据称是一款极其简单的管理和播放音乐的设备。就连编程也可以这样:图灵机(Turing machine)是一种简单的计算模型(在纸带上书写符号),能完成与现代计算机相同的计算。嘿,MacGyver可以用牙签、梳子和洗发水瓶这些简单基础部件制造炸弹。

使用简单的构建模块

高级行为往往来自简单部件。Unix设计哲学之美在于拥有许多简单甚至基本的程序,它们能出色地完成单一任务:合并文件、排序文件、统计行数或搜索单词。每个工具都很基础,但通过“管道”连接起来,就能产生极其强大的行为。如果你是一名程序员,我强烈建议你学习Unix,如果你还不了解的话。

世界的大部分是由简单、易于理解的积木块构成的。简单的原子构成了任何物体。简单的 DNA (仅4种碱基)被拉伸成很长的序列,创造出制造人类所需的指令。最复杂的视频文件仍然是由1和0组成的序列。

本不必如此。我们本可以在元素周期表中有数千种元素。 DNA 本可以有数百万种不同的碱基。我们本可以设计计算机用0、1和2来存储文件。

但事实并非如此。设计最优、最优雅的系统既简单又先进。简单带来了可靠性,而巧妙的部件排列赋予了它们力量。

简单不等于容易

这里有一个巨大的警告:“易于理解”并 不意味着“易于做到”。跑马拉松很容易理解,但并不容易做到。同样,实际上 创建 从易于理解的部件中实现强大的行为可能是一个挑战。

在混乱复杂的行为中找到潜在模式是困难的。让某样东西能工作然后就此止步是容易的。但观察我们的自然法则,我们会受到启发:几乎任何复杂的现象或设计都可以被简单地构建。

临别思考

我解决争论了吗?你来判断。对我来说,简单和复杂通过思考两个独立的问题而和平共存:

1) 它有多容易理解?

2) 它能做什么?

不要将简单的界面与基本的行为混淆。不要假设复杂的设备就是强大的。独立思考这些问题,你会没事的。

本系列其他文章

  1. 72 法则
  2. 理解会计基础(ALOE 与资产负债表)
  3. 理解债务、风险与杠杆
  4. 你应当了解的股票市场
  5. 理解帕累托原理(80/20 法则)
  6. 融合简洁与复杂(Combining Simplicity and Complexity)

加入 45 万月度读者

喜欢这篇文章?还有更多内容能帮你建立持久、直观的数学理解。加入通讯以获取额外内容和最新更新。