Dec 30, 2004

沙龙回顾与补充

以下内容是我大二时候写的,对于Knuth的一些八卦可能有错
=================================

我今天吃了晚饭开始写沙龙总结,不知道怎么搞得写了一大堆
因为Answer有版面的限制,所以做了删节
这里把完整版的贴出来
各位可以直接当作纯文本来看,也可以到www.cetx.org去下载TeX的编译器以获得更好的效果


\documentclass[a4paper,14pt]{paper}
\usepackage {graphicx}
\usepackage{amsmath}
\usepackage{CJK}
\usepackage{indentfirst}
\usepackage{geometry}

\renewcommand{\baselinestretch}{1.2}

\begin{document}

\begin{CJK*}{GBK}{song}
本周日的地学沙龙我向大家介绍了\TeX 语言,一种由Stanford计算机系教授Donald E. Knuth在1983年发明的用于排版的语言。我想借Answer的机会谈谈和\TeX 有关但又不是\TeX 的问题,算是给大家的新年礼物。

为了说明\TeX ,必须谈一谈这个有趣的人。 Donald E. Knuth22岁毕业,由于“成绩过于优异”,同时被授予学士和硕士学位。他在36岁的时候就获得了图灵奖,可以算 是图灵奖获得者中为数不多的年轻人。(好像Unix的发明人之一Ken Thompson 是到40多岁才拿图灵奖的).Knuth 在图灵奖的颁奖典礼上做了关于计算机程序设计和艺术的关系的演讲,最近一期的 Programmer(程序员)杂志就刊登了对这篇文章的评注。 Knuth总共教了28个博士生。不知道怎么搞的,他觉得28这个数字很好,于是就决定再也 不带博士生了。拿了图灵奖之后Knuth突发奇想,他扬言自己要用20年时间写一本 同Newton的\emph{The Mathematical Principle of Natural Philosophy}一样著名的书。于是他宣布退休了,恐怕这是全世界大学里面退休最早的教授了。由于他在图灵奖颁奖时的演讲时关于计算机程序设计和艺术的关系,所以他到Stanford的图书馆里把所有含有“艺术” 和“科学”这两个字的书都看了一遍,然后决定 自己的书名就叫做\emph{The Art of Computer Programming}。这本书他计划写7卷,目前写了3卷,我前段时间因为研究排序算法,看了第三卷开头讲排序的一段内容,觉得这个老头“太认真”了。他居然能字斟句酌的写了两页纸讨论为什么计算机科学中“排序”用sorting这个词,而不用其他的词,诸如order。结果这本书才写了三卷,就已经被认为是同Newton的\emph{The Mathematical Principle of Natural Philosophy}一样著名的书。我前段时间还曾经到图书馆查找了其他讲算法的书,结果发现没有哪本书敢不引用\emph{The Art of Computer Programming}的,当然中国人写的书除外。

写这本书的时候,Knuth觉得当时的计算机排版系统实在是不爽,于是他决定发明一套新的排版系统,这个就是
\TeX 。后来有人说,光是发明了 \TeX 就足以让Knuth再拿一次图灵奖。

\TeX 是如此的完美,以至于Knuth说发现\TeX第一个错误的人将得到2.56美元的奖金,后面发现错误的人,奖金翻倍。20年来,\TeX只被发现了几个错误,假如让Bill Gates这样做,估计他要破产了。

这个Knuth也是有意思他把\TeX的版本不是像一般的软件那样用不断增加的数字,或者年份来表示,他居然想出用$\pi$的近似值来表示。版本每提高一次,就把$\pi$的近似值精确到小数点后下一位。你让Bill Gates 试试看这样,估计你每天打开Word文档的时候那个欢迎界面都要全屏了。

由于Knuth说programming是一种art,所以programmer必须是artist。他说我让别用\TeX写文章必须让别人感到自己是在享受。\TeX在20多年前就采用了形式与内容相分离的思想,一个\TeX文档包括两部分内容,一部分是文字,另一部分是这些文字的属性。这就是现在标记语言的思想,而第一个被大众接受的标记语言是HTML。这个语言是一个CERN的工程师在大约1990的时候发明的。可以明显的看出Knuth超前这个时代将近7年。不要小看这7年,计算机发明到现在才不过50年左右。由于采用了内容与形式相分离的思想,\TeX可以使得我们在写文章的时候专著于内容,不要去在意排版,就好比我想在在写这篇文章,我不管标题是否居中,到底是什么字体,多大的字号,我只关心我的标题是什么,于是我就用\slash author \{\}把我的标题声明,然后\TeX的编译器会根据我调用的头文件,就是在文章一开头 \slash usepackage\{\}里面的头文件,来确定我的标题是什么样的排版。

