MINIX有一些性能令我很不满意,其中最大的失望是终端仿真。仿真很重要,因为我只能依赖这个程序,才能让我家里的电脑模仿大学的电

脑。每当我拨电话接通大学的电脑,使用强大的UNIX工作或仅仅是上网时,都使用终端仿真。
    于是我开始做一个项目,制作自己的终端仿真程序。我不想在MINIX底下做这个项目,而是想在硬件水平上完成它。这个终端仿真项目也是

一个很好的机会,可以让我了解386硬件的工作性能。我前面已经说过,这时正直赫尔辛基的冬天。我的电脑又笨又大。这个项目最重要的部分

就是悟出这台机器都能做些什么,并从中获得乐趣。
    我不得不从BIOS开始,BIOS是计算机启动的早期ROM编码。它可读软盘和硬盘。所以这次我在软盘上操作。它可读软盘和硬盘。所以这次我

在软盘上操作。它读出软盘的一个扇区并跳到那里。这是我的第一台PC,我不得不学着如何进行这种操作。386是以“常规模式”启动的。但为

了充分利用全部的CPU和进入32比特模式,你只得进入“保护模式”。在此之前,你得进行大量复杂的测试。
    为了制作中端仿真程序,你需要了解CPU是怎样工作的。其实,我用汇编语言书写的部分原因就是为了了解CPU。其他你还需要了解的事情

包括:怎样写入显示器,怎样读键盘输入,怎样读写调制解调器。
    我想出两条独立的线程。一条线程从调制解调器读出,然后在显示器上显示。另一条线程从键盘上读出,然后写入调制解调器,这样就会

在两条线程上运行着两条管道。这叫做任务转换,386就有支持这一程序的硬件。
    ……
    于是,终于我便能改变由一连串A和一连串B组成的两个线程,从而使数据一个读自调制解调器,再写入显示器,另一个读自键盘,再写入

调制解调器。我有了自己的终端仿真程序。
    ……
    当时是三月,也可能是四月,就算彼得盖坦街上的白雪已经化成了雪泥我也不知道。不过我也并不关心。大部分时间我都穿着睡衣,趴在

我相貌平平的计算机前。窗户上的窗帘遮得严严密密,把我和阳光——更不用说外部世界——隔离开来。……

    在电脑世界中,你就是创世者,你对所发生的一切拥有最终的控制。如果你功力深厚,你可以是上帝——在一个较小的层面上。
    我这么说恐怕要得罪地球上近一半的人口了。
    但是的确如此。你开始创造自己的世界,而唯一限制你的就是机器的性能,以及——在今天尤其如此——你自己的能力了。
    想象一下建在树上的小屋的情形。
    你可以建筑一个这样的房子,有一个活板门,既稳固又实用。但是每个人都可以看出一个仅仅以坚固实用为目的的树上小屋和一个巧妙地

利用树本身特点的美妙小屋之间的差异。这是一个将艺术和工程融为一体的活计。编程与造树上小屋有相似之处,这是它之所以被看成是一项

既有魅力同时又有实际贡献的活动原因之一。在编程中,实用的考虑往往被置于有意思、美观伶俐或有震撼力的考虑之后。
    编程是对创造的训练。
    探究计算机工作原理的过程,是吸引我走进编程世界的最初原因。在这其中获得的最大乐趣在于,我认识到了计算机科学与数学的类似:你必须从该体系自身的规则出发,推演出整个世界。在物理学中,你被客观规律所束缚。但是在数学和编程中,只要能合乎逻辑地推演,就可以成立。思考数学问题,不会受到客观世界的逻辑限制,数学只是逻辑自恰的符号体系。正如任何一名数学家都明白的,你完全可以建构出一套数学等式,以证明三加二等于二。事实上,你想有什么样的体系就可以构件什么样的体系。但是,随着复杂程度的提高,你必须多加小心,不要弄出什么与你构造的体系不一致的东西。
    好的体系容不得任何错误,编程也与数学一样是这么回事儿。
    人们对电脑如此着迷的原因之一,就是能从中获得自己创造一个新世界的体验,并领略到它到底能够成为什么样子。在数学中,人们往往按照客观事物的可能性进行思想实验。比如,说道几何时,大部分人想的是与我们的经验相符合的欧几里得几何学。但是电脑却可以帮助人们形象化不同的几何,并不仅仅是欧几里得几何学。在电脑的帮助下,人们可以形象化这些虚构的世界,看到那些世界到底是什么样子。还记得MANDELBROT SET吗——基于BENOIT MANDELBROT等式的FREACTAL IMAGES。要不是电脑,纯粹的数学世界绝不能这样形象地展示出来。MANDELBROT就是认为地制定了一些本不存在的与现实没有一点关系的世界规则,却创造出了神奇的图案。通过编程和电脑,你能够构筑一个新世界,有时其设计会是非常美妙的。
    ……
    于是,我写了一个磁盘驱动程序。因为我想把文件保存在我的MINIX文件系统中,也因为MINIX文件系统本身整理得很好,于是我让自己的

文件系统可以和MINIX文件系统兼容。这样,我就可以在MINIX系统下阅读我建立的文件并将它们存入同一张磁盘,以便MINIX系统可以通过我的

终端仿真器阅读到我建立的文件。
    这花费了我大量的精力:编程——睡觉——编程——睡觉——编程——吃饭(饼干)——编程   睡觉——编程——洗澡(冲冲了事)——

编程。随着工作的进展,这个项目很明显正在成长为一个操作系统。所以我转变了看法,不再把它看成一个终端仿真器,而是一个操作系统。

这个转变出现在我马拉松式的编程过程中的哪个阶段,是在白天还是在晚上,我已经想不起来了。也许在这一刻之前我还穿着破旧的睡袍奋力

敲击键盘,在为终端仿真器编写更多的功能;而转瞬之间我拥有的功能是如此之多,以至于整个体系已经变成了一个操作系统。