首页 > 学习

《柏拉图与技术呆子》| 李开周解读 每天听本书2022

《柏拉图与技术呆子》| 李开周解读

你好,欢迎听本书,今天为你解读的这本书比较怪,它是一位美国程序员撰写的科技哲学书,书名叫《柏拉图与技术呆子》。

你肯定知道,柏拉图是古希腊著名哲学家,在世界思想史上的地位跟孔子差不多。但“技术呆子”是什么呢?这个词其实是对英文单词nerd的翻译,主要用来形容那些热爱钻研但不爱社交的科技宅男,最典型的群体是程序员。当然,程序员未必不爱社交,也未必不擅长社交。但是在大众心目中,程序员的工作高深莫测,跟普通人没有多少共同语言,所以让人产生刻板印象,被误认为是技术呆子。本书的主题之一,就是拿程序员跟柏拉图做对比,指出程序员世界观跟柏拉图哲学思想的区别所在。柏拉图相信世界背后有一套理想模式,我们只要发现这套模式,就能掌握所有知识;而像本书作者这样的程序员却认为理想模式并不存在,知识和技术都是发明出来的,而不是发现出来的。顺便说一下,这也正是本书书名《柏拉图与技术呆子》的由来。

本书作者名叫爱德华·阿什福德·李,我们可以亲切地喊他“爱德华”。据爱德华自己说,他一直被人们视为技术呆子。为什么这么说?首先是因为他的长相——留着大胡子,戴着高度近视眼镜,穿着格子衬衫,中年以前就严重谢顶,明显具备程序员的外貌特征;其次是因为他的职业——爱德华真的是程序员,而且是程序员里的大神级人物。

爱德华从小就痴迷数学。在中学和大学阶段,他既是学霸,又是编程高手。20岁刚出头,就被著名的科技火车头“贝尔实验室”聘用,并在那里开发出了世界上第一款虚拟调制解调器,也就是现在网络工程师常说的“软猫”。后来爱德华致力于嵌入式操作系统的开发工作,直到今天仍然奋斗在编程第一线,为嵌入式操作系统进行各种优化设计。

这本《柏拉图与技术呆子》,就是他几十年开发经验的总结和思考。

这本书总共12个章节,中译版将近400页,洋洋洒洒30万字,里面有大量的逻辑思辨和数学证明,还有少量的示例代码。但这并不是一本讲编程的书,重点也不是计算机科学,而是技术哲学。

 

再具体一些讲,这本书是爱德华这个大神级程序员的世界观和方法论,是他看待复杂问题和解决复杂问题的思维利器。这个思维利器是什么呢?我把它归纳为四个字:分层模型。

下面我将围绕本书精华,从三个层面进行分享:第一层,什么是分层模型;第二层,怎么设计分层模型;第三层,分层模型的局限性。

好,现在我们进入第一层,试着用程序员的独特视角,把纷繁复杂的客观世界转化成简单明了的分层模型,这有助于我们把现实中一些看似棘手的问题变得清晰易懂可解决。

要想搞清楚分层模型是什么,首先我们得理解模型是什么。

模型是什么呢?就是我们对具体事物某种特征的模拟方式。比如说太阳,它是圆的,你在纸上画一个圆,这就是一个最简单的太阳模型,模拟了太阳的外观特征。太阳还会发光,你在圆的外面画一圈光,这又模拟了太阳的发光特征。太阳是一个巨大的球体,水星、金星、地球、火星等行星在引力作用下绕着它公转。为了模拟这一特征,你可能还要找出一堆大大小小的圆球,将代表太阳的大球摆在中央,将代表行星的小球依次摆在外围,这就构成了一个立体的太阳系模型。如果你想模拟出太阳的更多特征,那可能还要使用一大堆数据和公式,例如太阳的质量、寿命、氢元素丰度、氦元素丰度,代表太阳辐射量的太阳常数,以及太阳绕银河系中心公转的轨道公式、行星绕太阳公转的轨道公式,等等。

