这篇文章也是一篇博客文章,读者可能会质疑:这不是与这篇博客的主题相矛盾吗? 我目前觉得还没有,但可以预见的是,这个博客在未来的一年以内不会更新任何内容。 我的博客的更新频率越来越低,我为什么不再写博客了呢?或者严谨的说,我为什么不再进行频繁的博客写作了呢?
这一切要从去年我参与的一期 ggtalk 播客节目谈起。 从这期节目的 1:17:57 开始,我提到了一个线性写作的概念。所谓线性写作, 是指将一个网状结构的知识进行线性的展开,将网络中本该存在的连接通过精巧的章节设计进行解耦。
网状结构在脑海里的脉络是清晰的,原因在于思维对知识结构本身就有全局观。 但问题的根源在于,这种全局观对线性展开后的知识体系的读者是不明朗的。 一旦我们将一个网状的知识进行线性展开后,本质上就隐性地要求读者自行将知识结构在思维里进行重新绘制, 这对读者的要求是非常高的。 当这个线性结构在读者面前呈现的好时,读者将会在阅读的某个时间点回忆起前面提及的知识,在脑中形成一个闭环, 达到一通百通的效果; 但一旦呈现得不好时,读者会在脑中充满疑惑:这是什么?这有什么用?为什么要在这里生硬的插入这样一段概念?怎么这么乱?
一个很好的例子常见于公理化后的数学书籍。不妨以概率论为例,我们来看一组重新调整叙事后的统计学概念和定理:
- 总体:所有满足某些共同性质的值的集合
- 样本:从总体中随机抽取的个体
- 频率:n 次试验中,某个事件发生的次数除以总的试验次数
- 大数定理:当试验次数 n → ∞ 时,频率一定渐进地收敛到某个值
- 概率:频率收敛到的值
- 独立:两个事件互不影响
- 随机变量:是一个函数,参数是所有可能的样本,返回值是这些样本的取值
- 期望:随机变量以其概率为权重的加权平均值
- 方差:样本取值与期望之间的「距离」,距离通过这两个值差的平方和进行计算
- 概率密度函数:是一个函数,参数是随机变量取值,返回值是随机变量取得该值的概率
- 正态分布:一种特殊的概率密度函数
- 中心极限定理:无穷多个独立的随机变量的和服从正态分布
很明显,这里的定义并不是概率论中的公理化定义。它有什么特点呢?每个概念由上至下线性的递进。 这种线性的关系在一位概率论书籍的读者面前其实并不那么直观。 例如,概率的公理化定义是通过其非负性、规范性、可列可加性来描述的一个样本空间上的可测函数。 那么什么是样本空间?可测函数又是什么?进而又牵扯出为什么需要可测、不可测又有什么问题等一些很严肃的数学概念。
我们先不去讨论这些问题的答案是什么,这不是这篇文章的目的。 不妨再来看公理化概率论的后续内容都描述了什么数学规律。 在建立概率论中的最基本的大数定理前,通常还要求读者掌握随机变量这个概念。概念本身从名字上其实很好理解, 但严格的数学公理化定义其实是概率空间到实数集的一个可测函数,很明显这种说明过于「高端」。 当然这样的例子在这份清单中还很多,例如大数定理并不是一条经验定律, 而是在公理化体系下严密演绎出来的一条数学定理,对公理化概率论比较了解的读者应该知道我在说什么。 早年学习公理化概率论的时候就饱含这样的疑惑:为什么随机变量被定义为了一个函数? 为什么正态分布必须是这样的形式?频率真的总能稳健且渐进的收敛到概率吗? 这一切的疑惑,在见到大数定理和中心极限定理的瞬间被解答了,进而叹服于这种精妙绝伦的演绎。
这就不仅令我反思,为什么公理化后的数学要将知识结构展开得如此晦涩难懂?当阅读一个定理的证明时, 总在惊叹于作者是如何想到这一巧妙的构造,这是一种好的做法吗?将概念的原始想法, 隐藏在存粹的逻辑中,真的值得提倡吗?我曾反复的向自己问这个问题,直到后来我给出了这样的回答: 当你在进行一段精妙的演绎时,你想要的是读者对这种精妙的演绎过程表现得叹服, 还是想要将你如何思考得来的这个过程完美的展现并分享给你的读者呢?想法重要吗?当然重要。 你需要告诉你的读者吗?似乎不那么需要。在纯粹的逻辑面前,一切加工都显得苍白无力, 在精妙的演绎面前,那些原本平凡的想法已不重要。
内容的组织是需要经历相当长久、全面且艰深的思考的,这其实是与数学概念的发展过程不谋而合。 回顾数学的知识的呈现过程,其实是一个活脱脱的知识结构不断被后人整理修订的过程。 这个过程现在被我们称为数学系统的公理化,这个公理化包含了系统的完备性和相容性。 完备性阐述了在系统内以最少的公理数量推导整个系统的全部结论;自洽性要求了公理系统悖论的缺失。
又比如说欧几里得几何的第五公设稍加修改就能衍生出非欧几何,但这两种几何并不满足完备性要求, 只有不包含第五公设的绝对几何才是度量几何类中的完备系统。对于自洽性而言,它并不与哥德尔不完备定理相矛盾, 自洽性断言不存在既真又假的命题,而后者断言存在既不可证明又不可证伪的命题, 就好比第五公设之于度量几何,连续统假设之于集合论,选择公理之于 ZF 系统。
受这种严密思维日积月累的熏陶,在过去的几年间我开始逐渐的在自己的私有仓库里尝试对每个知识都 进行精心的设计,采取探索来龙去脉这一写作思路。当然,早年的我并没有使用这种写作风格,这在 《现代 C++ 教程》这本书上体现得很好,那是一种零散、独立、快餐式的写作风格,读者能够随意从 任何一个章节开始阅读,随时能够获得信息量。相反,《Go 语言原本》则要求读者在阅读全书的过程中逐步的了解全书的一种循序渐进的写作脉络,这也就是我在过去几年的尝试中,不断转型为我在自己私有仓库中反复实践过的一个学术专著型写作风格开源项目。 这种探索来龙去脉的写作思路在这本书里面体现的淋漓尽致。例如,对于一个语言本身为什么要先从运行时而非编译器谈起?为什么要将一个知识拆分为两半,一半位于书籍的前半部分,另一半会在长时间用不到该知识的情况下放到了全书较为靠后的位置?
这种写作风格上的转型体现在它最初并不是以学术专著的形态来写作的。从仓库的第一个提交历史可以看到它最初并不是 以公理化角度来进行写作的,写作的目的更像是一个相对公开的私人的笔记库(它的第一个提交是关于 Go 语言运行时调度器的分析) ,而这种转型发生在项目关注度的逐步上升阶段。
但只是万万没想到,那个上下求索近两年的写作目标和风格,在它第一次公开亮相不久后, 便能够被人堂而皇之的拿去,用醒目的大字对外作为自己的风格进行宣告。这构成抄袭吗?当然不算, 只是我并不能苟同这种「拿来主义」。它被拿得足够好吗?怕是不够好。因为我看不到作者自己的思想, 没有思想的作品充其量可能只是一只负责送信的猫头鹰,甚至惨遭退回。
回过头来看,《原本》一书显然引起了人们的注意力,也许算是给了一个群体一剂强心剂。 让他们从那个零星过时知识的蛮荒时代进入了一个开始思考并关注发展和持续的时代,我认为它完成了它的「使命」。 我还会继续写作《原本》吗?我也不知道。也许吧?也许不会。
我为什么不再写博客了?你有答案了吗?
欧长坤 于 慕尼黑
2020 年 03 月 08 日