今年年底一件“大事”无疑是 Hyrule Warrior - Age of Clamity 的发布,拿到游戏的时候恰好是感恩节假期,然后基本上整个假期都用来打游戏了。原本我对无双系列的“切菜类”游戏有些偏见,但是这个支持双人配合的模式意外地好玩,并且虽然情节发展上算不上特别出彩,但是 The Legend of Zelda: Breath of the Wild (BotW) 本身也不是情节取胜的,而且这一作诚意满满地给 BotW 的粉丝投了各种福利,不仅重现了大灾厄之前的地图,而且 BotW 里简单带过的四大英杰也变成有血有肉的角色,连年轻 Impa 之类的众多角色也都可以操作了。下图是来自网络的 Impa 召唤蛤蟆的动作。

事实上,碰巧在七月独立日假期的时候偶然提起,我就开始和 N 一起玩 BotW 了,我这是二周目,N 是第一次玩,到后面刚好和 Hyrule Warrior 接起来。嗯……总之先回到本文的主题,做这么长的铺垫主要是要说明一下下半年的书单明显变短的原因。😅

The Language Instinct: How The Mind Creates Language, by Steven Pinker,五颗星。这是 Pinker 的一本比较早期(1994 年)的书,略微有点老,也比较厚,读了很久才读完。书名对想要讨论的话题是已经讲得很清楚了。Pinker 说他选用 Instinct 这个词,是因为他想表达人类知道如何说话就如同蜘蛛知道如何织网一样自然。当然这并不是指我们一生下来就能说话了(虽然书中消遣地引用了不少报纸上的类似报道【第8章】),而是说人类有一套共享的基本系统,让我们能够通过与父母和身边的人的对话来学到语言的内在语法结构,乔姆斯基学派把这一套内在系统叫做 Universal Grammar。作者虽然并不是持和乔姆斯基学派完全一致的观点,但是在这个基本方向上是一致的。

全书从不同的方面来对 Language Instinct 这个观点进行论证和阐释。首先显而易见的是【第1章】语言学习并不是一个简单的“记忆”问题,因为语言本身的结构导致即使使用有限的词汇,能够形成的句子的数量也是无穷的,所以小孩学习语言并不是通过记住父母在什么时候说了那一句话,并在相似的情况下说出同一句话来实现的,而是需要学习语言的结构和语法,并能通过类比等方法构造新的句子。虽然“类比”听起来也是很简单的事,比如小孩听到妈妈说“我吃了一个苹果”那么它可能很自然地就能构造“我吃了一个梨”或者“我吃了两个苹果”之类的句子。但是事实上类比需要先有一个相似性关系,它依赖于内在的语法结构【第13章】,并且在一定程度上是 universal 的,否则学习语言的过程就会失败,我们需要一种内在的 representation,使得学习中的小孩能够认识到“John likes fish”和“Mary eats apples”是相似的,但是和”John might fish“却不是相似的,否则他们就会构造出在不同意义下”相似“的但是完全不通的句子。

事实上小孩的语言学习能力非常强大。我们不是生下来就会说话,而是有一个学习的阶段让我们能对语言模块的形成做更多深入的了解,事实上,在许多情况下我们还很完整地观察到语言被从头构造出来的过程【第2章】——小孩在这方面具有超凡的能力。一个比较典型的例子是复杂的移民环境下的出现的叫做 Pidgin 的语言,混杂了各种不同语种的词汇和句子,但它其实不算真正的语言,因为没有一致的语法结构等重要特征,但是在这个“语言”环境下出生的小孩,经过一代人的迭代就可以把不是一个完整语言的 Pidgin 完整化,变成一个 Creole——虽然表面上看其实和 Pidgin 差不多,但是其实有了完整严格的语法结构。除此之外,另一个可以观察语言形成过程的场景是聋哑人社区,我以前不知道哑语其实并不是简单的只能表达基本意识的手势,而是具有完整的复杂语法结构的语言,事实上和我们的 spoken language 一样,哑语也有许多种,在没有已有的哑语系统的聋哑人(小孩)社区里会自动发展出自己的哑语。

