Archive for October, 2010

程序英雄传(二)

Posted: October 25, 2010 by lefteyefocus in 侃大山

迪爷爷

今天开始八迪爷爷。谁是迪爷爷?就是那个和老婆和咖啡,一不小心喝出了个最短路径算法的Edsger W. Dijkstra爷爷。之所以想起先八他,是因为他在很多方面是高爷爷的死对头,当然,不是在个人恩怨方面,而是学术观点方面。

迪爷爷名字的发音也困扰了我将近半年,每次和同学谈到迪爷爷,我都是含混其词,或者用the creator of the shortest path algorithm来代替。和NND不同的是,我倒没有以为迪爷爷是印度人,我以为他是德国人,因为我当时的印象里,德国专产数学和物理大牛,像爱爷爷和冯爷爷。

第一次听说迪爷爷,当然是在学习迪爷爷的最短路径算法的时候,当时的印象就是:这厮真TMD聪明!怎么想出来的?当然,那个时候是我最初接触算法这个概念的时候,所以难免大惊小怪。事实上,迪爷爷算法虽然可称得上是最短路径算法的一个里程碑,但确实是迪爷爷的妙手偶得而已。据迪爷爷自述,那个算法是他和迪奶奶在一家咖啡馆的露台上喝咖啡时灵机一动想到的。我不厚道地猜测,迪爷爷是不是因为太专注自己的工作被迪奶奶骂,于是迪爷爷就想怎样找到一条最短的路迅速跑回家,于是就有了迪爷爷算法。。。

后来在学习操作系统时,又接触到了迪爷爷提出的五个团团围着圆桌坐的哲学家在餐桌上因为筷子不够而抢筷子的问题。这牛人的思维就是不一样,要是我碰到这样的问题直接就叫服务员:请帮我们拿几双筷子来,而迪爷爷想的是怎么样让五个人用五只筷子吃饱吃好。。。

后来又接触了无数由迪爷爷首创的概念,偶对迪爷爷的葱白与日俱增。尤其是迪爷爷在一些关于computer programming的基本看法上,和高爷爷针锋相对,看他们对对方的见解的辩论就像看绝世高手过招一样精彩,于是我从此走上了对迪爷爷的追星之路。。。

有趣的是,和高爷爷一样,迪爷爷大学本科也是学物理的。由于理论物理要进行大量的数值运算,所以迪爷爷也不可避免的在修习物理的同时,开始接触计算机,然后同样不可避免地发生了移情别恋。

在要不要和自己的原配物理离婚,把computer programming这个小三扶正这个问题上,迪爷爷当年还是进行了一番艰苦的思想斗争的。和今天很多人在纠结做programmer有没有前途一样,迪爷爷当年也不知道programmer能不能成为一个让人尊敬的职业。

在和programming私通了三年后,迪爷爷再也坐不住了,敲开了他当时在阿姆斯特丹数学中心的老板A. van Wijngaarden办公室的门,和老板进行了一次长谈。。。

当年22岁的迪爷爷搓着双手坐在老板的对面,谈论的中心话题就一个:是不是应该把小三扶正。迪爷爷当时的担忧是,原配physics毕竟是名门闺秀,这样的婚姻让人尊重,而小三programming虽然貌美如花,但是出生来历不明,娶进门来怕是要被人笑话。。。

在耐心地听完小迪同学的纠结后,老A深沉地对小迪说:虽然还没有什么辉煌的生世来历,计算机已近来到了这个世界上,你难道就不能做一个给她辉煌生世的缔造人?

年轻人的特点就是心比天高,牛人更是这样,小迪被老A这么一忽悠,变得热血沸腾,是啊,吃软饭和养活养好一个尤物之间的成就怎么能够相比?!在走出老A办公室时,小迪已经和几个小时前走进办公室时判若两人了,走进办公室的小迪心里只有一个字:乱。走出办公室的小迪心里还是一个字:离!

迪爷爷后来谈到这次谈话,他承认这次谈话对他的一生产生了不可磨灭的重要影响。而且所幸得是,是正面的影响。迪爷爷语重心长地对其他老牛人们讲:以后我们在给年轻人什么人生建议时,一定要慎之又慎,因为有的时候他们真的会照着去做的。(开复GG你别东张西望,就是说你呢!)。。。

迪爷爷的担心不是没有道理的,当时programmer根本就不能算是一种职业,在迪爷爷的祖国荷兰更是少有人知道programmer是啥东东,以至于1957年迪爷爷新婚大喜的时候,去政府部门登记结婚,在要求填写职业时,迪爷爷填了一个programmer,被公务员一把把表格扔了回来:捣什么乱?!啥是programmer?没这个职业,重填!迪爷爷只好郁闷地重新填了个理论物理学家,才算顺利地把迪奶奶娶进了门。迪爷爷后来不无骄傲地说,他是荷兰进入computer programming领域的第一人。。。。

迪爷爷最初的编程训练是从在剑桥大学的一个夏季课程开始的,这个课程教授一些机器语言的编写。当时教授这门课的是英国计算机界的大牛 M. V. Wilkes。老M还要求迪爷爷从老板老A处要了封推荐信,证明他的数学足够了才允许迪爷爷选了这么课。

不知道当初老A忽悠迪爷爷选了programming为终身职业是不是出于私心,反正迪爷爷在上完了老M的夏季编程课程后,老A把迪爷爷招回数学中心refactor自己当年写的程序,于是迪爷爷就成数学中心的一名小程序员。

在发表了最短路径算法后,迪爷爷声名大噪。但是没过多久,迪爷爷就向世人证明了迪爷爷算法不过是一只大牛的牛刀小试而已。。。

从上个世纪50年代开始,随着需要计算机解决的问题渐渐开始不仅仅局限于数值运算,所需要解决的问题越来越复杂,迪爷爷算就是一个例子。于是对于一个更加结构化得语言的呼声渐趋强烈,Algol 60就在这个时候应运而生。。。

Algol语言是继Fortran语言之后的第二个高级程序语言,迪爷爷婚后第二年就投身到Algol 60的标准制定中去了。虽然参加很多次标准制定会议,但在Algol 60标准定义的最终报告发布时,在13人的作者名单里却看不见迪爷爷的名字。原因是我们的迪爷爷长脾气了,因为对其中的很多标准的不认同,迪爷爷拒绝把自己的名字加到作者名单里。从这个时候开始,迪爷爷在开始扮演CS界的双重身份,一方面是个软硬通吃的大牛(当然主要还是吃软),另一方面就是一个语不惊人死不休的CS愤青。。。

从1962年开始,迪爷爷被TH Eindhoven (Eindhoven Polytechnic)聘为终身教授,虽然在米国同类职位已经被称为计算机科学系教授,但是迪爷爷反对这种叫法。他认为计算机科学的专业基础是数学,所以他应该是数学系教授。他的所有学生也要经过三年的系统的数学训练。(估计滑铁卢大学采取的也是迪爷爷的主张,当年偶想报滑铁卢大学的CS系,结果被招生办告知:我们没有计算机科学系,我们只有数学系。。。)

不久,迪爷爷就被他在TH Eindhoven数学系的同事们惹怒了。原因是迪爷爷带了一个PHD学生,该学生是迪爷爷的得意门生,结果该同学的毕业论文被迪爷爷数学系的同事们判了死刑,迪爷爷的得意门生屁挨不着地。TNND,打狗还要看主人呢,哦不,不看僧面还得看佛面呢,从此,迪爷爷死瞧不上他的那些数学系同事们。

他后来在“How do we tell truths that might hurt?"一文里说:Programming is one of the most difficult branches of applied mathematics; the poor mathematicians had better remain pure mathematicians. 他这句话就是挤兑他的那些数学系同事们的。

