想象一下,你正在旧金山寻找一套公寓--可以说,旧金山是美国最令人痛苦的城市。蓬勃发展的科技行业和严格的分区法律限制了新的建设,这两个因素共同作用,使这座城市的成本与纽约一样高,而且从许多方面来看,它的竞争力更强。新的房源在几分钟内起起落落,开放参观的房屋被围住,钥匙往往最终落入任何能先将押金支票强加给房东的人手中。
这样一个野蛮的市场几乎没有给那种理论上应该描述理性消费者行为的事实调查和深思熟虑留下空间。比方说,与商场顾客或在线购物者不同,他们可以在做出决定之前比较各种选择,而潜在的旧金山人必须立即做出决定:你可以买下你目前正在看的公寓,放弃所有其他公寓,或者你可以离开,永远不再回来。
为了简单起见,让我们暂时假设你只关心最大限度地获得最好的公寓的机会。你的目标是把双胞胎、“锡拉和查拉博迪”对“逃脱的人”和“未翻的石头”的遗憾降到最低。你马上就陷入了两难境地:除非你有一个基准来判断,否则你怎么知道一套公寓确实是最好的呢?除非你看过(并失去)大量的公寓,否则你怎么建立这个基线呢?你收集的信息越多,当你看到正确的机会时,你就会更好地了解它-但你更有可能已经错过了它。
那你是做什么的?当告知决定的行为本身危及结果时,你如何做出明智的决定?这是一个残酷的局面,近乎自相矛盾。
当遇到这类问题时,大多数人会本能地说一些话,大意是需要在寻找和跳跃之间取得某种平衡-你必须看足够多的公寓来建立一个标准,然后选择符合你已经建立的标准的任何东西。事实上,这种平衡的概念是完全正确的。大多数人不敢肯定的是,这种平衡是什么。幸运的是,有一个答案。
如果你想得到最好的公寓,就花37%的时间找房(如果你给自己一个月的时间找房,11天),不顾一切地探索各种选择。把支票簿留在家里,你只是在校准。但在那之后,准备好立即提交-存款和所有-在你看到的第一个地方,它比你已经看到的任何东西都要好。这不仅仅是在观看和跳跃之间的一种直观上令人满意的妥协。这是可以证明的最优解。
我们之所以知道这一点,是因为寻找公寓属于一类被称为“最优停车”问题的数学问题。37%规则定义了一系列简单的步骤--计算机科学家称之为“算法”--来解决这些问题。事实证明,找房只是在日常生活中最佳停车的方式之一。承诺或放弃一系列的选择是一种在生活中一次又一次出现的结构,只是化身略有不同。在驶入停车位之前要绕街区转几圈?在套现之前,用高风险的商业冒险来推动你的运气有多远?那栋房子或那辆车还能坚持多久才能得到更好的报价?
同样的挑战也出现在一个更令人担忧的场景中:约会。最优停止是串行一夫一妻制的科学。
简单的算法不仅为找房提供了解决方案,也为生活中所有我们面临最优停车问题的情况提供了解决方案。人们每天都在努力解决这些问题-尽管诗人们肯定在求爱的磨难上洒了更多的墨水,而不是停车-在某些情况下,他们带着相当大的痛苦这样做。但这种痛苦是不必要的。至少在数学上,这些都是已解决的问题。
当你经历一个典型的一周,你在你周围看到的每一个苦恼的租房者、司机和追求者本质上都是在重新发明轮子。他们不需要治疗师,他们需要的是算法。治疗师告诉他们要在冲动和过度思考之间找到合适、舒适的平衡。
所有人都面临着一组特殊的问题,这些问题是我们的生活在有限的空间和时间内进行的事实的直接结果。一天或十年后,我们应该做些什么,什么都不做?我们应该接受多大程度的混乱--多大程度的秩序是过度的?新体验和最受欢迎的体验之间的平衡如何才能使生活最充实?
这些似乎是人类独有的问题,其实不然。半个多世纪以来,计算机科学家一直在努力解决并在许多情况下解决这些日常困境的等价物。处理器应该如何分配它的“注意力”来以最小的开销和最少的时间执行用户要求的所有任务?它应该什么时候在不同的任务之间切换,首先应该承担多少任务?它使用其有限内存资源的最佳方式是什么?它应该收集更多数据,还是应该根据已经拥有的数据采取行动?抓住一天对人类来说可能是一个挑战,但我们周围的计算机正在轻松地抓住毫秒。我们可以从他们如何做到这一点上学到很多东西。
谈论人类生命的算法似乎是一种奇怪的并列。对许多人来说,“算法”这个词让人联想到大数据、大政府和大企业的神秘而不可捉摸的阴谋:日益成为现代世界基础设施的一部分,但几乎不是人类事务的实践智慧或指导的来源。但算法只是一个用于解决问题的有限步骤序列,并且算法比计算机广泛得多,也比计算机老得多。早在机器使用算法之前,它们就已经被人使用了。
“算法”这个词来自波斯数学家al-Khwãrizmī的名字,他是9世纪一本关于手工做数学的技巧书的作者。(他的书名为al-Jabr WA‘l-MuqãBala,书名中的“al-Jabr”反过来又提供了我们单词“代数”的来源。)。然而,已知的最早的数学算法甚至早于al-Khwãrizmī的工作:在巴格达附近发现的一块4000年前的苏美尔人泥板描述了一种长除法的方案。
但算法并不局限于数学。当你用食谱做面包时,你遵循的是一个算法。当你根据图案编织一件毛衣时,你是在遵循一种算法。当你在一块打火石上刻上锋利的边缘时,用鹿角的末端执行精确的击打序列-这是制作精细石器的关键步骤-你就是在遵循一种算法。自石器时代以来,算法就一直是人类技术的一部分。
在这本书中,我们探索了人类算法设计的理念-寻找更好的解决方案来解决人们每天遇到的挑战。将计算机科学的镜头应用到日常生活中会产生多方面的后果。最直接的是,它为我们如何解决具体问题提供了切实可行的具体建议。最佳停止告诉我们什么时候看,什么时候跳。探索/利用的权衡告诉我们如何在尝试新事物和享受我们最喜欢的东西之间找到平衡。分类理论告诉我们如何(以及是否)安排我们的办公室。缓存理论告诉我们如何填满我们的衣柜。日程安排理论告诉我们如何打发时间。
在下一个层次上,计算机科学为我们提供了一个词汇表,帮助我们理解这些领域中的更深层次的原理。正如卡尔·萨根(Carl Sagan)所说,“科学是一种思考方式,而不是一种知识体系。”即使在生活杂乱无章,我们无法期待严格的数字分析或现成的答案的情况下,使用在这些问题的简单形式上磨练出来的直觉和概念也为我们提供了一种理解关键问题并取得进展的方法。
从更广泛的角度来看,通过计算机科学的视角,我们可以了解人类思维的本质,理性的意义,以及最古老的问题:如何生活。把认知作为解决环境带来的根本计算问题的一种手段,可以彻底改变我们思考人类理性的方式。
研究计算机的内部工作原理可能会揭示如何思考和决定,应该相信什么,如何行动,这种想法可能会让许多人觉得不仅过于简单化,而且实际上是被误导的。即使计算机科学确实有关于如何思考和如何行动的话要说,我们会愿意倾听吗?我们看看科幻小说中的人工智能和机器人,他们的生活似乎不是我们任何人都想要过的生活。
在一定程度上,这是因为当我们想到计算机时,我们想到的是冷冰冰的机械的、确定性的系统:机器应用严格的演绎逻辑,通过详尽地列举选项来做出决定,无论他们必须思考多长时间和多辛苦,都会努力得出准确的正确答案。事实上,第一个想象计算机的人在脑海中基本上就有类似的东西。艾伦·图灵(Alan Turing)将计算的概念定义为一个类比,就像一位人类数学家仔细地完成了漫长的计算步骤,得出了一个明确无误的正确答案。
因此,当现代计算机面临难题时,这并不是它们实际在做的事情,这可能会让人感到惊讶。当然,简单的算术对于现代计算机来说并不是特别具有挑战性。相反,像与人交谈,修复损坏的文件,或者赢得围棋游戏这样的任务-规则不清楚,一些必要的信息缺失,或者找到准确的答案需要考虑天文数字的可能性-这些现在构成了计算机科学中最大的挑战。研究人员为解决最困难的一类问题而开发的算法使计算机摆脱了对穷举计算的极端依赖。相反,处理现实世界的任务需要对机会感到满意,用准确来权衡时间,并使用近似值。
随着计算机变得更好地适应现实世界的问题,它们不仅提供了人们可以为自己的生活借用的算法,而且提供了一个更好的标准来比较人类认知本身。在过去的一二十年里,行为经济学讲述了一个关于人类的非常特殊的故事:我们是非理性的,容易出错,这在很大程度上是由于大脑中有缺陷的、特殊的硬件。这个自嘲的故事已经变得越来越熟悉,但某些问题仍然令人烦恼。例如,为什么四岁的孩子在包括视觉、语言和因果推理在内的一系列认知任务上仍然比价值百万美元的超级计算机做得更好呢?
来自计算机科学的日常问题的解决方案讲述了一个关于人类思维的不同故事。生活中充满了问题,这些问题很简单,很难解决。人们所犯的错误往往更多地表明了问题的内在困难,而不是人类大脑的易错性。用算法思考世界,了解我们面临的问题的基本结构和解决方案的性质,可以帮助我们看到我们实际上有多好,并更好地理解我们犯下的错误。
事实上,人类总是要面对计算机科学家研究的一些最困难的问题。通常,人们需要在处理不确定性、时间限制、部分信息和快速变化的世界时做出决策。在其中一些情况下,即使是尖端的计算机科学也还没有提出有效的、总是正确的算法。在某些情况下,这样的算法似乎根本不存在。
然而,即使在没有找到完美算法的地方,几代计算机科学家与最棘手的现实问题之间的斗争也产生了一系列见解。这些来之不易的戒律与我们对理性的直觉不符,它们听起来一点也不像数学家试图迫使世界进入干净、正式界限的狭隘处方。他们说:不要总是考虑你所有的选择。不一定每次都追求似乎最好的结果。有时会搞得一团糟。轻装上阵。让事情等着瞧吧。相信你的直觉,不要想太久。放轻松。掷硬币决定吧。原谅,但别忘了。对你自己做真实的事。
毕竟,依靠计算机科学的智慧生活听起来并不是那么糟糕。与大多数建议不同的是,它有证据支持。
正如为计算机设计算法最初是一个学科之间的裂痕-数学和工程学的奇怪混合体-同样,为人类设计算法也是一个没有天然学科归宿的话题。今天,算法设计不仅借鉴了计算机科学、数学和工程学,而且还借鉴了统计学和运筹学等相关领域。当我们考虑为机器设计的算法可能如何与人类思维相关时,我们还需要关注认知科学、心理学、经济学和其他学科。
我们,你们的作者,对这一跨学科领域非常熟悉。布莱恩在毕业前学习了计算机科学和哲学,后来在英语专业毕业,并在这三个学科的交汇点开始了职业生涯。汤姆在成为加州大学伯克利分校的教授之前学习了心理学和统计学,在那里他花了大部分时间思考人类认知和计算之间的关系。但是,没有人能成为与为人类设计更好的算法相关的所有领域的专家。因此,作为我们寻找算法赖以生存的一部分,我们采访了那些在过去50年里提出了一些最著名的算法的人。我们询问了他们,一些世界上最聪明的人,他们的研究如何影响了他们对待自己生活的方式-从寻找配偶到整理袜子。
接下来的几页开始了我们的旅程,穿越了计算机和人类思维同样面临的一些最大的挑战:如何管理有限的空间、有限的时间、有限的注意力、未知的未知、不完整的信息和不可预见的未来;如何优雅和自信地做到这一点;以及如何在一个社区中与其他同时试图做到这一点的人一起做到这一点。我们将学习这些挑战的基本数学结构,以及计算机是如何设计的-有时与我们想象的相反-以最大限度地利用它们。我们还将学习大脑是如何工作的,了解它处理同一组问题和处理相同限制的不同但密切相关的方式。归根结底,我们所能获得的不仅是一套针对我们周围问题的具体外卖,不仅是一种新的方式,可以看到即使是最毛茸茸的人类困境背后的优雅结构,也不仅仅是认识到人类和计算机的痛苦是紧密相连的,而且还有更深刻的东西:一个关于我们周围世界的新词汇,以及一个了解我们自己的真正新东西的机会。