在已有的成熟的语言环境里,小孩的语言学习能力(词汇记忆、语法理解)也非常惊人,书中有一些详细的相关研究的例子【第9章】,事实上我们自己也很明显地感觉到长大之后再学一门外语似乎比小时候要困难很多,虽然我们总能找到诸如时间不够之类的各种理由,但是也许真是生理(大脑)上的变化导致的呢。当然书中并没有提供绝对的证据,不过有一个有趣的反问是:如果真是生理上的变化,那为什么进化会产生这样一种“能力丧失”的过程呢?毕竟大人和老人还不一样,所以不太能解释为功能损坏。书中给出的论点是如果考虑有限的资源分配,那这也可以是合理的了,因为语言学习是一个相当耗费资源的模块,如果由于其他模块的需要,我们一生中只能拥有这个模块 5 年的时间,那么放在幼年时候似乎是最合适的。这种结构和功能的消失和转变在昆虫世界(例如毛毛虫到蝴蝶)很常见,即使人自身也有诸如两次换牙等生长过程,其实并没有什么本质的不同。

关于语言的本能的另一个重要议题是语言与思考的关系,我们是用某一种语言来思考的吗?语言是否限制和影响和限制我们的思维?Linguistic relativity 派的观点认为如此,一些常见的例子如【第3章】奥威尔的《1984》里提到的 Newspeak,再比如爱斯基摩人的语言里有几十个关于“雪”的单词的事(如何定义和界定其实比较有争议)。本书所持的观点大致是反面的【第3章】——显然我们经常会经历想法难以用合适的语言表达的情况,而且如果思维受限于语言,那么语言本身如何发展和进化呢?当然很难说语言对思维和认知完全没有影响,但是这更像是逆向的“反馈”,而不是正向的“决定”——我们通过一种 Universal 的组织结构来进行思维,而语言只是一种用于传播和交流的编码方式。关于这个方面我个人有一些稍微不一样的观点,特别是在数学符号上面:很多时候采用了合适的符号表达之后会让问题整个变得明了非常多;再比如在编程语言方面,试着用汇编语言和高级语言去实现同一个算法会是两种非常不一样的体检。但是数学和编程都是针对比较 artificial 的东西而生的,也许和人类语言所遵循的原则并不太一样。

回到传播和交流的问题上,事实上,语言背后具有一致的 structure 的另一个支持性线索在交流中出现:我们在前面已经提到过小孩在学习语言的时候如果没有合适的 similarity 的概念,会 generalize 出各种奇怪的句子,事实上大人和大人之间交流——特别是口头对话时——也是充满了 ambiguity 的,整个对话得以进行下去依赖于许多隐含的假设和互相合作【第7章】:作者以水门事件中的一段录音为例子,很多时候没有上下文的情况下外人很难完全听懂别人的对话,因为对话双方为了高效地交流而达成了“协定”,保证传达的信息是相关并且不冗余的,之前说过的或者从上下文可以推断出来的东西不需要再说,所以讲话双方不仅需要知道整个对话的上下文,而且还会对对方目前的想法进行推测,所以对话和手势、表情等一样是一个辅助性的提示,让双方的想法能够在一个主题上达成共识。没有省略,试图包含所有完整信息的语言文字(比如法律文书)反而是非常难读的。这种在对话过程中试图对对方的想法进行建模的行为会让我们在对待很多其他动物的时候对对方进行拟人化的过度解释——比如认为 AI 聊天机器人或者自家的狗狗理解了自己说的话,作者在谈到语言天性在进化中的起源【第11章】时详细讨论了由于这种过度解释而导致的一些关于在猴子或者猩猩上“成功”的语言训练的例子中存在的问题。当然语言的起源问题目前还是悬而未决的。

最直接的支持性证据可能是在第10章关于大脑不同功能区域的讨论,其中给出了一些某个特殊区域由于意外受伤而出现的语言缺失的病人的症状,比如有些区域会导致病人完全无法构造正常语法结构的句子,有的病人会喋喋不休说个不停,全都是语法结构正确的句子但是内容前言不搭后语(有点像现在的神经网络生成文本),还有的无法掌握物件的命名(只能使用非常宽泛的词如 food、stuff 等,但是其他的语法结构方面都没有问题)。