数学系的教授们反驳说:切!programming有啥牛逼的?我们个个也都会编程做数值运算呀,迪爷爷接着说:The easiest machine applications are the technical/scientific computations. 反正就是他那帮数学系同事怎么看怎么是怂人。。。

迪奶奶后来说,那段时间迪爷爷过得是相当地郁闷,但是迪爷爷这样的大牛是不会让自己被郁闷淹没,而是把有限的郁闷投入到无限的工作中去,正是这个时候,迪爷爷开始写他著名的 Notes on structured Programming.

于是Structured Programming的理论横空出世了。大概是为了报复迪爷爷,迪爷爷的数学系同事们对于Notes on structured Programming的发表反应表现得相当冷淡。不但没人给迪爷爷打电话索要签名版留作纪念,很多更是装着都没听说有这回事。迪爷爷哪吃这一套,他把自己的notes印了几十份,给自己欧洲加美国的同事们每人寄了一份去。。。

关于Structured Programming,具体内容就不八了。要提的一个八卦是,有一次迪爷爷笑话高爷爷写的程序是”没结构“(instructed program),高爷爷当时也没敢反驳,不过后来高爷爷提出Literate Programming时,终于报了一箭之仇,他说迪爷爷写的程序那叫一个”没文化“(illiterate program)。。。

迪爷爷勇于得罪人,特别是勇于得罪同行是出了名的。一次他应邀旁听另外一名很有名的教授讲课关于computer network的课,迪爷爷拿了大堆问题把人家炸得晕头转向,然后他大摇大摆地课半中间走了。还有一次MIT的一位很牛掰的科学家去迪爷爷的学校客座讲课,这位教授讲得非常卖力,累得她说了句:I am losing my voice。也不知道她说的啥观点惹了迪爷爷不高兴,迪爷爷接下茬儿地回答到:Thank God。结果是系里面赶紧给迪爷爷擦屁股,系主任赶紧发了封道歉信向人家道歉。

迪爷爷在CS界就是一个坑王,随随便便几句话,就往往引起业界的激烈讨论和争论。其中非常有名就是GOTO大战,他的一个两页的笔记”GOTO considered harmful“一石激起千层澜。他的语言经常辛辣得让人难以接受,比如说他讲:It is practically impossible to teach good programming to students that have had prior exposure to BASIC,as potential programmers they are mentally mutilated beyond hope of regeneration。

这这这,太伤人感情了!不知道比尔大叔看到这句话是什么感受(比尔大叔就是从BASIC开始写程序的),反正N多当时正在用BASIC的,以及以前曾经用过的,不管是票友还是专家,都坐不住了,像迪爷爷抗议,抗议他严重伤害了BASIC爱好者和使用者的感情。。。

迪爷爷才没功夫和反对者打嘴仗,他在我心目中像邪派顶级高手任我行一样,昂然一笑又开始挖新坑了。迪爷爷的paper大都很短,很多就2-3页,但是这些个只言片语,最后很多都成了CS界的一个专门的研究领域,真是随手成坑啊!

这些发表的paper还只是迪爷爷武功的一小部分,大部分武功他只在自己写的程序中去验证,发表论文往往是为了应景,还要加上句:请勿置顶。。。

牛人就是牛人,得罪再多的人他也是牛人,甚至是更牛的人,为了表彰迪爷爷在compiler construction, operating systems, distributed systems, sequential and concurrent programming, software engineering,以及graph algorithm这样广泛的领域做出的卓越贡献,1972年的图灵奖决定颁发给迪爷爷。

迪爷爷在图灵奖颁奖感言的时候做了个名为The Humble Programmer的演讲。当底下的业界同行们惊奇迪爷爷居然也学会Humble了?看来给他发图灵奖还是有好处的。十分钟过去后,底下的人慢慢咂摸出滋味来了,这哪里是个humble programmer,这简直就是个BSO programmer嘛!

整个演讲简直就是迪爷爷给他的学生们上课一样,迪爷爷以不容置疑的口吻对computer science, computer programming的过去进行了总结,并指定了未来的发展方向。整个演讲里大概和humble扯得上一点关系的就那么一句:The competent programmer is fully aware of the strictly limited size of his own skull…

也许是意识到肯定会有很多人不买账,在演讲结束前,迪爷爷说:In principle I leave it to you to decide for yourself how much weight you are going to give to my consideration, knowing only too well that I can force no one else to share my beliefs.

听见没有,是”原则上我应该这样那样“,实际上你要不听我的,嘿嘿。。。

拿了图灵奖后的迪爷爷依然是我行我素,他每星期二去一次大学,后来这天就成了著名的”星期二俱乐部“,星期二俱乐部相当于一个研讨会,不过他们没有固定的议题,有点像”太太的客厅“一样,大家啥都聊,虽然很多专业上的讨论,但也不乏八卦花边。

参加俱乐部的有他的PHD学生,但是也有一些业界知名的同行,迪爷爷又了自己虽然不大但是很稳定的粉丝团,很多人模仿他文风,模仿他用自来水笔,甚至模仿他穿的拖鞋。。。

说到迪爷爷的自来水笔,要好好八一八。迪爷爷一生数千篇文章,没有一篇是计算机里打出来的。迪爷爷先是用打字机,后来干脆他的Mont Blanc自来水笔抄。每篇文章都编为EWD****,EWD是他名字的initials,CS界把他的文章称为EWD reports。迪爷爷最后用自来水笔来写文章有可能有BSO的成分在里面,因为迪爷爷的字那是相当地漂亮。后来有人在Macintosh机上设计了Dijkstra字体,字体设计好后,有人用这个字体打了封信给迪爷爷寄去,把迪爷爷给吓了一跳:我不记得我写过这么篇东西啊???

和高爷爷一样,迪爷爷的文章也写的好。有意思的是,提倡literate programming的高爷爷专门为了文章中的公式排版去写了Tex,而主张structured programming的迪爷爷却尽量不在文章中用任何公式,他那篇著名的Cooperating sequential processes就一个公式都没有,他还极力反对用图来表达概念以及解释算法。一个精于graph algorithm的人,居然反对使用graph,矛盾吧?

不光是字和文章写得有特点,迪爷爷说话也有特点。初次和迪爷爷说话的人很不习惯,你一个问题问完了,迪爷爷那边啥反应没有。你正怀疑他是不是耳背,准备把话重复一遍时,迪爷爷开开口回答问题了。他没句话出口前都要经过思考,从而可见,迪爷爷是个主张三思而后行的人。

关于迪爷爷对三思而后行的拥护,还有个八卦,是我们上Software Engineering课的时候教授讲过给我们听的。说是有记者采访迪爷爷,问他对于Software Engineering有些什么看法。迪爷爷跟记者说,在他们家乡有个软件公司,公司里有一条规矩,那就是如果项目的时间还没有耗过70%,开发人员不允许写任何code,只允许不断地做设计,修改,再设计,再修改。有一次在项目时间过去一半多的时候,有一个dev去问项目经理:咱可以开始写code了吗?项目经理回了句:你就不能找一件有意义的事情做吗?迪爷爷的故事让记者听得一楞一楞的。迪爷爷补充道:这个公司做得很成功。

关于testing,迪爷爷也有一个很牛的见解。他说:Program testing can be very effective way to show the presence of bugs, but is hopelessly inadequate for showing their absence. 就是说测试查出了bug,说明了这个程序有bug,但是测试查不出bug,不代表没有bug。然后他说真正有效的抓bug的方法是用证明来显示程序的正确性。照迪爷爷的要求来看,tester就太牛了,因为不但要有理解程序中的结构和算法的能力,更要有证明结构和算法正确性的能力。。。

