老万故事会

【老万】浮云游子意,落日故人情 - 忆陈老板

本篇正文约 5500 字,读完约需 15 分钟。

我在中国科大的毕设导师是陈意云教授。那时候,我们把学校实验室的带头老师都叫老板。陈老板是合肥人,1965 年参加高考,成绩很好却因家庭成分落榜,被伟大领袖大手一挥赶到安徽祁门县插队,美其名曰接受贫下中农的再教育,实则变相劳改。

祁门红茶闻名全国,老板在下乡期间除了驾牛犁田没干过,其它各种农业、茶业、林业的脏活累活都干。三年前(2019年)我回科大时,老板跟我聊起制茶工艺依然头头是道。

老板是书生,体力活干了七年多后,身体渐渐不支。好在他有贵人相助,及时转到新安中学当民办教师,数理化都来,才转危为安。

这民办教师虽然强过种田,也算不上什么有前途的差使。眼看青春一天天蹉跎,陈老板以为自己要扎根农村一辈子了。没想到,1976 年文革结束了,高考也随即恢复。

不过,不是什么人都可以参加高考的。陈老板高中毕业早了一年,不属于老三届,按政策没有资格高考,只能眼巴巴地看自己的学生上考场。

天无绝路之人。1978 年 7 月,徽州地委书记特批陈老板这样的老知青高考。而那时离高考已经不到一个星期,正式报名早就截止了。县教育局破格,用备用试卷让他们参加高考。

陈老板草草准备了一下语文和政治就进考场了。有长期教学的底子,他的高考成绩十分彪悍:物理100、化学100、数学98,不由分说碾压了其他考生。这样,他以安徽省考得比较好的同学的身份进了中国科大计算机软件大专班。

物理学家理查德·费曼说:教别人是最有效的学习方法。陈老板的经历可以佐证。

老板有语言特长,中学学俄语,下乡时很快掌握了祁门东乡方言,上大学后又速成了英语。再后来,老板当了科大教授,研究程序设计语言的编译(compilation),就是把人看得懂的高级编程语言翻译成机器可以执行的低级语言,整天和各种计算机语言打交道。一次去他家吃饭,他自嘲自己的名字”意云“意思是人云亦云,见人说人话,见鬼说鬼话。

老板 1989 年去芝加哥大学,做了两年访问学者。据他的学生 8711 班的王晓敏师兄透露:陈老板出国归来,虽然英文还不太自如,但是学会了一口地道的芝加哥话。

非计算机专业的同学可能不清楚编译在软件行业中的地位。这么说吧,编译这门课是业余和专业的分水岭。现在码工工作机会多,学编程上手也比较容易,很多人半路出家转行学计算机。但他们大多数不会去学编译原理。一来这门课可能是本科阶段软件专业最难的一门课,二来学了一般也用不上。

编译之所以难,是因为它相对于以前那些基础课是一个陡升,让人猝不及防。基于实践的工科课程,只要肯动手,大多数人都能啃下来。但编译对抽象思维的要求远高于一般专业课。通常,程序处理的对象是数据,再复杂的程序掰开了也没那么难理解。而编译是用形式化的方法去处理代码,是处理程序的程序,也就是元程序,理解起来比较烧脑,靠普通编程建立起来的直觉很多都不管用了。这就是为什么很多人学编译感觉手足无措,每个字都认识,放在一起就看不懂了。

Image

学编译就像画马,前面一二三四几步都好办,最后一步突然要登天。

编译课本来就难,加上陈老板一向严要求,很多同学都挂在这上面。陈老板因此成了让科大计算机系学生闻风丧胆的杀手。

陈老板在科大教编译,不屑使用现成的中文教材。他把眼光投向了 1986 年新出炉的经典英文著作,Alfred Aho, Ravi Sethi 和 Jeffrey Ullman 合著的《编译器:原理、技术和工具》(Compilers: Principles, Techniques, and Tools)。

Image

这本书封面是一名骑士斗恶龙,因此被业界称为龙书。三位作者中的两位(Aho 和 Ullman)因为对编译器和算法的卓越贡献在 2020 年获得了图灵奖(等于计算机届的诺贝尔奖)。大家可以想象此书的地位和水平。

今天我在这里放马后炮。而陈老板在 30 多年前,国内信息极其闭塞的情况下慧眼识珠,可谓高瞻远瞩。