你看,仅仅为了模拟太阳的某一部分特征,我们就要拿出多种模型。其中那些圆圈和球体是具象的,可以叫作“具象模型”;数据和公式是抽象的,可以叫作“抽象模型”。具象模型容易理解,但承载的信息量太少;抽象模型不容易理解,但承载的信息量很大。科学家和工程师使用的模型大多是抽象模型,并且主要是数学模型,也就是由一堆方程式和不等式构成的模型。理工科学生在大学期间,通常会学到一门“数学建模”课,学的就是怎样用数学模型来模拟现实世界。这门课很枯燥,但也很有用。

得到电子书里有一本《模型思维》,作者是一位美国科学家。在我看来,这本书就是数学建模的升级版和实践应用指南,因为书里介绍了各种各样的数学模型,以及这些模型的适用范围。这本书名叫《模型思维》,侧重点却是“多模型思维”,因为该书作者认为,现实世界具备无限多个特征,而每一种数学模型都只能模拟其中一个特征,所以只有同时利用多个模型,才能近似解决复杂问题。

与《模型思维》不同的是,今天我们分享的这本《柏拉图与技术呆子》并不主张“多模型思维”,而是主张“分层模型思维”,用单个但是多层的模型来解决复杂问题。

前面说过,本书作者爱德华是程序员,专业特长是计算机,所以他主要用计算机来解释分层模型。爱德华以全球最大的线上百科全书“维基百科”为例,为我们揭示了一个高度分层的计算机世界。

当我们打开维基百科的一个页面,查看或者编辑某个词条时,就进入了计算机世界最上面的应用层。在这个层面上,你不需要了解任何计算机原理,也不需要编写任何一行程序,只要动一动鼠标和键盘,或者点一下触摸屏,下一个应用层就会自动接管和给出响应。

所谓“下一个应用层”,指的是维基百科程序员团队用编程语言开发的程序。程序员使用的通常是高级编程语言,高级编程语言比较接近人类语言,但却远离计算机语言。为了让人类编写的程序能被计算机理解,计算机科学家设计出又一个应用层,将高级程序自动翻译成可移植的“字节码”,或者直接翻译成由0和1组成的“机器码”。机器码就是机器指令,它们能被计算机硬件执行,变成晶体管的开和关,变成半导体元件里瞬息万变的流动电子。

也就是说,从用户操作到机器执行,从软件层面到硬件层面,需要跨越非常复杂的多个层级。有多复杂呢?本书给出一个比较粗略的估算:一个普通的应用程序可能由100万行代码组成,被翻译成几百万条机器指令,这些指令在一小块至少包含几十亿个晶体管的芯片上运行,其中每个晶体管都相当于一个开关,而每个开关在每秒钟内都会切换几十亿次。结果呢?从我们日常使用的应用程序到晶体管的开关频率,中间大约隔了10的24次方,也就是1亿亿亿个单位这样的距离。

如果你不是程序员或者硬件工程师,听到这里恐怕会觉得头大。好在爱德华很快就从计算机世界跳出来,进入我们普通人更加熟悉的物理世界,例如一幢大楼。

爱德华说,大楼跟维基百科一样,也是分层设计的产物。大楼的最底层是基本粒子,基本粒子构成原子,原子构成分子,分子和原子发育成晶体,晶体组成了钢筋、水泥和砖块等建筑材料,建筑材料被制造成承重墙、隔断墙、天花板等建筑模块,这些建筑模块组成了整幢大楼。从大楼的设计图纸到基本粒子所遵循的量子力学,中间至少隔着五层。但建筑设计师并不需要了解量子力学,并不需要了解原子之间和分子之间的电磁力是怎么回事,也不需要制造钢筋水泥,甚至都不需要掌握砌墙的手艺,他直接跟承重墙、隔断墙、天花板等建筑模块打交道就行了。

爱德华的意思是说,复杂事物必须转化成分层模型。只有通过分层模型,程序员和建筑设计师们才有可能摆脱那些异常繁琐的细节问题,在更高的层面放飞想象力,设计出强大和优美的东西。

这里需要补充一句,分层并不等于分工。分工是一群人的事情,各自发挥长项,彼此协作完成任务;分层有时候只是一个人的事情,每个层级都是这个人在做。就拿软件开发来说吧,哪怕是开发小型软件,成熟的程序员也会使用分层模型,将软件设计为经典的三层架构,包括最上面的“用户界面层”、中间的“业务逻辑层”,还有最基础的“数据访问层”。分出三层架构以后,从底端数据层到最上面的界面层,都能由这一个程序员完成开发。

