关于王垠之二
时间:2005-10-29 来源:ghostzhu
如果大家最近在网上看新闻,或者最近都在各校园bbs里混,我相信大家都应该知道王垠。可以说是一个很牛的牛人。他,一个清华的硕博连读的学生,在第四年的时候提出了退学申请。
也许他的勇气并不是我们所能有的,拿我来说,一个普通211工程学校的大三学生,要叫我不要学位证,我做不到!
这里,转载他的网站里文章,希望对大家能有所启示。
计算几何,创造力的复苏
清华还是一样的上课方式,大部分课也是很多人一起上,一起打瞌睡。老师也是照本宣科,我居然发现他们其实跟川大的老师没什么区别。清华的不同之处就是,一到考试的时候原来进行的一切娱乐活动都不见了人影。原本每天晚上都有人一起玩轮滑,考试的时候就只剩下 我孤零零的一个人。因为大家都怕考试,开始熬夜复习了。还有就是上课不容易逃课了,有些老师会突然点名,缺席会严重影响最后的成绩。
对于博士生,传说还有一个规定,那就是后10%淘汰。也就是说,不管你成绩如何,如果成 绩排名在课程的后10%,那么就要重修。而如果两门功课重修,就会被开除。面对如此残酷 的规定,很多同学都惶惶不可终日。我就是在隔壁同学的唠叨声中度过了第一期。不过我还 是没有把考试当回事,所以我也没有去验证这个说法的官方真实性。我仍然不去听老师划重点,我仍然不觉得老师出的题目有什么好,我仍然讨厌有人让我们用手算矩阵。可能觉得太残酷,还是觉得要是开除了博士生谁来干活,这条规定后来改成了如果博士生上了80分就可以不重修。我也不知道为什么我觉得考砸的科目也上的了80,故意放我过去的吗?
但是我的生命中出现了这样一门课程。它改变了我对老师的看法,让我觉得上课原来也可以如此有趣。这就是计算几何。上课的人很少,只有十来个人。因为听说这门课很难,很多同学都没有选。但是我就是那种知难而进的人。老师上课的方式跟别的课程很不一样,大家坐在一个小教室里,老师有精美的幻灯片,有动画,不时还插入一段大科学家,大哲学家的名言。上课时老师会停下来很多次让学生提问题,下课大家都积极踊跃的讨论新奇的问题。课程的评分方法也很特别,平时成绩占到30%的分量,作业分为几种分值,可以自己选择做不做,作业的总分数乘以30%,加上最后大作业的分数乘以70%,就是最后的得分。说真的,这门课太有趣了,我就只逃过一次课。但是还是有时候人数不到一半,因为其他课程压力太大,有人都去复习别的课程了。但是邓老师从来不点名,还对逃课的同学表示同情。还问我们在座的有没有其他课特别紧张的,下次课可以不来。真是让人感动。
我就是在这门课上认识了王益,我们亲密无间的合作,让我领略到了什么叫做研究。大作业的时候我们在一个小组,其实是三人一组,但是那第三个人其实什么也没干。我和王益决定写一个3D的Voronoi图扫描算法演示程序。王益的3D图形编程能力很强,所以他做界面,由我负责算法生成数据作为后端。我们分别在自己的机器上编写程序,不时的打电话讨论接口的设计问题。我找到了Bell labs 的 Steven Fortune 的算法程序,决定看懂它,然后改造成演示需要的分部运行的算法。但是 Fortune 的程序几乎没有注释,而且使用了一种奇怪的数据结构,很难理解。Fortune 还在程序里说到,这个算法虽然有效,但是对于程序员来说是一个挑战。所以我email请他给我一份算法论文的拷贝,他同意了。但是一个月之后,信才到我手里,那时我们已经完成了作业。因为我花了一个星期看懂了他的程序,还换掉了他的麻烦又低效的数据结构。随后成功的把后端与王益的前端设计好接口联合。等我看到 Fortune 的论文,发现程序里面其实已经改进了论文的核心内容。我深深体会到实践的重要性,也许有了他的论文我反而会被误导,写不出实际可以运行的程序。
由于我们的团结努力,老师对我们的大作业非常满意,他给了我们最高的分数 100。由于我们两个都在课下超额完成作业,所以总的分数我们两个都是满分。这是我阔别已久的100分。只有在小学我才拿到过这种分数啊!对于一个对考试成绩满不在乎的人,100 又意味着什么?如果是别的课程我会毫不在乎,就像我得了80分一样。可是这个100分是我们团结研究而来的,它包含了对我们的合作意识,对我们的友谊,对我们的热情的肯定。虽然我觉得我们的东西还有改进的余地,但是我接受这个100分!也只有这样的课程,我才可能得100分。
从此我感觉到了什么叫做研究。这跟我小时候干的那些事情没有什么两样。你在身边发现一个问题,想知道为什么。然后你就想去获得解决这个问题的知识。你去看书,你去问专家,你上网去搜索。如果没有发现答案,那么好啦,你就可以自己试图去发现为什么,这是最有趣的部分。知道了为什么,就想让这个东西有用处,对人们的生活产生好处。这就是研究。
《完全用Linux工作》与TeX的推广
这么说来我还是对清华有些好感。遇到一个好老师让我从呆头呆脑的技术工人的状态恢复过来,开始追求自己的梦想。可是第一年把所有的课程上完之后,我就发现原来清华所谓的“研究”是如此混沌。其实清华大部分人进行的所谓的“研究”是什么呢?其实就是写作,不是科学研究。这一点以后我会详细叙述。
远远看去外观华丽的有着先进的工作站的实验室,却没有可以安心看书的地方。机器挨着机器人挨着人,书都没地方放。师兄师姐们都在忙着用 word写论文,不时有两个人隔着几行机器大声谈话。实验室通风不好,还有一个大型工作站在嗡嗡作响,我进去一会儿就觉得头晕,所以后来就不想去了。PC 机以前都是公用的,每次都会用不同的机器,却没有我想用的软件,麻烦死了。好不容易实验室买了新机器分配给个人,装上一个 Linux 系统开始写程序,还在Sun工作站上安装了多达1G的GNU程序。却被一个师兄嘲笑说那种跟DOS一样落后的东西你居然也用。于是我写了一篇文章叫做《完全用Linux工作》,放在主页上驳斥这种观点,引起网上linux界轩然大波。后来我又发现几乎全校的论文都是word排版的,我本科毕业论文就用 LaTeX了,清华居然这么土!我对word排版的论文质量恨之入骨,所以又写了文章宣传 TeX,打击 word 在论文排版的市场。这下子我出名了,真没想到,出名不是因为我的研究成果,而是因为这些业余的东西。我起初其实不希望我因此出名,但是看到旁边的人都用上了 TeX,我觉得我还是做了一件好事,至少让论文看起来漂亮了一些。
我在第一年就把功课全部上完了。本来我想多选几门课,比如法语,可是清华的博士要选课需要提交一个“培养计划”给导师签字。导师同意之后才能修改。导师看到我选了法语,就说这个第二外语还是自己学学就行了吧,旁听也行啊,我主要是怕你课太多了考试不通过就麻烦了。我当时没有说什么,就把法语去掉了,只留下刚够学分的课程。其实我还想选很多的,体育,音乐什么的,都不好意思跟导师说。后来才知道宿舍对门的硕士生选了钢琴课他们导师都不管。为什么我们就受到如此待遇?
可是没有把法语加到培养计划却成了我的遗憾。有一个新学期我去旁听了第一节法语课之后老师就说,我知道很多同学是来旁听的,这样教室里人太多了,效果不好。这对自己对大家都不好,下次请旁听的同学不要来了。我脸皮薄,下次就没有去了。后来自己想自学却又没有老师教,看了十集Reflet 之后就此作罢。
后来我终于明白了,清华不需要全面发展的博士生,而其实导师还会在某种程度上削弱学生的能力。导师并不是真的为我们好,而是不喜欢我们上课,因为上课不但会花掉研究(或者干活)的时间,而且让他们眼界太开阔,这样学生会很容易有别的选择而走掉。所有的活动:助教,实习,都必须有导师签字。而大部分导师就会找借口不让学生干这些事情。不给他们助教和实习的机会,让他们以后不好找工作,只能为自己服务,或者为自己的熟人服务。
甚至这次我去西藏,要办边境证都要有导师签字。办事的老师说,没有导师签字,你跑出去了不回来怎么办?大妈,我跑那种鬼地方干吗?
除了这些,还有两大法宝就是博士学位和违约金。清华的博士学位有多值钱知道吗?不知道?那么博士退学要交30000块钱的违约金,这下大部分穷苦学生怕了吧。这就是你们的卖身契。清华就是这样把研究生牢牢地控制在自己的掌握之下。我对一个如此害怕学生跑掉的不自信的学校还能说些什么?如果你是好样的,就不会害怕我们跑掉!该跑掉的最后终究会跑掉。
我的自我培养
在学习上,我永远是个吃不饱的人。选不了课,我就去旁听。旁听后觉得老师讲的不好,我就自学。在我有空的时候,我就会去图书馆借书看。在我本科的时候,我就已经发现自己的一个特点,我会很快发现新的东西,并且学会使用它。虽然这些东西并不是创新,但是它们丰富了我的技能,让我有更大的能力去进行创新。
计算几何课的一次作业,我为了写一个算法的演示程序,花了3天时间学了一点Java语言,正好能够完成那个程序。我开始接触到TeX的底层细节,看完了The TeXbook,并且找出一道练习题答案的错误。开始移植gbkfonts程序,作为我的CWEB语言的练习。看完了几乎所有 Xlib 的手册,深入了解了 XWindow 的工作原理。我接触到 Scheme,并且做完了 SICP 的大部分习题。我领会到 LISP 的强大,改变了我们多年以来对这种古老语言的误解。接着我又学会了 Common LISP,并且开始用它设计用来研究计算几何的一个函数库。另外还找了一些希奇古怪的程序来玩,写了一些心得体会放在网上给别人看。
我意识到自己数学还不够强,就开始看一些数学方面的书。Concrete Mathemtatics, What
is Mathematics?, Science and Hypothesis, GEB, ... 虽然每一本都没有看完,但是我逐渐相信自己的数学能力,发现数学原来如此简单。我开始对哲学感兴趣……
我们也有讨论,原来是这个样子
上完课,就该开始搞研究啦。可是研究什么呢?老师给我几篇论文看,意思是让我看看有没有什么想法。
我开始感觉没有头绪,就跟导师说能不能找师兄师姐跟我讨论讨论,还有别的人在做这个吗?他说,就你一个人做这个,每个人做一个题目,独立思考,这就是研究。我觉得是啊,我应该独立思考。可是过了一段时间发现不行啊,我想实现一个想法,但是我不知道是不是已经有人试过失败了。实验的时间开销会比较多,所以我想知道那么多厉害的人,为什么都不用这种明摆在那的方法?当我再次提出需要讨论的时候,他似乎有点生气的说:”你为什么总是想有人跟你做一样的东西啊?你不是想抄袭别人的论文吧?” 我不发话了。继续做我的实验,结果确实不理想。虽然自己实践很重要,可是要是能利用别人的经验,何乐而不为呢?这并不是偷懒。如果有人讨论,很多时候一个人提出一个问题,另外的人就会告诉他这个问题是不是有人做过,有什么重要性,凭直觉告诉他有什么难度。可是如果没有讨论,连问问“有没有人做过”的机会都没有!
后来我就经常上网看看国外的大学怎么搞研究,发现他们都有 seminar,讨论组。后来又买 了一本 A Beautiful Mind,看到Princeton以前的天才们每天都在一个地方喝茶,讨论问题,争得面红耳赤,回家分头思考,做实验,第二天喝茶时再讨论。那就是我从小梦寐以求的生活啊!计算几何课已经让我爱上了与人合作和讨论的方式,现在却孤零零一个人了。我必须告诉导师,合作和讨论是非常重要的。在我据理陈述之后,他说:“好吧。反正师兄师姐各自有自己的事,你要讨论什么就跟我和你副导师讨论吧。” 于是我就开始了跟他们两个星期一次的见面讨论。每次讨论都感觉他们不知道我在说什么,他们心里想的都只是这个能比别人的好多少呢?能不能投到这个会议呢?如此宏观。我觉得跟他们讨论完全是浪费时间。
后来课题逐渐有了新的同学加入,导师决定跟中科院数学所的人一起申请一个项目来研究。于是我们两个星期一次去中科院讨论。不过感觉他们那边也差不多。中科院的老师觉得他们的研究太理论,期望我们能给他们带去一点实际的东西。可是我们也没有什么实际的东西,所有的问题都是从别人的 paper里看到的。副导师就开始跟他们说这个问题有多么多么重要…… 他们也借此机会开始研究以前放下的一些问题。总之讨论的感觉就是没有目的,没有主题。有时有人说他在想一个什么问题,说了一会儿就被否决了。有时候就是一个人看了一篇paper之后做一个感想。我坐在那里就在想,我们到底在干什么?我们甚至都不知道什么东西值得研究,还研究什么?后来师弟师妹们就开始考虑把问题变一变,看看能不能产生新的问题。他们的做法照我的话说就是“有问题也要解决;没有问题,制造问题也要解决!”
博士生论坛的时候,同学们都觉得有类似的问题,讨论不足,交流不足。所以我提议成立一个类似国外大学的 Common Room,用来讨论问题。可是大部分老师说:“这样一个房间,天天都要有那么多人在里面待着。谁来出这个钱?” 是啊,老师自己的办公室都要钱,哪里可能有什么 Common Room?就算有了 Common Room,在里面讨论的无非还是文章发到哪里的问题。制度决定了行为,我的设想太理想化了。
分析一下,为什么老师不提倡讨论呢?因为问题是有限的。老师辛辛苦苦这么多年搞来搞去都在搞这些问题,分配给你们每人一个,互不冲突。要是两个人都搞一个问题,这下好了。出了成果论文归谁?学校要求必须第一作者才算论文数。要是两个人都写论文,那么投到同一个会议肯定有一个要被 reject。这样对集体发展不利嘛,大家不就是发几篇论文混毕业吗?何苦?
paper, paper, 还是paper
但是我更关心的是论文的内容。说到论文我就痛心。我的方向上我至今还没有看到几篇我觉得像样的文章。我主要进行集成电路布线算法的研究。看起来高深,其实是很简单的问题,一个平面上有一些点是电路里的电极,现在需要用铜线把它们连起来,怎么样让连线的长度或者时延最短?这个问题跟几何上一个有名的问题 Steiner tree 问题有关系。我的导师就是以前写了一篇这样的paper发到IEEE transactions。
已经毕业的一个师兄就在他研究的基础上修改来修改去,发了好几篇paper。英文的不够还翻译成中文,投到国内的期刊。后来一个师姐又在这个师兄的基础上进行修改,又发了好多篇。可是在我看来,他们的论文纯粹就是炒冷饭,没有什么创新。一个问题解决了,那么解决问题的人显示了他们的聪明,至于这个问题对人有什么用,他可以暂时不管(虽然我也严重反对这种做法)。后来又有人来搞这个问题,多半是被老师分配来的。他也小修改一下,修改想法其实不费工夫,主要是你怎样把你的 Introduction 写好?可以让别人觉得你的工作有意义?这就是功夫。作家的功夫。我有一次面见INRIA的头目 Jean-Claude Paul 时, 他就对我说:“Tsinghua students are all writers,
not scientists.”
现在清华研究生做的事情无非就是,写好paper,然后找个地方投出去。SCI 的最好,EI的其次。偏僻的没人看的杂志也没关系,交钱也没关系。我就知道日本的一个SCI索引的期刊收1000美元的版面费。导师出钱,不投白不投,投了好毕业呵!
现在我也被“分配”来做这个问题。虽然说是一个有名的问题,但是这个有名的问题已经被研究了好几十年了。有很多牛人做出了很重要的贡献,这里面不乏 D.Z.Du 之类的传奇人物。但是我们为什么研究这个问题?我至今没有搞懂。
开头导师只是给了我两篇paper,据说是以前他一个得意门生写的,美国某大学的副教授。其中有一篇说是如何在不构造 Delaunay triangulation的情况下生成 MST (最小生成树)。看到这篇文章开头说在 rectilinear metric下, Delaunay triangulation 就不能用来构造 MST 了,所以他设计了一个新的算法。这个算法比起 Leo Guibas 的算法更加简单。文章里还提到一次 Matroid,让初出茅庐的我觉得高深莫测。可是我对“Delaunay triangula tion 不能用来构造 RMST” 这个说法产生了怀疑。经过理论分析我觉得即使在 rectilinea r metric下,Delaunay triangulation 也可以用来构造 MST 的,我决定实践我的想法,写一个程序从Delaunay triangulation 构造出一个 RMST。这本身不是什么创新的工作,可是我却在想,这样一个东西能不能用来构造 Steiner tree 呢?后来我真的就想出一个办法。 实验表明我的算法比以前的算法要快几倍。
这是不是说我的算法是一个值得写paper的东西呢?导师说我应该写一篇,但是我认为我只是在挑别人的毛病时意外想出了一个改进的算法,并不会对将来的研究有什么改进。虽然程序快了一些,但是很少有那么大的线网需要这么快的算法,而且几倍的提高在我眼里不算是 一个理论上的改进。所以我内心觉得这个结果不令我兴奋,不想写论文。但是在老师的一再要求下,我居然把这个研究写成了两篇paper。按照他的说法:“应该分阶段总结你的成果。” 起初投出去的时候评委总是说这个东西不实用,导师说这是评委的问题,他们觉得不实用我们就投到理论一点的会议。经过几次投稿,还是失败了。我终于忍不住了,对导师说出我的想法,我说:“看一个作家的水平,是看他扔在垃圾筐里的纸。就让我把这篇paper 永远藏在我的垃圾筐里吧。” 但是他不甘心,说你要相信自己的实力,然后把我的算法胡乱夸奖了一番。我说我不管了,随便你怎么办。我就开始研究我自己喜欢的东西去了。之后他居然真的投中一个欧洲的会议,还是被 LNCS 收录的,LNCS 是 SCI 索引的,所以我居然有了一篇 SCI 文章!我自己不喜欢的文章也是 SCI 了!
第二篇论文就更传奇了。几投不中,就其原因,评委说是没有和现在最先进的算法程序实验比较。而我没有比较的程序,就是那个让我鄙视的人的程序。没办法,求他给我代码,只给binary,也不给源代码。比了一下,确实比他快。不过我估计他程序写的有毛病,老是 core dump。不过还是记录下数据,添到论文上。一投就中,得了一个最佳论文奖。然后就有一篇校内新闻宣传:“我校王垠同学获得XXX会议最佳论文奖。这是大陆学者首次在如此高级别的会议上获得如此高的奖项。” 这个“高级别”的会议,在我看来就是个垃圾。美国人都把最差的论文投到这里,就是为了来旅游一圈而已。
我见过的这种低级别的会议,低质量的论文几乎都是从 IEEE 那里出来的。道理很简单,IEEE 会议多,会议论文集都像两块砖头那么厚,还是双列小字排版,当然能容纳下这么多的垃圾了。所以我对 IEEE 也没有好感。