作者:AdmitWrite线上留学平台
链接:https://www.zhihu.com/question/576360271/answer/2938450245
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
最近几年申请CS专业的人数越来越多,申请竞争也越来越激烈,而CMU作为几乎每个申请者都会申请的学校,一些高质量项目的受欢迎程度自然是不必多说。在这里我和大家分享我在CMU ECE项目的学习经历,方便大家更详细地了解这个项目,从而在选校时多一个参考。
项目简介
我读的ECE项目是在匹兹堡校区,项目时长为一年半,毕业的要求是修够96个学分,包括60个学分的专业核心课和36个学分的选修课,其中选修课又分为less-restricted electives和restricted electives两种,后者的限制较大,是课程等级在500以上的研究生中级课程,所以选课的时候我们只能选代码为18-5xx的课程,不过这些课程几乎包括了CMU最好的计算机课程。

ECE的申请难度没有CS那么高,但是由于申请的人数越来越多,所以还是建议大家对任何一个申请步骤都不要掉以轻心。三维当然是越高越好,一般GPA3.5+,TOEFL105+,GRE320+才会有竞争优势;文书什么的也建议认真准备,我身边就有一个朋友标化成绩不错,但是因为没有认真写文书而被CMU拒了。实习、竞赛、海外交换、科研等也去试试,毕竟这些经历有时也是我们拿到AD的关键。
项目里中国人占了大多数,同胞很多的好处就是大家即使在异国他乡也能够感到亲切,可以相互照应,不足就是和外国人交流的机会比较少,口语水平提升得很慢。CMU本校区的学习氛围非常好,周围的同学都非常认真,当然这和CMU繁重的课业压力有着很大的关系。对于我来说,研究生期间和本科相比简直是太累了,CMU的课程设置和上课节奏逼着我们不断去学新的东西,不断进步,感觉这两年学的东西比本科四年学的还要多。我一般都是每天从早上10点,学到凌晨2点,每天都在写作业中度过,即使这样拿A还是很难,我一般都是拿B,CMU大佬太多了,学渣实属不易。另外master还有一个特点就是刚来就要着手准备找实习了,再加上上课节奏很快,这样就会导致要做的事情特别多,回忆当初,我每天不是在做作业,就是在找工作,实在是太难了。当然找工作这个是我个人的情况,如果有同学喜欢做研究的,和教授联系就行,教授们都很和蔼可亲。

选课推荐
上面说到过CMU的课业压力很大,而且根本就不存在那种能够轻松就拿高分的水课,所以不要冲动一个学期就选好几门课,如果这样你会发现自己会被无穷无尽的作业淹没,永远都在为了赶上ddl而努力着…而且抛开workload这方面来说,课程的安排也在很大程度上影响了我们以后就业的方向,所以在仅仅三个学期里,选什么课、怎么选课对于毕业后的发展非常重要。
先说明几点:
1、我在CMU三个学期的绩点
是3.1-3.4-3.5,成绩属于中下游的那种,所以这个选课推荐对于学霸可能不怎么适用,学霸们请尽情地选难度更高的课程吧!
2、因为我的就业目的非常明确,所以选课都是奔着能够学到有用技术的课程去的,这些课程的workload都很大,也很耗费时间,还有就是不容易拿到A,如果很在意绩点的同学,可以选一些其他的容易拿高分的课。
3、我当初选的课都是偏SDE(软件开发)的,所以这些课程对于想往ML方向发展的同学参考性不大。
4、以下选课推荐更适用于Fall入学的学生,如果是spring的学生,可以适当做些调整。
5、CMU很多课程的上课内容只和教授有关,和课程的名字没有太大关系,所以以下我推荐的课程也存在这种情况,建议选之前先打听好授课老师。
6、据我所知现在的选课规则有所变化,而我当初在的18spring选课是非常自由的,建议大家选课先按照毕业要求来选,再根据自己的就业方向来调整,我的选课只是给大家一个参考,如果能够帮助到你们那自然是再好不过的了。