书中也有一些【第4章】语言结构和 Universal Grammar 的基本介绍(所以不用专门去读晦涩的乔姆斯基原著了),简而言之就是我们的语言并不是一个线性的字符“串”结构,而是一个递归的树状结构,当然不同的语言里即使把基本词汇翻译过来,语法结构也不尽相同,比如中文和英文都是使用“主谓宾”的基本结构,但是日文里确是使用“主宾谓”的结构,但是所有这些结构在更基本的层面上都可以用同样的“元结构”表达出来。除了句子构成法,单词本身【第5章】也有很多有趣之处,当然大部分单词是一个符号到其词义的一个任意映射,即使有一些规律,也会有更多的特例,所以对单词的记忆和对语法的掌握一样估计有特殊的大脑模块来负责。单词可以大致分为普通词和功能词,普通词是一种比较“连续”的存在,比如你把橘子换成桔子甚至橙子之类的相似和相近的词,句子的意思不会有很大的改变,而功能词则是离散的,符号性的,小的改动会对句子造成很大的变化(例如表示否定、转折等的功能词)。除此之外,实际上构词法中有几乎和句子语法一样多的结构,书中还讨论了单词的形成过程,例如当人们最初指着一个兔子说出“rabbit”这个词的时候,为什么 rabbit 代表了“兔子”,而不是(比如说)”疾走的兔子“、”胖兔子“等等。

总之是比较厚内容也比较多的一本书,虽然有些章节(比如第12章)感觉可能有点跑题,但是整体基本上是在围绕书的标题进行讨论,不过虽然作者的观点很明确——存在语言天性——但是其实大部分支持性材料都是侧面的线索,并不是决定性的证据, 所以议论的同时其实更多的是对相关领域和课题的一个基本介绍啦。

另外,虽然作者认同语言天性的存在性,但是却并不认为这是一件非常特殊的事情:作为唯一发明出了语言的现存生物并不能把人类放到神圣的地位,因为生物界里还有很多类似的例子,比如长颈鹿是唯一进化出超长脖子的动物,而第9章开头关于大象鼻子的一大段介绍感觉吐槽也恰到好处,不得不引用一下:

The elephant’s trunk is six feet long and one foot thick and contains sixty thousand muscles. Elephants can use their trunks to uproot trees, stack timber, or carefully place huge logs in position when recruited to build bridges. An elephant can curl its trunk around a pencil and draw characters on letter sized paper. With the two muscular extensions at the tip, it can remove a thorn, pick up a pin or a dime, uncork a bottle, slide the bolt off a cage door and hide it on a ledge, or grip a cup so firmly, without breaking it, that only another elephant can pull it away. The tip is sensitive enough for a blindfolded elephant to ascertain the shape and texture of objects. In the wild, elephants use their trunks to pull up clumps of grass and tap them against their knees to knock off the dirt, to shake coconuts out of palm trees, and to powder their bodies with dust. They use their trunks to probe the ground as they walk, avoiding pit traps, and to dig wells and siphon water from them. Elephants can walk underwater on the beds of deep rivers or swim like submarines for miles, using their trunks as snorkels. They communicate through their trunks by trumpeting, humming, roaring, piping, purring, rumbling, and making a crumpling-metal sound by tapping the trunk against the ground. The trunk is lined with chemoreceptors that allow the elephant to smell python hidden in the grass or food a mile away.

Elephants are the only living animals that possess this extraordinary organ. Their closet living terrestrial relative is the hyrax, a mammal that you would probably not be able to tell from a large guinea pig. Until now you have probably not given the uniqueness of the elephant’s trunk a moment’s thought. Certainly no biologist has made a fuss about it. But now imagine what might happen if some biologists were elephants. Obsessed with the unique place of the trunk in nature, they might ask how it could have evolved, given that no other organism has a trunk or anything like it. One school might try to think up ways to narrow the gap. They would first point out that the elephant and the hyrax share about 90% of their DNA and thus could not be all that different. They might say that the trunk must not be as complex as everyone thought; perhaps the number of muscles had been miscounted. They might further note that the hyrax really does have a trunk, but somehow it has been overlooked; after all, the hyrax does have nostrils. Though their attempts to train hyraxes to pick up objects with their nostrils have failed, some might trumpet their success at training the hyraxes to push toothpicks around with their tongues, noting that stacking tree trunks or drawing on blackboards differ from it only in degree. The opposite school, maintaining the uniqueness of the trunk, might insist that it appeared all at once in the offspring of a particular trunkless elephant ancestor, the product of a single dramatic mutation. Or they might say that the trunk somehow arose as an automatic by-product of the elephant’s having evolved a large head. They might add another paradox for trunk evolution: the trunk is absurdly more intricate and well coordinated than any ancestral elephant would have needed.