老板选定龙书做蓝本后,和弟子马万里合作,翻译出了中文版。我们上课的时候,陈版龙书还没有正式出版,只有科大自己印的没有书号、字号巨大、印刷粗糙的预印本。这本非法地下出版物的封面写着“编译原理 - 陈意云马万里编译”,从编译开始,以编译结束,形成了闭环。

我国有位诗人,喜欢喝酒,喜欢交友,尤其喜欢在喝酒后交友。他有一首诗把两位老师的名字嵌了进去,流传千古。诗云:

青山横北郭,白水绕东城。

此地一为别,孤蓬万里征。

浮云游子意,落日故人情。

挥手自兹去,萧萧班马鸣。

陈老板其实没有教过我们这一届。我们是马万里老师教的。马老师得了老陈真传,关起人来一样心狠手辣。我班有位热爱学习 X 知识但是不爱计算机的同学 M 哥,知道靠自己能力编译这门课肯定是不可能过的,便求我期末考试时坐他旁边,方便他抄答案。

M 哥的作弊实践经验丰富,远在他的编程经验之上。他没有看一行抄一行,而是在马老师转身之际以掩耳不及盗铃之势把我整张卷子一把拉过去,从容不迫地开始批处理拷贝。

虽然 M 哥没有学好编译,他的作弊技法却深得编译器的精髓:逐行解释执行效率太低;一次把全部源代码编译完再执行,可以让总体效率最优。

这种骚操作把我直接吓呆了。还好 M 哥抄完之后,把我的源码即时奉还,马老师没有 catch 任何 exception。

1993 年,陈老板以科大计算机系副主任的身份牵头,引入日资成立了科大恒星计算机公司(Sun-USTC Institute),兼任总经理。恒星后来演化成上市公司科大国创,暂且按下不表。当时教授办公司还是新鲜事。陈老板乘着改革的东风,勇敢下海,把知识转化为生产力,成了货真价实的老板。

那年我找到陈老板想跟他做毕业设计。老板了解到我是编译课学得比较好的同学,高兴地把我收下了。他给我的毕业设计项目是为美国国家半导体公司开发一个 COFF 文件浏览器,展示函数调用关系。这算是恒星公司的早期项目之一,不为挣钱,就是展现一下公司的技术实力,好接到更多的活。

做完毕设,还有半年才毕业,我和几个同学继续在恒星公司当临时工,开发一些从日本接到的项目。为此我们跟朱小平老师恶补了一段时间日语。

日语喜欢音译外来词汇,把程序里的错误叫“把姑”(bug),关于错误的历史记录叫“把姑票”(bug ticket),排错过程叫“抵把姑”(debug)。

干了一段时间,发现陈老板这个杀手不太冷,时不时还会跟我们开开玩笑,亦师亦友。他给我们的待遇也不错,两个月涨一次工资,我离职前月薪已经到了 800 多元,这在当时的合肥是一笔巨款。

我给大家提供一些参考数据吧:那时候西区小炒部的火锅套餐 15 元一份,可以让四个壮汉吃饱,加酒水人均消费 5 元。住学生宿舍不交钱,800 元月薪是纯收入,可以每天下馆子 5 次。而公司中午有荤素搭配的工作餐,钱根本花不完。那段时间生活的惬意有 D 同学给我的毕业留言为证:

“......吃完工作餐,冲了一个澡,......”

那半年,每到傍晚便邀上恒星的同事们下馆子。我们大瓶喝酒,大碗吃肉,两眼放光聊着梦想。酒足饭饱之后,骑上单车,飞驰在合肥的大街小巷。风从耳旁滑过,像要托我们飞起来。我感觉没有什么是不可能的。

感谢老板帮我实现财务自由。

毕业前夕,同学们频繁密接,疯狂聚餐。合肥的夏天酷热,猛男们喝着喝着就会脱去上衣,露出白花花的肉体,不免被人偷拍下来传播。我因为体育课选修了健美,经过一年的锤炼(主要靠举铁锤推杠铃锻炼),已经从手无缚鸡之力进步到了两三只鸡近不了身,肱二头肌出落得若隐若现。在恒星,我拿着一张半裸照,顾影自怜地说瞧这线条。老板听到笑了,根据他下乡干体力活的经验怼曰:你要是有线条,女生会排着队倒追。我也不知道这是夸我呢还是黑我。因为并没有发生女生排队追我的情况,我只能下结论自己的线条还没有到位。