高爷爷大概对这点不以为然,所以高爷爷说了那句著名的:Beware of bugs in the above code; I have only proved it correct, not tested it。这俩爷爷就这样经常你来我往地过招。很多人都爱拿高爷爷和迪爷爷做对比。有一次有人说到高爷爷带过24个PHD,然后问迪爷爷:你带了几个PHD啊?迪爷爷倒也没怒,笑着说:2个,so what? 爱因斯坦还一个都没有呢。。。 (注:后来迪爷爷又带出来两个PHD,所以迪爷爷总共带了4个PHD。)

自上世纪70年代起,迪爷爷就开始致力于程序正确性证明的研究,他反对程序全部写完后再弄个又臭又长的证明,因为你还得证明你证明的正确性。所以他主张编程和证明相辅相成,携手共进,边编边证。这个主张可能是来源于小时候迪爷爷妈妈的教诲。迪爷爷的妈妈是个数学家,而且是为很有个性的数学家。迪爷爷小时候妈妈教他学数学,妈妈对迪爷爷讲:儿啊!任何一个证明,如果你的证明要超过六行,或者说明你的问题可以分解为子问题,或者说明你已经证错了。。。

从发现算法到证明算法,显示了迪爷爷从一流高手到超一流高手的转变。王国维在《人间词话》说:“古今之成大事业、大学问者,必经过三种之境界:‘昨夜西风凋碧树。独上高楼,望尽天涯路’。此第一境也。‘衣带渐宽终不悔,为伊消得人憔悴。’此第二境也。‘众里寻他千百度,蓦然回首,那人却在,灯火阑珊处’。此第三境也。” 这个说法也同样适用于computer programming,尤其是算法领域。

第一重境界是大部分本科毕业生就应该能够达到的理解算法和应用算法;第二重境界则应达到迪爷爷早年那样发明算法,改进算法;第三重境界则不但能够证明算法的正确性,而且能证明算法的最优性,甚至先证明了可能的最优级别,然后根据证明逆向发现算法。

正当大家屏息等待迪爷爷再次在CS界搅起巨澜的时候,迪爷爷因癌症在自己荷兰的家中与世长辞了,不知道当时全体CS界是长长的叹息,还是长舒了一口气。于我,网上有篇悼文完全能代表我的心情,现在全文抄录如下,用它来结束我对迪爷爷的八卦:

2002年8月8日,我象往常一样查看自己在extremeprogramming电子小组上订阅的newsletter。突然看到这个小组上的稀客、OO教父Grady Booch的发言,题目是Dijkstra。我以为大家在讨论Dijkstra教授提出的什么难题,定睛一看,才知道是一篇类似生平介绍式的讣告——在与癌症进行了多年的斗争之后,伟大的荷兰计算机科学家Edsger Wybe Dijkstra已经于2002年8月6日在荷兰Nuenen自己的家中与世长辞!终年72岁。

原来如此!

这个Dijkstra,就是那个提出“goto有害论”的Dijkstra,就是那个提出信号量和PV原语,解决了有趣的“哲学家聚餐”问题的Dijkstra,那个Dijkstra最短路径算法的创造者,第一个Algol 60编译器的设计者和实现者,THE操作系统的设计者和开发者,那个与D. E. Knuth并称为我们这个时代最伟大的计算机科学家的人。

阿兰图灵的自杀是在办个世纪之前,冯诺依曼去世也已经多年,作为这个相对新兴的行当中的从业者,我们似乎已经很习惯于从相信,从书上读到的每个名字都是仍然在世的活生生的人,都是我们这个时代的骄傲。

无论是仍然健硕的D. E. Knuth,Fred Brooks,Dennis Ritchie, Ken Thompson, Brian Kernighan, 还是正当盛年的Bjarne Stroustrup,Grady Booch,Steve McConnell, Andy Koenig, Robert Martin, Kent Becker, Martin Fowler, James Gosling, 再或者是青春年少,意气风发的Linus Trovalds,Andrei Alexandrescu,我们似乎都习惯于认为,只要一封email,这些书本上的名字就会立刻成为你的朋友。Internet把地球变成了一个大村庄,每个人的距离都那么的近。

但是可惜,Internet却无法缩短跨越生与死的冥界。今天,一颗真正的巨星在我们的眼前陨落!作为一名普通的程序员,我从内心感到惋惜和悲痛。这种悲痛,两年半前在我最初得知Richard Stevens的逝世时,也曾感受过,然而却不如今天来得这么强烈。毕竟,当我对编程还是懵懵懂懂的时候,就知道有个叫Dijkstra的人劝告大家不要滥用goto,而在那之前,goto在我看来就是编程的全部奥秘所在。之后我在学习算法、数据结构、操作系统等课程的时候,Dijkstra这个名字一次又一次从书里跳出来,我对于这个名字的崇敬也越来越深。我知道他晚年疯狂的迷恋C++,这也几乎是我这个C++ Fan所能感受到的最大荣幸。我曾想过,有朝一日,我会给他写一封email,什么也不说,只想表达我个人对他的感谢和敬意。没想到,如今连这个机会也没有了!

Dijkstra引导了并且将继续引导这个星球上所有的程序员,他的贡献和影响将与世长存,让我们祝他安息!

Advertisements

程序英雄传(一)

Posted: October 25, 2010 by lefteyefocus in 侃大山

高爷爷

我床头常年放了套我每年都要心血来潮地捧起来摩挲一番的书,但是每年都是读了不超过50页就放下了,所以这么多年过去了,这三本一套的精装本除了第一本头50页略微有些旧以外,第二本和第三本还基本上是崭新的。不过这并不妨碍我今年会重新再拿起这套书摩挲一遍,并且在将来继续这么做下去。这套书就是高爷爷的《The Art of Computer Programming》。。。

学CS的都知道高爷爷吧?我第一次听说高爷爷的名字还是从我一个清华学计算机的朋友口里听到的。我那阵子心血来潮想学习计算机,让我这位朋友给我介绍些入门的书看看,我这位朋友就让我到他家自己挑。别看我当时P也不懂,我会看那本书装帧比较漂亮呀,结果我就看上了他书柜里的那套《The Art of Computer Programming》了。。。

我的要求当然遭到我的朋友的断然拒绝。两个原因,一是因为那套书是他托人几百美金从国外带回国的,他不外借(去amazon上查了下,不到两百美金,这厮不是故意吓我,就是被人敲了竹杠),第二个原因更充分,那书我根本看不懂(确实看不懂)。。。结果那天的借书的结果是我把我朋友大一的教材抱回了家,以及装了一肚子高爷爷的八卦。。。

我当年最为在意的一个问题就是,如果大学不是学的计算机,半路转行还有没有可能将来做出点成就,我清华的那位朋友给我大灌迷糊汤:能!怎么不能?!高德纳当年上大学的时候还没决定好主修音乐还是主修物理,后来因为拿了物理系的奖学金,所以决定学了物理。后来高爷爷又拿了个数学的PHD,但最后再CS领域做出了卓越贡献。。。

我老人家当初是听得五迷三道,脑袋发烧,原来半路出家也能那么牛逼!我那个时候不知道CS和数学之间的密切关系,更不知道人和人不能比的!哦不,应该说人和牲口(大牛)是不能比的!

