在 GT(上)

有些故事,从开头看不到结局,只是可以猜测中间会有怎样的剧情。正是这结果的不确定性,让整个过程变得如此令人着迷、痴狂。

来亚村整整四个月了,这四个月的经历可谓非同寻常。我本想每日连载,留下每一天的欣喜、感动、焦虑和自责。可因为种种原因,我丢掉了写日记的习惯,任由时光的身影一点点模糊,直到消失不见。不过学期回顾的传统是不能丢掉的,于是就有了这一篇。


与 GT 最早的相识还是 Y 的功劳。大一那年她在明信片里半开玩笑的说,读研就来 GT 吧,我在亚村等你。正巧那时有个团会,要向班上的同学介绍一所外国大学。既然这张明信片是我仅有的装逼的资本,GT 也就毫无疑问成为了我介绍的那所大学。命运是个严肃的女神,她不会跟你开玩笑。四年之后,我真的来了亚村,而 Y 也还在这里没走。刚踏出国门就有一个司机兼鼓励师,运气真是没有差到哪儿去。

无论是岛国淳朴的民风,全日空的哈根达斯,还是室友一大早端上来的一碗热腾腾的方便面,都极大地减轻了我倒时差的痛苦。刚来的那几天,盘旋在头脑中的无非是两件事:选课和去超市。去超市自然是跟紧班车,在迷宫般的沃尔玛里旋转,想好一只手几个袋子把东西盘回来。而选课更像是个人品问题。那时我一心想要拿一个 CS 的 minor, 结果不慎入了 Graphics 这个坑,后续让我填得好心酸。

不出两个礼拜,生活日渐走入正轨。学校里的中国人很多,还有 panda 这种土不土洋不洋的快餐,没让我落上 home sick. 不过好景不长,GT 的学业压力日渐开始显现。俺们作为准公立学校,搞的不完全是资本主义的那套制度。政府拿纳税人的钱办大学,是为了建设 XX 主义美利坚服务的。为了能多快好省地建设 XX 主义美利坚,本校可不想看到你们游手好闲不思进取的一面。怎么能鼓足大家的干劲呢?于是就制定了国际学生一个学期最低修 12 学分这种奇葩制度,早一日毕业早一日把坑让出来,给其他人一个机会。


死不了就还好

HPCA / Computer Architecture / Arch 算是我 ECE 院大名鼎鼎的神课了。课程定位高端,从本科的 50k 个晶体管的 CPU 讲起,逐步提及 1b 个晶体管的 CPU 面临的挑战和解决这些问题的方法。它的课程大纲和第一个 project 让我印象极为深刻。课程大纲上写着:如果你对看 10w 行代码并修改其中的 100 行感兴趣,甚至感到兴奋,那就一起来吧。说真的,我那时是有那么一点点兴奋。第一个 project 有道题,说printf一个字符串,在字符串的末尾增加一个字符,CPU 执行的指令数可能会增加、减少或是不变,请问为什么。当时我真的去网上查了 glibc 的源码,像剥洋葱一样一层层解构调用关系,渴望找到什么蛛丝马迹。我看着代码,看到眼睛都肿了。最后我崩溃了,因为实在是找不到那一行!

前面这只是新课开讲的一把火,真正的陷阱还在后面。首先,上课地点在远离校园核心区的十街,这里刑事案件频发不说,每个课间我都要玩命地奔向下个教室。其次,上课时间是一点半,这是我白天神经最衰弱的时候。再加上这教授讲课激情澎湃,自带 YouTube 1.5 倍加速,我的大脑时常因为音频缓冲区溢出而直接宕机。另外,后续的几个 project 的内容都是在一个软件包的代码基础之上修修补补,而那个软件显然是一两个 PhD 在老板的狠心压榨下草草码出来的,不仅代码结构复杂,思路混乱,而且还有一些错误。所以说,

什么!我们的 project 就是帮别人 debug?!

知道真相的我内心是崩溃的。后果是显而易见的,这课原本是有几个中国人的,过了期中之后几乎就只剩下我和 T 相依为命,后排完全沦为三哥三姐的地盘。

