五分钟带你了解cs(从软妹纸到四大全奖)(1)

背景介绍:

合肥某高校

GPA: 3.92/4.30

TOEFL: 110 (s23)

GRE: 161 170 3.5

Offer:CMU CS PHD, CMU ECE PHD, UIUC CS PHD,UW-MADISON CS PHD, Cornell CS PHD ,Gatech CS PHD , UT-Austin CS PHD,Umich CSE PhD, OSU CS PhD, UNC CS PHD ,Brown CS PHD

读者须知

“被误解是表达者的宿命。”对于这个断言,我选择的应对策略是,看内容是由什么相关经历的人表达的,因为只有这样才能筛选后吸收。在本文中,我会尽力让与我做出的断言相关的论据更加明晰。“尽信书不如无书。”我也期待读者能自行从中选取适合参考的经验,并且不被其他内容干扰。那我们开始吧!

前言

在动手写文之前,我一直在问自己的是“我该写什么?”,或者说“只有我来写才能写得好的是什么?”。为了帮助我思考,我回顾了学长们编写的《20届 CS 飞跃手册》,发现它大而全,囊括了申请要素的分析、各个CS方向的讨论、还有Gap or MS or AI 这些我不是很了解的话题,非常推荐阅读。

大而全也意味着,我所在的方向的分享只占一小部分。

所以我打算以我的个人经历为开始,剖析在“Storage Systems”(属于 hard-core systems)方向及相似方向下,我的思考和选择。总的来说,我将重点写前人没太涉及的事情(不重复造轮子)。

个人经历-科研向

我将针对科研展开介绍我的本科经历。这里写了很多小故事,作用在于某个小故事也许恰好是学弟学妹会遇见的,希望有所帮助。我进实验室之前也听了很多小故事,感觉潜移默化地给了我很多铺垫 :)

选择 System

出于三个原因:

1.我不太想主动进入变迁速度过快的领域(AI, CV),这让我害怕会面临质量/数量的权衡,或者质量/速度的权衡,如果都想达到,那就得花费更多的精力。而 System ​步调一直​看起来比较稳健,顶会质量普遍很高,我只需要顺应内心做出好工作就可以。(当然,缺点是工作不容易发出来、毕业困难、产出辛苦……)

2.我希望我所学的课程能在竞争中发挥作用。有些理论领域、AI领域不仅用不到操作系统、体系结构、编译原理,而且还需要和学数学专业的人竞争;CV 等交叉领域,我们也需要和有着交叉学科基础的同辈竞争。不考虑其他因素,system 更适合纯 CS 人。

3.我希望能弄明白一切,基于 understanding 给出不一样的 solution。这对应着 System 的两个特点:弄清楚问题最重要,以及万事皆是 trade-off。

当然,我也是个特别现实的人,客观条件要是不适合,我可能也会考虑其他的路。一般而言,科研还是非常难自学成才的,更何况是 system 这种领域。所以下一步就是选实验室,也就是选择科研环境。

选实验室

我是大三上联系的导师,但是真正开始科研是等到了大三上结束的寒假(因为导师有点担心我一边上课一边科研会影响研究生们的工作规划)。我后来才得知,身边同实验室的同级学生,有的一开始科研就是自己开课题,遇到了或多或少的阻力。

与此相反的是,因为我此前和许多各专业的学长学姐聊过,天然​地​觉得第一段科研肯定要跟着师兄师姐多学一点,开自己的项目是后面的事情。于是,第一次跟老师聊的时候,我就问“有没有什么课题或者哪位师兄师姐适合让我跟着做一段?”老师给了我两篇文章,让我感受一下哪篇更感兴趣,我选择了 SpanDB。

这是我的第一个转折点:我遇到了非常“合适我”的师兄,带我走进了 storage 领域。

进入科研

师兄所谓”合适“我的一点是:每当我出问题,他都会立刻指出来,并且告诉我怎么改。

这样每次和师兄的交流,都是在解决我上一次还没暴露出来的问题,或者是说了一次还没能纠正的问题。这种感觉太棒了!我每一次都能感觉到我在进步。

