先人牛
对,你没有看错,标题不是“仙人掌”,也不是“先人墓”(快清明了,应景),确确实实是“先人牛”。没听说过这种牛?接着往下面看。
今天早上刚开始工作不久,Megumi将问我了我一个问题:“C和C++的区别”。答案我当然知道,可是答案在这个时候其实并不重要,重要的是这个问题激发起了同学们讨论的热情,于是我们相当愉快地度过了一个上午。
午饭的时候,已经趋于平静的我们突然又说到了一本关于C的书,《The C Programming Language》。任何时候说到这本书都不可能不提到K&R 。什么是K&R ?Brian W. Kernighan和Dennis M. Ritchie 是也。可是我想说的K不是此K,而是彼K——Ken Thompson。
Ken和Dennis就是标题上的那个“先人”所指的对象了,不过他们现在都还活得好好的。这里有一张从Wikipedia扒下来的照片:

从这张照片你至少应该可以看出来一点:他们的长相不得了。恩,我同意这一点。
不过,除了长相以外,他们也确实是十分了不起的人!Ken(左), Dennis(右)和Douglas McIlroy三人在1969年的时候写了最早版本的Unix(应该是纯汇编)!然后在1972年的时候,Dennis把C写了出来。于是,他们又一起用C把Unix重写了一遍(注)!
在了解完了这段历史之后,我相当的感慨。那时候的他们什么都没有——没有现成的理论,没有好用的工具,一切都要自己动手从零开始。不过感觉那时候的人说要做个什么就能做个什么出来,好像一点不费劲似的。再看看现在,理论别人已经研究出来了,工具别人也做好了,我们做出来的东西却不像个样子了。举个例子对比一下:Ken和Dennis做的系统叫Unix,好东西;前段时间某个软件公司做的系统叫Windows Vista,那是个什么东西?
好了,打住,引用一句Dennis关于Unix的语录:
“UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.”
– Dennis Ritchie
所以,这篇文章的标题不能连着读,连着读就不知所云了,要这么读:先人,牛!
柳树不落叶
注:传说是这样的,不过我认为Unix和C应该是同时一起发展的。因为从它们的发展痕迹来看,C在当时更像是为Unix服务的一个工具。当工具在一定程度上已经够用的情况下,正式的工程就可以开始了。在工程展开得同时我们对工具不断进行修改和优化以满足工作的需要。这样,当正式工程完成之后,我们用的工具也基本上完成了。之后需要对工具做的工作就是把它一般化,使它面向更加普遍的问题,而不光是我们自己的问题。当这最后一阶段的修改完成之后,我们可以说这个工具是general purpose的,公开发布给大众使用了。