【老万】阳光灿烂的日子 - 我的美国兄弟大强
~~ 0 ~~
西雅图的一年只有两个季节:夏季和雨季,入秋以来,万物不是在被淋湿,就是在被晾干,难得一个晴天。这这里住了二十年,我已经习惯了宅在家里。
12 月的第一个星期,还是湿冷的天气。跟往年一样收到马蒂寄来的动画贺卡。点开邮件,《白色圣诞节》的音乐在电脑上响起。我看到漫天雪花中,一只漂亮的小鸟飞来,从雪地里衔起一枝冬青飞过松林。小兔子们在树下探头探脑,两只松鼠跃上枝头张望,几匹骏马和麋鹿在林中小屋前平静地踱步。镜头拉远,这一切原来是一幅画。画框下方的壁炉里火苗跳动,映着圣诞树上的饰品闪闪发亮,小猫和小狗在沙发上打盹。
这画面让我忘了窗外的湿气,仿佛回到了初到美国时在康涅狄格州阳光灿烂的日子。
~~ 1 ~~
马蒂是大强的太太。大强是我到美国两个月的时候认识的。
第一次踏出国门,我英语还不太灵光,在耶鲁听课勉强够用,听不懂的就自己看书。第一学期我选了保罗・胡达克(Paul Hudak)教授的《编译原理》,这是我们计算机系的看家课。保罗慈眉善目,有几分像詹姆斯・喀麦隆,又有点像宫崎骏。听几位学长学姐介绍,他是系里公认的好人。
我出国前已经学过编译课了。到美国后,为了学位再学一遍。我想,对比一下也是好的。
果然不一样。我以前学的是用命令式(imperative)的 C 语言实现编译器,保罗教我们用函数式(functional)语言来实现。耶鲁是函数式编程研究的重镇,保罗正带队研究 Haskell 语言的应用,而科大少年班的学长邵中教授在这里带领另一个小组做 Standard ML 语言相关的研究。这两种语言涵盖了函数式编程的两大流派。
跟命令式编程不同,函数式编程强调避免副作用(side effects)。如果一个函数只是根据输入值算出一个结果,不造成其它任何改变,我们就说它是一个没有副作用的纯函数(pure function)。去掉副作用,程序正确性更容易验证,也更容易优化执行。
Haskell 语言不允许任何副作用。保罗开玩笑地说:Standard ML 是腐败的(corrupted),Haskell 才是纯洁的(pure)。
这天保罗有事,给我们安排了一位代课老师。他就是大强。
大强是美国白人,四五十岁,一头金发看起来从上小学起就没有梳过,还有一撮林子祥式的小胡子。他个子很高,高到任何人跟他聊天都必须久仰、久仰。据他自己说有两米,我不知道是不是在吹牛皮,但目测相去不远。那天他穿一件有点泛黄的 T 恤,长度不够,把肚脐眼都给露出来了。与其说是大学老师,他更像建筑工地上搬砖的小工。
很多年后我听到的一句歌词,脑子里马上跳出大强的形象:套马的汉子你威武雄壮!
和大强在他办公室前合影。门上是他和朋友们攀岩漂流的照片。他其实是半蹲着的。
大强说话也有林子祥的中气,擅长贯口,不时掺入发自肺腑的大笑,整个教室都为之共振。他英文发音清楚,即便是我听起来也没有任何困难。
大强全名叫 John Peterson(约翰・彼得逊),但我觉得这个名字太正式,还是“大强”(Big John)传神,接地气,跟他搭。
大强的职位是研究科学家,不负责教学,但我觉得这是明珠暗投了,因为他讲课常一语中的,复杂的概念经他一分析就变得清晰明了。而且他对课程内容信手拈来,不假思索侃侃而谈。更难得的是从头到尾没有废话,也不加“嗯、啊、你知道”这些不含信息的添加剂。
后来跟他熟了,问他为什么不自己开课,他说做老师就要写 Grant 申请研究资金,太麻烦。耶鲁计算机系那时没有纯教学岗,要么是教授岗,科研教学两手抓,需要自己找钱养活团队,要么是研究员岗,从教授那里领工资但不能开课。此事古难全。
~~ 2 ~~
读博第二年,我进了保罗的研究组,在他的指导下读论文、试着解决一些问题。很快,我发现组里个个都是能人,在小组讨论的时候只有我跟不上别人的思路,只能礼貌而尴尬地微笑,腮帮子相当酸爽。这让我煎熬了一年。终于,我确定自己不是做研究的料,在牛群中混下去迟早会暴露自己的蜗牛体质,给中国人民丢脸。于是我找到保罗,要求退学。
保罗说:做研究就像拼图,一开始都摸不着头绪。但只要坚持,总能把相关的知识一点一点拼接起来,最后完成一张大图。大强也鼓励我,说我是他们最省心的学生之一,给我指个方向,我就可以小车不倒只管推,不像有的学生,导师要费很大的劲才能帮他达到毕业要求。我不知道他是真地这么想,还是只是为了让我好受一些。不管怎么说,他看起来非常真诚,不像惯常开玩笑的样子,所以即便是善意的谎言我也当真的听了。我决定留下来完成学业。
~~ 3 ~~
时间久了,我发现大强和保罗一样周末都不怎么工作,而是热衷于广阔天地练红心,经常开车几个小时去攀岩、漂流、还有滑雪。比我低一级的师弟美国人安东尼也是运动爱好者,和大强经常约了周末去攀岩。我虽然羡慕,从来没想过这一切和我会有什么关系,毕竟我小脑不发育外加恐高症。
这天我正在翻来覆去改一篇论文,已经到了韦编三绝不忍直视的程度。痛苦挣扎的时候,大强溜达进我的办公室,把我桌上的书本一推,一屁股坐下去:“伙计(Dude),周末我会跟安东尼和亨里克(我们组的瑞典博士后)去纽约攀岩。”
“好啊,祝你们玩得愉快,别掉下来。”
“你也去。”
我一惊:“你又在开玩笑?我可不会。还有,下星期还得交一篇论文呢,我改得都快吐了还没头绪。”
“这就是你为什么必须去。John Young,你干得太多了。相信我,攀完岩你肯定下笔有神。”
大强发不好我名字的中文读音 Zhanyong,我就告诉他读“John Young”(小强)好了。大强听了很高兴,说我是他失散多年的兄弟。
“谢谢,可我确实不会呀,也没那些器材。”其实我是有点怕。
“安东尼和我可以教你,你啥也不用准备,用我们的设备就行。我保证把你完整交还给你太太。这事就这么定了!”
都这样了,我再推辞就给中国人民丢脸了。
星期六一大早,大强开车,一行四人从纽黑文出发去纽约州的刚克斯山。我虽然到美国已经三年多了,对汽车了解还是有限,安全知识也比较匮乏,不知道从哪里得到的印象,觉得自己坐在后排不用系安全带。上 95 号高速公路前,大强从后视镜注意到了,提醒我:“系好安全带,我可是签了保证书的,把你送回去的时候必须还是完整的一块。”
那是 2000 年的十一月,秋高气爽,漫山遍野都是黄、橙、红色的树叶,在新英格兰灿烂的阳光下鲜艳夺目。我掏出摄像机,记录这层林尽染的美景。那个星期美国大选投票日刚过,一路上收音机里播报着最新的计票结果。小布什和戈尔谁上就看佛罗里达了。两人在那里的票数旗鼓相当,一时难以判断。我想,可能要等我们下山才能出结果了。
谁都没想到,我们赶上了百年不遇的大戏,小布什在佛州仅以极其微弱的优势领先,戈尔申请重新计票,布什一方自然百般阻挠。一个多月以后,还是没有让大家都信服的计票结果。这时戈尔宣布体面地放弃抗争,避免了美国社会的进一步极化和动荡。相比之下, 20 年后另一位总统候选人的表现不提也罢。
到了山脚,安东尼和大强一边帮我穿戴好设备,一边给我解释安全常识:什么叫 belay(牵绳保护),harness(护具)如何固定,要避免哪些常见错误,等等。二十分钟后,我还在试图消化重要的知识点,大强把系在他身上的主绳交到我手里:“OK,你已经准备好了。我先上,你照刚才学的方法 belay 我。”
啊?这就行了?这是送分题还是送命题?来不及多想,大强已经在往上爬了。我赶紧重复刚学的动作,用左手放出一小截绳子。他爬一小段,我再放一截,保持绳子不松不紧。
因为大强是领头,并没有一根绳子从上面吊下来保护他。保护绳是从他身上连到地面上的我手中的。他必须每爬出一段就找一个合适的岩缝插入岩塞,把绳子挂在岩塞上。要是他失手坠落,绳子就会吊在离他最近的岩塞上把他拉住 - 前提是我会及时用右手拉紧绳子,借助保护器的摩擦力阻止他下落。要是我慌了,或者动作不到位,他就会一坠到底。
安东尼在旁边看着我,不时纠正一些不规范的动作。我开始渗出冷汗。
我盯着大强硕大的身体在头顶晃来晃去,不敢松懈:大强啊大强,你这责任真是太重了,也太大了!
上了十几米,到了一个可以落脚的地方,大强停下来 ,把一根绳子垂到地面。安东尼帮我把它系在我的护具上,让我开始爬,他负责保护。
爬了几步,听得见自己心跳的声音。照大强说的,我不去想那么多,只关注下一步。一边爬,一边听安东尼在下面说:很多人有误解,认为攀岩靠的是胳膊有力。其实能用腿的时候要尽量用腿,胳膊只是起个引导作用。初学者容易过度依赖胳膊,不能持久战。很多计算机工程师喜欢攀岩,因为这是一项需要计算的运动,怎么协调、发力,什么时候换手,下一个支撑点在哪,都需要规划。
大强位置最高,不时发来最高指示,告诉我下一步的爬法。我依计行事,手脚渐渐比刚开始更协调了。终于,我和大强汇合了。
长出一口气:这也没有我想象的那么难嘛。
亨里克跟了上来。最后是安东尼,一边爬一边回收岩塞。
我正在想是不是现在该下去了,大强又开始往上爬。我总不可能自己一个人爬下去吧,那好像比爬上来还要更难。只好在他到达下一个落脚点之后硬着头皮跟上。
好像是看出了我的恐惧,安东尼向我保证:我们准备充分,万无一失,器材都是杀鸡用牛刀(incredibly over-engineered)。大强也拍胸保证:道路千万条,安全第一条。要是摔得惨,他全额退款。
说实话,大强的调侃并没有舒缓我的紧张。我全部意志力都用在提醒自己集中精力。脚踏实地,真抓实干,两手抓,两手都要硬 - 这些口号突然间有了具体实在的含义。
我们选的这座山峰有八十多米高,相当于近三十层楼。基本都是 80 度左右的大坡,也有部分 90 度直上直下的岩壁。好在都有可以脚踩的着力点,不需要像《碟中谍》第二集中阿汤哥那样全靠几个指头悬吊。我向下搂了一眼,不知什么时候山脚的树林已经变得像一根根火柴棍。对高度的恐惧向我袭来。偏偏这时候山风吹来,一阵头晕。
赶紧抬起头,不敢往下看。心跳得厉害。
我无路可退。闭上眼,待情绪略稳定再睁开,寻找下一个支撑点。
体力开始不支,山顶还是遥不可及。
继续前进。
大概过了三个小时,终于成功登顶。低头,停车场已经看不清。远眺,红叶连成片延伸到远处融入天际。荡胸生层云大概就是这种感觉。
大强一屁股坐在悬崖边上,双腿翘在外面,双手在空中乱挥,就好像坐在我办公桌上一样随意。我又是一阵眩晕。
回头一想,这次攀岩的路线技术难度不高,对我体力的挑战还在其次,重要的是我战胜了自己的恐高症,每一步都是自己亲力亲为爬上来的。虽然全程有两位攀岩高手的指点,起码我没有靠别人拖上去。
如果这是一篇鸡汤,这时就该插入俞敏洪的“在绝望中寻找希望,人生终将辉煌”了。
~~ 4 ~~
有一就有二,有二就有三。
接下来几年,大强继续推广他热衷的户外运动,带着我和系里的其他老师同学和家属们在康州攀岩,去佛尔蒙州滑雪,到宾夕法尼亚州白水漂流。参加的有他的学生邻居、博士后、教授和他们的太太、女友,甚至包括小朋友们。
回家后,他会收集大家拍的照片和视频,做成花絮,大家一起聚会时回顾。他管这叫Dude Fest(伙计节)。
那时候数字相机还不普及,很多相片是胶片的。他就用胶片投影机。一边放幻灯,一边绘声绘色地讲解当时的各种趣事或者恐怖故事。比如某地有一块形如阳具的巨石,某年某月某日某某某筏子翻了,身体夹在石头缝中间上不来壮烈牺牲。
看到我们惊恐的表情,他连忙说这种事情概率非常小,根本不用担心。我将信将疑。
~~ 5 ~~
我读博那几年微软正在开发 F# 编程语言。F 是一个音符的名字,而 # 是音乐中的升号,F# 就是升 F 音。F 也表示这是一门函数式(functional)语言,# 表示它比一般函数式语言更厉害。保罗开玩笑说我们什么时候也做一个基于 Haskell 的 H# 语言。我说:可惜没有 H 这个音符。
大强告诉我:是有 H 这个音符的。在德国,以前用 B 表示降B,而用 H 表示 B,所以德国的 H 就是其它国家通行的 B。但是呢,这样一来 H# 就成了 C 这个音,H# 语言就成了 C 语言,确实不是一个好名字。
瑞典来的博士后亨里克也告诉我,巴赫(Bach)的音乐签名就是 BACH 四个音符。我一查,真是这样的,巴赫的签名长这样:
这个设计妙在,用 F 调高音谱号、次中音谱号、中音谱号和C调高音谱号这四种谱号记谱,第三线上分别是德国的B、A、C和德国的 H 四个音符,也就是图中心那个音符。
其他音乐家的名字就没有这样的巧合,看来巴赫真是天选之子。
大强为什么会有这样的冷知识?因为他热爱古典音乐,会吹长号,办公室的书架上堆满两层 CD,全是古典音乐。
~~ 6 ~~
我这么写,大家可能觉得大强是一个游手好闲的伙计,其实他的程序和论文都写得极好,把复杂的事情讲得非常清楚,跟他讲课一样。他和保罗都是 Haskell 语言设计委员会的主要成员。虽然 Haskell 在工业界没有流行,它的设计思想却对很多工业界的语言有深远影响。被广泛看好有望取代 C++ 的 rust 语言就从 Haskell 借用了很多特性,Google 正在开发的 C++ 接班语言 Carbon 也同样深受 Haskell 影响。
2002 年,我要毕业了。到底是当教授,还是去做程序员?这个问题困扰我很厉害。刚来美国时我想当科学家。经过几年学习,我越来越感觉做工程师更符合我的兴趣和长处,但又放不下这几年读博士的训练。一时想不清楚,我决定双管齐下,先在学校找找教职,有了结果再考虑去不去。
简历投出去,收到几所大学的面试邀请。我需要给他们做一场报告介绍自己的研究工作。上路之前,我在课题组内部试讲了一番,征求意见。
我的主要工作是设计实现了一门在嵌入式系统上编写控制软件的 RT-FRP 语言。为了展示这门语言的威力,我写了一个编译器把 RT-FRP 程序转化为一个 3D 机器人射击游戏 MindRover 的控制程序。也就是说,可以用 RT-FRP 控制游戏中的机器完成各种任务。我试图说明,用我的语言编写控制程序比用游戏自带的编程语言更简洁、直观、易懂。
大强觉得我的演示虽然炫酷,却没有把我的语言的最大优点说清楚。他告诉我:听讲座的教授们很多是其它领域的,对他们来说,要紧的是解释明白我的东西好在哪里,而不是纠结于讲解技术细节。
他建议我多强调 RT-FRP 是一门宣告式(declarative)的语言,也就是说程序员只需说明他们想要做什么(what),至于怎么做(how)就交给编译器去完成。这样,程序员可以专注于高层的业务逻辑,不必去操心底层实现细节,开发效率和正确性都比用命令式(imperative)的语言高。如果把 RT-FRP 当成一门函数式语言来宣传,有人会抬杠说面向对象语言才是王道。但他们却很难找到反对宣告式语言的理由。
跟他讲课一样,大强再次一针见血。他的这番评论我一直牢记,设计系统时坚持践行宣告式理念,受益匪浅。
周游几所大学后,我觉得做教授不光要对自己负责,还要对学生负责,自己没有准备好承担这样的责任。但是去工业界会不会变成一颗螺丝钉,被老板呼来喝去的生活是不是很压抑无趣?
大强告诉我:只要愿意去发现,工业界其实也有很多有意思的问题,博士训练会帮助你用别人没有的角度解决问题,做好了也会很有成就感,得到相应的回报。
最终我决定去做程序员。
果不其然,我在谷歌遇到的第一个问题就很有挑战性:写一个跨平台的 C++ 测试框架。当时可以说所有的 C++ 测试框架都很难用,我用在耶鲁学到的宣告式编程和特定领域语言设计的思想指导,用做博士论文的方式调研,做出来一个超越前人的设计,快 20 年了仍然是一个很受欢迎的开源项目。
~~ 7 ~~
大强是个让人欢乐的人。他不光带大家一起玩,还有过人的搞笑天赋。每次活动他都会负责插科打诨,搞一些无伤大雅的恶作剧,比如照相的时候在某人头上比天线,伙计节上爆在座某位的料。不过他的玩笑从来不会让人难堪。
毕业前和课题组合影。后排左起:亨里克、保罗、安东尼、大强
在这样的氛围中,我也有样学样。
我的博士论文是研究如何用函数式编程去处理连续信号(continuous signals),所以 PPT 里会出现很多关于信号(signals)的内容。我们系那个投影仪,如果没有接好线就会出现蓝屏,上面一行小字“No signal”(没有信号)。我准备的 PPT 第一页就是复刻了这个画面。
上台之后,我假装连接投影仪失败,大屏幕上显示出“No signal”。大强在下面热心指点我调试,但是招数都不管用。正当大家一筹莫展,我一拍空白键,一行“Lots of signals”(很多信号)的小字跳出来,把“No signal”推走。大家明白中招了,教室里发出一阵快乐的笑声,大强的尤为响亮。
~~ 8 ~~
从耶鲁毕业后,我在西雅图扎下了根。两年后,大强也离开了。当时保罗项目组的资金不够,要么他的一个中国来的博士生离开,要么大强必须离开。要是博士生离开的话,她的学业就会受到影响。她已经快毕业了,换一个导师需要从头做很多事情。
凭大强和保罗的老交情,他可以要求留下,但他选择的是在甘尼森(Gunnison)的西科罗拉多大学谋了一个教职,把耶鲁的机会留给了那个中国博士生。
大强到了西科罗拉多大学依旧欢乐,没有表现出丝毫离开耶鲁的落差。那里没有繁重的科研任务,他正好可以专注于教学。每个星期三晚上他都会在图书馆给学生答疑,直到 12 点图书馆关门。他加入了大学管弦乐团,认真地吹长号。每年夏天,他还开办夏令营,给周围的中学生讲编程,教他们用函数式语言做动画和游戏。
科罗拉多自然条件很适合户外活动,冬天可以滑雪,夏天可以攀岩。他自然继续领头带着朋友和学生们四处冒险。大家都喜欢他这个老大哥。
大强多次邀请我带着孩子一起去甘尼森,他会带我们再出去野外探险。因为孩子太小工作也忙,就一年拖一年,到现在也没有去过。不过,他有几次经过西雅图,或者是去野外探险的路上,或者是去微软开会,和我又见过几面。
每次到我家,他都会发挥逗小孩的天赋,做各种怪相,把孩子举过头顶,把孩子们逗得哈哈大笑。孩子大一点之后,大强叔叔还会弹钢琴跟他们合奏,或是陪他们打乒乓球。
大强途经西雅图,在谷歌办公楼前合影
我家院里有两棵大树,一棵是樱桃树,还有一颗不是樱桃树。大强来了,技痒难捱,三下五除二就爬到树上去,让我们给他照相留念。
他到哪都是长不大的孩子。
他还搞怪,教我两岁的女儿说“嘿,伙计!”(Hey, dude!)一定要学得字正腔圆他才满意。看着小不点嘴里蹦出老气横秋的这句话,实在是让人忍俊不禁。
每年年底,我都会收到大强的一封电子信,是他的年终总结,告诉我们这一年他、太太马蒂和孩子们又有什么变化,见了哪些朋友,伙计节上有哪些趣事。
最近一次见大强是 2016 年。保罗因为白血病在一年前逝世了。他的朋友、同事和学生在耶鲁大学为他举办了一个追思会。在会上见到大强,握着他的手,痛感遍插茱萸少一人。
~~ 9 ~~
2017 年三月,大强约了朋友去俄勒冈攀岩,按计划会在西雅图稍作停留。又有机会见面了。
约定时间前一周,我突然收到亨里克的一封信,标题是“约翰・彼得逊 - 非常不幸的消息”。
我一惊,打开一看:大强在上周末因攀岩事故意外丧生。
我脑子一片空白,进入宕机状态。我不明白为什么大强这样的老手也会出事。我再也没有机会赴大强的伙计节了吗?我不知道大强在灾难突然到来的时候,脑子里最后的念头是什么。我想他会骂一句:“我靠,这该死的副作用!(Oh, f***. Damn the side effects!)”
后来陆陆续续得知更多细节:他和马蒂带着朋友和学生去攀岩,不知是设备还是操作失误,被绳子缠住,当场遇难。马蒂和学生们亲眼目睹却无能为力。
别了,大强,我失散多年的大哥。感谢你给我的友谊、关照和鼓励,在我想要放弃读博的时候,在我面对高度恐惧的时候。如果消息可以穿越,我想回到一个阳光灿烂的日子,像电影《星际旅行》(Interstellar)里那个宇航员库柏试图告诉过去的自己那样,对你说:嘿,伙计,别去!(Hey, dude, don’t go!)
大强走后,西科罗拉多大学在图书馆里他常给学生答疑的角落嵌上了一块铭牌。
~~~~~~~~~~
猜你会喜欢:
重访纽黑文 - 毕业十多年后第一次回到耶鲁
浮云游子意,落日故人情 - 回忆大学导师陈老板
从莫斯科郊外开始的回忆 - 纪念我的同学 L
虚白高人静,桃李下自蹊 - 回忆中学校长胡虚白先生
我的科大之最后的晚餐 - 毕业季的故事
程序员护发秘籍 - 掌握这些工作技巧,包你不脱发
程序员的核心技能 - 以脱口秀的方式讲解程序员最重要的技能
~~~~~~~~~~
关注老万故事会公众号:
码字不易,呕心沥血只是希望更多人看到。如果喜欢这篇文章,请不吝订阅、转发、评论。谢谢!🙏