刚开始做科研的感觉是“晕头转向”:看不懂师兄写的文件系统的源码、不知道怎么减少 overhead、跑的实验参数也不能很好地理解意思、实验结果合不合理也是在一次次出问题听师兄分析后才领悟一些。

但是,这也是我最轻松的一段时间。轻松在于,有任何不明白的都可以通过问师兄获得答案。

很快我就没这么“好运”了:我们在探索的 caching 问题对于师兄来说也是新鲜的,当然也会有不明白、需要导师“掌舵”的时候,我于是开始参加每周的正式汇报。这是我的第二个转折点:我遇到了非常“合适我”的课题导师,带我真正地感受到存储的魅力。

导师

因为有校外合作导师,我们都是线上开会。我领略到导师存在的魅力是从我正式组会开始。

我跟导师的合作分为三个阶段:

初始阶段(2月)

刚开始的时候,我的任务是为师兄的系统提供性能优化,所以这和一般的科研进程不一样的是,问题“似乎”已经知道了,来自师兄告诉我的、他的观察:缓存性能不够好,看看我们可以做些什么。(但实际上由现在的我去回看,我会觉得当时我们并没有明确这个问题有创新性,也许跟当时目标是投期刊有关。)

这阶段的工作流是

● (1)非常基础的一些实验数据的解释,我一般是咨询师兄。

● (2)等到开会的时​候老师​会问一些实验方向上的问题:为什么要这样设计实验?大部分时候我们会发现我们做的实验有冗余或者不足的地方,需要继续补充实验来做understanding的那些会转化为下一周的任务。这些实验数据可以怎么解读?(老师总是能发现我总结不出的视角,这让我不断期待下一次组会。)

试探阶段(3-6月)

每次组会后会反思和总结,有时候我会马后炮地发现“如何设计实验”这个问题的答案每一次和师兄不一致的时候我都会放弃思考,之后在组会发现老师的建议跟我想的一样的时候,我又会非常后悔。

于是我开始主动思考,按我设计的思路走,只参考意见,但不会盲从。

随着时间推移,我在组会上被问住的次数越来越少(因为我先行考虑了可能会有的疑问),我也越来越有信心。(现在的我已经明白了,这样的趋势是非常合理的。因为没有人能比我自己更懂得根据情况决定应该做什么。)

这个阶段还有一个特别的地方:我们从诸多实验中提取了一个可能的新问题。我于是返回体验了科研开始阶段:明确问题的存在、重要性、以及使用已有的方法能不能解决(或削弱)它。

导师们对我非常包容,给初入科研的我塑造了平和的科研心理和扎实的科研习惯。

进阶阶段(7月-12月)

这个阶段我经历了很多崩溃,但也是我进步最快的一段时光。

师兄毕业了,我也来到了微软全职工作(之前我一周抽出两整天科研)。这时我猛然发现除了我自己,没有人可以在direction之外帮助我。是的,不会有人能付出巨大的commitment、花费大量时间帮我处理我的科研。这和课程作业咨询一道题的 commitment 可不一样。

令我曾经痛苦不堪的事情包括:使用各种 application 做 baseline 的过程中给 github issue提问题(回复往往要等上几天)、代码不理解、实验结果不理解等等。随便什么事情就可以耗掉我几天。那时候我时常自嘲我自己进入了博士零年级。

但也是这段时间我习惯了独立解决问题,用一切方法咨询能找到的人。之后​有​一次(大概是十一月)咨询师兄一个细节问题,我立刻得到“答案”的时候,猛然意识到我已经拥有独立科研的心态很久了。

这段时间,老师们帮我提出的质疑越来越少,我为下周的任务排列的优先级也往往能得到认可。虽然中间几度觉得问题变得越来越不有趣,但是我从未从导师那里感受到“好失望啊”、“你怎么会这样呢”的情绪,在我低落的时候,他们会对我说“这没什么大不了的,我们还可以试试xxx”(后来我也常常对我的合作者说这句话 :) )。