Arch 的考试很有意思。所有的考试都是在线进行的,想几点考都行。第一次考试,我觉得很新奇,在想咱要不玩个花样出来,于是考试在凌晨一点开始了…… 当时大脑不太灵活,犯了些弱智错误,死得比较惨。第二场考试不作死了,可后来为什么还是死了?直到考前答疑才知道,原来是 TA 判错了…… 考前答疑的时候,我跟教授说,我并没有以前考试的答案,根本不知道怎么错的,你就好心把答案告诉我吧。不知老师为何来了一句:“我想想怎么能做到这一点而又不暴露太多。”原来每一道题有四五个版本,每个版本的答案都不一样,试卷是系统随机生成的,无法公布一个统一的答案。

其实,直到 final 那天,我才真正理解“而又不暴露太多”是什么意思。题库的数量是有限的,以前考过的题还会再出现,暴露了太多,学生就知道答案了。可惜,人算不如天算,考试系统有个 bug, 导致 final 中出现的题目一定是以前考过的相同版本的题目,而不会是同一道题的另一个版本。[1] 那还有什么好说的,直接抄啊!于是这门神课就莫名其妙地成为了本学期最愉快的一个 final. (不只是因为这个,具体原因不表。)

我还是很喜欢这个教授的。他经常像猴子一样,为了指幻灯片的内容在讲台周围上蹿下跳(我知道他买不起激光笔),偶尔会一脚踏空,偶尔会讲几句笑话。他每次讲到 MESI (妈嘻), MOSI (摩嘻) 和 MOESI (摩忆嘻) [2] 的时候,我都会笑场!如果你问我说,上完这门课我最大的体会是什么,我想说:“要是没有 Udacity 的视频劳资早就死了一千次了。”如果你追问,我最大的收获是什么,我会说:“从此之后 YouTube 大部分视频开 1.5 倍速无压力,就是这么任性!”

五星推荐,请认准 Milos Prvulovic, 珍爱生命,不要去上阿三的那个版本。


[1] 可能是因为题目的版本是由“学号取模”算出来的,而不是由一个随机数决定的。

[2] MESI, MOSI 和 MOESI 是三种计算机系统用于保持缓存一致性的协议。


大腿是何等重要

Computer Graphics 是我这学期殚心竭虑好不容易选上的一门 CS, 然而不幸(或是万幸)遇到了一个奇葩教授,搞得我整个学期不得安宁。这教授是个法国人,头脑发达,点子极多,毕业之后去 IBM Research 干了几年,后来被 GT 挖来建实验室。课程大纲说课堂参与占 20% 的成绩,可能大多数人的理解都是积极回答问题吧。老师也会很认真地问每个人的名字,这样搞得大家就更积极了。于是一节课下来,他们说了个不停,我抄笔记抄到手抽筋。不过事情很快发生了变化,到了第二个月,就几乎没人回答问题了。想都不用想,肯定是没人听得懂老师在讲什么——老师在讲自己的论文呢!后来我才知道,很多人选这个课,是因为他们对图形学是真爱啊,早就想好了要拍电影、设计游戏、在虚拟现实领域创业施展抱负。而我呢,零基础,过来只是想混个学分,发现形势不对想溜,又被 12 学分的限制卡死,动弹不得,这下 SB 了。

这课做的第一个 project 是模拟一堆小球的碰撞。我被分配到了一个三哥队友。那个三哥看上去很唬的样子,来自大名鼎鼎的 IIT, 来美帝读第二个硕士,明显是去硅谷找工作然后移民然后成为人生赢家的套路。第一次和三哥打电话,我的听力收到了极大的摧残,但我还是尽力理解了他的意思:你这个简单粗暴的算法不给力,看我的 divide and conquer, 跑 XX 个球无压力。我跟他说,我这个好写,我自己先写出来,等你那个算法写出来了再上你的。我真是无比的机智啊,因为我终于没有等到他的算法真正写出来的那天。

Talk is cheap. Show me your code.

呵呵。听 ETS 说中国托福考生的平均成绩是 78, 阿三是 93, 语言上的优势非常明显。再加上三哥三姐又爱社交和抱团,搞得中国人都没有太多活路了。然而,我的经验一再表明,遇到阿三不要怕,他们看起来很 NB, 实际上很可能只是纸老虎,虽然,纸老虎也是会抢食的。