第一学期
必选:
18-613 Foundations of Computer Systems
这门课是最基础的系统课,因为我本科就是ECE相关专业的,所以刚开始的时候我觉得这门课对我来说应该是不需要的,所以去询问了老师,但是老师给我的答案是"You do. This course is different.",之后上下来觉得这门课真的太值得了!课程的内容和相关的作业、资料都已经有了数十年的完善,质量非常高,不管是本科是不是CS专业的都推荐你选,因为这门课可以给我们接下来要上的课程打下坚实的基础,好好学,后面的内容就会轻松很多。同样的,我们也可以通过这门课来对自己的技能水平进行一个评估,如果拿到了A,那么就说明以后上其他的课程是没什么问题的;如果像我一样不幸拿到了B,那么接下来的日子里还需好好努力。
课程的内容和15-213/15-513的教学内容和教材都是一样的,但是我个人觉得两者的课程质量还是有些差别,建议大家预习、复习的时候直接看15-513的视频,有时候直接用它代替ECE的这门课也是可以的哈哈哈。
10-601/10-701/18-661 Introduction to Machine Learning
这三门课都是CMU Machine Learning系列课程中的基础课,区别在于10-601比较基础,有的老师会叫我们做project,以后可以写进简历;10-701很理论,因为是PhD的课所以有很多难度较大的公式推导,这个并不是ECE的课程,但也算是核心课;18-661是ECE的核心课,也是偏理论的课程。三门课选其一就行,因为他们的作用在我看来是差不多的,作为ML的基础课,他们的一大作用就是让我们确定自己是不是适合往ML这个方向发展。如果你觉得学下来非常有趣,那么以后就可以选偏ML的课程;如果学下来觉得不太感兴趣并且得到了不好的成绩(比如我),那么就试着往其他方向发展吧。而对于之前就有研究过ML的同学,这门课也可以让你们回忆起基础的知识,并进行进一步的巩固。
另外这三门课还有一个优点就是老师给分都挺高,相对来说拿A是不难的,我认识的同学都拿了A,只有我拿了B。看到这个成绩我就充分认识到我的数学水平限制了我走向ML的道路,所以转而投入了SDE的怀抱。另外需要注意的一点就是,这三门课每个学期的授课老师都是不同的,上课的内容和质量也有所差别,所以选课前要先打听清楚,以防踩雷。

18652 Foundation of Software Engineering
这门课是硅谷
校区SE的必修课,课程的主要部分就是组队做一个老师要求的project,要使用node(express)作后端,中间会用到很多web tool/library/framework,用的语言是js,如果做的好的话对简历的帮助很大。项目每两周一个iteration,每周都要和助教汇报项目进度,然后每隔两周给助教演示一次,过程中我们各种git practice, code review, ci/cd,testing testing & testing, 检查代码风格甚至还有pair programming,不得不说如果没什么基础的话做起来还是非常吃力的,比如我,当初几乎天天都在搞这个东西。所以这里提醒大家,如果想选这个课,建议先提前了解一下具体的作业内容,看看自己能不能hold住,如果觉得难度太大那还是放弃吧,因为不仅自己学得很费力,然后小组合作,也许还会成为拖后腿的存在;如果自己本身有基础而且想锻炼一下的话可以选,记得选一个大佬当队友,会非常加分!
课程的项目部分很好,可是老师的讲课水平其实不怎么样,上课经常讲一些和内容无关的software engineering practice,感觉非常扯。期末有考试,考试内容很迷,单选、多选、简单的js testing代码都有,而且找不到方向复习,所以想拿高分还是要上课活跃一些,这样平时分会很高。
17-681 Java for Application Programmers + 17-683 Data Structures for Application Programmers(如果只能取其一,建议选17-683)
这是两门推荐搭配的课程,由同一个教授上课,一门前半个学期,一门后半个学期,属于mini course。这两门课强烈推荐给数据结构和算法的基础不太好的同学,授课老师的水平很高,上课用到的资料很全面,讲课思路清晰,很有利于我们理解题目。只要学好了这两门课,那么自己刷题的时候基础的题目一般都会做了,一些难的题目,看了解法也都可以理解。
39-699 Career & Professional Development for Engineering Masters Students
Master刚来的时候就要准备找实习了,这门课很有帮助,所以建议第一学期选。这是CIT学院的职业课,上课时间是在上半个学期,这门课教我们怎样写简历、LinkedIn和handshake,并且老师会布置作业让我们学会修改自己的简历,让其更加完美。