高爷爷的传奇故事从初中二年级就开始了,当时他们学校有个比赛,看谁能用"Ziegler’s Giant Bar."这句话里的字母组成最多的单词,比赛组织者准备好的complete list有2500个单词,结果当年的小高同学估计当晚多次了两个汉堡包,一发狠,弄出了4500多个单词。按说当时他还没有机会接触计算机呢,也不知道咋弄出来的。这次比赛小高赢得了一台电视机加上全班每人一根棒棒糖。发奖的那一天,小高被请上主席台发表获奖感言,小高同学的政治觉悟比较低,没有首先感谢国家,也没有感谢父母,只是说,我还可以找出更多的来。。。

高爷爷在Case Institute of Technology上本科,在那儿他才开始了他的编程生涯,在那里他使用的机器是IBM 650,后来他在写TAOCP时还专门提到这一点:"This series of books is affectionately dedicated to the Type 650 computer once installed at Case Institute of Technology, in remembrance of many pleasant evenings."

高爷爷作为物理系学生(后来转为数学系),不务正业,经常接私活给各公司写compiler,要说高爷爷和比尔大叔比,确实没什么商业头脑,他的compiler经常几百美元就卖给那些公司了,而那些公司转手就卖几万甚至十几万美元。。。

高爷爷在加州理工学院读PHD时,John McCarthy(1971年的图灵奖获得者)组织了一个编程大赛,高爷爷参加了比赛并获了头奖。获头奖不是传奇,传奇的是据说高爷爷是在纸上写的程序,程序交出后输入计算机一次编译通过。要知道这可不是写Hello World,竞争对手是一群在Stanford AI的大牛们,其中包括Alan Kay。。。高爷爷针对这个传说后来辟了谣,他说实际上是编译了两次。。。

高爷爷写compiler写得牛的名声立刻就传开了,于是著名的科技图书出版社Addison-Wesley的编辑在高爷爷刚刚屁挨着地的时候,就向他约稿,请他写本compiler方面的书。高爷爷欣然答应了,编辑同学就喜滋滋地回家等去了,这一等就等了三年。。。

后来小编同学等不下去了,给高爷爷打电话说:小高啊,你咋回事捏?都三年了,约你写的书写得怎么样了?高爷爷回答说:绪论写得差不多了。小编一听急了:啥!?三年你就写了个绪论?!你介不忽悠人吗?高爷爷解释道:这个绪论有的长,现在写了3000多页。。。

小编一听傻了,啥?3000多页的绪论,就算1.5页手稿正式出版变为1页的话,也2000多页了,原计划的写一本书肯定是不行了,改多卷本出版吧。高爷爷心里盘算了下,也行,那就暂定为七卷吧。

又过了三年(1968年),在高爷爷30岁的时候,高爷爷的传世之作TAOCP的第一卷《Fundamental Algorithms》面世了。。。

也不知道该说高爷爷太牛了,还是说他他起书名太狠了,这第一卷《基础算法》这几个字害死了不知道多少人啊,包括我和够味这样的。基础算法你总不能不懂吧。再加上比尔大叔当年那句话:"If you think you’re a really good programmer,…read [Knuth’s] Art of Computer Programming….You should definitely send me a resume if you can read the whole thing."

比尔大叔当年其实也只是读完了第一卷而已。相比起高爷爷来,比尔大叔算是厚道的,他说的是你如果想成为一名好的程序员你应该读高爷爷的书,而高爷爷则说:你要读不懂我的书,就不要做程序员了。。。妈的!怎么办?读不懂就不要做程序员了,又想做程序员怎么办,那就买来读吧。

也不知道是不是因为高爷爷这句话,TAOCP的第一卷,以及后来1969年出版的第二卷及1973年出版的第三卷几年内一下卖出去一百多万本(我敢肯定这个世界上肯定没有一百多万个好程序员)。

按原计划的七卷看,那么三卷还没过半,但这已经把整个CS界给震住了,咱一般人被震震也就算了,但是图灵奖评审会也被震得坐不住了,于是在第三卷出版的第二年,也就是1974年,把图灵奖颁给了高爷爷,高爷爷时年36岁,至今保持着图灵奖最年轻的获得者的记录。。。

也不知道是不是这图灵奖发早了,高爷爷自满了,还是别的什么原因,反正正当满世界翘首企盼高爷爷的神作TAOCP第四卷再创辉煌之际,高爷爷宣布下面没有了。。。

我靠!难道真的是好作品都是要太监的!?于是大家开始议论纷纷,说给高爷爷的荣誉太多太早了,这下高爷爷江郎才尽了。但是不管他人的议论是什么,高爷爷对外宣称的原因是,由于在给前三卷的排版时,他很不满意当时的电子排版软件的ugly排版。我们今天不满意啥工具软件所做的第一反应是上网download一个好用的,而高爷爷一怒就决定自己写一个,于是Tex, Metafont诞生了。。。

大概是为了体现出自己是个数学PHD,Tex版本编号是向圆周率无限逼近,现在的最新版本是2008年三月发布的3.1415926。而Metafont的版本编号向自然常数无限逼近,现在的最新版本号是2.718281,也是2008年三月发布的。。。

关于高爷爷给那些在他的程序里发现bug和错误的人发check的事迹很多八卦都说了,就不细说了。要补充说几点的是,高爷爷虽然自视很高,但是作风还是很严谨的,虽然他对自己的Tex很自信,但是不像我们一些“牛逼”的程序员,来不来就宣称自己的程序bug free。有一次针对Tex里的一段code,高爷爷说:“Beware of bugs in the above code; I have only proved it correct, not tested it.” 很多tester都爱拿这就话来说明testing的重要。。。

高爷爷总共给挑错的人发出了2000多张check,据说只有9张去银行兑现了。有个叫Edward O’Connor说:Intelligence: Finding an error in a Knuth text;Stupidity: Cashing that $2.56 check you got. 高爷爷在一次公开演讲时公布了一个去cash check的人的名字,结合Edward的话来开,简直就是公开进行人身攻击嘛。。。

在近30年的时间里,除了TAOCP第四卷不见踪影外,高爷爷还是干了不少事情的。除了写了上百个中小程序外,为那些抱怨TAOCP太深奥的人们,他和Ronald L. Graham还有 Oren Patashnik合著了一本书,帮助大家补习点CS所需要的数学基础,这本书叫做《混凝土数学》(Concrete Mathematics),因为该种数学是CONtinuous and disCRETE数学的混合物。

这本书我也买了,这本书我也没看完。这本书没看完的原因是因为每次把求和那部分看完后,我就觉得已经功力大涨,后面的暂时不用看了。。。

也许是分析complexity分析上瘾了,高爷爷还写了篇论文叫做The complexity of songs,他的研究成果是:如果歌的长度是N,那么歌中的refrain则使歌的复杂度减小至c*N(c < 1),然后他证明出歌的复杂度是O(sqrt(N))。后来一个苏格兰农民把歌的复杂度改进到O(log N)。。。

高爷爷最深得我心的还是他把文章搞得美观得像艺术品一样,把程序搞得美观得像文章一样。所以后来高爷爷提出了Literate programming概念。简单地讲,就是要把程序写得像散文,甚至散文诗一样;Compiler应该根据人的自然语言的逻辑去编译,而不是人根据Compiler的规矩和逻辑去写程序。

Literate programming的概念给了我很大鼓舞,程序能写得怎么样我没谱儿,码字儿我还是有一定信心的。看来以后写程序就当是码字儿就行了,我码的字儿如果通不过编译,不是我写的程序不好,而是compiler写的不好。。。

高爷爷自己就是个写作高手,TAOCP真要慢慢读,并不晦涩深奥,高爷爷的文风清新可人,他是把TAOCP当小说来写的。高爷爷曾经说把文章写给普通人看,那么专家也看得懂,如果把文章写给专家看,别说普通人了,专家也看不懂。