Image

毕业后,我去北京读研究生。陈老板除了鼓励我在成功路上努力飞奔,还送我一本签名版的新作《范畴论》。

Image

这是比编译还要抽象的学问。惭愧的是,我前言都没有看懂,辜负了老板的期望。而我们班的几位同学留在恒星公司跟陈老板奔小康。L 同学更是把陈老板的女儿发展成了自己的太太。所以,老板对我们来说还是 8911 班级大家庭的家长。

我在联系出国的时候,找老板帮我写推荐信。当时没经验,靠走量提升成功系数。老板二话不说,给我签了 50 份推荐信,到现在还没有用完。

到美国后,和老板时有书信往来。邮件里,我叫他声“老板”,他叫我声“老万”,没大没小,也不觉得有何不妥。通过邮件,我从老板那里获悉不少猛料。比如:1999 年科大实行全员聘用和岗位津贴制,恒星产值首次超过 1000 万人民币。2000 年恒星注册资本增长 10 倍,老板改任董事长...... 做为恒星老员工,我对母校和公司的发展倍感欣慰。

我在耶鲁大学读博的方向是函数式程序设计语言的设计和实现,算是陈老板编译课的延伸。按照学校的要求,我把《编译原理》又学了一遍。

这次我们用的教材是普林斯顿大学安德鲁·爱普尔(Andrew Appel)教授的《用 ML 语言实现现代编译器》( Modern Compiler Implementation in ML),又称虎书。

Image

为什么是虎?因为普林斯顿大学的吉祥物是一只老虎。如果是用耶鲁大学出的,就应该是狗书了。要是韩国出编译教材,估计该叫脸书。

Image

耶鲁大学吉祥物“英俊的丹”

之所以用虎书,是因为耶鲁是函数式编程语言研究的重镇,而 ML 是一门重要的函数式语言。科大 83 级少年班的师兄邵中是爱普尔教授的高足,当时就在耶鲁任教。他自然推崇自己导师的教材。

函数式程序设计主要有两大流派:邵老板是 ML 语言派,我的博士导师保罗·胡达克是 Haskell 语言派。他俩轮流讲耶鲁的编译课。这两派的区别在于 ML 更接近于传统的命令式编程语言,可以有副作用,有明确的执行顺序,而 Haskell 是一门纯函数式语言,没有任何副作用,求值是懒惰的,凡是对最后结果没有影响的计算都会被自动跳过。所以,胡老板在上课时得意地宣称 ML is eager but adulterated; Haskell is lazy but pure(ML 勤奋但不干净;Haskell 懒惰但很纯洁)。

虎书比龙书薄得多。因为在科大学过陈老板版的龙书,学起虎书来我感觉非常轻松,甚至有点想笑。陈老板当初的严格要求,让我在耶鲁大学的学习如鱼得水。

2001 年 9 月,我第一次回国探访亲友,用了三天时间重访母校。去之前,陈老板说:我派恒星公司的车去接你。在骆岗机场降落后,没想到是老板亲自在机场等候。老板说,现在公司发展壮大了,欢迎你们这些老员工回来看看。我已经安排好了,你就住在科大东区专家楼。明天到计算机系做个讲座,算是正式学术交流。

专家楼我在读书时就知道,从来没进去过。那可是来科大访问的外国专家下榻的地方啊。第一次得到这样的待遇,手足无措,只能感激老板的深情厚谊。

为了让老板这钱花得值,我卖力地给我系的同学分享了自己学习函数式程序设计的心得,尤其是 Haskell 的惰性求值。当天晚上,两位四川老乡学弟追到专家楼,继续和我探讨学习。他们讲:今天你在台上讲了一大堆,老实说我们什么都没有听懂。这...... 老板的钱算是白瞎了。

我还在朱小平老师的陪同下参观了新的恒星公司。公司那时候已经在合肥市高新技术开发区有了自己的楼盘,不再蜗居在科大西区电三楼。和员工交流时,我介绍了在某软实习时学到的世界一流先进经验:某软的代码居然是有版本管理器的,误删了还能回滚,N 失足都不会成千古恨。提交代码之前居然还要他人审查,把“把姑”挡住。