我逐渐习惯于尽力自己解决问题,如果有没解决的,那只能因为还没有“时间”使用完所有方法,没有什么是我一定不能解决的。确定了核心课题之后,老师们会在我direction略有偏离的时候,坚定地把我拉回主道。也因为我自己排查的问题越来越多,在组会上讨论 idea 的时候更多了,我在思维上的进步的速度更快了。

值得注意的是,组会的时间非常有限,老师在一小时能做的梳理工作非常有限。如果选择把一堆细节没有组织的情况下丢到组会里无差别介绍,只会是一团乱麻。

投稿后自由进阶阶段(1月-present)

暂略,因为对申请没有很显著的影响(只对面试有微弱影响)。

总结

好的导师可以带来非常正向的东西,我按优先级排列:

● 平和的科研心理和扎实的科研习惯

● 在任何时候(尤其是困境)有推动项目进展(促进创新)的能力

● 提供科研和科研相关的各个方面(例如学生心理、生活)的后备支持

从我讲述的故事里可以感受到在我众多的转折点中,导师的这些要素支持着我前进。虽然我确信如果失去这些要素的一些,我还会做科研,但是我一定不会有现在这样巨大的成长,也不会明白什么是好的科研氛围。

问题导向

再强调一次这是针对system人(我自己)的回答,每个回答我都可以在不满足前提条件的情况下找到反例,所以注意辩证看待 :)

教授想要怎样的学生?

简单来说是,证明了自己能做好科研的学生

可能因为system需要的计算机核心课多,等到准备好做科研的各种课程,已经大三快结束了,于是很多申请人都没有深入的科研经历。这是一把双刃剑。虽然很难有科研产出,但是如果有扎实、深入的科研背景,就很有区分度,可以甩掉一大批人。如果没有,可能就需要各显神通了,但对于陆本学生,感觉告别一批顶校了(欢迎各显神通的例子)。

那么教授用什么来验证申请者能不能做好科研呢?领域内珍惜羽毛的人的强推 > SOP » 其他(GPA,英语)。BTW,不确定不被熟悉的国内人的推荐,但有细节,效果如何(欢迎补充)。

强推和​写的好​的SOP一般需要包括教授在乎的要素:如何克服了困难,从中体现了什么品质。(当然自己的推荐信里有啥是我们没法控制的,所以我先介绍下后者)

下面是我们这方可以控制的:SOP与面试回答

● 比如,SOP 中我写过的故事有:想要用一个工具,发现有bug,定位到是什么问题并且report,一段时间后官方修复了问题,期间我使用plan B继续工作,没有被这个问题耽误进度、也跨过了一个常见困难。

● 我在面试时有几次因为过于真实使得教授产生共鸣的:比如,问我现在的项目是不是考虑加一个xxx application,我(无奈)“是的,这是我evaluation plan的下一个任务,但我只有一个人,我目前还在明确related work有没有疏漏、视角是不是足够完善,等我过几周抽时间研究一个application。”然后教授说“哈哈哈,你已经挺好​的了​,我只是觉得reviewer会想要看这个。”

● 再比如,教授说“我会希望你做一些big code base,你有信心吗?”我说:“我之前做 RocksDB 上的实现也很困难,因为关注的layer和application的结合让我需要理解不止特定一层layer。这也许不算很大的code base,但是我不觉得有什么是解决不了的,就是花两周还是三周这种区别而已。”教授貌似很满意我最后一句 :)

类推,想要推荐信里有这些要素,就得“好 好 做 科 研”。我本人曾经 impress 过导师的点有:

● 主动思考我们的目标是什么,然后才去做最有必要的事情

● 设计合理的实验参数,不做冗余实验

● 掌握 related work

● 给出扎实的实验数据(可以对每一个维度的疑问给出解释)

● 上周卡住的问题,下周无论如何都会有一定突破(我会push自己)

看起来像是在自夸,但这确实是常见的一些point。不为了推荐信,只是为了prepare自己,也需要提升各方面的科研素质。这个过程潜移默化丰富了推荐信和SOP的细节。