后来的 project 我随到了一个美国 PhD. 那个 PhD 很友善,我们也在分工上达成了某种默契,一般都是我给公式他给渲染。先后有两个 project 都很不好做,整个周末的时间搭进去却没有收获,到了提交前一两个小时还在排查问题出在哪里。不过美国哥很聪明,能把界面画得很漂亮,动画演示如同开了特效一样,report 里面也能把我们遇到的问题和已经采取的措施一五一十地讲清楚。于是我就跟着沾光,用两个没完成的 project 混了两个满分回来。后来因为有人抄其他组的代码,被 TA 发现了,老师很生气,把 final project 改成个人独立完成。我之前一直是写公式的,并不了解如何用 Java (Processing) 把这些图形画出来,所以听到这个消息就蒙逼了。感恩节假期的后三天,我老老实实窝在家里,才算是搞清楚了一个大概。然而美国哥怎么开的特效,就永远成为了一个谜。

Graphics 没有 final, 但是有个极为变态的 midterm. 老师发卷子的那天说,这套题是他自己现场想出来的,并没有人做过,所以他也不知道难度是否合适。这一席话,就是满分 70 平均分 20 的铺垫。既然已经过了期末,我还是站出来承认吧,那个全班最高的 46 分确实是我考的。能在大神如云的 GT 刷出第一,是一件无比幸运的事。这是因为,在 EE 那边我的强项是写代码,数学就像渣一样,傅立叶变换都不会求。到了 CS, 我的代码完全没法和各位高手过招,但数学倒成了优势,于是在那份主要考察数学功底的 midterm 上占了不少便宜。很可惜没能数学代码两手抓,两手都要硬。要真能做到这个,现在就不愁找工作了。


节操是如何沦陷的

Random Process 是一门数学课。当时我是冲着课程大纲上的 Markov 去的,心想上了这门课,就可以搞清楚这个满世界都在用的模型是个什么鬼了。然而因为课程进度太慢,整个 Markov 都被无情砍掉了,我的愿望也最终化为泡影。可是回过头来,我又庆幸他没有讲 Markov, 因为光是现在这些内容就已经把我折腾得死去活来了。

来 GT 之前,学姐跟我们说,快来选 Random, 课程简单给分高。

简直就是躺 A 的节奏。

一开始我还是相信的,因为一开始在讲概率,概率谁不会啊。那时候我的作业可都是好好做的,知道有答案也不看(拒绝诱惑)。以至于有个同学问我答案是不是错了,我只能呵呵道,不晓得啦。然而,好日子没过多久,我就发现:

没有答案我一道题都做不出来了!是每个题都要看了答案才会做啊!这还不算,有些题看了答案也不会啊!有的答案一开始就是从公式 (X-XXX) 可得…… 我回去翻公式 (X-XXX), 看看这个公式是怎么来的啊?是作者写了一个表达式推了十几步推出来的啊!答案第一句话这么写,让我的作业的怎么写?我是先把这个公式是如何得到的推一遍,还是干脆直接写上从公式 (X-XXX) 可得啊?一开始我还是有节操的,假装没有抄答案。然而写着写着就心烦了,节操就一点点沦陷了……

啊不,这个时候节操还没有彻底的沦陷。我还不是一部复印机,我还是想要搞清楚这个答案是怎么得来的。可是有的题,已经到了答案都看不懂的地步了,这让我怎么办?我的对策大抵分成两条,如果是计算题,会哪一步写到哪一步;如果是证明题,就只好骗证了。

按理说课程是如此的艰难,学姐不是把我们往火坑里推么?其实不然。“课程简单给分高”这七个字里,有四个字是不对的,但有三个字是对的,这三个字才是我们真正关心的。三次 quiz 取两次最好成绩,因为第一次出简单了,导致第二次出难了,再导致第三次出简单了,最后导致大家的平时成绩都无压力。再加上判分标准本身就严重放水,像数学这么注重结果的学科,结果错了只扣一分,如此有良心无节操的评分我也是醉了。


只有偏执狂才能生存

幸好本学期选了 Computer Network 这门大水课,不然我早就完蛋了。