你可能会说:既然一个人就能干完的活儿,干吗还要分层呢?这不是多此一举吗?还真不是。我本人就做过软件开发,既体验过分层的好处,也吃过不分层的大亏。实践表明,分层能把复杂的任务变得简单,能让我们从上帝视角随时观察即将做和正在做的工作,从而让自己找到方向感,不至于在某个环节跑偏。

这么说还是有点儿虚,请允许我再举一个计算机以外的例子:拍短视频。一个人能不能拍短视频?完全可以。但要想把短视频拍好,脑子里至少得有一个分层模型,这个分层模型至少得包含两层:剧本层和拍摄层。你不必真的把剧本写出来,但脑子里得有剧本,得有设定好的目标和设计好的故事,然后拍摄时才能确保自己拍出有用的东西。

如果要拍长视频呢?那么连剧本都得分层。我原来给电视台打工,拍一部美食纪录片,文学剧本是我写的,但没有进一步写出分镜剧本,这既给摄制组提供了更大的创作空间,也让团队合作变得困难起来。比如说拍一个辣椒炒肉的镜头,我们需要的是沧桑感,摄像师却想突出衣食丰足的幸福感,以至于导演不停地提醒:“请控制一下创作冲动,请控制一下创作冲动!”结果呢?本来该两个月完成的工作,我们花了将近半年。等到做后期时又发现,有些镜头还得补拍。究其原因,还是因为分层模型没做好。文学剧本层规定拍什么,分镜剧本层规定怎么拍,我没有在文学剧本层下面构建一个更有操作性的分镜剧本层,导致摄制环节跑偏了。

前面解释了什么是分层模型,也解释了分层模型的作用,下面再谈谈在实践中怎么设计分层模型。

事实上,为了明晰目标、减少成本、降低任务复杂度和提高大规模团队协作能力,许多大型企业都在自觉或者不自觉地设计分层模型,万科地产就是一个例子。

万科有一个口号,叫作“像造汽车一样造房子”。这个口号的意思是说,万科要把建筑切分成标准化的模块,用流水线的方式进行生产和拼装。怎么实现这一目标呢?设计分层模型。

比如说,万科将所有待开发项目的主体建筑都切分成四层子模块,即“支撑模块”“维护模块”“设备模块”和“装饰模块”。是选择全框架结构?还是选择钢混结构?这属于最底层的支撑模块;门窗、外墙,这属于第二层的维护模块;走线、管道、能源、电器,这属于第三层的设备模块;地板、天花板、电视墙、内外墙漆,这属于最顶层的装饰模块。

主题建筑需要景观设计来配套,万科又将景观切分成多个子模块,其中包括最外层的花园式入口、较内层的景观雕塑和林荫大道、再内层的活力景观会客厅,以及更内层的睦邻空间、宅前空间和室内花园。

分层模型设计,模块化生产,至少为万科带来三大优势:一是能提高效率、缩短工期,二是给设计师留下了更大的创作余地,三是为业主提供了量身定制个性化住宅的可能。

有意思的是,万科模块化的灵感竟然来自软件开发行业。据2006年出版的地产评论《世联观察:房地产游戏规则与生存环境》一书记载,万科集团设计总监、万科模块化的倡导者张纪文从广播中偶尔听到一种说法:“一百个印度程序员在一百个地方只写一个软件,而在中国,一百个程序员一定是写一百个软件。”言外之意,印度程序员搞的是模块化编程,每人只写自己最擅长的模块,然后组装成一个复杂软件;而中国程序员喜欢单打独斗,每人都想独立完成一个复杂软件,所以在效率上就不如印度程序员。这种说法有些夸张,但却让张纪文触动不小。

万科是国内房地产行业模块化生产的先行者,需要从底层着手设计分层模型。但是其他领域的大多数企业在解决紧急问题时,都没必要从底层开始,因为行业圈子里可能已经有了相对成熟的分层模型,只需要根据项目需要再添加或者插入新层就可以了。