Serious Python: Black-Belt Advice on Deployment, Scalability, Testing, and More, by Julien Danjou,五颗星。比较不错的偏practical 的 python 书,内容也没有很过时,讲具体项目中会需要用到的很多东西,比如如何组织你的项目文件,如何进行单元测试和做 profiling,如何写注释并自动生成文档,如何把项目打包成安装包(这大概是 Python 里最混乱的一部分了),还介绍了一些稍微高级一点的诸如 generator、decorator、多线程和异步编程之类的知识。

古今数学思想(第一册), by 莫里斯·克莱因,五颗星。第一册讲从数学起源到中世纪为止的数学发展,确实观念、符号这些东西经常能一叶障目不见泰山,现在想想很自然的东西在过去真是经历了好多的挣扎才搞清楚。在这样的背景下古希腊的数学以几何为基础真是达到了非常惊人的严谨程度,如果没有后来的罗马、阿拉伯人乃至欧洲的蛮族人对文化的各种摧残和中世纪的黑暗时代,也许现代的数学发展会提前几个世纪,不过书里的观点是这也不尽然,古希腊基于几何的思想虽然提供了严谨的基础,但是却极大地禁锢了人们的思想,限制了代数和分析的发展,并且脱离实际应用。直到文艺复兴时期各种新发现让人们开始打破成规和权威的限制,再加上各种工程上的需求,让代数能够脱离几何得到发展并且创造了微积分——这些发明创造在当时都是非常缺乏严谨基础的(无穷级数随便使用,极限概率尚未形成,微积分也还被归在代数的范围内),但是却是革命性的突破,其成就和影响远远超过古希腊时代的几何工作。

古今数学思想(第二册), by 莫里斯·克莱因,五颗星。这一册主要讲了 17 到 19 世纪之间的数学发展,微积分、无穷级数、微分方程、解析几何和微分几何、复变函数和抽象代数的开端等等,从成功和创新各方面来讲,这段时间的发展跟古希腊时代相比都是爆炸性的。到这里如果对涉及的各个子学科没有事先比较了解的话,感觉就只看这本书里的简短介绍并不足以对其有足够的了解,特别书本书还是偏向于从历史发展进程来描述而不是从后人整理提炼过的现代视角来描述。不过即便不深入研读提到的每一个课题,作为一本历史书来看也是有不少有趣的地方。

第一点是这一段时期的数学抛弃了古希腊时期的严格性,例如无穷级数不管收敛性就随意使用,在微分的基本定义都没有搞清楚的情况下就被大量发展和应用等等,特别是在数学这样以逻辑和严密性为核心的学科里似乎显得本末倒置,无疑这导致了许多问题、悖论甚至一些错误的结论,但是这种”解放“所带来的遍地开花式的新学科和工具的发展是无法掩盖的,反过来如果直接拒绝接受任何没有严格基础的结论,那么今天数学的发展可能要推迟几百年了。之所以对这个有些感触是现在机器学习特别是深度学习里有一些关于理论方面的讨论,有一些观点认为目前这一块许多”科研“都是完全没有理论指导地瞎试一通,诚然有一些结论没有太多用处甚至互相矛盾,但是也许在任何领域发展过程中,这样一个”蛮荒“的时代都是不可避免的吧。

第二点感想就是果然数学的发展虽然并不只是适当的符号和语言的发明过程,但是无疑这在数学发展过程中扮演很重要的角色。方程、函数、微积分、向量、矩阵等等都不过是一些浅显的符号语言或者速记形式,本身并不包含什么深刻的道理,但是这些形式逐渐变成强有力的数学工具让人们能够在更高的抽象层面思考问题和应用。也许(符号)语言真的有作为人脑的外部辅助计算和存储功能的作用呢。

基督山伯爵(全三册), by 大仲马,五颗星。小时候特别喜欢看,对马赛留下了很深的印象,去法国的时候还特地去参观了那个监狱。从现在的视角来看,有种快意恩仇的武侠小说的感觉,有一些细节和场景(比如末尾吃鸡那段)二十年我去了竟然还在脑海里有深刻的印象。现在读起来虽然没有小时候那么兴趣盎然(大概主要是法国贵族的日常生活让我觉得有些无聊吧),但是整体还是非常吸引人的,特别是和最近看的一个改编日剧对比起来,就觉得即使是同样算法,不同人实现出来果然也会是千差万别啊。

