My Programming Life - Tao
我的程序人生之道

写这篇文章之前给自己定一个小目标:文章不能有错别字。

读研对我来说,就是玩。

读研究生的第一个月的主要任务是选择导师。 一位老师说:我有一个Xen(虚拟机的一种)的项目。 我想:操作系统和虚拟机有点儿关系。 一扯到操作系统,我就热血沸腾了,那就选他吧。 唉,坚持玩的决心轻易改变了。 后来才明白,选导师选的是导师的人,而不是导师的其他。

选择导师后,我便开始着手学习Xen。 我不太喜欢读二手文档,于是在网上找了Xen开发者的论文来读。 读研的收获之一:除了官方文档,计算机科学名著,wikipedia, 论文成为我另一个重要知识来源。后来我在Ubisoft实习期间, 写的一个搜索单词的算法,就是读了国外一篇论文后实现的。 对于国内计算机方面的论文,我只想一笑而过。 看了这篇论文和关于虚拟机的wiki后, 我在网上找了一本书来看: The Definitive Guide to the Xen Hypervisor,同样是Xen开发者写的。 这本书讲了Xen的设计,但不涉及实现。整个研究生期间, 我对于Xen的学习就止于大概了解:所谓虚拟机,就是虚拟出一个计算机。 一个计算机包括CPU,内存,外部存储,网络,IO。相应地, 虚拟机就包括虚拟CPU,虚拟内存,虚拟外部存储,虚拟网络,虚拟IO。

和我同时学习Xen的有一哥们。这哥们很有想法,我们经常一起探讨 技术、人生、还有妹子。后来我们成了好兄弟。有人问过我: “他和你的性格完全不一样, 你们怎么会成为好朋友的。” 我说:“可能是因为互补吧。”的确,和他在一起的时间,我变开朗了不少。 研究生期间,能遇到这样的一位兄弟,足矣。

读研期间每个学生都必须当一次实验室助教,我当时带的是数据结构实验。 我看本科生写的代码,靠!没有缩紧,头文件不写避免重复包含的宏, 变量定义放在头文件里。我觉得这不单是学生的问题,老师也有问题, 老师没有强调这些基本的东西。有一次,数据结构的老师让我给他们 评讲一下数据结构的习题。我心想:“是你让我讲的啊,那我就按我的想法来讲。 ”于是,我就给那些学生讲了一下写代码的基本规范,然后教他们头文件要怎么写, 演示了下不这样写会出现的问题,再然后我把VC6.0的stdio.h源文件打开来 给他们看了一下,让他们知道别人是怎么写头文件的。我在台上讲我的, 也没管其它人的反应,结果学生听懵了,老师也懵了。这就是我想要的效果。

当助教的期间,本科的一室友告诉我说有一个算法比赛, 于是我们就一起去参加了。在网上通过预赛后,我们就组了一个队去 天津参加复赛。我这室友的算法造诣挺不错的,有段时间一直在搞算法, 不知现在如何了。复赛过后,我们顺便去北京逛了一圈,见了一下在 北京工作的一兄弟,便回成都了。

还道成都好,风景旧曾谙。

回来后,在一位师姐的介绍下,我去了川师成教院教学操作系统课程。 在备课的过程中,我发出了这样一个问题:操作系统是一个具体的系统, 那么,它遵循系统的的性质。那系统又是什么呢?对于这个问题的探索 让我豁然开朗,并抓出了我的“道”。我尝试以我的“道”来指导我教学, 而不是遵循教科书的顺序。我首先把我的“道”陈述给学生们听:系统是什么。 然后告诉他们操作系统在计算机系统的位置。 计算机系统分为软件系统和硬件系统。软件系统分为系统软件和应用软件。 操作系统是其中的一类系统软件。接着,我才告诉学生们操作系统可以分成 进程模块,内存模块,IO模块,外部存储模块,网络模块。最后,对于每一 个模块,一一教学。由于操作系统课程不会参加会考,我的这一次教学, 对于这些学生来说,一点也不重要;但对于我来说,这是一次在以往积累 的经验的基础上的一次质的改变。

