周星驰的《功夫》里有这样一句话“记忆是痛苦的根源,你能不记得,算是福气了。”每次写小结的时候,我都会想起这句话,还有张枣的那首小诗“只要想起一生中后悔的事,梅花便落满了南山。”
即使我的人生只不过短短二十三四年,我依然能用自身经历去聆听这两句话背后的叹息。不过矛盾是普遍存在的,记忆是痛苦的根源,同样也是幸福的依托。过去与未来、痛苦与幸福都是辩证统一的。不知来路的人,是无法知晓去处的。
《金刚经》里说“如来者,无所从来,亦无所去,故名如来。”这句话讲了如来法号的由来,不从任何地方来,也不到任何地方去,所以叫如来。这是佛祖的境界,而我还只不过是一个俗人,所以免不了落入回忆的俗套。
我记得我刚进大一的时候,是抱着一个失败者的心态来的。高中的时候在信息学竞赛里折戟沉沙,奋斗了许多年,最后连NOI的门槛都没摸到,我想我应该是不适合学习计算机科学的,又因为在物理竞赛中曾经有过一些成绩,所以填志愿的时候第一志愿填的是物理系,进了交大以后就属于理科试验班了。不过曹文老师建议我还是试一试ACM班,我想从现实来说计算机专业的确更好一点,哪怕学得不好,毕业以后找份工作总是方便许多,所以我最终还是走进了计算机科学的大门。
我还记得在ACM班面试的时候,俞老师让我谈一谈对物理和计算机科学两门学科的看法,我大概回答的是:“物理是研究宇宙一切事物运行规律的学科,而计算机科学是研究计算机本身的学科。”当时看俞老师的表情和脸色,大概对我的答案不是很满意,这使我有一些忐忑,但是好在最后我还是进入了ACM班。
其实早在进入大学以前我就听说过ACM班的名号,对从那里走出来的优秀毕业生们倒是了解不多,不过我知道ACM班里有相当一部分学生都是省队的佼佼者和NOI的优胜者,在这里面竞争,有一种拿自己的短处和别人的长处相较量的感觉,所以大一的时候,我一直带有心理上的压力,我不知道自己能在这里走多远,我只能竭尽全力。
“这不是能不能赢的问题,而是我必须站在这里和你战斗。”我把漫画《一拳超人》里无证骑士的这句台词写在致远的学生名册上,开始了自己的ACM班生涯。无证骑士不过一介凡人,除了一腔正义的热血,其他什么本事也没有,最后还是被S级的怪人深海王一拳打飞。我想我大约就是一个“无证骑士”。后来我还在《学子讲坛》上讲了这一段,不过这是后话了。
《数学分析》和《线性代数》,我在中学的时候就自己学过一点,所以这些课程我要求自己要在班里处于顶尖的位置,但是对于程序设计和计算机科学导论,我一开始给自己的定位是垫底也可以接受。
所幸程序设计课并不像想象中那样与中学的信息学竞赛挂钩,甚至可以说没什么关系,只是机考依然会以算法竞赛的形式出现。大一的时候最痛苦的就是每两周一次的机考,尽管我知道机考其实在总评里的占比相当低,但每次对着三道题目抓耳挠腮大脑一片空白的时候,我总能回忆起高中参加省队选拔的时候那种窒息的感觉。
因为总是听说数理基础很重要,数学课很重要,我花了相当多的时间学习《数学分析》和《线性代数》两门课,找各种经典教材看,做许多题目,把书上的题翻来覆去做好几遍。其实学这些东西到底未来会发挥多少作用,当时的我是说不上来的,但学习这些东西确实很有意思,所以我也就不想那么多了,反正总是没有坏处的事情。
整个大一的学习中,我其实很少明确地感受到自己是一个计算机专业的学生,因为我学习数学物理的时间要远多于我写代码的时间。程序设计课的C++我还翻了几本C++的书,数据结构因为有基础几乎没花多少精力去学,所以尽管这两年成绩还不错,我一直更渴望学更加“计算机”的专业课,尽快磨砺自己的专业能力,总是靠数学物理成绩撑场面的话,有一种吃老本的感觉。
大一下学期的时候,我看了一下大二的课程安排,其中CPU,操作系统,编译器三门大作业早就如雷贯耳,编译器大作业更是传的神乎其神,在传言中是代码能力的象征,大二下学期的拦路虎,没有写过编译器的ACM班生涯是不完整的。
我对自己的能力并没有太多自信,要在短短一学期完成这些大项目,我不知道自己能不能做得到,所以我打算提前开始,先自己学一点,当然我也有一些野心,在数据结构大作业玩了几个花活儿以后,我想尽自己的全力去挑战历年ACM班在这几个大作业上的最高成就,能够多做一些时间,可能性更大一点。
大二很快就来了,如我预想的一样,我对阿磊老师的系统课非常感兴趣,他的上课方式有一种魔力,吸引我把大把的时间投入其中。听他说着那些计算机“蛮荒时代”的故事,那些传奇的名字——Cray、Stallman、Linus、Wilkes、Jouppi,我感觉写CPU、写操作系统、写编译器也变成了一件神圣的事情。走过那些“先贤”们走过的路,在一块空白的FPGA上把整个现代计算机系统搭建起来,是一件很符合浪漫主义的事情。单枪匹马,勇者屠龙,也颇有一些“无证骑士”的味道。
我还记得那些反复更改CPU架构、盯着花花绿绿的电平debug的夜晚,下定决心挑战双发射+乱序执行+分支预测架构的那个瞬间,在开始最终测试以前播放一首《決闘/one-on-one》的时刻,和第一次通过所有测试点的终端界面。我自信我完成了之前历届学长都没有完成的复杂架构,这件事比单纯的比较性能快慢更令我心潮澎湃,这使我想起之前在线性代数课上证明了一个悬置多年的命题,做成别人不敢做、做不成的事情,这种快乐是无与伦比的。之后写编译器,也是顺其自然的一个过程了。
我想我的大学四年可以以大二为分界线,前面两年我努力地想证明自己有足够的能力学习计算机科学,而在大二以后,我逐渐觉得这件事情本身其实意义并没有那么大,随着我大三在实验室里的时间越来越长,这种感受越来越深。
大三以后的大部分时间,我都在陈天奇学长的指导下进行科研工作,上课其实成了一种次要的事情。在做研究的过程中,我一直都在与自己的内心做对抗。一直以来我都很抗拒未知、抗拒不确定性,试图考虑清楚所有的可能性、把握事情的一切发展以后再开始着手做事,否则我宁可什么都不做,徘徊在原地踌躇不前。我总希望能有一份攻略,告诉我要做12345,然后我就可以打败boss拯救公主通关游戏。但是科研是不可能有攻略的,走在人类未知的边界上,没有人知道前面会是什么,最多是做一些模糊的预言,而无法做出精确的预测。
通常我们都认为科学和宗教是不可调和的,但我发现其实很多科研工作者也都有信仰,不过他们信仰的不一定是某种神灵,而是研究方向的某个big picture,用江湖行话来说就是“画饼”。有的人相信未来是强化学习的天下,也有人相信统计学习和符号学习相结合才是真正的智能,这些信条其实在目前看来都是一种假想而已,只不过他们可以证伪,但是这个证伪的时间尺度可能是十年二十年,而人不过活一百年,因此这种时间尺度的投入,其实也有一些纯粹的belief在其中。成功者可以青史留名、载入教科书,失败者只能改换门路,历史证明,成功的概率还是远远小于失败的概率。
在决定去CMU读博士以前我参加了CMU和UW的visiting day,和不少那里的PhD聊过天,有刚刚进去不久的新PhD,也有已经毕业去向确定了的老PhD。实事求是的来说,即使是在CMU和UW这样全世界数一数二的学校,它们培养的PhD最后也是“凡人”居多,当然这个凡人是相对于PhD群体而言。
我想起马红孺老师在博客里说自己整个学术生涯发表了百余篇文章,但是如果没有这些文章,对物理学的发展进程也不会有任何影响。这当然是一句自谦的话,但读来也让我感慨莫名。身在计算机专业,经常会听见各种“年薪百万”“高中发paper”“三月一篇顶会”之类的传闻,让我不得不感叹任何一个时代、任何一个行业都不缺聪明人,不过这些大约都是外物,其实和我也没什么关系了。
在本科的时候,我曾多次幻想过博士会是什么样子,而当我快完成博士第一年的学习之后,我发现这个问题依然很难回答,也许我能做出的最合适的答案就是这个问题并没有什么答案可言。我看了很多博士生的个人总结,有功成名就在学术界成为rising star的,也有四五六年一篇文章都发不出来最后黯然退场的,在很大程度上,选择大于机会大于努力的公式是正确的,而选择不免有一种赌博的意味(有趣的是这个词和读博谐音)。《大决战·淮海战役》里伟人说:“所谓战略决战,就是赌国家的命运,赌军队的命运。这个赌字很不好听,可又找不到一个更恰当的字来代替它,就是这么一回事,啪的一下押上去了。正是因为如此,事情临到了面前,又禁不住心扑扑地跳,哪有这个道理,心跳的什么呢?我们不怕燃烧,我们不怕白热化,我们不怕烫着这里,烫着那里,我们的手,不能发抖啊!”
高中的时候我读过史铁生的一本半自传体小说《务虚笔记》,他试图剥离他自己人格的各具特色的部分,然后幻想出人生不同发展的世界线,他可能成为一个诗人,可能成为一个画家,也可能依然是一个作家。他在文中说“如果你站在四岁的她的位置展望未来,你会说她前途未卜,你会说她前途无限,要是你站在她的终点看这生命的轨迹,你看到的只是一条路,你就只能看到一条命定之途。所有的生命都一样,所有的人都是这样。”这话颇有一些宿命论的味道。在受过计算机科学的熏陶以后,我们总会想追求最优化,我们很清楚贪心并不是最优解,所以才会有纵观全局的动态规划,才会有前瞻未来的beam search,可惜人的一生无法用离线算法来规划。宿命论正确与否,我并不知道,但如果硬要说有什么是命运的话,可以被自己掌控的,就是命运。
我应该做什么样的工作?天奇曾经和我们说,一项工作发一篇paper并不算什么,一项工作能够让10个其他人发paper,这才是我们应该努力的方向,我们启发了10个人,那10个人又各自启发了10个人,这样你就有100个citation了。
在大二第一学期的学期小结中,我提到过David Patterson在Berkeley上课的一份课件,里面给研究生讲了“How to have a bad career”。之后,天奇也给我们share了这份课件。在身处系统研究工作之中后回过头看这份文件,和当初刚刚上完体系结构课的时候感觉又有不同。“Goal is to have impact——change the way people do Computer Science”,一年以前看这句话,只是一种美好的信仰和憧憬,现在却觉得这是沉重的责任,是我们现在正在尝试做的事情,也是我以后一直希望能做的事情。
Einstein在Planck六十岁纪念的演讲里有这样一段话:“把人们引向艺术和科学的最强烈的动机之一,是要逃避日常生活中令人厌恶的粗俗和使人绝望的沉闷,是要摆脱人们自由变化不定的欲望的桎梏……除了这种消极的动机外,还有一种积极的动机。人们总想以最适合于他自己的方式,画出一幅简单的和可理解的世界图像,然后他就试图用他的这种世界体系来代替经验的世界,并征服后者。”
这又让我想起当初面试的时候俞老师问我的问题,我说“物理是研究宇宙一切事物运行规律的学科,而计算机科学是研究计算机本身的学科。”现在再来看这个问题,我想无论是物理还是计算机科学,最高的美学都是认识世界,然后改造世界。
“今日长缨在手,何时缚住苍龙?”
简介: 侯博涵,男,ACM班2017级。高中毕业于江苏省常州高级中学。现于卡内基梅隆大学攻读博士。