我在 CMU 学到了什么?



刚刚收到了从 CMU 寄到北京的毕业证,我这个人比较浅薄,实在没有做科研的伟大志向,所以硕士应该是我学生时代的结尾了。回想起两年前举足无措的自己,CMU 确实是给了我一个更高的平台,得到了很多在 wm 不可能得到的机会,并且在毕业的时候拿到了 6 个 全职 offer,找工作的过程也非常顺利,甚至单单用 CMU 这个 title 就可以拿到面试。经济方面,从2020年8月到2021年12月,这一年半也不算拮据,不像在 wm 一样出了车祸连 2500 的 deductible 都拿不出来,一共两万多奖学金,加上暑假实习和 TA 的钱,几乎 cover 了一大半的学费,所以总体来说,我对 CMU 确实很感激。


再见了,学生时代

但人吧,就是很矫情。我总觉得硕士,尤其是计算机硕士,作为一个 terminal degree(不往上读博士了)是一个很亏本的买卖。尤其是对于美本 CS 来讲,本科毕业也可以拿到大厂的 entry level(比如 Google L3),那么硕士的意义就显得很鸡肋。虽然 CMU 的课程确实很好,比如 Cloud/Database/Storage 这三门课,让我终于理解了什么是 Scale,以及如何去设计一个数据密集型的系统,但课程总归是学术的,而我也非常清楚我是一定要去工业界的,加上 INI 有几门很傻逼的课程(说的就是 740),让刚刚毕业的我确实发了点牢骚,认为这一年半进步不是很大。我甚至天真地想,如果没有读研,那我21岁的时候就可以是全职工程师了,当然前提是本科毕业的时候能找到好工作。

但静下心来仔细想想,还是得承认 CMU 带给我的改变。

对计算机系统的理解

虽然是计算机科班,但我这个科班实在是很业余。首先是 wm 的计算机系非常不成体系,东一榔头西一棒子,到毕业了我都没理解计算机里最重要的 client-server model 怎么运作,对于数据库,网络和并行计算这些高级一点的知识,连最基本的概念都没有。再有就是因为三年毕业,第二年才转 CS,还有 math double major,CS 上课其实上的非常赶。18年刚刚转行,都是在上数据结构和算法这些入门课。19年 spring 为了赶毕业进度上了四门数学课,19年 fall 又连着 4 门 CS 课,20年 spring 拿到录取了,所以一整个学期都放羊了。这样看来,其实在 wm 三年并没有对计算机有一个全面的理解,我甚至快毕业了还有一个问题:为啥要有数据库这种东西啊?直接用 HashMap 不就好了么?

虽然这个问题现在看很傻逼,但至少说明了几点:

  1. 尽管学了 304,我没有彻底理解什么是 memory,更搞不清楚各种储存介质的 access time 和 cost,就是那个经典的金字塔模型,至于在实际系统设计的时候的 tradeoff,想都没有想到过。
  2. 我对 volatile 和 non-volatile storage 没有概念,现在想想用户的数据要储存在内存里就很可怕。
  3. 我对 Scale 一无所知,我以为一台电脑足以储存整个app的用户信息。

SCS 的各种 system 课上下来,这些知识已经内化成了常识,所以我才会有一种本科毕业就 qualified as an engineer 的错觉。就算是凭着不错的算法能力能拿到 offer,对高并发系统的缺乏理解注定了在职业发展上非常受限。很不幸的是,wm 没有分布式系统甚至数据库的课程,304 和 OS 讲的也是单机系统,不涉及 scale 的任何问题,这样看来早一年毕业真的是正确的决定,不然再呆一年也是浪费时间,找不着好工作然后继续读研。

Prioritization && Diversity

我实在为 Prioritization 找不到一个满意的词来翻译,优先级划分有点太僵硬了。

不如这么来理解,本科的你在规划未来,你有三个选择:

  1. 毕业后直接找到好工作(需要实习)
  2. 申到 PhD(需要科研)
  3. 走一个直通转学名校的项目/混个 master(需要达到 GPA 和其他标准)

你不可能同时保证 1-2 个实习,科研能出成果,还能保持很高的 GPA,所以你一定要放弃一些相对不重要的选项。问题是大部分本科生其实都搞不清楚自己到底要不要去读 PhD(这很正常,也没有关系),你要做的就是选择(没错,就算你不知道),你越快做出选择,你的试错成本就越低。千万不能有 liberal arts/general education 这种封建思想,时间有限,只读经典。

在 wm 我感觉科研也得做(说不定能做出点啥牛逼的东西了呢),实习也得找(不然毕业没饭吃),哥大 3+2 总能当个保底吧,反正项目要求也不高,就顺带手满足一下吧。结果就是哪个做的都不好不坏,实习在国内外企养了个老,科研做的都是半吊子科研,做系统工程能力上不去,做 ML 数学基础太差,甚至连哥大 3+2 都要被迫上很多既不喜欢又没意义的必修课,反而拉低 GPA /占用时间。