Born a Crime - Stories from a South African Childhood, by Trevor Noah,五颗星。作者在南非种族隔离下作为一个黑白混血长大的过程,简直是在困难模式下以最不合适的身份开始游戏,确实看下来就是一部血泪史,但是行文不卑不亢,甚至还有几分诙谐。作者只是给大家讲了这么一些故事,展示了一些不同的生活,没有悲天悯人也没有去诅咒社会、制度和历史,更没有试图通过这个来博取同情——当然作者好像已经是名人了,大概不需要博取谁的同情,但我想这样的态度更多地是来自他坚毅的内心而不是外部的需求与否。从另一方面来说作者在书里描写的那些贫困人群里的各种各样的问题,其实在世界各地不同的地方都以各自不同的形式存在着,诚然严酷的成长环境大部分时候对小孩的身心都会造成不可逆的打击,但是如果幸运地 survive 了那样的经历,必定会获得强大的内心,作者正是这样一个幸运的人,当然也跟他有一个伟大的母亲不无关系吧。

Discovery - Discover the world of microcontrollers through Rust,五颗星。这是来自 Rust Embedded 社区的一本在线书。基于 STM32F3 DISCOVERY 板子的 Rust 嵌入式编程入门,需要有一点点 Rust 知识。作为入门书籍来说还是挺不错的,介绍了比较有用的诸如寄存器、LED 时钟、通过串口与 sensor 通讯等(中断、睡眠、多任务之类的主题没有讲),也介绍了基本的 workflow,例如通过 ST-Link 运行 GDB Server 实现远程调试之类的。代码的包装程度感觉还算合适:大部分细节提供了抽象包装,但是在每一章需要展开讲某部分内容的时候会忽略该部分的包装直接讲解最直接的实现方法。不过仅仅是看书里列出来的部分代码肯定是不太够的,要搞清楚细节和原理的话还是需要看代码仓库里的完整代码。

The Visual Display of Quantitative Information, by Edward R. Tufte,四颗星。介绍图表制作和可视化表达的书,全书的插图、排版各方面都非常漂亮和舒服。书讲了很多早期的制图工作中的各种“bad practice”,感觉和现代的用 matplotlib 之类的比较成熟的工具包进行电脑制图的过程有点脱节,当然也有一些原则是通用的,毕竟再好的工具包也没法阻止你画出复杂晦涩的图来。总体来说重要原则就是集中在数据本身,而不是花哨的修饰等等上面吧。非常好奇作者是怎么找到那些几百年前的制图的例子的高清大图来放到书里的。

Making Embedded Systems: Design Patterns for Great Software, by Elecia White,四颗星。主题稍微有点奇怪:从软件设计和设计模式的角度来介绍嵌入式编程,所以虽然前面几章有一些基础介绍,但是整体来说并不是一本全面或者系统地介绍嵌入式编程的书,而是介绍一些常用的场景(例如处理时钟或者用户输入的中断,或者不同组件之间的通讯等)和常见的(软件架构和设计模式方面的)解决方案。总之如果是软件背景的话应该可以很快翻完,同时还是能了解到一些硬件和嵌入式编程相关的知识的;不过感觉硬件背景的人来看这个书了解软件设计的知识可能会有更多的收获。

雍正皇帝 第一册《九王夺嫡》, by 二月河,四颗星。二月河写的清朝的皇帝的历史小说应该是很有名了,康熙和雍正都有被改编成很受好评的电视剧,前者小时候看过好几遍。这次把雍正的小说翻出来看,感觉还不错吧,可能历史小说框架在那里,不是很容易展开的缘故,基本上没有什么硬伤,也没有很无聊,但是也没有觉得特别精彩。全书三册,大概一时不会接着看剩下的两册了。

How Not to Be Wrong: The Power of Mathematical Thinking, by Jordan Ellenberg,三颗星。作者把数学划分为简单-复杂两类,然后把数学解决的问题划分为浅显-深刻两类,然后把全书的内容集中在“用简单的数学原理来解决深刻的实际问题”这一个象限,具体来讲,主要是一些常见的统计学原理在各种各样的问题中的应用,包括琐碎生活中的问题(为什么你的约会对象的性格好坏和长相好坏成反比)、到彩票、经济金融、政治、到一些会用到统计学的科学研究等等。说得好听一点就是包罗万象,说得不好听就是把简单易懂的数学原理埋在一大堆文字和各种各样的例子中,让你要么看睡着,要么看到后面都已经忘记了一开始是要讨论啥。不过我觉得作者的观点也无可厚非,虽然是简单的数学原理,但是应用到情况复杂的具体问题中时会有各种各样的陷阱和漏洞,我想很多例子都是为了说明这样的问题,所以当然是有其价值的,只是这样的书实在不是我的菜啦。