值得说一下的是,CS界很多大牛写文章都是一把好手,Stephen A. Cook当年给我们布置的作业读上去都让人颊齿生香。难怪Joel Spolsky当年写给CS学生的七条建议里的第一条就是:Learn how to write before graduating。。。

我常常想起无知者无畏这句话,越是无知的人,越是觉得自己已经知道了一切,这点在有关政治和宗教方面,尤其正确。前段时间看到一个猛批基督教,猛战风车的同学,就给人这种感觉。斯坦福大学有个规矩,除了宗教系和政治系以外,课堂上不允许谈论政治和宗教。高爷爷在斯坦福任教,每学期的最后一节课都是Q&A,学生们可以问任何政治和宗教以外的话题。

但是高爷爷后来在1999年应邀用了6节课做了一个报告,专门谈Things A Computer Scientist Rarely Talk About。具体内容就是谈信仰与科学的关系。。。高爷爷是个虔诚的基督徒,笃信上帝。也许是意识到基督教和科学教两大教派之间水火不容的关系,Things A Computer Scientist Rarely Talk About是高爷爷第一次,也是最后一次在公开场合谈论宗教信仰的问题。但他的这次报告还是给人留下了深刻印象,后来高爷爷去Google做报告时,好像被问的第一个问题就是:作为一个基督徒,你是怎么做到让科学家们这么喜爱的。。。

其实很多科学家本来后者后来成为虔诚的宗教信仰者,比如说牛顿。也许是学得越多,懂得越多,越意识到人的智慧的局限性,意识到人的渺小。人别说理解世界了,人就连自己的思维是怎么回事都不了解。有一次对高爷爷的访谈,高爷爷被问到对人工智能的前景有何看法,高爷爷表达了很不乐观预测。。。

高爷爷是个完美主义者,他说他的文章里不会出现is faster这样的词句,他要写一定是写is 12% faster。他还说:一个人要把事情做的完美,只有当他跟上帝的意图保持和谐。。。

所幸的是,高爷爷终于再次感觉到天人合一了,他说上帝不让他做太监,上帝让他开始写TAOCP第四卷了。

终于在第三卷出版三十多年之后,第四卷面世了!第四卷是分册写的,现在出版了0,1,2,3,4册。从0开始编号开始并不是因为CS的习惯是从0开始计index,而是写完第一册后高爷爷发现还有东西要加在第一册的前面,于是就有了第零册。

在高爷爷的website上,我看到他的写作计划是2015年完成第五卷。那个时候高爷爷就77岁了。还剩下第六卷和第七卷,希望不会太监吧。。。

一个MS码工的鸡零狗碎(十一)

Posted: October 25, 2010 by lefteyefocus in 听聊斋

10/24/2010 星期日

雨大概是从半夜就开始下了,典型的西雅图雨天。

雨天抑制了人出门的欲望,于是我们六个难得地同时留在apartment里。

10点左右,也就是我们通常早餐的时间,我们聚到了一块儿。艾理和鲍波把壁炉的火点了起来,苏珊和Yuki在厨房准备早餐,我和汤米在看Dicovery的一个关于三文鱼的生命过程的纪录片,三文鱼从出生到洄游后生产下一代真是一个漫长和艰苦的过程,我和汤米同时为厨房里飘来的煎三文鱼的味道而内疚。

吃完了早餐,我们围坐在壁炉附近聊天。“我们在等下一个project,所以现在闲着,你们三个今天怎么也那么有空?” 我代表汤米和Yuki问苏珊,鲍波,和艾理。

鲍波和艾理还没张嘴,苏珊先说话了:“那我就向大家宣布一下吧,我明天就要给我manager发two week notice了。”

“你换组了?” Yuki问。

“不是换组。” 苏珊回答。

“那就是跳槽了?Google还是Amazon?” 汤米抢问到。

“也不是跳槽,下一步我还没有具体计划,我就是想先歇一阵子,这样我可以想一些事情。” 苏珊回答。

苏珊在MS做了也快六年了,我觉得在我们码工的身体里的那个生物钟和日出日落无关,而是跟Product lifecycle有关,在几个product cycle以后,生物钟就会发出讯号,该做点别的事了,就像三文鱼到时候就得洄游产仔一样。

“嗯,我也觉得今天在MS所做的工作,和其它行业的没什么不同,日复一日地做着基本相同的东西,枯燥而乏味。我们做这份工作而不是另一份工作的原因和目的到底是什么?我为什么要对这个工作如此投入?我为什么不是投入到到另一个工作中去?我生活的意义到底是什么?” 汤米说出这番话让我吃了一惊,我以为他是那种只会把多余的精力投入到在Pro Club里锻炼肌肉,而不会去想什么生命意义的那种人。

“汤米,工作从来就不代表生活的全部,它,可能不过是挣取生活必需品的一种手段?” 我不太肯定地回答汤米的问题。

“话虽然是这么说,但是工作本身的意义就是生活的意义的一大部分。当我进入这行时,我觉得我是要去做一件改变世界的事,今天我意识到,这行根本不在乎改不改变世界,或者怎么改变世界,它只在乎能不能挣钱,如果今天写软件不能挣钱的话,会有人继续做吗?” 苏珊把话接了过去。

“你们这一代的程序员和我们那一代的程序员的最大差别就在:我们是喜欢编程,It’s fun and it’s cool!它对于我们来讲就是娱乐,就是生活。为了享受这种娱乐和生活我们愿意往它上面投入精力,时间,还有钱,不过我们意外的发现,我们的这项娱乐有时候还为我们带来了钱;而你们这一代的程序员,其实我都不觉得该叫程序员,你们是在找一份能挣钱的工作,只是在能挣钱的工作中,你们恰好挑到了编程。” 艾理入行已经近二十年了,对他的“我们这一代”和“你们这一代”的划分方法我们早就习惯了。我想他说的话有一定道理,他起码有好几百万的身家,还不包括股票,但是他仍然单身,和我们合租,每天孜孜不倦地写代码。

不过艾理嘴里的“我们这一代”和“你们这一代”不完全是用年龄划分的,像我叔叔这样的码工,应该是属于我们这一代的,而麦可那样的,应该是艾理他们那一代的。

在麦可眼里,user experience就是bullshit,因为他写代码是为自己在写,他是通过代码来解释他的世界和构造他的世界。麦可认为所有伟大的软件都是程序员为自己写的,然后被别人发现它有利可图,才被利于去从市场上挣钱。如果写软件是为了别人写,尤其是为了大众写,程序员就失去了他的独立人格和独立思维,只能生产垃圾。即使那些完美地满足了大众需求的软件也是垃圾,因为大部分大众所需要的东西都是使得这个世界更快地变成一个垃圾场。

我曾对麦可说:“很多人会觉得你太arrogant的。” 麦可回答:“那又怎么样?现在的问题不是arrogant的程序员太多,而是大部分程序员got nothing to be arrogant。” 我的脸当时就红了,我就是那种got nothing to be arrogant的码工。

我在想,如果今天麦可在,不知道他会给出一番怎样的见解。

“我每天写12个小时以上的代码,还不算程序员吗?” 鲍波问。

“如果你的职业就是写代码,那么你算不算个程序员不是由你每天写多长时间,或者写了多少行代码所决定的。判断一个人是什么或者不是什么,不是看他的职业,而是看他的业余爱好。如果你平均每个星期写三篇以上的有关编程的技术博客,那勉强算是个程序员吧。” 艾理回答。艾理自己几乎每天都会更新他的MSDN Blog。