虽然这门课的教授人非常好,但我还是忍不住要说两句,假公济私不是什么好事儿啊!这个课要做一个大 project, 可以选择读 paper 或是 hands-on. 我最烦读 paper 了,看着看着就会睡着,于是趁着组员没有 perference 的时候选了 hands-on. 老师给这个项目安了一个特别大的背景,叫物联网(捂脸)。实际呢,则是给一些天气的数据,分析数据间的相关关系。反正和 Computer Network 没有一毛钱关系就对了。物不物联这事儿我不关心,我喜欢的是数据分析,这是我的菜啊。当年在北理工学什么电力电子、运动控制系统,简直是神烦,偶尔看看 data (不是dota) 和 ML (不是动作片),会有眼前一亮的感觉。如今既然有项目可以做,为何不尝试一下呢。我在头脑中 YY 出了一个比较大的局,要做啥啥功能上去,结果是怎样怎样的。可惜后来因为种种原因,全都没实现,就当是开个脑洞罢了。

既然是我布的局,那就应该身先士卒,首先承担起核心的任务。这个时候,我偏执的毛病就犯了。搞 EE 的,大家普遍比较熟悉的语言是 MATLAB, 或许有些人 Python 也不错,而我就是认为这两门语言逼格不够高。既然是数据分析,不用 R 怎么能行呢?显然这个组里会用 R 的就我一个,那所有代码都得我写咯?啊哈,就这么爽快的答应了。其次,搞 EE 的(又来),如果不是太偏软件,应该不会用到 git 这种东西。然而我又忽悠大家说 git 协作怎么怎么好,dropbox 弱爆了什么的。最后的效果是,骗他们每个人都注册了一个 GitHub 账号。但是因为真的没有几个人会用,所以就不了了之了。幸好咱们不用交 report, 不然我又要忽悠他们用 git + LaTeX 写文档。若到了这一步那些用 google docs 的人真的会和我撕逼的!

这门课值得一提的是它的考核方式,水到节操不要不要的。首先它没有 final, presentation 这种东西又没有人听,讲成啥样都无所谓。另外,两次测验都是开卷。开卷的意思是说,可以带书和笔记,可以看电脑上的资料,只是不让 google 和用 QQ 传答案。一百人的教室,只有 TA 一个人监考,几乎每个人都开着电脑,根本没法检查大家有没有遵守考试纪律。所以说事实上这些考试都是无人监考的!第二场考试,我特地挑了最后排一个居高临下的位置,偶尔瞄一眼有没有偷偷上网的,最后也没有抓到。这就是美帝比天朝更胜一筹的地方。从这个事实出发,我倒是能理解 D 爷的观点了。D 爷表示,“中国没有大学”。这是因为中国的确没有一所大学敢认为自己的学生在无人监考的情况下不会作弊。至于为什么,在罗永浩的录音《谈犬儒主义与理想主义》里面已经说过了,此处不再详述。


蹭饭大作战

研究生的生活方式是多样的。PhD 们天天围着小老板转,偶尔能忙里偷个闲,到附近的山庄走走。Master 的命则是由选课决定了大半,剩下的一小半大抵也是汽车和情侣决定的,总之自己能做主的只有 1% 便是了。为了用好这 1%,我打算多出去转转,就算啥都捞不到,至少能练练口语吧。于是我加入了校友会 (SAA) 这个神一样的组织,参加了几个神一样的活动。

SAA 最著名的活动就是“校友一帮一”。他们会给每个学生安排一个校友,保持固定的联络。我听说有人手气极佳,上手选到了 XX vice president. 我这里就比较惨了,选到了一个与我共患难的校友——她现在正和我一样在找工作。其实这么形容她有些过分贬低她的价值了。她先前是做系统性能测试的,在一家大公司做到了中层管理,后来苦于繁琐的行政事务,毅然辞职,上了一所 hacking school, 打算以女码农的身份重新杀回业界。老美就是任性,宁可失业,也不做不喜欢的工作,哪怕它地位又高报酬好。我心中对她的敬意油然而生,佩服她是条好汉(笑 cry)。

既然是同行,又同在找工作,我们之间自然有很多话题。等从技术聊到生活的时候,她说他丈夫是个中国人,我的第一反应是:

这是一枚怎样的高富帅!