\TeX把这种思想发挥到极致,它甚至认为所有非ASCII码字符都是不同的style,比如我现在在写中文的\TeX文档,那么我就要调用一个叫做CJK的中日韩字符头文件。如果你要使用多种语言,那么只是多调几个包的问题。

所以说\TeX 的文档实际上只包括了内容,因此是非常小的,Knuth自己写的那教大家怎么用\TeX 的书\emph{The \TeXBook}的代码只有1.2MB。

\TeX是有史以来最强大的排版系统,我们可以用它制作任何文档。论文,书籍,海报,幻灯片,报告书,比如说Answer也可以。 现在有了word2tex,excel2tex,不知道哪天就会冒出powerpoint2tex来了。 Knuth还给自己 的\TeX
编译成的文档起了一个好听的名字DVI,就是Device-Independent的意思,就是说你无论在什么平台,什么语言,文档都是不会变样的。这种 DVI格式还可以方便的转换为PS和PDF格式。假如你的文章很长,有很多章节,还可以转换为HTML格式,变成一堆具有链接关系的网页。

\TeX 相对已有的WYSIWYG(what you see is what you get,所见即所得)的排版系统有很多优点。你何必去用MathType向文章中插入公式?\TeX 自己就是公式编辑器。你何必去使用所谓的文献管理软件?\TeX
自己就是一个文献管理软件。你何必使用昂贵的Adobe Acrobat去生成PDF?\TeX 自己就可以打印成PDF。你何必去在打印文档之前必须用软件将其打开?\TeX 可以生成直接可以被打印机接受的PS文件,假如在Unix/Linux系统下,你更可以简 单的用lpr 命令,然后就看着一页又一页纸从打印机里出来。

一开始用\TeX可能你觉得很不爽,因为你要输入那么多控制字符,但是你必须注意这样一点,你使用\TeX将为你带来维护文档时间的节省。我们在一个文档上所耗费的时间不仅是第一次输入内容的时间,还包括日后修改所
耗费的时间。假如你的文章准备改投另一个杂志,你是不是准备把所有的文字重新编排一遍呢?是不是把所有的MathType公式全部重输一遍呢?我就碰到这种情况。我的文章中的公式原来是用MathType5写的,结果编辑部冒出来一个要求说公式的各种尺寸要求,可以修改MathType的公式必须一个一个的双击来编辑,我把文章中的公式改完了,简直感觉把文章重写了一遍。假如你的文章还有上百篇的参考文献,你是不是又准备用格式刷一个个刷呢?

学习\TeX其实也不是很难,只要你会英语,就可以了,那些控制字符就是英语,你写\TeX文档的时候就感觉自己是在和计算机交谈。而且我们仅仅要求\ TeX可以把我们的文章表现出来,那些过于复杂的效果不在我们的考虑范围之内,那么我们能用到的\TeX命令是非常少的。

随着你使用\TeX 次数的增加,你会越来越喜欢\TeX。你会渐渐体会到Knuth所说的这是一种乐趣。

其实如果你花费了一个下午来听我讲述\TeX的语法那将很没有意义,所以我只讲了简单的一些语法。我更想传播一种思想,我向大家推荐\TeX在向大家推荐一种思想,一种文化,这种思想就是当今在软件开发领域非常火热的开源思想。这个思想就是Bill Gates的大学同学Richard Stallman在1983年的时候提出来的,他发起了这个叫做GNU的运动,当时他是MIT人工智能实验室的一员。当今世界最最有生命力的操作系统—— Linux正在不断的攻城略地,从商用服务器,巨型的计算服务器,到桌面PC,一直到小型的嵌入式系统在世界上几乎每一所大学,包括南京大学,都有服务器在提供Linux的服务。这个操作系统就是基于GNU框架之下的。开源的思想使得用户可以免费的得到软件的发行版,程序员可以任意的修改代码,每一个人都可以投入到开发之中,比如我就在为一个叫做gEDA/gschem的项目在编写HELP文档,因为我得益于其他人的劳动,所以我也要为之付出努力。前段时间有一个叫Eric Raymond的人写了一本书,叫做\emph{The Cathedral and the Bazaar}。他说传统的软件开发方式像教堂一样,每个工匠都受一个人指挥调度,而GNU的软件开发则像一个集市一样。是啊,这个集市里面还有我这样的小贩子。