这个时候,Yuki说话了:“我们人类所生存的世界存在着严重的问题,我们需要重新构建一个线性的世界,computing和coding是现在可知的构建这个线性世界的最有力的手段。可悲的地方就在于代码的巨大力量被资本早早地盯上了,从而沦为资本的工具,人们早就忘记了代码的本来使命。”

“中产阶级的存在并不是一个偶然事件,他们是被选择来重构线性世界的人群,科学家和程序员应该从中产阶级里产生。在衣食无忧的前提下,他们才能专注于他们的使命。富人们不适合承担这项使命,因为与其说他们控制资本,不如说他们被资本所控。穷人也不适合做科学家和程序员,因为他们只会专注于怎么变得更富有,富人和穷人评价一个研究或者写一段代码的好坏都只在它于能不能转化成金钱。”

“汤米,左拉,我,还有苏珊,鲍波,艾理,我们六个是被选中的,我们衣食无忧,我们的父母健康,我们对这个世界没有什么过多索取,也不受这个世界的过多引诱。是做毫无创意的工作去挣取金钱,然后去工作之外去寻找生活的意义,还是做有意义的工作并让工作使得生活有意义起来,我们自己可以选择,不是吗?”

Yuki终于停了下来,胸口有些起伏。大家听完Yuki的话都沉默了,只听见雨继续在屋顶敲打着。

晚上的时候,Yuki去苏珊那儿了,汤米靠在我的门边跟我说:“左拉,我要是有个Yuki这样的女朋友,我就不会再和外面那些女孩们瞎晃荡了。”

听了这句话,我心里涌上来一种难以言喻的感觉,不知道是不是嫉妒,反正对我来讲它是一种全新的感觉,没有人能具体告诉我这种感觉应该被叫做什么。

大概看出我脸上的表情有些古怪,汤米赶紧说:“你别误会,我可不是想和你抢女朋友。不过说真的,她在组里那么些日子,我怎么就没发现她这么有意思?你是怎么发现的?”

“嗯,她确实与众不同。。。” 我把内心里的那种奇怪感觉尽量掩饰住。“她很聪明,而且不仅仅是在写代码上。她思考的时候,表达的时候,像是一个布道者,而且不是那种照本宣科的布道者。怎么说呢,她让她身边的人感觉到:She believes in something。” 我回答汤米的话。

是的,Yuki believes in something,这是很多人,包括我,所缺乏的。。。

一个MS码工的鸡零狗碎(十)

Posted: October 24, 2010 by lefteyefocus in 听聊斋

10/23/2010 星期六

一大早,搬运公司来搬麦可上个星期走时没能带走的箱子。麦可走时已经把这些箱子打好包,在屋子里堆了一个小金字塔。好像所有的码工都对金字塔形状有格外的好感,因为它表示出一种最稳定的状态?

自麦可去了Cupertino后,还没有他的消息。组里有谣言传Ray Ozzie把他派去领导一个代号为Wow!的项目,不过谣言里没有关于这个项目的任何细节。

搬运公司的卡车走后,我给婶婶打了个电话。叔叔回去了快一个星期了,不知道他这些天怎么样了。

“房基的土都松了,房顶也到要换的时候了,还有门和窗户也到了年龄了。。。” 婶婶在电话里说起了他们的房子。

“在这里和房子有关的东西都贵,虽然早就知道免不了这笔开销,但是我还是觉得我站在那里被一个大吸尘器把钱一下从我身上抽干了。左拉,你知道,我一个图书馆管理员,就那么点工资。” 说到这里,婶婶停住了,在美国我们都养成谈到钱就有几分尴尬的习惯。

“婶婶,我给你们寄$5000去吧。” 我说。

“不要不要,我们还有些积蓄。我就是随便跟你说一下,没有别的意思。” 婶婶说。

“叔叔这些天怎么样了?” 我想起我打电话的目的。

“他呀,这几天倒是不去车库里呆了,每天一早就不知道跑什么地方去,说是去找工作了。唉,还是别说这个了,你吃早饭了吗?” 婶婶不想多谈叔叔,换了一个话题。

“哦,没呢。” 我醒来后就在帮搬运公司搬麦可的东西。

“你这个孩子,早饭可不能随便省掉啊!其实早餐可以很方便的。。。” 婶婶打开了话匣子,絮絮叨叨说了很久。婶婶身边大概找不到几个愿意倾听的人,我知道这个时候我只要安安静静听着就好了。其实,我们每个人身边都找不到几个愿意倾听的人。

下午的时候,Yuki打电话过来让我和汤米去帮她搬东西,把她的东西搬到我们住的地方来。是的,星期五晚上我问她愿不愿意搬到麦可留下的空房间来,她的回答是“Yes”。

本来以为起码要过几天她才会行动,没想到Yuki是个如此高效率的人,回到家后就和roommate说下个月后她就不再续租了,不过她会多付一个月房租,这样她的roommate有时间找到下一个合租伙伴。

Yuki的东西不多,一futon,两箱衣物,两台计算机,几件小家具。花了不到两个小时,Yuki就算正在我们这里入住了,汤米说没想到install Yuki的过程比install Win 7的过程还简单,还快。还有个别驱动程序—-Yuki在原住处的一些杂物,Yuki自己找方便的时间安装。

晚上汤米在客厅里看电视,Yuki在麦可的房间,哦不,现在应该是她自己的房间,她在自己的房间里看书。而我坐在电脑前打开自己的blog。这两个星期,一切变化得似乎比我以往二十年所经历的变化还要大,我想搞清楚这些变化。

我和Yuki算是恋爱上了吗?对于恋爱我毫无经验。对于我们码工来讲,恋爱的形式肯定不是那种以“让我们交往吧”的表白开始的,它应该在不知不觉中发生,两个人就像两团蒸汽,在某个地方相遇,然后在你还未觉察的时候,两团蒸汽混合成一团雾,这个时候就很难再分离成原本的两团蒸汽了。

Yuki和我就像这样的两团蒸汽,我们在一起工作,聊同样的话题,话题都主要是关于编程和计算,然后又以几乎一样的节奏生活,可能就在上个星期的某个时候,我们混成了一团雾。

我喜欢Yuki什么呢?我的理由也许不浪漫,但是很真实。Yuki很聪明,我和她可以聊很多coding和computing的话题而不会互相厌烦,然而这些都是次要的。重要的是我觉得她像我的朋友,一个可以和我的大脑沟壑相通的朋友,我从来没有过这样的朋友。哦对了,我最喜欢看Yuki为不能把一个问题解释清楚的沮丧样子。她心里知道必定有一种更清楚的解释方法,但是她就是找不到,她急得在那儿挠头的样子,非常地可爱。

这大概就是我期望中的恋爱吧?我期望中的生活是什么呢?

。。。。。。

一个MS码工的鸡零狗碎(九)

Posted: October 23, 2010 by lefteyefocus in 听聊斋

10/22/2010 星期五

过去几天全力投入到RTM的赶工上去了,原定10/21的RTM永不例外地延期了,不过还好,只延期了一天,今天凌晨2:30,最后一个bug被fix了。更准确地讲,应该是最后一个我们决定要fix的bug被fix了,其它被resolve为by design,external,或者在backlog里注明是known issue。

剩下的时间就是build,deploy,并在production的环境下测试,忙到下午2:30,这个product的这个version算是正式close了。

突然不用忙了,感觉的不是轻松,反而是有些空虚和无所事事。Yuki,汤米和我去cafeteria喝咖啡。Yuki和我在纸巾上计算如果把Starbucks现有咖啡种类两两结合创新一种品种的话,可以增加几种口味的咖啡,我们排除了几种明显不适合结合在一起的口味。