感恩节前夕,有幸和他们夫妻二人在一家馆子吃了正经的中国菜。丈夫从宝马车下来的时候,我就感受到了逼人的帅气。听他说,他爸妈都是北京人,他高中的时候离开北京,远赴欧洲读了国际学校(那时是九十年代),之后来 GT 先后读了本科和硕士,现在从事着他妻子以前的工作:系统测试。在那家中国餐厅,周围的人都在说中文,但因为她“中文学得很艰辛”,我们一直是拿英文聊的,感觉有些另类。不过,话题倒是很有意思。比如我听说他也擅长玩 Civilization, 而且和我这种搞外交胜利的温和派不同,他是个战争狂人。他们家里貌似有两台游戏机,每个人各玩各的,这日子过得也是滋润。

游戏各玩各的并没有什么不妥,但老美的平等观念远远超出了这个。买单的时候,他们两个人一人拿一张卡,每个人付一半的钱。丈夫开一辆宝马五系,妻子开一辆大众,显得有些违和。总而言之,我真的很难相信这是一家人。女权运动在美帝发展到高级阶段了,对我的直观冲击还是不小的。


期中前后,我又接连去了 Speed Networking 和 Dinner Jacket 两个活动。Speed Networking 很有意思,基本上参照了国内闪电相亲的模式,让学生快速认识校友。下面简单介绍闪电相亲的游戏规则,让你们感受一下 Speed Networking 的魅力。

  1. 每桌坐 12 人,六男六女,每个人与两个异性相邻。
  2. 下达开始口令后,每个男生与其右侧的女生交谈,时间为十分钟。
  3. 时间结束前三十秒有鸣笛,示意双方交换手机和微信号。
  4. 时间结束后,所有男生起立,顺时针移动到下一个位置,开始下一轮。
  5. 六轮全部结束之后,是自由交流时间,之后想干啥就没人管了。

那天也是碰巧了,一桌校友里面竟然有两个竞争对手,真是冤家路窄。他们分别属于两家猎头公司,一个是 founder, 一个是 manager, 在业务上直接竞争。经过这么一圈下来,我对人力资源有了不少了解。然而认识了猎头公司的老板并没有什么卵用,他们是挖高端人才的,又不会帮学生找工作。

与 Speed Networking 相比,Dinner Jacket 更为随意,就是找一家餐厅和几个校友吃饭。晚餐这种非正式社交场合,对礼节和技巧的要求很高,此时我的语言短板暴露得一览无余。餐馆噪音不小,每个人之间坐的距离又有些远,费了半天劲才能搞懂他们在讲什么。有时候发现他们在聊体育或是美剧,我只能点头微笑,假装听懂了。有时候发现他们在聊旅游,好不容易想插个嘴,尼玛他们说的那个地名我又不认识……

我选择狗带。

等了差不多一个小时,各位的菜肴才上齐,我们慢腾腾地开始吃。吃完了又陪着他们坐了一个小时才逃了出来。这种练 boss 的竞技场下次真的不敢再来了。


同样还是去蹭饭,感恩节晚上去校友家里吃,就是一番完全不同的体验。这一家人除了小儿子叛逃到 Emory 之外,剩下的都是正宗 GT 血统。晚餐前,在地下活动室小憩,我看到了他们对母校的一片热爱。除了少数几件陈设,例如加州某选区参议员的证书,在德州某地开发油田的纪念之外,大多数的物品都和 GT 有关。我看到了 1990 年 GT 橄榄球获得全国总冠军的照片,看到了学校的旗帜、奖杯和地毯,可以办一个小型的展览了。

感恩节的晚餐是一家人从早上就开始准备的。除了火鸡是从超市买来的,剩下的菜肴全是自家创造。开饭前有一个例行的祈祷,向为他们提供美好生活的人感恩,具体来说,就是上帝、原住民和军人。这次饭桌上的话题很对我的胃口,不论是教育、各国文化还是美国对外政策,我都有话可说。

虽然美帝的中产阶级过的日子已经很不错了,但跟土豪们还是完全没法比。这家只能算土豪中的小土豪,不过 600 平的房子加半公顷的花园。他们家的邻居是个中土豪,房子修筑在道路的尽头,远看像城堡,近看是宫殿。周围拿篱笆围上的,是他们的后花园,一个九洞的高尔夫球场!真正的大土豪是 Mark Zuckerberg 这样的,开两万块的日本车,住一个不起眼的小楼,吃麦当劳这种快餐,却在真正改变着这个世界!

爱是用心码,不要说话