GNU 是否成功我不能下定论,因为我不是学软件开发的。但是这种运动,是年轻人所特有的激情才能够维持的。我觉得不论你是否为GNU改写过一行代码,只要你使用过GNU的软件,只要你用心去体会GNU的思想,你就会感觉到踌躇满志。这也就是为什么GNU在大学获得巨大的欢迎的原因,而且大部分的GNU软件都是年轻人开发的,我甚至认为一个人能够有机会在年轻时接触GNU将终身受益。我在Linux下只使用一个盗版软件,Mathematica,因为其他的软件都有开源的了。

当我每天打开计算机的时候,我想到一个叫Linus的21岁大学生写出了一个叫Linux的操作系统;当我写文章的时候,我就想到一个叫Knuth的CalTech毕业生同时获得了硕士和学士学位,他36岁就拿了图灵奖,然后发明了\TeX。我还会想到这些软件所诞生的那些伟大的地方。当我用SPICE语言描述模拟电路的时候,我就想到伟大的UC Berkerley,当我使用PCB画电路图的时候,我就想到John Hopkins,当我用Emacs的时候,我就想到MIT的AI实验室,当我使用OpenOffice做幻灯片的时候,我就想到Sun的全称是 Stanford University Network,...
那么多光辉的名字激励着我,假如你问我为什么读书,我不禁想起1996年奥运会主题歌的名字:\emph{The
Power of The Dream}。

刚才看本期《商业周刊》,看到一篇文章“假如没有微软”,说的是一个人他的Windows系统受到攻击,他受不了了,于是去使用Linux的故事他说虽然他没有完全使用Linux,但是他是再也不会使用IE浏览器也再也不会去购买微软的Office了。

这就是一场大战的一个小小战役,在今天一场大战正在上演。战争一方的领导是一个叫Bill Gates的年轻人,战争另一方的领导也是一个年轻人叫做Linus Torvalds。战争的一方使用.Net作为武器,战争的另一方使用Java作为武器。这场战争影响了整个世界的格局,你翻开任何一本计算机方面的杂志或者报纸,都会看见这场战争的报道。甚至Hollywood的MGM公司都瞄准这个题材拍摄了大片Antitrust(这篇电影最后的致谢中就有 Linus Torvalds,最搞笑的是居然SUN的前总裁麦克尼尼也在影片中露相)这场战争没有硝烟,但是他将同荷马史诗中那么多伟大的战争一样被人们记住。记得电影“阿拉伯的劳伦斯”里面有这样一段话,“和平是老人的,所以和平也有老人的特点;战争是年轻人的,因此战争也有年轻人的特点” 我觉得投入到这场战争中去便是我不可失去的大学生活的一部分。

其实当我用\TeX的时候,我总是思考这个问题,中国是发明印刷术和造纸术的国家,但是今天这个世界上最先进的排版系统却不是中国制造的,这个问题值得我们深思。试想中国哪个大学允许教授36岁就退休,然后花20年时间去写一本书?又有哪个大学允许这个教授在写书的时候开了小差,去发明一个叫\TeX的排版系统?开了一个小差不算,他还觉得画图软件不爽,然后又发明了MetaFont。不知Knuth这20年发了多少SCI和EI。

但是反过来想想,中国哪个大学教授会带博士生到一定数量就不想带了?又有哪个大学教授会觉得排版系统不爽然后自己写一个?

所以我就反过来又想,中国哪个大学生会想到自己写一个软件?有多少人会不甘于现状想到自己去发明点什么?比方说像Linus那样自己写个操作系统,或者像 Knuth那样写个\TeX ? 倘若自己不能去发明,那么会不会去尝试一些新东西呢?又有多少人会为了自己的梦想而敢于放弃已有的成果?比方说像Knuth那样宣布退休而去写一本伟大的书?像Stallman那样不满MIT而辞职去发起GNU?像Gates,像Dell那样大学不上了而去创业?

于是我明白了,为什么 Stanford牛,不是因为有了SUN,有了Yahoo,有了Google。为什么Berkerley牛?不是因为有了 SPICE。他们之所以牛不是仅仅因为有那些我们所看得见摸的着的东西,更是有那些看不见,摸不着的东西,这种东西便是是一堆建筑得以被称之为大学的东西,这就是思想和精神。

\end{CJK*}

\end{document}

No comments:

Post a Comment