刚到美国的时候写了一篇 《终于,我成为了留学生(一)》,那时候,我对这里的一切感到好奇,出于对自己有能力完成(二)、(三)、(四)的信任,我在文末留下未完待续。一转眼已经毕业了,承接留学生活记录的是这篇毕业回顾。
2020 年 3 月的某一天,我正式告别学生生涯,离开留学所在的城市,前往湾区。
一向大雪纷飞的牛村阴天无雪,极其不符合该有的寒冷气质。提前一晚在朋友圈想好的告别文案(“天气不似预期”)也不再奏效,往日几尺深的雪反而变得可爱。打开 flightradar24,看到今天搭乘的航班之前因为风雪延误,停飞了几天。看来无雪的告别反而是这个地方送给我的祝福。
10:33 AM,CRJ-900 加速,抬起,真的要离开 Buffalo 了。要说留学这两年做了什么微小的工作,似乎也没有,都是和很多从中国来的 CS 研究生一样,按部就班。
master 分支
如果这两年的人生轨迹用 Git 记录起来,master 分支 ”提交记录“ 是这样的:考 GRE / TOEFL -> 申请学校 -> 上课刷题 -> 申请实习 -> 实习 offer -> 申请全职 -> 全职 offer -> 成为湾区空巢青年。
当然,除了 master 分支,我也建了很多条 ”其他分支“。
语言分支
这条分支重要地位不用多说,在 "考 GRE / TOEFL" 合并到 master 后,依然需要继续开发。标准化考试的成绩只是入学要求,并不代表满足语言要求之后在美国能畅通无阻。
刚到牛村的时候没什么娱乐活动,除了去买菜就是看电影。加入 AMC 电影院会员,月付 $20,就可以每个星期观看 3 部电影。我兴高采烈的走进影厅,把可调节座椅躺平,正准备细品好莱坞爆米花大制作的时候,我找不到字幕。整场电影下来,懂了 50%,除了特技真炫,主角真能打之外,没有其他记忆。美国影院没字幕?!说好的处处有 Accessibility 呢?经过一番搜索,原来影院会提供无线字幕装置,在观影前询问工作人员即可。
嘿嘿,你看这不就解决了吗,有英语字幕看我还理解不了剧情?正当我再次兴高采烈的走进影厅,把可调节座椅躺平,准备细品好莱坞爆米花大制作的时候,前后左右都送来异样的目光。原来这是专门给聋哑人士用的,我这似乎在占用公共资源。走出影厅,我把字幕装置还给工作人员,发现我并不是聋哑人士之后,工作人员感到尴尬。再回到影厅,拿出了托福听力时候的专注,整场电影下来,懂了 60%,除了记得特效真炫之外,主角真能打之外,还听懂了汤姆·克鲁斯说的几个梗。
自此,每周都会到电影院 ”学习“ 英语,几个月之后解决了 “听” 的问题。“说” 的问题就没有那么容易解决了,进步最神速是在去年实习时候,每天都要跟同事沟通,和导师 1:1 开会,渐渐把口语练熟。
学习分支
第一个学期选了四门课,被 due 追着走,完全处在被动位置,感觉整个人都被榨干了。四门课中,除了算法分析交报告之外,其他三门 OS, Network, ML 都是包含项目的课程,我们称之为“硬课”,项目占总成绩的 30 - 50%。
可能是编码水平太低的缘故,刚开始极度不适应,熬了很多个晚上,才把 Network 的第一个项目完成。刚提交好前面的项目,其他两个项目也快到 due 了。OS 项目用了斯坦福的 pintos,大部分的底层实现都写好了,我们需要实现四大块的功能:Threads, User Programs, Virtual Memory, File Systems。pintos 的文档写得很全,忙活了很久终于写完前两个任务。这个项目让我加深了对 Linux 内核工作原理的理解,之后看 APUE 也没那么费力了。
有了第一学期的惨痛教训,第二学期整个人变得规矩很多,把课程减少到三门。选课的时候发现 “分布式系统” 这门课的项目还不错,关键是这教授长得太像 张学友,看美国教授评价平台 ratemyprofessors 上还说 “没上过这位教授的课就是白来鄙校” 之类的话,果断选上。果然,学友没有让我们失望,不但授课质量高,项目安排合理,上课回答问题还派发 lollipops (?)。这门课所有关于分布式系统的实例都是用 Android client 实现的,确实在 Multiple client 的情况下 debug,Android 还是比较方便。学友深情的介绍了分布式系统的历史,从 Leslie Lamport 的 Paxos,和关于 Paxos 诞生时候的一些争论,引出现代分布式系统实现的难点。学友还很喜欢用工业界的应用做例子,例如用 Facebook 的 Haystack 和 f4 做例子讲 Write-once, read-many 的 consistency cases。最近入职 FB 做 Bootcamp 的时候才发现,f4 和 haystack 还没退出历史舞台,这两个服务都并入了 BLOBs 组。此外,学友还用 Amazon DynamoDB 做例子讲 Merkle tree, Gossiping 和 Quorums,最后需要仿照 DynamoDB 的特性写一个 Replicated Key-Value Storage System。由此可见,学友对业界了解之深,我对学友(的课程)喜爱之极。
除了课堂学习,学校还会定期举办 Hackathon 和一些编程比赛,例如 Google 的 Code Jam。
Hackathon 举行的时候声势浩大,占用了学院的三层楼。组织分工也很明确,有后勤团队负责食物、场地供给,有管理团队负责时间表安排,甚至还有导师团队给你提供 idea。北美高校的黑客马拉松基本都是 MLH 提供指引支持的,他们会帮学校拉赞助。例如 Google Cloud, Twilio, AWS, Github 和 FB 就常年在赞助商之列,一来可以通过活动招募 New Grad,二来可以介绍公司的 SaaS, PaaS 产品,还能露露脸刷刷存在感,一举多得!在两天一夜的爆肝编程活动里面,最值得期待的就是大佬演讲环节,上一次还认识到了早年 iOS 越狱包管理工具 Cydia 的开发者 saurik。
当然,玩归玩闹归闹,进厂还得靠刷题。第一次参加 Code jam 全程蒙蔽,把第一题做出来就回家面壁了。此后 Google 把硬核的 Code jam 换成了 Tech Challenge ,另类手速比赛。包含一些简单的编程和推理题,不需要提交代码,只要输入最后结果。这个比赛的参与度和可玩度就高很多了,狗家太有心思了!
工作分支
“进 Google 最好的途径是去美国留学”,L 同学几年前的这番话给我很大启发。研究生第一个学期,我在考虑要不要读博,甚至站立在人类未来与我息息相关的高度。打铁还需自身硬,虽然选了很多计算机理论课程,可还是喜欢工程和项目,经历了去年暑假实习之后,更加深了毕业就留美工作的想法。
承蒙L同学的一席话,我来到了山景城......几英里外的门洛帕克。今年不能在山景城留下脚印,几年之后或许还会再见。把全职 offer 算上,在美国一共做过三份工作,第一份工作是在学校食堂兼职打杂。
“有时间在家里多刷刷题不好吗?去食堂多不体面?都 0202 年了,又不是邓公留法,中国留学生还要洗盘子?”
去食堂打工是因为想申请运通的信用卡,申请信用卡则需要社会安全号(SSN),而申请社会安全号又需要合法的工作。作为国际学生,合法的工作时间是在校工作、假期校外实习、毕业校外全职三个,所以就提前到学校报名食堂兼职了。报名之后,食堂经理会根据你的课程表编排上班表,按个人情况选择一周的工时。由于不是出于赚钱的目地,所以就选择每周一班。按当时纽约州最低工资来算时新,一小时是 $13 左右,算了保险和税实收 $11。
食堂兼职让我重新认识美国。兼职搭档 D 先生,当地白人,高中辍学,他是 “专职的” 兼职达人,人生信条是自由随心,不想被普通公司的条条框框束缚。据他所说:他在各种快餐品牌和超市品牌都兼职过,虽然如今没有积蓄和公司福利保险,依然觉得自在,不想干就辞职滚蛋。“这个 Samsung S10 屏幕清晰,运行速度快,我和运营商签了两年的合约买下来的”,David 说。他破洞的 Nike 衣服和光鲜的 S10 产生强烈对比,让我想起人在美国,刚下飞机,登记入境时候的那句 “Welcome to the United States”。
作为在美国的第一份工作——学校食堂兼职,我练习了口语、拿到 SSN 申请运通卡、每次兼职后获得免费餐食、用赚到的钱买了台 iPad mini 5、感受到了资本主义强国基层劳动人民的水深火热。
此后的求职之路还算顺利,EA 实习心得已经分享过了,过段时间会分享 FB 的入职感受。
Vlog 分支
因为花费时间在这条分支上,所以留学生活文字记录的(二)、(三)、(四)就没有在此呈现。初次接触 Vlog 是几年前在 Youtube 上,此后一直关注香港、台湾、欧美的一些 KOL youtuber。他们大多有着精美的剪辑、吸引人的封面标题和一个好的叙事框架,再配合 Youtube 精良的推荐系统,简直看不腻。这种以视频形式的生活记录逐渐也在国内兴起,酝酿多时之后我也开始在 B 站和 Youtube 上载 Vlog,借此也入坑了 NAS。这两年一共上载了 10 个视频,包括游记、实习记、面试记录和最近的抗疫记录。它们很粗糙、不成体系,没有精美剪辑和拍摄技巧。做视频有部份原因也是想给家人看看自己在国外的生活,能照顾好自己,不用牵挂之类的。希望之后有时间能系统学习剪辑、拍摄,更新设备和突破 100 个粉丝(心酸
烹饪分支
在美国能吃到的菜系有很多,但无可奈何很多时候都只能吃快餐。在外面吃一顿快餐价格高昂不说,还得被迫接受奇妙的排列组合:芝麻鸡、左宗棠鸡、陈皮鸡、陈皮牛、蒙古牛等。人生苦短,为了对下一顿饭充满期待,我们来烹饪吧!烹饪的灵感来自 Youtube 和下厨房 App,类比一个是 Coursera,下厨房则是在线文档。Youtube 上大厨云集,传统通用中菜常看 美食作家王刚、马蹄厨房;传统粤菜常看茶餐厅师傅 職人吹水;新式菜系看 曼食慢语、點 Cook Guide。
刚开始和室友每天每人做一顿,午餐晚餐互换,此后早晚餐都是自己做。诚然,方便面、速冻水饺、微波炉点心也吃不少,大部分时候还是会提前想好食谱,然后到去亚超买菜。
不会枯燥吗?当然会!就在写这篇文章的时候,因为 COVID-19 笔者在家里 WFH,没有勇气出门买菜,超市快递物品又不全,笔者便开始了菜谱食物排列组合,甚至怀念起美式中餐。(西兰花牛肉真香!
旅游分支
一直向往 BYVoid 畅游异国放心吃喝的生活,所以这两年一有假期就会出去旅行。在美国,除了自驾,可以坐飞机、火车和长途巴士。
美国主要城市都有火车站,运营者是国家铁路 Amtrak。入学第一年的寒假,我乘坐火车从西纽约州出发,前往 New York City。火车乘坐非常舒适,位置也比国内动车二等座宽敞,不过运行速度慢,大概只有 70 mph。
来到奥斯汀实习之后,旅行次数就更频密了。奥斯汀是德州首府,被休士顿、圣安东尼奥和达拉斯三座城市包围着,地理位置极好。实习的周末非常空闲,宅在家玩游戏似乎不是一个健康男孩应有的想法,所以每个周六的早上都会背上背包出发。迫于贫穷,我大部分时间,都是通过坐 巴士(灰狗) 出行的。灰狗票价便宜,两个小时车程大概 $10 - $15,有趣的是每次从家里到灰狗站坐 Uber 的花费比巴士车票还贵。和国内城市的汽车站一样,灰狗站附近有显著的治安问题。在休士顿旅游的时候,我拿着一袋麦当劳进灰狗站,被附近的流浪汉看上,最后给了他一盒薯条才肯放过,我吓出了一身汗。
从 EA 实习完回到牛村,眼看离开学还有一段时间,就和女票去大不列颠了。英国有好多古堡小镇,我们到了最富盛名的 Castle Combe。典雅的历史小镇给我上了一堂鲜活的英语课,英国的小镇 (Town) 和美国的农村 (Village) 有着明显区别。一个是午后红茶般的 elegant,一个是金属朋克的 rough,小镇太治愈了。曼切斯特是此行印象最深刻的城市,恰逢曼城要举行 Pride Parade,周边商铺都装扮了彩虹元素,甚至连超市的食品饮料也印上了彩虹旗。
另外,参加 onsite 面试也是一个很好的旅行机会,公司会免费提供来回机票、酒店和食宿报销。当然,面试完可能就没有心情和力气去旅行了(别问我是怎么知道的)。
结尾
开头说人生轨迹可以用 Git 记录,其实是不太准确的,应该是一个魔改版的 Git,因为它删除掉了部分功能。
我们一生从 git init
开始,建立不同的 branch 负责不同的事情,不同的阶段 release 不同的版本。可是人生的 git 没有 git checkout commit
(回到过去),也不能 git clone
(复制别人的生活),只能向前递进。
希望我的 “master 分支” 向前递进的时候,能有更多精彩的提交。