以程序入道(Tao)

感谢那些与我谈论过技术、人生与世界的人,是这些谈话给予我的灵感, 让我找到了我的“道”。

我喜欢用“道”这个字,因为它比其他词更中华(祝中华人民共和国第67个生日快乐)。

道可道,非恒道。 我是这样理解的:永恒的道是不可以解释或证明的, 你选择相信就是了。 “道”有点像证明系统里的公理,或者说人的信仰。

我的“道(Tao)”,我的“系统(System)”。

在我教学操作系统课程的时候,我追问自己:操作系统是一个的特定系统, 那普遍的“系统”又是什么?对这个问题的探索让我找到了我以往所有经验 的共同基础,将这些经验都连成一个了没有孤立点的图。

系统是什么?

我第一反应是问wikipedia。https://en.wikipedia.org/wiki/System 。 第一次读这篇wikipedia的时候,我被这句话吸引了注意:

"System" means "something to look at". - Marshall McLuhan

这不是说,所有事物都是一个系统吗?

然后,我读了System这个单词的语源(Etymology),与系统相关的概念 (System Concepts),发现居然System可以完美的解释我以往的每一个经验。

它是如此适合我。

它,就是我的“道”:系统。

系统是什么?

我不会直接拿任何一个前辈的定义来当作我的定义,我的道必须我来定义。 这个定义必须简单,大道至简,复杂了容易有BUG。 这个定义如果可以,不依赖于我生活的现实世界,在我看来现实世界也是一个特定的系统。

怎样描述,才算定义?

我模仿“集合”的定义,给出了我对“系统”的定义,并同样给出了三大性质。

系统是什么?

Everything is a System.(一切事物都是系统。)

(灵感来源于 UNIX philosophy:Everything is a File)

系统(System)三大性质:

  1. System consists of parts (系统由部分组成);
  2. Parts communication with others (部分之间是相互通信的);
  3. Part is a system. (每个部分是一个系统)。

(灵感来源于 the heart of UNIX philosophy: the power of a system comes more from the relationships among programs than from the programs themselves.)

有了道,我的世界观,人生观就有依据了。

世界观

宇,空间。
宙,时间。
宇宙,即时间和空间。宇宙中的每一个系统,都可以按这两个维度 分成子系统,按时间分成阶段,按空间分成结构。

宇宙的三大元素:物质,能量,信息。
系统(可以很容易推出宇宙中的系统是更大的系统的一个部分)之间进行 的交流可以分为三大类,即物质交流,能量交流,信息交流。

这个世界是不可能被完全认识的。因为研究对象是一个系统, 它总是可以被分成部分,每一个部分是一个系统。这是一个递归过程, 如果不人为制定一个停止条件,那么这个分解过程是不会停止的。 例如,物体可以分成原子,原子可以分成原子核和电子,原子核 可以分成质子和中子。质子可以继续分下去,我们不分,不是因为 它理论上无法再分,而是因为我们没有这个需要,或者技术上的局限。 不分的原因相当于人为制定的停止条件。

人生观

我是一个系统(System),我的人生只不过是与世界的一场交流或者IO。

      +-------------------------------------------+
      |                                           |
      |       SURROUNDINGS                        |
      |   ---------------------                   |
      |  /                     \                  |
      |  \   SYSTEM             \ <----- INPUT    |
      |   \                      \ -----> OUTPUT  |
      |    \------- BOUNDARY ----/                |
      |                                           |
      +-------------------------------------------+
    

SURROUNDINGS是周围所有系统的集合,包括人,动物,景。 BOUNDARY是我的外表,我通过它,可以观察(INPUT)和影响 (OUTPUT)SURROUNDDINGS。

价值观

这个世界丰富多彩,变化万千,有些东西,有些事情,我不知道 什么是对,什么是好,什么最重要。但我会始终保持热爱生活。

End at 2015-03