事情的复杂性

最近换组频繁,昨天又被换回基础业务组,做扇贝单词相关的东西。

做基础业务,不太需要和「人」打交道,一下子睡眠好了很多,人也精神起来。

虽然前一个多月在阅读组做的也是比较基础的内容,主要和数据打交道,但和用户太相关,免不了数据结构和接口的设计需要和产品妥协。

而且在阅读这种业务场景下,数据最终的设计的合理性很大程度上取决于产品的想法:产品认为是A和B是一对多的结构,即使程序员认为不合理,也必须为它保留这样的结构;产品认为有用的功能,即程序员认为被使用到的次数很少,也需要为开发它付出很多时间。

相比之下,虽然单词这个项目最终设计出来的表结构也会反直觉,但它的合理性建立在一些有迹可循的标准上:问一下公司的英语老师,单词的拼写、发音、词典、释义、例句等等会有怎么样的常见情况和特殊情况,特殊情况的比例大约是多少。这样设计出的数据的结构与复杂多变的用户习惯关联不大,产品和程序员都很难有异议。

在阅读组,我遇到的问题是要处理一堆又一堆繁复的逻辑,一个又一个开不完的会;到单词组,我的问题只有一个:这些每秒数千请求的接口,怎么能让它变得更快更稳定。


世界上有很多种不同的复杂的事情,不同的人会觉得不同的事情是复杂或简单。

经典定义下的理工科学生,会喜欢一类「复杂」问题,如:如何最快地从一亿个数里找出最小的一百万个?

这类问题的特点是:需要被定义的东西少、问题本身理解起来简单;它的解法却可能很复杂。

一个例子是费马大定理:「一般地将一个高于二次的幂分成两个同次幂之和,这是不可能的」。如此简单的一个问题定义,只要学过初等数学的人都能看懂。但它吸引了数百年无数数学家投入进去,直到1995年才被证明出来,还使用上了费马猜想提出后几百年以来发明出的更多的数学工具。

另一个例子是欧几里得的《几何原本》,仅仅在开头定义五条公理,然后推导出一整本书。所以《几何原本》既被叫做数学巨著,也被称为哲学巨著。


我爱玩的游戏《Portal 2》就契合这类问题的特点:你只有一把能射出蓝光和橙光的枪;你身处一个有限的空间;你身边的道具永远只有那么几种;但在这些道具和空间的组合下,游戏制造出了非常多精妙的关卡。

我另一个喜欢的游戏《The Witness》也是这类游戏的典型:你只需要走路和画线,把线从起点连到终点。它的复杂性蕴藏在谜题的解法里,只有解决它时,玩家才会感受到乐趣。

传统的网络游戏就并非这类「复杂」问题。它们往往把复杂性放在规则上:给玩家很多选择;给玩家很多规则;玩家还可以和变化因素更多的「人」一起进行复杂规则下的游戏。这些网络游戏让你投入大量时间,体验到的是在掌握规则和被不定因素影响之间来回摆动的快感。


把繁复的下层总结出来、屏蔽细节,为上层提供好用的工具/结论/接口,大概是数学、物理、计算机这些学科非常相似的地方。