大家莫笑,这两点在今天都是常识,可在二十多年前国内很多大厂还没有意识到这些基本流程的重要。这些年来,我们的软件产业有了巨大的飞跃。现在很多国内公司用到的技术已经比美国公司先进了,因为国内的用户体量大,技术不到位可能根本带不动。真是三十年肥东三十年肥西啊。

离开科大那天,为了少花老板的招待费,我上午就把专家楼的房退了。老板知道之后,怪我没有延续在恒星工作的好传统睡个午觉再退房。感谢老板无微不至的关怀。

博士毕业后,我先在微软干了两年多,又加入了当时前途未朗的谷歌。到了谷歌,我的第一个项目是设计实现一个 C++ 的测试框架。我换了一个思路,结合自己的研究经验,设计了一个嵌入式的面向特定领域语言(embedded domain-specific language),用来写测试效果不错,完全占领了谷歌的内部市场。开源之后又被很多大公司采用。到现在十六年多了,这个系统没有大的修改,还在广泛使用,说明当时的路子还是走对了。十四年前,我和同事一起创立了谷歌自己的 C++ 编译器小组,帮助完善了新的 Clang/LLVM C++ 编译器,替换掉公司以前用的落伍编译器。我们还基于新编译器开发了不少超大规模 C++ 代码库的静态分析和重构工具。而这一切工作的源头都可以追溯到编译原理课对我的影响。

在我忙着做编译器的时候,陈老板又一次瞄上了世界前沿,和邵中老板联合成立了中科大耶鲁高可信软件联合研究中心,带出了不少人才。邵老板现在是耶鲁大学计算机系主任,估值 10亿美元的 CertiK 公司联合创始人。

疫情期间,我穷极无聊突发奇想,要填补高可笑软件领域的空白,便设计实现了一门基于东北方言的编程语言 dongbei(网址 http://dongbei-lang.org),其中当然用到了很多从老板那里学到的编译技术。我歌同事辛啸老铁用 dongbei 语言写了个快速排序算法,是这样的:

【排得贼快】(村子)咋整:  寻思:村子有几个坑 跟 零 一样一样的?  要行咧就 滚犊子吧 村子。
杆子装村子的老大。 几个杆装零。 矮墩庄都是活雷锋。 高个庄都是活雷锋。 哥们儿 在 村子 磨叽: 寻思:哥们儿 跟 杆子 一样一样的? 要行咧就 几个杆走走。 要不行咧就寻思:哥们儿比杆子还小? 要行咧就 矮墩庄来了个哥们儿。 要不行咧就 高个庄来了个哥们儿。 磨叽完了。
顺溜庄都是活雷锋。 矮墩 在 整【排得贼快】(矮墩庄)磨叽: 顺溜庄来了个矮墩。 磨叽完了。 还行从一到几个杆磨叽: 顺溜庄来了个杆子。 磨叽完了。 高个 在 整【排得贼快】(高个庄)磨叽: 顺溜庄来了个高个。 磨叽完了。 滚犊子吧 顺溜庄。整完了。

要是大伙寻思这 dongbei 语言还行咧就请去 http://dongbei-lang.org 点赞、围观、下载、学习,保证比编译好学,只要你看得懂春晚就一定能学会。

2019 年夏天,我参加科大校友返校活动,在十八年后再次见到老板。我问:你的回忆录《两次高考之间的十三年知青生涯》写得这么好,为什么后来不再写了?他淡淡一笑,说曾经沧海难为水,经历了早年那些人生的大波大澜,后面的事,包括当教授、博导、企业家,都不过是一点不起眼的浪花,不足挂齿。

Image

2019 年和老板合影

一个多星期前,从 D 同学那里惊闻老板已于 3 月 5 日病逝。悲痛之余,往事陆续涌上心头。回忆和老板三十年的交情,他教我的除了扎实的计算机专业知识,还有强悍的抗挫折能力,对机遇的把握,和对学生如朋友般的爱护。如今,这颗曾经鼓励伴随我人生前进的恒星,终于穿过人世的浮云,卸下肩上的重担,缓缓沉入地平线睡去,只留故人唏嘘。

老板,您走好!ImageImageImageImage

~~~~~~~~~~

猜你会喜欢:

~~~~~~~~~~

关注老万故事会公众号:

本公众号不开赞赏不放广告。如果喜欢这篇文章,欢迎订阅、收藏、转发、评论。谢谢!🙏

点“阅读原文”可访问 dongbei 语言网站。