《柏拉图与技术呆子》这本书用很大篇幅解释了全球最大搜索引擎Google的技术原理。在多年技术积累当中,Google早就有了一套成熟的分层模型,但是为了提高搜索响应速度,Google程序员又在原有分层模型的基础上插入了一个新层,我们可以叫它“做梦层”。

我们知道,随着互联网页面和互联网用户的指数级增长,Google随时要面对“超大流量”和“超高并发”的难题。怎样解决这个难题呢?Google的秘诀是提前读取网页并进行索引和排序。每当一个新网页诞生出来,无论有没有人搜索它,它都会被Google工程师编写好的爬虫程序自动找到,自动读取,自动跟踪网页之间的链接关系。爬虫程序总是在不停地处理数据,其中包括网页上单词的接近度、单词排序、连接频率以及链接关联性等统计特征,这些信息被用来构建成一个个允许快速访问网页的“快捷方式”。当你用Google搜索某个关键词的时候,你直接访问的其实并不是网页,而是那些早就被自动构建好的快捷方式。Google在全世界范围内架设了数量惊人的服务器,其中一些服务器在夜间总是有空闲算力的。那么好,就让这些空闲服务器负责提前收集数据。作者爱德华用了一个很有趣的比喻,将那些空闲服务器夜间处理数据的行为,比喻成人类做梦时大脑自动组织信息。

计算机真的能做梦吗?爱德华在本书第二部分给出了比较严谨的数学分析。不过先别急,待会儿我们再说他到底是怎么分析的。这里先给出一个总结:设计分层模型是解决复杂问题的有效方式,如果没有可用的分层模型,那我们就要像万科那样设计一个;如果已经有了相对成熟的分层模型,那我们可以学习Google,根据需要往已有模型里插入新层。

我想向你分享我自己最近做的一件事:为一部即将开工的书稿设计分层模型。我要写的这部书稿属于少儿奇幻题材,大致内容是,几个小朋友被一只神奇章鱼召唤,突然来到公元1079年,与苏东坡、王安石、《梦溪笔谈》的作者沈括等人一起经历了一场生死攸关的历险。这部书涉及很多人物、很多场景,还涉及宋朝美食、宋朝政治、宋朝科技、现代科技,以及中小学课本上的古诗词。所以,怎么把这本书写好,就成了一个复杂问题。怎样解决这个复杂问题呢?我选择给故事分层。最顶层叫“目标层”,设定故事的终极目标是营救苏东坡,让小主人公们帮助苏东坡洗刷冤屈,摆脱牢狱之灾;目标层下面是“人设层”,为虚构出来的三个小主人公设置不同的出身、个性、特长和弱点;人设层下面是“悬念层”,包括神奇章鱼的神奇力量是怎么来的?神奇章鱼为何召唤小主人公?小主人公们在家庭生活和学校生活里各自有哪些缺憾?他们进入宋朝以后怎样给苏东坡通风报信?怎样克服重重困难跟苏东坡一起打怪升级?完成目标以后又该怎样回到现实世界?在这三层模型下面,还有一个“知识层”,那就是小主人公们升级打怪所需要的技能,包括生火、照明、划船、解方程、解密码、看月相、使用日晷、制作水钟、读懂文言文、背诵古诗词、用编程工具做复杂计算等等。在写出这四层模型之前,我完全想不出该怎么向下推进情节;而有了这个分层模型以后,故事就开始噌噌噌地往外冒了。我现在明显感觉到,搞定了分层模型,我就搞定了整部书的架构。我再撰写这本书的时候,人物就不容易出戏,故事就不容易跑偏,知识层面也不容易出现硬伤。

你看,分层模型不仅好用,而且应用场景非常广泛。

前面说过,本书作者介绍Google搜索算法时用了一个比喻,把空闲服务器夜间收集数据的行为比喻成人类做梦。当然,那只是个比喻,计算机并不会做梦。

相信你在很多科幻大片里看到过,未来计算机的算力越来越强,越来越智能,直到有一天,它们突然觉醒,有了翻身做主人的想法,然后就开始控制人类或者屠杀人类。这种可怕的局面会成为现实吗?本书告诉你,永远都不可能。