第二学期
必选:
15-640 Distributed System
这门课是我在CMU上过的最喜欢的课程之一!这是CS本科的系统必修课,不仅课程内容质量高,而且授课老师水平也非常高,一致获得了同学们的好评。整个课程上下来能学到很多东西,对于后端的理解很有帮助。课程有4个homework,4个project和2个midterm,每个星期的作业量都很多,遇到bug的时候简直要怀疑人生,这种时候就要积极和小伙伴们讨论一起解决问题,毕竟CMU本科生高手云集,大家互相学习都能够进步哒。这门课的成绩非常真实,就是我们考多少就是多少分,即使是全班考出来成绩都不理想,老师也不会调分的,但是这并不影响它的实用性和受欢迎程度!另外需要注意的是,Fall和Spring两个学期的内容有所差别,Fall用的是Go,Spring用的是Java,同学们要自行选择。
15-719/18-847 Advanced Cloud Computing(只有Spring开)
这门课是ECE开设的核心课程,其实和上面的Distributed System课程内容有很多都是一样的,可以说是低配版的DS。低配的原因是授课老师讲课太顺便了,上课容易犯困。但还是建议选了DS后再选这门课或者两门课程一起上,更有利于我们对这方面的理解。还有一门版Cloud Computing的课和这门课名字类似,但是这门课比CC好点,workload也比较小。

18-845 Internet Service (只有Spring开)
我对于这门课的喜欢程度不亚于DS,强烈推荐给想读PhD或者是喜欢读paper的人选!这门课就是专门读paper的课,上课的形式是大家坐成一个圈一起讨论某一篇paper的内容,而且人数很少,才十几个人,授课老师是Foundations of Computer Systems教材的编写者,真正的大佬!所以在课堂上需要非常认真地思考,周围都是学霸,教授也非常博学,自己都不好意思划水。这样一来能够学到的东西就更多了,一周两次的看论文时间能够提高我们的眼界和逻辑思维,同时讨论的环节也锻炼了我们开口说话的勇气(这对于中国学生来说很不容易),你提出的任何问题老师都会亲自解答,更何况老师还是这么资深的大佬,这样的机会对于研究生来说是很少的。建议这门课和上面推荐的两门课一起选,因为我们上课读的paper很多都是ACC、DS两门课所要求的,有了这门课的助攻,对于那两门课程的理解就会更加深入。
小班授课+自主讨论这样的上课形式对于出勤率的要求很高,一个学期最多缺勤两次。作业的话是每周写课堂上所读论文的读后感,另外还有一个Individual Project和一个Group Project,对于project老师没做要求,难度随意。总之整体上下来我觉得这门课最重要的是锻炼了我们的思维,无论是上课还是作业,老师强调的都是我们要有自己的想法,而不是人云亦云。
17-437/17-637 Web Application Development
CMU名气很大的课程,也算是神课之一了吧,教我们去全面了解全栈web开发。推荐在第二学期选这门课的原因是在这个学期,我们所学的知识刚好能够应用到这门课所要求的作业中,从而得到很好地锻炼,我们所做的project也可以写进简历里,对SDE来说找工作很管用。课程学的东西不难,但是节奏很快,作业量也很大,每周都被homework和project轮番轰炸,认真学的话是可以拿A的。

