[转载]徐宥:掉进读书的兔子洞
说明:作者的人生经历,估计会对班上很多同学产生冲击,建议大家仔细读完这份博文。
作者是在没有高人指点的情形下,误打误撞的找到了学习编程的几个诀窍——多动手敲代码、疯狂阅读经典著作,从此开启了开挂的人生。
这几样经验,着实值得大家仔细琢磨和学习。
以下为原文:
----------------------------------------------------------------------------------------------------------
sunlight 2010-03-28 17:40:08
莫听穿林打叶声,何妨吟啸且徐行。
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。
料峭春风吹酒醒,微冷,山头斜照却相迎。
回首向来萧瑟处,归去,也无风雨也无晴。
——苏轼《定风波》
引子:一件小事影响了我一生
大学中的一切,其实都和大学前的经历和学习习惯有关。因此,我还是从我小学时的一件对我以后的人生,包括大学影响巨大的小事说起吧。
大学前:数理化,好老爸
一本小书的出现
我的小学是在农村里和爷爷奶奶一起度过的。我的父母住在小镇上,两人平时都要工作,没空照看我和弟弟。所以,我只有周末和放假才到镇上,和父母弟弟在一起。四年级升五年级那个暑假,我到了镇上,和父母在一起。因为一起抓鱼钓虾的玩伴都在老家,百无聊赖的我开始乱翻父亲的书橱,找书看。某天,我翻出了一本叫做《平面几何一题多解》的书,那是本封面很好看的书。我把整本书翻下来,每个汉字我都认识,但每个符号我都不懂。于是我好奇地问父亲,这个书讲的是什么呀,怎么从来没见过这些奇怪的符号呢?他就告诉我说,书里讲解的这个东西,叫平面几何。他接着问我说:“平面几何是个很有趣的东西,你想不想学呢?”我说:“当然想啊!”那时的我,其实只是一个好奇的小学生,迫切想知道这本书里的图画和符号的意思。我肯定不会想到,这个很随意的决定,改变了我其后的整个人生。
11岁,开始享受独立思考的快乐
听了我肯定的回答,父亲立即从书橱里层(我家书太多了,书橱太小,书橱里书分里层外层,外层的书挡住了内层的书脊,我从来都不知道里面还有宝贝)变戏法一般地翻出了本《数理化自学丛书——平面几何》。对于我父亲这一代人来说,《数理化自学丛书》是代表着知识、荣耀和梦想的。我感觉他翻出这本书的时候的动作是虔诚的,但当时的我并不知道父亲在这套书上寄托的希冀和梦想。我只记得他告诉我,当年这套书,用去了他大半个月工资。就这样,从五年级开始,我就在父亲的指点下,开始蹒跚前进地学习《平面几何》。从一开始不知道什么叫“证明”,需要他一字一句帮我厘清逻辑关系,到后来全是自学不需要他教,我很快就喜欢上了自学这种学习方式,每天自己看书并且做八道题。暑假过完后,我就回到了爷爷奶奶的老家。父亲让我继续自学,并且布置我一周做八道题。我在爷爷奶奶家,每天放学回来不做家庭作业也不看动画片,就赶紧做一道几何题。做几何题的妙趣,不融入其中的人是不能理解的。比起小学里的抄生字、抄课文这种作业,做几何题是脑力和体力的双重享受。当时,我周围没人可以讨论切磋,全靠自己。遇到不会的题目,我只能自己冥思苦想,或者熬到周末和父亲讨论,因此,常常被一道难题从周一折腾到周日。好在这套书是粉碎四人帮后出的第一版,当年学生的数学水平比不上现在的学生,而这本书又以自学为主要切入点,所以题目也相对简单,我冥思苦想几天后大体上也能想到解题思路。因此,我能够常常体验百思而得解的愉悦感。
我觉得,这种时常拜访的愉悦感,让我很早就开始相信独立思考的力量。
每个周末,父亲都用吱吱作响的自行车带我到镇上洗澡、理发,然后批改上周我做的几何题。在自行车上的时候,他常常信马由缰随口说些初中物理和初中代数知识,比如看到船就说浮力,看到马就说做功,看到三角形就说余弦定理等。我也就半懂不懂地听,有时候插几句话,有时候能睡着了,没有丝毫的压力和拘束。很早就被中学数学、物理知识装备的一个小学生是可怕的,我那时候觉得知识就是力量,因此我一定要用自己的数学、物理知识做一台柴油机,我很自信地认为自己懂得做柴油机和机动车的一切知识,说不定还能做出第二类永动机。父亲屡次告诉我不可行,而我却反过来屡次告诉他,你是个没有理想的人。父亲不愿意打消我的理想,只是扔给我更多的书,希望能够打击我制造柴油机和永动机的热情,而我的知识理想,在读了更加多的书以后,变得更加的坚固了,我相信,学习知识是我人生第一重要事,有了知识,虽然不一定能做柴油机,但一定能做更多强大的事情。同时,我通过学习几何和其他的一些父亲扔给我的书,开始对自己的学习能力有了自信,我相信,找书自学是学知识的好方法,同时,把题从头到尾做一遍是很好的自学方法。
所以,我带着三个理念进入了大学:第一是什么东西都可以自学,第二是慢即是快,笨笨地做一遍题是学习的捷径;第三是知识理想主义,知识就是力量,而读书学知识能够消除蒙昧,掌握改变世界的力量,所以是一件快乐的事情。
大一~大二上:极端自负,极度自卑
专业选择的失意让我暂时迷失了自己
我的高考成绩很不错,高中时还拿了一个数学联赛一等奖,所以,我是带着对自己数学知识(为了准备数学竞赛,我看了很多闲书,有很多就是大学数学系的教材)和学习方法的自信满满,和对南大数学系这个相对不好的选择的遗憾和自卑(当时的高考分数可以填报更加好的学校或更加喜欢的专业)来到大学的。当时我的心理状态可以用八个字概括:极端自负,极度自卑。这种心态,一直笼罩了我上大学的头两年,而且总是以一个季度为周期,在两极之间交替变化。我在学期开始往往很自负,到期中考试左右很自卑,然后再自负,再自卑,不断反复。
在我看来,极端自负这个心态,其实不是因为自信,而是因为极度自卑生出的应激反应——为了掩盖自卑,只好用自负来掩饰。为什么我极度自卑呢,大体有两个方面的因素:一个是我的成绩排名在高中都是很靠前的,但是到了大学就20名开外了,尽管我觉得自己的数学水平很不错,考试却总是不怎么样,觉得考试考不出真水平;另一个是觉得自己没有在一个自己满意的系——我喜欢能动手的工科,当时我觉得比起计算机系和电子系这样的“牛”系,数学系并不“牛”,可即使在不“牛”的系,我都不能做到前十,更别说看上去更加“牛”的计算机系了。为了掩饰自卑,就自然生出了极端自负。那时候,我上课根本不听讲,理由是“书上的东西太简单了”。为了证明自己智商还可以,我总是坐在最后一排,显示自己并不热衷于老师讲课。这样持续了两年,以至于到最后,我连班上每次都坐在前面的几个同学的名字都不知道。这样的心态明明是错的,我却缺少一个很好的动因来改变它。
我开始一行行敲经典书上的程序样例代码
不过最原始的三个理念还是在的,我告诫自己,即使上课不听讲,也不能浪费时间。所以,我把在听课、做作业上节省下来的时间,用在了看喜欢的计算机书和学习编程上了。于是,整个大一大二,我凭借着简单的自学的理念,开始了两件事情,敲《Thinking in Java》(TIJ)和《The TeXbook》上的每一个样例。
敲TIJ的机缘其实很简单,我是在软件学院听课的时候看到他们教Java,但是他们用的《Java 大学教程》太贵了,我舍不得买。 我在网上搜了一圈,发现《Thinking in Java》是一本免费的英文电子书。于是,我就在数学系的机房,每天下午和晚上,开着一台计算机,屏幕上放着这个电子书,再用我很土的笔记本,运行着未注册的 JCreator,一个字母一个字母地敲TIJ上面的程序。我很偏激地认为拷贝粘帖的程序记不住,所以每个字母都自己动手敲。就这样,花了一个学期,居然就把所有的程序敲完了,基本上Java 的方方面面,我也了然于胸了。
敲完《Thinking in Java》之后没几天,我们就期末考试了。那一次考试的试题是用LaTeX 排版的,而不是手写的。我考试的时候就问监考老师这玩意怎么排版出来的,因为我知道Word软件做不到这个效果。 监考老师除了对我不认真考试表示不满外, 还算仁慈,告诉了我LaTeX 这个名词。寒假里,我就买了一本LaTeX教程。然后,突然认识到,原来TeX 居然是我最热爱的Knuth的杰作,于是我就疯狂地开始学TeX。我的方法还是一样,敲例子。记得《The TeXbook》上有一个程序,Knuth让大家自己照着敲入计算机,然后还很幽默地说,实验证明,只有很少的人会按照他说的敲入这个程序,而这部分人,却是学TeX学得最好的人。看到这里我会心一笑,觉得自己的方法原来也不算笨。从此,一字不漏敲入一本书的程序成了我推荐别人学习语言的最好办法。后来大四时我又敲了《A Byte of Python》,前段时间又敲完了《The Awk Book》,都是不到一个月立即从初学者成长为细节很熟、代码顺手拈来的熟练使用者。顺着这个方法,大二我把《组合数学引论》和上海交通大学出版社出版的一本《离散数学》上的题目都做一题不漏地做完了。当时选这两本书也没有特别的目的,就觉得这东西应该是计算机的数学基础。这些积累,在大四全部都显现了出来。
我个人认为,《Thinking in Java》和《The TeXbook》都算得上是理论和实践结合的精品书,是经典的英文原版书。我一上来就读了这两本书,阅读品位就上升了不少,而且变得“崇洋媚外”了,任何时候都以英文原版书为第一选项了。也正因为此,虽然我自学的过程中没有高人指点,但自学最重要的一个环节——选书——的盲目性就大大减少了。我记得当时我看得最多的书是华章引进的书,黑封面的,我们图书馆里有将近半书架。这些书如果一一细读,穷尽四年都看不完。但华章的书也并非本本经典,我开始注意选择,细读开头十几页后,基本能决定一本书该不该看。所以即使当时没人指点,全靠自学,读的书还算过得去。那时候南大计算机系的教材,有的我看,有的我觉得不适合自己,就找替代品了。我觉得在选书这个事情上,因为有前两本书的标杆,我少走了不少弯路。从这两本书开始,我疯狂的读书生涯就开始了。那时候南大浦口校区的硬件条件并不好,唯一有空调且可以上自习的地方恰好是图书馆。因此我每个暑假,基本上都是很早就过去占位,晚上很晚回去睡觉。我对小说等其他书也不感兴趣,就整天看自己觉得好的计算机书和数学书,做笔记。某天,我开始了一个雄心勃勃的计划:读完TP312(计算机理论和编程)书架。
大二下:两个榜样,三个要求
大一大二基本上就是在不断的心态波动中前进。我学会了Java,也做了不少题,但是考试成绩一直不是很好,为此我比较苦闷,迫切想要改变这种状态,我的想法是,要么转系,要么好好学习数学。但是转系阻力重重,我又不愿意耐心去学习数学提高考试分数,所以我一度非常纠结。但是大二下学期,我遇到了两个对我人生产生影响的人,这两个人让我从正弦曲线般的心态沉浮中跳了出来,让我一下子变得目标坚定了。
第一个人是我的同学及非常好的搭档,现在在 IBM 工作的李获鼎,另一个是我的叔叔。他们让我变得沉稳,消除了原有的浮躁,学业和心态都走向了正轨。
大二上学期快要结束的时候,我们数学系的学生会主席一次无意中对我说,在下次数学系搞的文化节上,我们懂编程的同学要维护一个叫做“模拟股市”的软件。这个软件是学长用 ASP 写的,运行的时候有一些问题,所以需要专人看着运行。我那时候特自信,就说,干脆明年我用 Java 重写一个吧。后来我记不得是我找获鼎还是他找我了,反正两个人一拍即合,决定一起搞。寒假他在家自学 JSP, 我就在家看 JDBC 和 SQL。 开学没多久,我们就开工了,他负责写前端 JSP,我写 JavaBean。两个人编程比一个人好多了,可以相互看代码,而且可以轮流工作,克服浮躁感。我写程序比较粗线条,基本上功能有了,细节就不管了。获鼎比我可认真细致多了,前端一个表格的宽度和颜色都要调好久。在他的影响和“胁迫”下,我做事情也变得细致起来,因为我不细致,他的前端就没法正常工作。那时候他也是一边写一边学,对着书一行一行地敲 JSP,态度比我敲 TIJ 时候还认真。和他在一起工作了 20 天,把这个玩具项目写完后,我从他那里学来了耐心,自己也变得踏实起来。“模拟股市”这个小程序发布后,玩这个系统的同学都挺喜欢的,我的自信心也就有了。加上心态也平稳了,态度也踏实了,自然地,原先的自卑心理就没了。随着自卑的消失,极端的自负也自然消失了。我心态变得正常了。这时候,虽然还有点小迷茫,但一切已经走上正轨,我开始思考以后干什么的问题了,听课、做作业也比以前认真不少,成绩也上去了不少。
我的另一个榜样是我的叔叔。和他不能算是遇到,算是再发现吧。我叔叔是个很有冒险精神的人,具有不折不扣的企业家精神。我非常小的时候,他帮人家修电视,然后借着摆弄电子产品的背景,迅速就搞了计算机。他买了可能是我们全江都市第一台 486。搞了很多年计算机以后,他又自学了单片机,以写汇编为乐。这期间他还搞过印刷等其他的项目,我记得小时候最喜欢的就是到他的工作室里面玩各种各样新奇的玩意。因为他总是不停地尝试新东西,所以我对我叔叔一直的印象都是“善于抓住机会”, 倒没有把他和“耐得寂寞”这个词很紧密的地联系在一起。大二有段时间,我突然对单片机很感兴趣,就找了一本 8051 的书在看。恰好被他看到了,他就告诉我,他现在就是做这个的,一周后还送了我一个AVR 的开发版及一系列的玩单片机的电子器件。我从来没有意识到我叔叔在写单片机程序,所以当我听他说这些的时候,惊讶得眼睛瞪得比灯泡还大,好像是突然发现了新大陆。我一直对和硬件打交道有一种畏惧感,并且体验过 Linux 设备驱动编程,知道这些和硬件打交道的地方需要极度的耐心和细心。在这些底层编程上,C 我都觉得不顺当,更不要说单片机上的汇编了。在资源受限的系统上做出工业强度的产品,已经远远超过我能力范围了。而我叔叔,在没有任何科班训练的背景下,完全半路出家,全靠自学,一个人用几年时间,就把这条路走通了。他现在写的汇编程序,运行在千家万户的水表中,可以说完全是坐冷板凳积累出来的硬功夫。可以想象,他当时给我的震撼是巨大的。我一度怀疑自己的自学能力,觉得有些事情,我永远没法做到,就像童年想做的柴油机一样,只是幻想。而我叔叔,在这时候,给了我一剂强心针。
受获鼎和我叔叔这样两个踏实勤奋的人的影响,我一改以前轻浮的习惯。在大二下学期,我给自己定了三个简单的要求:a. 更加多看书,看好书,并且一定一定要做笔记;b. 多编程,多积累;c. 不怕困难,开始背 GRE 单词。就这样,我就开始了疯狂学习的大三。
大三:深度迷茫,深入积累
大三是我看书最多、思考最多、积累最多的时候。大三我主要是沉稳冷静地做事情,用不断地做事情、看书和思考,压抑心底深处的对前途的迷茫。其实整个大三,我都不知道自己要干什么、能干什么,只知道像一个运动员一样一直往前奔。早在大二的时候,我们班很多同学就开始准备 GRE 了,我也就跟风准备 GRE,在大三的时候花了很多时间在背单词上。说实话,当时我捧起红宝书的时候,出国的动机并不强烈。那时候我并没有对美国和中国在各方面的差距有清晰的认识,且过于小看环境对人的影响。潜意识中,我想读计算机的研究生,考研可比出国转读计算机专业要简单多了,学长也告诉我,申请计算机专业很难,我们数学系也鲜有先例。因为正方面没有很强的激励,反方面又觉得困难重重,我就不太把出国当回事,除了背背单词,主要的精力都放在了读计算机书上。我专门扫荡 TP312(计算机理论和编程)那个分类,同时看了很多英文原版书。TP312 中的大部分书,我都是囫囵吞枣地看,做一些总结性的笔记,只有少数几本,如《计算机程序设计艺术》、《编程珠玑》,是认认真真看的。这时候的我已经没有时间,或者说耐不下性子一条一条做题了,只能浏览一些题。即使这样浏览,也让我在后来大四的工作面试中占了很多优势。
我喜欢记笔记,很注意整理自己的既得知识
我有一个从高中就开始的习惯,就是把每天胡思乱想的东西记在一个笔记本上,算是思维快照。我还常常翻回去自省,看看过去和现在的变化。大一大二的时候,这本笔记本上记载着的是和生活和感情有关的琐碎小事,或者宏大空泛的目标和叙事。而大三时记录的内容明显具体起来,比如这周看完了什么书、下周去图书馆借什么书等。但当时我写下的这些计划之间,是没有很具体的头绪的。在这些要做的事情后面,并没有一个明确的线索串起来,而是像无头苍蝇一样到处尝试、到处碰壁。举例来说,我的笔记本里清楚地记下某周要看操作系统,可是那周还没看完操作系统的时候,又记下本周不看操作系统了,看编译原理。就这样,好似饥饿的狗熊在掰玉米棒子,看上去很勤奋地在掰,掰下来,啃两口,扔掉。当时我能感觉到一种永远存在的知识饥饿感,一种永远填不满的饥饿感。不过,我又总觉得前方应该有那么一个终极玉米棒子,能够最终填满自己的饥饿感,所以,我就一直向前奔跑。其实这种奔跑,不管多勤奋、多刻苦,因为不够踏实、深入,永远都是事倍功半的。好在我在不求甚解的同时,很注意整理自己的既得知识,写在小本子上。后来我到大四的时候,写论文也好,考研、找工作也罢,很多知识我都是临时突击的——好在有这么一本小本子,我可以按图索骥地去深入强化当时如无头苍蝇般乱看的一些书。如果用搜索引擎的工作原理打一个比方,我觉得我大三疯狂地读书和学习,就好比是在建索引,等大四要搜索结果的时候,就再也不需要每本书全文检索了,直接按照本子上的索引找到当时看的书。
踏实和勤奋这两个从我叔叔和获鼎身上借来的优秀品质,加上取之不尽的TP312书架和背不完的单词,使我没有再一次被深度迷茫拉入自信和自卑的反复中,相反,随着这些积累越来越多,我变得越来越自信了,虽然这种对积累的自信尚未被现实验证过。
大四:书到用时,无心插柳
大三的迷茫让我不确定以后的方向,未被现实验证的自信又让我蠢蠢欲动,所以,我就自然地产生了“赌一把”的心态。如果以赌博为喻,我就是在所有的盘口上都了下注,要不全输光,要不总能赚,而我相信至少能赢一盘。
所以,大四甫一开始,我就拟了一个时间表,自信满满地想要在考研、找工作和出国的三条战线上都有所突破。我设想11月之前弄完出国材料,并且把简历弄漂亮,顺带找工作;1月前寄材料,套磁,准备考研,4月前搞定一切,等Offer;5~6 月我就写写毕业论文,然后周游中国了,等我周游回来,至少三个机会让我碰到一个吧,我就从了那个就行了。从这个狂妄的计划中可以看到当时的我的自信,不过我这个自信倒是有一定根据的,因为我研究了考研的模拟题和找工作的不少案例,我当时想,好好准备,应该可以上南大的研究生,工作应该可以进腾讯,出国我倒没什么底,所以我也想用前面两个来保底。
大四我们搬到了鼓楼校区,课表上又只有一门课,所以我就在鼓楼这个新环境里乱跑、乱逛。学校有国际会议,我就跑去和老外搭讪;鼓楼有关于佛教的演讲,我也跑去听;IT 公司的宣讲会和笔试,遇到好的我也去参加参加。如果没事,我就上自习,继续读鼓楼图书馆的书。就这样,我遇到了一个又一个的机会,基本上不管成功失败,都算是有付出就有回报,当然运气成分也不少。
面试题怎么都那么熟悉
10月左右,微软(MSN)来我们学校面试。这是我第一次面试,很紧张,前一天看书看到1点多,第二天午觉就睡过了13点,加上箱子里唯一的一件衬衫皱巴巴的完全不能穿,所以干脆就穿着拖鞋和 T 恤冲去了。面试的人很友好,面试也很顺利,有的同学还在等第二轮的时候,我的四轮就结束了。我当时的感觉是,微软的面试题太简单了,除了问我南京市新街口周边有多少辆车外,其他题目都是中规中矩的计算机面试题。面试出来之后,我和一个软院的同学在食堂讨论题,他说:“题怎么这么难啊?” 我就很奇怪,说:“这些题《编程珠玑》上不都有的么?” 后来我才知道,其实看过《编程珠玑》的人,不是我想象的那么多,而我也是在书架上乱翻才偶然看到《编程珠玑》。在2005年的时候,没有Web 2.0 和社会化推荐,我的世界,就只有面前的书架那么大,我幸运地在那么大的书架上遇到了几本经典书,并且细读了,吸收了。
很快,微软给了我一个在上海做测试的职位。当时我一心要去北京,就没要这个Offer。不过有了这一轮,我也知道面试怎么回事了,这次面试,更加强化了我的自信,于是我又开始比较狂妄了,觉得自己能进当时互联网中最热的、宣称招 50 个李开复博士的关门弟子的公司—— Google 中国。
利用比较优势选择考研目标
找工作还没完全展开的时候,我就准备考研报名了。我选择了北大生物系的生物信息学专业。其实这是一个让我可以到北京的小聪明,而不是一个全面慎重思考的结果。当时我看到,这个专业只招两个人,而且试题是和计算机系一样,于是我想,除了我这样的一门心思想去北京的,哪个人会绕这么大一个弯子去学生物而不去学计算机呢?其实我自己也不敢挑战计算机系,因为我知道难度太大了,但是我又很想到北京去,就想了这个暗度陈仓的办法。我当时还想,考上了,要是不爽,读一年俺就退学找工作。2005 年末的大环境和现在是不一样的,那时候Web 2.0的呼声很高,让我觉得创业比读研有前途多了。不管怎样,我自认为很小聪明,就报名了,当然考完才知道,就为了这两个名额,有40多个人来考。
我要感谢当时同系的两个同学苗文建和王琨,他们都是准备考北大计算机系的,即和我考同样的试卷。他们资料很全,我就和他们一起上自习,蹭他们的看。大四我买书花钱很多,到了考研这时候真是舍不得花七八十块钱买自己看不上的辅导材料和教材,所以就借他们的看。那时候考研的教材是北大的“操作系统”和“离散数学”教材。其中操作系统的教材,行家都知道这本教材参考了不少 Tanenbaum 的作品,我也看过就不大愿意再买一本。前面我提到过,我大一大二做过一本离散数学教材上所有的习题,所以离散数学根本不需要花太多精力。至于政治,我是经历过 3+X 高考的人。基本上考过政治的人都知道,政治考好考差和复习不复习无关,至于和什么有关我就不在这里多说了,总之这个东西并没有深奥的学问,就只是那么几句话车轱辘话翻来倒去而已,命题套路也很容易掌握。做到比命题者更加聪明,对于受过大学教育的考生,是件很简单的事情。我最后考研成绩还不错,撞大运考了个专业总分第一,其中数学完全是离散数学的功底,考了136;英语也是靠准备 GRE 托福的底子,考了差不多80;政治也差不多80;专业课运气很好,正好90分搭线。于是就这样糊里糊涂地考上了。
考研这个事情,我至今觉得运气远大于真正的付出,结果也非常出乎我的预料。记得结果刚出来,同学帮我查分的时候,我根本不相信自己考这么好,还放话说如果考这么好,请全宿舍吃饭(我记得当时兜里面只有200块钱,根本没法请人吃饭,后来还是借钱请客的)。考研结果出来之后,迷茫的我得到了一个非常好的保底,我就比较得陇望蜀了。其实在当时我的心里,我并没有认真想过以后要具体干什么,只是隐隐约约觉得要不去北京,要不就去美国。有了北大这个机会,我就调高了自己的心理标杆,定下了两个大的具体目标,或者说是圣杯,一个是进 Google 中国,一个是到美国名校读计算机,有了考研这个保底,在2月份过完年,我就不慌不忙地认真准备这两件事情了。
面试题怎么还是那么熟悉
我10月份的时候给 Google 投了一份简历,很快在11月份就被拒了。而我的搭档李获鼎在签了 IBM Offer 的第二天,却收到了 Google 的面试邀请(我相信凭他的实力,如果晚一天签 IBM,他现在也应该在 Google 了)。我听了之后觉得很奇怪,按说我们两个,做的项目是一样的,学的科目也一样的,写的简历互相也看过,背景也都差不多,我被拒了,他被邀请去面试了,我隐隐觉得有什么地方不对。我的不服气,反应在行动上,就是每天上网看 Google 中国最近又招了几个人、怎么招的。那时候互联网上盛传的故事是一个人给李开复用很多不同的邮箱发邮件,以保证简历能够万无一失到达,结果瞬间被录用了。这个故事的内容和合理性放在一边,我对故事主人公的精神很感兴趣。我觉得我也可以再试试,说不定坚持就是胜利。正好那个时候,Google 的一些副总裁到北大有个宣讲活动,说好了现场接收简历的。我从当时在北大的女友那里得到了这个消息,回来把简历梳理了一下,让她帮忙打出来,又交了一次。这一次,简历直接交给了某个副总裁,成功了!几周后,Google 中国的 HR 就给我打电话,安排机票和宾馆,让我去北京面试。
面试的过程其实平淡无奇,题目不是《编程珠玑》上的,就是《计算机程序设计艺术》上的,再不然就是网上贴出来的。我个人感觉,面试题就那么多,多做做基本上就了然于胸了。我从找工作一开始,就做了个有心人,每天都上网看面试题。 这次面试前,我又把《编程珠玑》这些书复习了一遍。同时我知道自己在面向对象编程方面很欠缺,又看到有面试过的人说面向对象也考,就顺带看了《设计模式》。我还比较有心,花了几个晚上,捣鼓了一个移植于 Mac 的、基于 MVC 的可以当场演示的 Java 小游戏,面试当天我还给面试官演示了这个小游戏的架构和用到的设计模式,这样,我感觉,自己面向对象开发方面的弱点就让这个小游戏的演示给弥补了,面试官也一致说好玩。
很快,四轮面试结束后,HR带我去见李开复博士。李开复博士是个风趣的,或者说很善于观察人的人。他见到我的第一句话竟然是半调侃的“小伙子,我们 Google 不能解决北京户口啊”,我承认当时的确穿得很民工,因为网上说Google 是个很随意的公司,我是继续以凉鞋装备和鸟巢一样的头发去面试的,但是我还真的不是为了北京户口才去 Google 面试的。我之前也做了一些功课,了解了一些李开复博士早年做的工作,所以谈话进行得很顺利。说了一会儿后,我就抛出了为什么 Google 拒我一次又让我再面试这个问题,他说这事情还很罕见,要是我再网申,基本上简历是不可能浮出水面的, 因为数据库里面已经有标记了,不过我这样二进宫算是精神可嘉。这时候我才回忆起面试的一个MM手上拿的简历,的确是我第二次提交书面简历的复印件,而不是网申的打印版,可见还是坚持再投一次好(这个坚持,我也是和搭档李获鼎学到的,IBM 二面就有拒他的意思,他要求面试官再给一次终面的机会,结果他的终面刚结束,面试官就和他握手恭喜他加入 IBM 了,所以面试这个事情,坚持到最后的才是胜利者)。当天和李开复谈完出来,HR 冲我笑笑,握握手,说,就你和他谈的时间最长。我基本上知道,这个事情成了。
误打误撞,选择了出国深造
在找工作的同时,我出国的事情也没闲。我觉得直接靠寄材料申请计算机希望渺茫(我先前直接申请了几家数学和计算机,都是拒信飞飞),所以我就押宝在套磁上。在寒假之前,我就觉要写篇有点质量的论文发表一下,才能让申请材料有分量,否则招生的未必看得上我这个数学系的、没有任何计算机背景、成绩又不特别顶尖的学生。于是,我就回忆以前乱读的一些论文集和书,再找看有没有最新的值得跟的工作。就这样不着边际地乱找,还真的就碰到了一个感兴趣的题目、一个不大成熟的想法和一个正在征稿的会议。于是,我迅速地开工。凭着数学功底、编程功底和 LaTeX 熟练程度,几天就完成了文章主要结果和写作,然后就是写程序、做实验,并且不断地改很烂的英语写作。我的运气很好,选择的题目也不是很难,所以七天之后,我压着截至时间前几分钟,把文章提交了。2005 年的 LNCS 还是被 SCI-E 索引的,所以我觉得这篇论文分量还可以,更新了自己的简历,一边准备考研,一边开始和美国的教授套磁。
我现在的导师 Yixin Chen 是一个非常杰出的年轻教授(科大少年班出身),我和他套磁的时候,他刚刚从事教职,因此很需要学生。我之前给他发了几封信,有过短暂的接触。到了4月15日美国大学招生的截止日期前几天的时候,他的另一个原来录取的学生因为某些原因去不了了。因此,当时他就联系我了,告诉我说,我可以过来美国读书,做他的 Research Assistant。那时候我还在等 Google 中国的 Offer。Dr. Chen 就对我说:“拿 Google 的 Offer 不难,我也拿过。 你读了书以后也可以拿美国 Google 的 Offer ,但来美国读书的机会就这么一次。”那时候我想问题并没有现在这么深刻,加上比较想去北京,因此一直犹豫不决,还在催 Google 的 HR 快发 Offer,心想你们哪个 Offer 先到我就从了哪个算了。我父亲、我叔叔都不含糊,一个一个地轮番教育我,加上我导师后来说了上面这番话,我就不再犹豫,承诺他我一定接受这个 Offer。接着,我告诉了 Google 的 HR,说我不去了。就这样,我所有的自己认真谋划、认真准备的路都没有走,反而最后通过误打误撞和套磁,来到了美国。
结语:非没用,兔子洞
总的来说,面试也好,考研也好,写论文写好,之所以能够比较顺利,我觉得都是大一大二一个键一个键敲出来的,也是大三一本书一本书读出来的。我写这篇文章的时候,把相关的前因后果放到了一起,是为了解释有些事情的前因后果。不过我不想给读者一个误解,即我恰好运气特别好,一路直行没有任何弯路。相反,我觉得我走了不少弯路,但是我很高兴走这些弯路。比如说,我上大学的时候,很多精力花在了做数论题上,《现代数论经典引论》这本书的习题我差不多一题一题都做完了,但是我出国申请学习数论没拿到中意的 Offer, 现在也不从事相关的研究,所以这些积累至今没看到有什么直接的作用;我一度认为自己要做一个电子工程师,我大一大二还旁听了电子系的模拟电路、数字电路,还混到电子系实验室学 ARM 开发板, 但是现在这些除了吹牛外也没什么作用,学到的一点皮毛也还给老师了。我是个兴趣很广泛的人,看过的杂书、做过的笔记,最后有用的,我觉得有十分之一就已经很好了。大学的时候,为了让自己精力不耗散, 我限定自己每次借书,一定要保证四本计算机/数学,外带一本社科人文书,还有一本任意的书,而且那四本一定要做笔记精读。 因为这样,我才能够最终没把有限的人生耗费在无限的浅尝辄止上。
即便这样,如果纯按照现在需要的知识看,我在“没用”的东西上浪费的时间还是很多。不过我倒不愿意称这些为浪费,在我看来,成长路径中有很多的偶然,没人知道在一些关键时候需要什么样的知识储备,所以踏实地多储备一些是好事。我在大四的经历和其他的一些经历都告诉我,以前通过看书、自学,彻底地弄懂的一样知识,会在某个不经意的时候,突然被用到。这时候对当年积累的庆幸和再发现的快乐,就像蓦然回首见到灯火阑珊处的秋水伊人一样,是没法用文字描绘的。另外,我有个切身的教训,就是要踏实地积累。我读书涉猎很广,很多东西我都能大概知道怎么回事,但是就是学得不深刻,所以即使当时花了很多力气,需要的时候还要花大功夫重头捡起。所以我的教训就是,与其两个半瓶水,不如一个满瓶水。这个道理用在读书上就是说,一本好书读两次要胜过两本好书各读一次。要是大学能重新来过一次,我会少读一些书,多读透一些书,这可能是我觉得当年猛读书的唯一遗憾。
小时候我嗜书如命,我爸爸老是担心我会成为一个不懂人事的书呆子。大学中的我,几乎天天泡在图书馆,可以说是个不折不扣的书呆子。其实除了读书外,我的大学生活的其他方面也是很快乐的。我有玩得非常好的同学们;靠着帅哥室友们的魅力,我还常常和他们一起,和联谊寝室那些青春活泼的姑娘们打球、打牌。我还谈了一次恋爱,让我对感情的事情有了深刻的认识。这些事情,交替地穿插在我这个书呆子平淡无华的大学四年中,让我的大学生活如此美好,但这些细碎的星星点点的人生经历,都不足为外人道了。
我的大学四年,一头扑入了读书中, 就像掉入了兔子洞的爱丽丝。在读书这个兔子洞里,那些经历的迷茫、挫折和奇遇,都是上大学之前的我不曾想象的!我不算一个合格的学生,我忘了不少任课老师,忘了我的学号,忘了班上不少美丽的女同学的样子,却没有忘记某个夏天的中午,汗流浃背的我冲进图书馆,跳入一阵凉爽的书香;以及某个春天,我在草坪上读书入了迷,喷水龙头把我后背全打湿了还浑然不觉。这就是我对兔子洞的最美好的记忆。