为什么这么说?书里有一大堆论述,其中两条论述最有说服力。我把那两条论述概括为两句话:一是“模型不等于现实”,二是“思想不等于数字”。

先说第一句,模型不等于现实。古希腊哲学家柏拉图认为万事万物都是模型的表现形式,先有模型,然后才有世界。本书作者爱德华却认为这个世界并不存在一套先验的模型,模型只是人类的发明,只能模拟某个事物的某一部分特征。爱德华认为,计算机是模型,软件是模型,硬件是模型,所有的程序代码都是模型。某些智能程序具备自我进化的性能,但这个性能也是由人类设计的,它们只是看起来有自我意识,实际上不可能有。

爱德华还借用了一个精彩的比喻:地图是世界的模型,能帮人指示方位,但你在地图上钻探,永远不可能钻出石油。拿这个比喻来推导计算机的发展趋势,结论就是计算机不管强大到哪个地步,最终都只是人类解决某些问题的工具而已。

再说第二句,思想不等于数字。稍微展开讲,这句话的意思是说人类思想里包含数字,但不全是数字,而计算机的世界里却只有数字。计算机还只能处理有限数位。假如我们用一个大圆圈来代表人类思想的话,那么数字只是这个大圆圈里的小圆圈,计算机更是小圆圈里的小圆圈。计算机的原理决定了,这个小圆圈进化到极限状态仍然是个小圆圈,不可能突破数字圆圈,更不可能突破人类思想的大圆圈。

除了《柏拉图与技术呆子》这本书,爱德华还有一本科技哲学著作已经出版,中文译本叫作《协同进化:人类与机器融合的未来》。后面这本书其实就是《柏拉图与技术呆子》第二部分的扩充版,用更大篇幅和更多论述证明了计算机不会取代人类,人工智能的威胁被严重夸大了。目前这本书已经在得到电子书上架(听书解读版也已上架)。

事实上,人工智能是数学家、计算机科学家和广大程序员分工协作,依据更复杂的分层模型开发而成的强大工具。如果你有兴趣,可以在得到课程和得到电子书里搜索“智能算法”,学习相关的课程和著作,肯定会接触到许多巧妙的分层模型思维方式,有助于你在解决复杂问题时设计自己的分层模型。

但我也必须说明,计算机不可能取代人类,分层模型也不可能用来解决所有问题。那么分层模型适合解决什么样的问题呢?我觉得这些问题至少要符合两项要求:第一,问题的目标要明确;第二,问题的复杂度足够高。如果是特别简单的问题,直接解决就行了,没必要为它设计一个分层模型。

说到这儿,这本《柏拉图与技术呆子》的精华部分就接近尾声了,我们来回顾一下要点。

在第一部分,我们探讨了什么是模型,什么是分层模型,以及分层模型有什么用。所谓模型,就是人类对某个事物某项特征的模拟。

 

所谓分层模型,就是为了解决复杂问题而设计出的层层递进式的模拟。

 

分层模型有什么用呢?它能把复杂的任务变简单,能让我们从上帝视角观察问题,避免失去方向感。

在第二部分,我们探讨了设计分层模型的两大方式。

 

在解决同类问题时,通常都会有成熟的分层模型可供借鉴,采取拿来主义的精神,再根据需要添加或者插入新层;如果没有这样的分层模型,那就自己来设计一个。

在第三部分,我们探讨了分层模型的局限性。就像计算机不可能取代人类一样,分层模型也不可能解决一切问题。

 

适合用分层模型解决的问题通常具备两项特征,一是目标明确,二是足够复杂。

 

不过,我们在工作和生活中遇到的棘手问题,往往也是目标明确和足够复杂的问题,此时不妨借助分层模型来解决。原书的精彩内容还有很多,虽然对非计算机从业者来说有些艰深晦涩,但你可以跳过计算机原理和示例代码,直接阅读作者给出的思想精华。得到电子书里就有这本书的全文,建议你去阅读。

今天这本书,我们就聊到这里。你可以点击音频下方的“文稿”,查收我们为你准备的全文和脑图。也欢迎你点击“分享”按钮,把这个音频免费分享给你的朋友。

恭喜你,又听完了一本书。

撰稿:李开周 转述:李璐 脑图:摩西脑图工作室

最近发表
推荐