很庆幸,我不用花时间纠结要不要读博这件事。知道自己应该做什么是很重要的,如果不清楚,那就先想想自己不能做什么。目标想清楚了,剩下的就是执行:去招聘会、投简历、刷题、面试,如是而已。犹记得大四那个申请季,闲来无事,跟着同学们参加校园招聘感受氛围。但是我没有真正去投简历,也没有和 HR 哪怕聊个五分钟,总之就是瞎忙活了一场。

这学期伊始的校园招聘会,架势丝毫不输国内。我照例坐八点多的班车来到学校,西装革履的应聘者已经排起了上百米的长龙。那黑压压的人群,真是把我吓得够呛。但是这一年一度的机会总不能就这样放过吧,于是第二天我还是去了。记得第一家公司的 HR 是个三姐,我半生不熟地做了一个一分钟的自我介绍,她的第一个问题我足足让她重复了三遍才听出来,真是满脸黑线。后来还有一家,因为自我介绍的时候多扯了些别的东西,让他误以为我要申请一个他们其实并不提供的职位,所以几乎是给了我一份宣传材料之后就把我打发走了。我也没三哥脸皮那么厚,有衣服拿衣服,有水壶拿水壶,总觉得这会让人以为我只是为了小偷小摸而来,于是兜了两圈之后,两袖清风黯然离场。

招聘会去过一两次之后,大概就知道是怎么回事了。只有个别的公司在现场是有决定权的,可以直接给面试机会。大部分的情况都是见面闲聊、看看三观是否相符、看看技术是否需要,然后把简历丢到数据库里,哪个组有需求哪个组就来联系。说白了,这就是

找呀找呀找公司,找到一家好公司,握个手,交简历,记得以后常联系,再见!

之后一段时间,没有招聘会了,宣讲会倒是络绎不绝。懒了,不想做晚饭,就去听个宣讲会,吃披萨喝汽水。可是吃了几次之后我就发现,他们的披萨都是从同一家公司买的,每次吃,都是熟悉的味道…… 没过多久,我连宣讲会都不去了。改成安心在网上投简历。

在美帝,能给外籍提供岗位的公司并不多,实际录取的时候更为严格。就算拿到了职位,未来还有诸如签证抽签这种不确定性因素。若是从长计议,最好的去处莫过于大公司,能进能退,方可安心工作。然而申请的时候,大公司的竞争颇为激烈,热门岗位 50:1 的录取率直逼国考,而且手续复杂,流程漫长,有时隔了半年再搭理你,黄花菜都吃完了。以我的实际经验来看,申请之后有回音的,都是中等规模以下的公司,真正给面试的两家,全是 startup.

在招聘会上没抢到什么机会,错失了一轮 on campus 的良机。如今不得不从一轮电面开始重新练级。电面最大的陷阱在于,美帝的手机信号不好啊!!!第一个电话是在靠近室外的窗户那里接的,喂喂喂花了十秒钟,不过后来还行,至少让面试官对我的经历充满兴趣。第二个电话是在自习室接的,貌似那时信号只有一到两格的样子,声音时断时续,偶尔还会有持续的噪音,不知道是从哪儿冒出来的。电话问了一个经典的题目:怎么实现 LRU cache. 标准的解法应该是 hashtable + double linked list. 我已经说了两三分钟,甚至要深入探讨细节问题了,这时候他突然打断我说,你要用什么数据结构来着?哎…… 都白讲了。更让我崩溃的是,相同的事情在下一分钟重新上演。这次的问题是,移除最小的 M 个元素。稍有常识的人都知道,用个 heap 就搞定了。他紧接着问我 heap 的时间复杂度,我说 O(log(N)), 可是他马上又问了一遍,就好像在质疑我的答案一样。最后我一共说了三遍,最后一遍几乎是吼出来的。面试不到半个小时就结束了,我真的想砸了 AT&T. 你的电话套餐不限时长不限短信有个毛用,我一个礼拜就打一次电话,还是这个渣质量,这真是日了狗了。


Anyway, 这学期似乎太爱惜自己的羽毛,没生病,几乎不熬夜,就算大 due 当前也不忘健身,活动更是没少落下。于是呢,简历没投多少,题也没刷几道,全部的压力,都堆到下个学期去了。《第五项修炼》中称这种模式为转移负担,表面上缓解了矛盾,可最后往往会死得很惨。至于下学期死还是没死,怎么个死法,半年之后再见分晓。