申请时各种材料如何发挥作用?(如何写好SOP?)

重要的推荐信和 SOP 我前面已经提到了。还有次重要的材料,例如:托福 GRE、PS、GPA。

我个人是比较 push 自己的,所以不重要的材料的自我要求都拉满了。

给一个比较抽象​的​总结:欠缺“英语、PS、GPA”可能对个别学校、老师有影响,会让你失去一小部分offer;与之相对的是,强推会让你得到一大批offer。前者我可以举个几个例子:Cornell、Brown、UC系列,对英语有些要求,如果很差,可能直接被淘汰,老师再喜欢也没用 :(

如何拥有申请要素?为什么大三暑假暑研是最普遍的现象?

这里的申请要素,可以认为指强推,也可以指获得强推的条件,如下:

● 1.愿意给学生好好写推荐信的靠谱导师

● 2.有前景的科研开端

● 3.自己正确方向的努力带来一定产出等等。

国外暑研一般能满足 1 和 2,并且可以帮助 3。但其实国内也可以有机会获得这三点,国外暑研也可以没有这三点,学生应该注意甄别和判断。

关于第3点,自驱力是非常重要的,我也有见过导师很强但带不动学生的 :(

综上,对于暑研,应该先明白为了什么,才能知道如何选择。

怎么选感兴趣的导师(为找暑研、申请时选校​作​调研)?

这里有个小trick,通过 [CS Ranking](http://csrankings.org/) 找近期有在你感兴趣的几个 conference 发 paper 的导师。这里有意思的是,同方向的导师存在聚类,比如我印象中 purdue 的 security 方向的教授多,而 UW-Madison 做 storage 方向的教授多。这样也可以辅助申请选校。

我的经验是,方向match的导师在申请中,通常会对你有更大的兴趣;相反,不 match 的导师很有可能完全不感兴趣。暑研不同,因为这时情况不定、学生还在科研的初级阶段,教授对match的要求不高。但从match在申请中的影响可以看到:暑研如果做了不感兴趣的方向,极有可能从写推荐信的导师connection、到你的background都需要转换,对之后申请会有阻碍。暑研选择需慎重呀!

套磁有哪些作用?要做到什么地步?

套磁从加大录取概率上来说,用处不大。更何况申请材料提交前的套磁,​缺失​最重要的“推荐信”,这时就能下定决心录学生的教授还是挺少见的。

但是套磁存在另一重用处:就是帮助选择中游和保底校,试探哪些学校、做哪些科研的人,会对你感兴趣。我确实是通过套磁回复,确定了保底校和主申的部分学校,但 Top 的学校几乎不回复套磁,想去就一定要申请,不然说不定会后悔哦!(比如我差点没敢申 CMU CSD,现​在​想起来一阵后怕 hhhh)

拿到 offer 开始反选后,如何甄别判断?(如何跟意向导师聊天?如何跟导师的学生聊天?)

我使用这个里面的问题列表,包括了问老师的问题和问学生的问题。请视情况调整:Questions to Ask a Prospective Ph.D. Advisor on Visit Day

大四怎么安排?

相比物院某些专业大四上还有大学物理实验要上,科大计算机专业完全可以获得全空的一年,我大部分计算机的同学都用大四整块时间科研或者实习。具体操作是提前修够:1 专业选修的所有学分 2 公选4学分 3 剩余学分用任何不在培养计划上的课都可以补齐。

世毕盟发挥的作用

1 申请材料有培训师帮忙检查,尤其是细节问题,往往不好查、DIY的话只能咨询学长学姐,不一定问​的到​,效率也不高

2 帮助connect需对学生负责的 CS PhD 作为mentor(具体职责见合同条款),可以交流到相似的申请情况

3 写 SOP 等材料有 mentor 润色 世毕盟 native speaker 润色,省心不少(不需要麻烦认识的学长学姐太多)

总结

祝愿每个学弟学妹都走出自己的路!

,