汤米说在新闻里看到,Starbucks最近申请了一个专利,他们研究出一种让水分子重组的方式,在这种组成方式下,水可以在2华氏220度时仍旧保持液态。专利的申请人曾经是名程序员。

最近我开始培养自己从end user的角度看问题,于是我问:“Starbucks要用那么高温度的水煮它们的咖啡么?谁会喝那么烫的咖啡?” Yuki开始计算一杯华氏220度的咖啡自然情况下要冷却到华氏100度,需要多长时间,得出的结果是大约50分钟。

等50分钟?50分钟后身体里的那种想喝咖啡的欲望早就过去了吧?

下班前,去了趟Bellevue图书馆,准备借几本有关Highway设计和建造的书,我那本在garage sale上买的似乎有点太老了。令我意外的是,这方面基本上就没有什么新书,我在架上翻了半天才翻到一本:Handbook of Highway Engineering by Rober F. Baker,published in 1975年,比我那本还要老了三年。

老总胜过无,我还是将这本书check out了,在下个product cycle开始前,我就指着靠这本书来打发略微清闲的日子了。

回到家,汤米还没回来,他去pro club强身健体了。我去旁边窜门,鲍波似乎还没有从Ray Ozzie的离职带来的震惊里恢复过来,在自己屋里的白板上狂写C++ syntax的代码。苏珊和艾理不知道在哪里。我回到自己的apartment,倒在客厅的沙发上翻看那本才借来的Handbook of Highway Engineering。

我边翻边想,有的书里的内容永远不会过时,一本书可以读一辈子,甚至传给子孙继续读,拿我手里的这本关于Highway Engineering的书来讲,30多年了,书里的一切还都适用。而关于computer的书,则是以分钟计地在更新。想象一下一本1975年的computer书本里会写什么?大概是能看到这样的句子:“今天大部分个人电脑都配有一种叫做硬盘的设备,它可以让你存储多达三本辞典的数据,”

正当我胡思乱想的时候,苏珊进来了,后面跟这Yuki。Yuki说周末了她没什么事,过来看看我们这边大家在做什么。

苏珊看见我手里的书,接过去翻看,Yuki坐到她身边一起看。苏珊看见那些空无一车的Highway和Highway ramp,不住地感叹并不断地表达如果自己能开着车在上面驰骋就爽了。Yuki则发现Highway engineers和码工们一样,有自己部落的语言,充满了字母缩略语。

记忆字母缩略语对我来讲是件相当困难的事,到今天我都不能说出RAM是哪三个单词的缩略,我把整个字母缩略当做一个新词来记忆和理解,永远搞不清每个字母后面是什么。

“你们听这一段。” 苏珊捧着书开始念:在不适合的地方安装交通灯会导致以下结果:一,大量的拥堵;二,不服从交通灯指示;三,选择非最短路径以避免交通灯;四,增大车祸发生的概率。。。” 念到这里苏珊若有所思地停住了,过了半晌来了句:“这个家伙结婚了吗?”

这个时候汤米和艾理都回来了,大家约了去Bellevue去吃晚饭,然后去酒吧喝酒。我不记得我最后喝了多少,但我记得我最后问Yuki:麦可的房间空着,你要不要搬来?。。。

一个MS码工的鸡零狗碎(八)

Posted: October 19, 2010 by lefteyefocus in 听聊斋

10/18/2010 星期一

叔叔在Redmond呆了三天,第一天他在麦可的床上睡了整整一天,他大概一个星期没有睡觉了。剩下两天他就在我办公室里的客椅上坐着看我debug,他好像很喜欢呆在办公室里的感觉。

星期天晚上送他去Sea-Tac,他坐在边上一言不发,终于在快要道别时他对我说:你帮我留意一下Career Site上有没有适合我的职位。

“为什么不试试别的公司?” 我问。

“我在MS干了十多年,我还能去哪儿呢?” 叔叔的声音里有些茫然失措。

中午的时候,Steve Ballmer发信给全体MS员工,告诉说Ray Ozzie要离开MS了。对此反应最强烈的是鲍波。在麦可上个星期和Ray Ozzie午餐后,鲍波决定重拾自己的好习惯,他计划要每天去Building 34的cafeteria午餐,每天都要走一不同的路,他相信没多久Ray Ozzie也会发现他的高效和聪明,他刚把这个计划实现了两天,Ray Ozzie就要离开MS了,而且Steve还说不准备找人填补Cheif Software Achitecture的空缺。鲍波为自己的聪明将永远被埋没而唉声叹气。

我想的是:麦可突然被调到Cupertino和Ray Ozzie的将离开又没有什么潜在的关系?麦可会不是Ray Ozzie安排的一颗棋子?

今天是汤米的5th year annivesary,和MS的5th year anniversary,他拿到了他的第一个水晶座。除了在走廊里放了一个盛了5磅M&M的大碗外,他说他要请我们六个去Bellevue吃晚饭,Yuki填上了麦可的空缺。

为了向更多的人宣布汤米的anniversary,我帮汤米把他的”Ship It”用绳子绑在他的车后,汤米工作了5年,已经有6个小牌子贴在他的“Ship It”上了。

汤米的“Ship It”被他叮呤当啷地从Redmond拖到Bellevue,汤米的车停稳后,我把他的“Ship It”拿起来看,居然只有一点轻微的擦痕。

这玩意儿实在是太坚固了,它不是为了某个时代,而是为了永远而造的。我想象自己是个来自一千五百万年以后的人类或者某种其它物种,那个时候,“Everytime a product ships, it takes us one step close to the vision: Empower people through great software-anytime, any place and on any device.” 这句话还能被理解吗?

有的时候人死了,但是他的思想传承下去了,有的时候物质永不磨损,但是意义却陨灭了,这真是一个混乱的世界。

吃饭的餐馆墙上挂了几幅超现实主意抽象画。苏珊说那些不能算是真正的超现实主义,因为真正的超现实主义是人门用可视的东西来表达自己的下意识,而墙上这些画不过是些随机组合的图形和颜色。苏珊又花了十分钟解释下意识和随机的区别。

结果话题自然而然地转到computer是否有下意识上来,现在的computer是不是相当于人类的婴儿状态,它们有大脑,除了照我们指令的做以外,它们还会下意识地思考,只是我们不知道而已,因为它们不会太多的表达,和baby只会用哭叫来表达不满一样,computer只会用死机来表达她们的不满。

Yuki话不多,可能她还没有太习惯我们这一伙儿吧?我突然想:要不要邀她加入我们的合租,麦可的房间空着也是白空着。这个念头在我脑子里转到我们晚饭结束,但是我什么也没说。我可不想在事情还没开始的时候,就把它弄糟。

回到家,我在我的desktop上create了一个名叫SUBCONSCIOUS.txt的文件,我要从今天开始记录我脑子里那些突然冒出来的词。也许通过这个记录,我可以找到生成人类智能的线索。我在SUBCONSCIOUS.txt里记下的第一个词是:Yuki。。。

一个MS码工的鸡零狗碎(七)

Posted: October 16, 2010 by lefteyefocus in 听聊斋

10/14/2010 星期四

麦可一大早就带着我的行李箱赶飞机去了,我和汤米也早早地被他的动静给弄醒了。既然醒了,就早点去office吧,于是我们8点就到了公司。

刚走进办公室时就接到婶婶打来的电话,她从来没有这么早给我打过电话。

“今天一早你叔叔又一个去车库摆弄火车模型去了。我觉得不能让他一个人这么下去了,我得好好和他谈谈。” 果然是叔叔的事。

“哦,谈得怎么样?” 我问。