如果说在 wm 你还勉强可以所有的都兼顾,并且都做的一般,CMU 就没有这种可能性,甚至单单是上课一项,你都需要在找工作忙的学期战略性放弃一些,而且 CMU 的氛围比较 technical,专业课很难,通识课很水,这种氛围不自觉也会加强学生 “把时间放在重要的事情上” 的 mindset。

Diversity 其实比较好理解,一个学校越 technical,必修课越少,diversity 就越高,因为这样每个人都会很快地找到自己的 priority 然后试错。很多 wm 的同学直到大三课表都差不多(因为都是通识),后一两年才开始做选择(万一选错了你都没时间改了),这种 “小而美” 的教育模式反正我是匪夷所思。

校友网络 && 竞争性

虽然我对 INI 的课程意见很大,教授的水平也确实有限,但 INI 对于学生就业的关注程度应该是 CMU 里最高的了,毕竟 INI 的毕业要求强制实习。而且大家找工作的氛围非常好,基本上各种类型的公司都能找到校友内推。这一点应该是 CMU 最有价值的地方,就是 alumni network。我之前一直没有很关注这一点,但就长远来看,一个学校在你所处行业里拥有的人脉,比开设什么课程要重要得多。之前看过一个 TedTalk 演讲里提到一个概念:weak connection,就是弱连接。其实职场不同于学校,本身大家的 connection 就很弱,所以校友这种弱连接会以一种潜移默化的方式影响你,而且是一辈子的影响力。

我之前确实吐槽过 CMU 的 career fair 没什么用,因为竞争太激烈,你的简历放进去就石沉大海了,大二本科简历都比你好看。但反过来看,就算石沉大海,这也是一个潜在的机会,或者说让我看清了自己和别人的差距,你可以说这是内卷,但往好处想也确实开眼界。在 wm 的时候不得不说我过的挺舒服,因为我觉得至少在计算机系里我挺厉害,现在看就是一叶障目不见泰山,看不到自己需要提高的地方。你可能会说,那为什么总要跟 wm 比?我只能说这种问题就是鸡生蛋蛋生鸡,事后诸葛来看这话当然是对的,但问题就是人都是囿于眼界的,而且习惯于停留在舒适区,大四留在 wm 每月拿个 cover 生活费的 RA 工资,给本科生讲讲课,再混个 PhD 读一读,这人就是温水煮青蛙会废掉的,之后你自己都不想找工作了。

一段含金量很高的实习 @ Cloudera

正是在 CMU 这种找工作的氛围之下,暑假我去了 Cloudera 实习,做一个类似于 HDFS 的 Apache 的开源项目。这次实习算是一段很惊喜的体验,因为我本来没有 expect project scope 可以这么大。我实习三个月,第一次看到做的东西投入 production,并且和学校里的 toy project 不一样,学到了很多工业界常用的框架,包括以前从来没听过的东西,比如 RocksDB,Dependency Injection,Mockito,CI/CD pipeline。之前在学校学过的东西,比如 RPC/REST APIs,实习的时候实实在在地看到了在工业界的实现,真正理解了为什么在 distributed system 里需要 encoding/marshalling。

比实习本身更重要的,一是遇到了很好的 manager 和 mentor,一直在问我的职业规划。我说我想做 full stack,因为每个领域都能学到一点,于是我暑假的项目就临时加了一点前端/data viz,但 manager 也很实诚,最后和我谈 return 的时候说,自己并不看好一毕业就做 full stack,因为什么都会一点就代表什么都不会,建议我还是往 backend/system infra 的方向去走,选一个方向 dive deep 几年成为 expert,之后再去 pick up 全栈。二是这段实习经历对简历非常有帮助,找全职的时候除了门槛太高的 HFT 至少能给个面试。

平台和 brand name

我十分同意 “学校不能定义一个人” 这句话,尤其是对于工程师这种实践大于理论的职业。但是世界就是残酷且世俗的,学校是一个非常方便的标签,帮助 HR 去快速地做出 “我该继续看下去还是把简历扔进垃圾桶” 的决定,而 CMU 给了我这个 “让 HR 继续看简历” 的机会。甚至之前申请实习的时候,有一个做 static code analysis 的小公司直接邀请我 onsite,说得也很直接:“我们认为 CMU 的学生不会浪费我们的 onsite 机会”。在国内,wm 只会被当成英国的野鸡学院来看待,就算在美国,wm 计算机系的直接就业情况并不好,基本都困在了 DC 和 nova 一带的公司,要不是亚麻18年去 arlington 建数据中心,毕业生基本和 FLAG 绝缘了。

My heart is in the work

这一点更哲学一点,但其实又很实际。CMU 之前,我对自己的 “work” 并没有理解。这个 work 其实并不一定是狭义上的工作,我认为可以把定义放宽:就是 “你愿意投入时间的事情(commitment)”,然后把它当作长期的事业去培养。甚至我觉得跑步都算 work,之前看过一个知乎博主在 CMU 读 PhD 的时候,一有空就要围着 Schenley Park 跑几圈,我想这就是对这句话的诠释吧:

Turn everything you do into a career; take pride in your work, and take the responsibility.


再见了,CMU。

Always proud to be a Tartan!

 

Yuan @ Beijing 2022/02/23