第三学期
这个学期的情况比较特殊,因为我们都要忙着找工作,可以花在上课上面的时间是有限的,所以这个学期可以选一些轻松点的课,最好是没有考试的那种。但是我还是坚持不选水课的原则,因为我觉得,反正都是要上课的,花同样的时间,为什么不去学一些更有用的知识呢?即使是最后一个学期,我们也可能会做出比之前更好的project来提升我们的背景,而上一些水课是不会有此机会的。
可选:
11601 Coding Bootcamp (只有Spring开)
这是一门上课=刷题的课程,用的教材是Cracking the Coding Interview,教材很好,然而老师的讲课水平不咋地。我感觉都是凭着以前的基础在刷题,所以如果数据结构和算法基础不是很好的同学记得不要选,你们会学得很痛苦,但是对于基础还行的同学就很推荐,因为找工作本身就是要刷题的,既然这样,那不如趁着这个上课的时间来练习一下。

11-642 Search Engine(只有Spring开)
这门课和18-845一样要读论文、写读后感,但是和18-845不同的是,上课的重点不在于讨论,而在于公式推导,所以数学的不好的同学谨慎选择!如果数学不太好但还是想选的话记得找一个好队友!老师讲课水平很高,课程质量非常好,workload因人而异,毕竟公式推导…
16-720 Computer Vision
我当初上这门课的时候是比较轻松的,没有project和考试,只有5次作业,一般写完作业就有A。不过据我所知这门课每个学期都不一样,所以不知道现在怎么样,建议选之前还是提前打听一下,如果轻松还是很推荐的。
选课的推荐就到这里,以上都是我自己上过的或是身边的朋友上过的课,无论是质量还是课程安排都是很好的。CMU是以CS为优势的学校,你可以在第一个学期的时候看看自己对哪个方向感兴趣,确定了就往那个方向选课,毕竟在CMU,什么课都有,各自神课随意选,资源非常丰富。但是不要因为神课多就全部都选,一定要考虑workload,建议在选课前在课程官网上看看这门课在这个学期的安排,然后把每一门课程的安排都列在日历上,如果出现事情都堆积在一起的情况(比如一个星期有三门考试或者好几个大作业),那就可以考虑把其中一些课程换掉,不然真的会吃不消的。

关于AIV
AIV其实就是Academic Integrity Violation,泛指抄袭或是作弊,我们在国内读本科的时候没什么感觉,但是CMU对学术声誉的规定非常严格,对于这些非常敏感,我身边不止一个原本成绩不错的同学,却因为抄袭/被抄袭或是看GitHub的代码而挂科甚至休学、退学。
像一些大课,比如Introduction to Computer System, Introduction to Machine Learning这种,越是基础的课程,学校抓得越严格;另外比如Cloud Computing这门课,老师会追踪你在每道题上所花费的时间来判断你有没有抄袭。我做TA的时候,有一组同学用GitHub上的project作为参考,即使后来他们自己写的project与之相比已经改了很多,但还是被老师判定为抄袭。抄一抄学长学姐的作业,用一用他们的代码,从网上参考一下GitHub里的代码,三五成群地做个人作业等等这些都可能在CMU构成AIV,所以我们一定要对AIV重视起来,不要觉得上面的做法都是一些无所谓的小事。
关于就业
我们这一届的就业情况整体是很不错的,只要公司招聘,我们就都有人进去。CMU的career fair很好,我的实习就是通过career fair找到的,全职也是career fair,外加内推。学校的career fair每年都会来一些大企业,机会很多,建议大家认真准备参加。然后上面也有推荐一些对找工作/完善简历帮助很大的课程,有需要可以选,有时候hr就是看中了你的某一个project也不一定!
刚来的时候不懂得要怎么选课,全部都是看着课程名字和自己想象乱选一通,也因此踩了一些雷。通过上面的选课推荐希望学弟学妹们对于CMU的课程了解有所帮助,开学后好好排课。在CMU的这段时间虽然每天都熬夜,每天都很累,但正是这样我才学会了更多,付出的努力都是会有回报的,也希望正在申请路上的你们也能够得到一个好的结果,共勉。