“不怎么样,我想找个话头,但是他只是专注在他的火车模型上。于是我只好做出也对他的火车模型很感星期的样子来。左拉,你知道吗?它已经比你上次看到的时候大了两倍了,有铁路,有桥,有山,山脚下有教堂,有超市,山腰上是一排排房子,山顶上还有。。。” 婶婶说到这里突然停住了。

“还有什么?” 我问。

“还有。。。山顶上还有一个。。。” 婶婶还是没说出来。

“怎么了婶婶?没什么事情吧?” 我有点担心地问。

“左拉,山顶上有一个小白房子。我问你叔叔为什么有个孤独的小房子建在山顶上。他告诉我说,那是左罗住的地方。。。” 婶婶说完这句话,我们都沉默了。

沉默了好一会儿,我开口了:“我明天飞一趟Palo Alto吧?”

“你能来吗?不会影响你工作吗?”

“应该不会的,明天是周末。” 其实,下个星期就RTM deadline,我们早就没周末了,但是现在顾不了那么多了。

“你能来太好了!以前你叔叔总说,如果他不在MS做,他可以自雇做一个consultant,但是好像现在满世界都是consultants。你知道你叔叔这个人,他从来就不是那种很勇于竞争的人。。。” 婶婶又和我聊了几句后,挂了电话。

在跟一个在Bellevue的travel agent订了明天下午的票后,我试图把注意力集中到昨天晚上stress test的两个failures上来,可是脑子似乎一片空白。离deadline已经如此之近,还有两个failures!

今天整个building 7好像就我一个人在。麦可飞Cupertino了,当然不会在,但是汤米跑哪去了?还有Yuki,也没见踪影。今天连email也格外的少,快到中午了才收到八封,而且全是看完title就可以删掉的email。

“半个小时内,如果有一个人过来跟我说句话,我一定给他100美元。” 我在心里打了个赌。

结果没有人出现。

“半个小时内,如果有一个人过来跟我说话,我要给他200美元!” 我在心里又打了个赌。结果还是没人出现。

“半个小时内,如果有人过来和我说话,他就得给我1000美元!否则我就杀了他!”

结果在第25分钟的时候,肖恩出现在走廊里。

“你怎么没去开会?” 肖恩问。

“开会?啥会?”

“Marketing的会。”

“啊!?我Calendar上没有啊!” 我一边故作惊讶地说,一边知道,我一定是在接到meeting invitaion时,就随时删除了。我一见到”marketing”这样的字眼,就压抑不住去点delete键的欲望。

肖恩也没说什么,问了几句failure的处理情况,然后匆匆走了。等他消失在走廊里,我才想起我忘了管他要1000美元了。

下午的时候,汤米,yuki,还有肯特一起回来了。他们在Buidling 18开完会,又一起吃了午饭。我第一为错过marketing meeting而有些懊恼,同时我又觉得我为此而懊恼又些不正常。

下午3点多的时候我才发现自己没吃午饭,于是去cafeteria买点吃的。building 8的cafeteria这个时候已经关了,我只好去building 16的cafeteria。走出building的时候,才发现外面在下雨。我缩了缩脖子,走进了雨中。

我们楼前的那片停车场停满了车,在从车中间穿过时,我突然担心我会不会被这一片车的气场影响也变成一辆汽车。最近开始越来越多地为一些不着边际的东西担心。在看MSFT的quote时担心,虽然它对我的穷富几乎毫无影响;担心自己对学习东西和创造东西失去热情和感觉;担心公司里曾经到处都是的那种骄傲和快乐被一点点腐蚀掉;担心科技发展,经济增长的日子一去不复返;担心deadline成为努力工作的唯一动力。

6:30回到家,没有人在。汤米早不在办公室了,我还以为他已经回来了。去隔壁apartment看了看,也空无一人。今天真可以算上是The Day without People了。

8点多的时候,人们陆续回来了。鲍波心情好像也不很好,回到家就把自己锁在自己屋里了。艾理边进门边和朋友在电话里说:我可不想再写code了。。。苏珊在门口抱了一大堆袋子喊人帮忙,我帮她把袋子里的冷冻食品和罐头都搬进了屋。然后,汤米也回来了,身后带着几个朋友。

汤米身后的几个朋友里居然站着Yuki,汤米告诉我们,今天是他的生日。

对于我们码工来讲,记得住自己生日的除了自己的妈妈,也就剩下自己了。Yuki是汤米邀请来参加Birthday party的。

还没来得及和Yuki说话,婶婶又来电话了。“你叔叔飞去西雅图了!我图书馆下班刚到家,看见他在桌上留的条。”

“啊?!几点的飞机?我去接他去。”

“飞机应该已经到西雅图一会儿了。”

叔叔有我住的地方的地址,但是他从来没有来过。夜里门牌号看不清楚,于是我走出去坐在门口的台阶上等,秋天的夜里,屋外有一点冷。

过了一会儿,Yuki也走了出来,在我旁边坐下,一言不发地递给我一瓶啤酒,355ml的啤酒瓶在她的小手里显得格外地大。

“我叔叔从加州飞过来,大概一会儿就到,我在这儿等他。” 我觉得应该说点什么。

Yuki还是没说话,只听到夜晚的风声和头顶树叶哗啦声,起码几十张树叶应声飘落。

“今天你去那个marketing meeting了?会开得怎么样?” 我换了个话题。

“还是那样,没啥有用的东西。” Yuki回答。

“嗯,我就知道是这样。我忘了今天这个会了,可惜了。。。” 我说。

“可惜了?” Yuki有点疑惑。

“嗯。。。是的。”

“听着不太合逻辑啊。”

“嗯。。。是有点不合逻辑。” 我挠了挠头,脸在黑暗里略微红了一下。

终于有一辆福特在我们楼前停下来,车里驾驶座上坐着的正是叔叔。看来他自己租车开过来的。叔叔把车停稳后,并没有走下车,而是靠在车椅上,他的样子看上去有点醉熏熏的,希望他不是酒后开车。

“嗨,叔叔!” 我向叔叔打招呼。他不会还没看见我吧?

“嗨,左拉。” 叔叔回应我的招呼。看来他不是没看见我,但是他还是坐在车内没动。

“哦,这是Yuki,我的同事。” 我向叔叔介绍。

“你好,Yuki。”

“嗨,你好。”

见叔叔没动,我和Yuki走向前。我把车门拉开的时候,叔叔说话了,但是并没有对着我,而是对着方向盘说:“左拉。。。我每次看到你,都会想起左罗来。。。”

我扶着叔叔的胳膊把他搀下车,Yuki走到另一边搀住他另一边的胳膊。进屋的时候,汤米的Birthday Party已经开始了,大家看见我们扶进一个50多岁的老头来,小小地骚动了一下。我向大家简单地介绍了下我叔叔,就和Yuki把他扶进了麦可的房间,让他躺在麦可床上。

“你去和汤米他们玩吧。” 我对Yuki说。

“没事儿,我怕人多。” Yuki回答。

“那些你本以为会万岁万岁万万岁的东西,怎么一夜之间就完了呢?” 叔叔突然说话了,但好像不是对我或者Yuki说的,像是在自言自语。“人老了,做得再好也就是图一个活着。”

“别这么讲,事情没那么糟。” 我试图安慰叔叔。

“这是你们的世界了。” 叔叔边说边盯着天花板。隔墙party的音乐咚咚咚地传过来。“你们的世界了。” 叔叔又喃喃地说了一句。

过了一会儿,叔叔就在麦可的床上睡着了。我和Yuki悄悄向后退出房间,在合上屋子的门前,我把屋内的灯关了,屋子里只剩下麦可的两台computer的绿色的LED在诡秘地闪烁。。。