作者:知乎用户tAAI7O
链接:https://www.zhihu.com/question/24295398/answer/1927275447
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我是2018年spring入学CMU ECE SDE的,去年5月从CMU毕业。因为之前在CMU选课的时候走了不少弯路,所以就想着写一篇文章给大家提供一点选课参考,希望学弟学妹们看了之后能避开一些坑。后面还会讲一些我的就读体验和就业心得,所以这篇文章会有点长,需要一点耐心才能读完。
在分享之前我要先说明一下:第一,由于我本人是个学渣,具体在ECE三学期的绩点是3.1 -> 3.4 -> 3.5,所以我的这篇帖子大概比较适合基础和学习能力稍微弱一点的同学食用,我也不好在大神面前班门弄斧。
第二点就是,我的选课会偏SDE(软件开发)一点,可能对想做机器学习方面的同学参考价值不是特别大。
总的来说,我推荐的课没有所谓的“水课”,我对绩点也没有执念,因为我发现绩点对找工作意义不大,只要满足基本的毕业要求就行。再说你在CMU根本找不到所谓的轻轻松松拿高分的课。如果让我花费大量时间仅仅只为了拿个A,期间根本学不到什么东西,那还是算了,我宁愿花更多时间去学一点实打实的东西,哪怕成绩只能拿B也无所谓。

基于以上准则,下面我将展示这三个学期的推荐课程。
第一学期
必选:
18-613 Foundations of Computer Systems
这门课跟15-213/15-513的教材和教学内容一样,是最基础的系统课,被我划到必学的范畴。不管你是本专业出身还是转专业,想做的方向跟系统有没有关系,这门课都应该上一上。这门课的内容和作业已经经过数十年的打磨,质量已经比较高了,学了这门课可以给之后的课打下很好的基础。
哪怕你之前已经上过computer system courses,你仍然还是需要上一下这门课。就这件事我当初还问过老师,老师笑着跟我讲这门课是不一样的,现在的我早已明白了老师的话有多正确。
另外,在我眼里,这门神课还有一个特别的作用,被我当做一个自我衡量的标准。即:这门课如果能拿A,那你在CMU的学习就不会觉得困难,也能比较顺利地找到工作。如果只能拿到B(比如我),就代表你的水平还不足,你还需要继续努力。
前面有提到,这门课跟15-213/15-513的课程内容相同,但我个人觉得ECE的课程质量不如15-513。所以推荐大家可以直接看15-513的课程视频来预习、复习甚至直接上课,我觉得讲得更好。

10-601/10-701/18-661 Introduction to Machine Learning
这三门课虽然不是一样的课,但是名字和作用都差不多。我这个人比较直接,就直说了,ECE这边凡是课程名字/内容和CS的课“撞型”的课,一般很可能就是看着CS的课火才在近几年开设的。名字虽然模仿来了,但课程质量却远远赶不上CS,这种感觉就类似于东施效颦吧。
下面比较一下这三门课的异同:
首先是共同点,老师分都给得比较高,拿A的难度不大,反正我认识的人都是A(除了我)。对于初学者来说,这门课能拿A,就意味着你Machine Learning的基础已经合格,可以尝试更多ML方面的课程。而如果是已经在Machine Learning方面有一定基础甚至做过研究的同学,这门课就是来给你复习+巩固基础的,顺便还可以修个核心课。
其次是不同点:仔细比较起来,10-601的内容更基础,有的老师布置的project可以后续放进简历,但不算核心。10-701是偏理论的phd课,课堂上会有很长的推公式的环节,算核心但不属于ECE课程。18-661是ECE核心,这门课我没上过,听说偏理论。
至于具体的上课内容和质量就不好说了,因为这三门课每学期的老师都在变,课程质量和内容主要还是看任课教授,大家就上课前自己打听一下吧。
总结起来,以上这几门课属于第一学期必选课,因为他们是CMU Machine Learning系列课程的门槛。这个课可以确定你适不适合走Machine Learning路线,比如我,上完之后只拿了个B,瞬间认清了自己薄弱的数学基础,以及我是真的不适合走Machine Learning路线,从此我就收心找工作当SDE去了。

推荐一门找工作的课:39-699 Career & Professional Development for Engineering Masters Students
这是CIT学院的职业课,只有半学期,教的东西对找工作还挺有帮助的,会教你写简历,linkedin和Handshake,还会布置作业让你做修改改。建议大家第一学期都可以上一下。
推荐搭配:
17-681 Java for Application Programmers + 17-683 Data Structures for Application Programmers
这两门同属于Terry Lee教授的mini course,都是半学期的课,我的推荐是搭配着上。
这两门课非常适合基础不好的同学。17-683这一门我特别推荐给数据结构和算法方面有困难的同学。我特别喜欢Terry Lee教授,上了他的课你就会明白,他上课的时候会准备很多材料,讲课逻辑也很清晰,对我这种打基础的人非常友好。只要认真听了这两门课,之后自己刷题就基本能看懂题目了。
如果想节省一点非ECE课的学分(有限制),可以只上17-683这一门,实在想上17-681可以找上了的同学借视频看。

18652 Foundation of Software Engineering
这门课属于必修课,春季学期会广播到pitts。最大的优点是对简历帮助很大,会用到很多web tool/library/framework。 主要用的语言是js, 缺点是平时上课比较扯,讲的都是software engineering practice,理论部分多到让人头大,感觉听完也没什么用。
至于作业,这门课一开始的作业很简单,会给你一个hw0 用http://socket.io作middleware写一个非常基本的nodeJS(expressJS) 为后端的聊天室。像我这种没有一点正经web开发经验的人,大概也只花了两三天就把作业和视频介绍完成了。
后来就几乎是组队作业贯穿全程,老师那边会给一个规定好的project,强制使用node(express)作后端,其他方面不做限制。如果选的是很潮流的技术栈,自然会让你的简历增光添彩,比如react/redux这种就很有亮点。
如果想选这门课的话,我建议你提前评估一下自己是不是能hold住这门课的作业,如果实在觉得难那就还是别上了,否则你去了也只会给整个学期的组队作业拖后腿
记得当时我选这门课的时候完全是个web小白,硬着头皮也要上这门课,为了锻炼英语,选组的preference填了mixed。结果分到的队友就真的很mixed,一个队总共5个人,我们分别来自4个国家。当时我们组有队友强烈建议选angular当前端,但我对angular可以说是一问三不知,再加上印度队友几乎什么也不干,我就完完全全是零基础硬写整个组的前端,真的太难了。这门课成功地让我对印度队友有了阴影。

关于期末考试,题型一般是单选+不定向选择+简单的js testing 代码。感觉想光凭复习就拿高分根本没戏,主要还是看你上课有没有积极参与,组队作业完成得好不好,可能还要让队友喜欢你。
这门课的初衷本来是这样的:组队的项目每两周一个iteration,所有人的项目要求、requirement和feature都是一样的,每周给助教报进度,每两周给助教一个demo,期间就是各种git practice, code review, ci/cd,testing testing & testing, 检查代码风格甚至还有pair programming。
但实行起来就不是这样了,两周一次的iteration被我们变成了1天一次iteration。全程我们组就是一个队友把控大局,我和另外一个队友分别写前端和后端。最后写出来的代码虽然很差,但好在由于老师非常喜欢我们组的一个队友,最后给了我们个高分。
这门课我几乎全程是在自学写web,所以中间的practice可以说真的不太规范。我比较建议有基础的同学选择这门课,或者你要是能在组队的时候抱到大腿也行。当时我室友上这个课就很轻松,让我很是羡慕,相比之下我这个菜鸟就苦不堪言了,自己本来就是小白还要时不时demo前一小时修队友的bug。

第二学期
必选:
15-640 Distributed System
这是我在CMU最喜欢的一门课,没有之一,值得花掉一个非ECE课程名额!
这门课是CS本科的一门系统必修课,任课老师的水平都很高,讲课质量真的没得说,是我学到最多东西的一门课,对我理解后端帮助很大。你可以去看看他们每学期的评教分数有多高。这种高质量的课平时我们都是跟本科生一起上,他们的实力真的不容小觑,像我这种学渣就经常有一种被本科高手碾压的感觉。
这门课的workload还是挺大的,每学期会有4次作业,4个project 和 2 个考试。我当时几乎每周都在写作业当中度过,而且debug真的很难,有bug的时候真的欲哭无泪,想求神拜佛。但是如果能找一些同学跟你一起学,互相帮助,多讨论一下,可能会帮你分担一些压力。
另外,我觉得这个课程的评分也挺让我满意的。大概是CMU最有原则的一门课了,完全不调分,大家考多少就是多少分(全班都拿B也不调分)。据师兄说他那一届因为最后考试比较简单,最后统一向下curve了。
最后要提醒一下,这门课在秋季学期和春季学期的内容不太一样,Fall用Go,Spring用Java。我个人比较喜欢Go的版本,一般学一周之后你就能精通Go了。
这里附上课程主页:https://www.synergylabs.org/courses/15-440/

可选:
15-719/18-847 Advanced Cloud Computing(只有Spring开)
概括一下就是低配版的Distributed System,高配版的Cloud Computing。
这门课的内容可以说和跟DS大同小异,但是教授讲课质量赶不上DS,没有说教授本人水平烂的意思,只是课堂风格实在有点随便,挺催眠的。所以只称得上低配DS。
但跟CC比起来还是算高配了,因为至少有人讲课,workload也没CC大。
但我觉得这门课还是可以一上的,毕竟是ECE的core,要满足毕业要求。要是单独上效果不好,你可以选择跟DS同步上,或者上完DS再上,事半功倍。但是就不要先上这门课再上DS了,这样效果不好。
附课程主页:http://www.cs.cmu.edu/~15719/
18-845 Internet Service (只有Spring开)
我在CMU最满意的课之一,强推。这门课的老师同时也是这门课教材CSAPP(Foundations of Computer Systems)的编写者。
这门课是小班授课,人数会控制在20人以内。人少的原因据我分析是这样的:这门课主要是让大家读paper,上课时会让大家围成一个圈讨论某一篇paper的内容,你就在博学的教授和一堆学霸面前坐着,根本没可能划水,还必须要认真准备和思考,不然你开口就没有讲的东西,只能在大家面前献丑。

既然如此,这门课也对出勤率提出了硬性规定,即一学期最多缺勤两次。作业的话,是每周写两篇论文读后感,感觉这个写作对英语的要求不高,重要的是看你有没有自己的思考。还有一个个人的Project+一个Group Project,这两个project都没什么限制,让学生自由发挥。实现难度这些在老师眼里不怎么重要,一个新颖有趣的idea加上你独具匠心的思考才能得到老师的青睐。
可能这门课会让很多觉得“开口难”的中国学生望而却步,但这反而是我最喜欢这门课的一点。课堂上大量的讨论真的很难得,尤其对于我们这种不读Phd的人来说,基本没什么机会能跟资深的教授坐在一起,所以每周读两回paper真的让我很满意。不仅如此,你抛出一个问题之后,老师就在你面前亲自解答,这种问答环节不仅能提高你的口语和表达能力,还能丰富你的眼界和思维,何乐而不为? 另外,我还有一个意外收获,因为我这门课是和Advanced Cloud Computing同时上的,我发现这门课的必读篇目和ACC, DS这两门课都有大量重合。所以我相当于是花一门课的时间读了三门课的paper,而且还是名师导读的精读版,真的很值得。
附课程主页:http://www.archive.ece.cmu.edu/~ece845/
17-437/17-637 Web Application Development
很有名的一节课,因为每学期的授课老师都有变动,所以我这边没办法讲课程质量好不好,具体的课程质量还是要看老师。但总体来看这门课老师的水平都稳定在一个比较高的水准。
这门课的内容不难,但节奏很快。作业基本上是每周都有,Homework和Project都有可能,上完之后能帮助你全面基础的了解全栈Web开发。这门课只要认真学就能学好,也是我第一个拿A的课,所以我对这门课的感情还挺深的。我后来当了这门课TA,开发了第一代autograder,以后你们上这门课的时候还会用到我写的autograder。
另外提醒一下,这门课的project后续放进简历里对找SDE工作很有帮助,但要是最后一学期才上就来不及放进简历了。所以我的建议是:一定要在最后一学期之前上。

第三学期
最后一学期比较特殊,所以大家一定要结合实际情况来选。假设你这学期需要找工作,你可以选一些没有考试的课和相对轻松的课来缓冲一下,腾点时间给找工作。但我这个建议仅仅适合最后一学期,其它学期我不建议牺牲课程质量来给找工作让步。
两个原因,一是因为你没办法保证在课程那里省下来的时间都能真的用在找工作上,而人的时间是可以挤的,不如逼自己一把。二是,最后一个学期之前,你都有机会在课程中得到含金量更高的project来充实你的简历,但如果是质量差的课就没这个收获了。
可选:
16-720 Computer Vision
这门课每学期都在变,所以具体课程内容和质量不好说。我只知道我上这门课的时候,一学期只有5个作业,project和考试都没有,所以全程学下来没什么压力。只要合理安排时间,并且早点开始学习,一般作业都能拿A。按照我当时的课程质量,这门课还是比较不错的,推荐给大家。

11601 Coding Bootcamp (只有Spring开)
这门课强力推荐给找工作的朋友,反正找工作也要刷题,那不如来这个正宗的刷题课,平时上课就是刷题。教材就是著名的Cracking the Coding Interview。
但这门课的老师讲课质量一言难尽,基本没啥效果。所以不太建议没有数据结构和算法基础就想强行刷题的朋友来上这个课,我建议去前面推荐过的17-683。
11-642 Search Engine(只有Spring开)
这门课的内容没有想象中那么黑科技,就是非常传统的类型,平时一样要推公式+读论文+写论文读后感。课程质量很稳定,老师讲课水平也不错,load大小就因人而异了,看个人兴趣。像我就不行,推公式简直会要了我的命,我只能选择抱大腿。

三个学期的课程推荐都讲完了,接下来我做一个总结:
总的说来,CMU是CS大校,课程资源的丰富程度超乎你想象,只要你想学,几乎都能找到,我上面提供的这个选课单仅供大家参考。但这些课程都是我或者很亲近的朋友亲身体验的,所以还是比较靠谱的。
我还有一些tips提供给大家——
第一,不要被课程的名字所迷惑,其实课程内容只跟教授有关,具体内容最好是在上课之前打听好。
第二,CMU的课程workload都很大,所以记得正确评估自己的能力,看自己能承受到什么程度。workload超负荷的话,你恐怕一整个学期再怎么努力学也得不了一个很理想的分数。我建议大家在选课前去课程官网上看看,评估一下这个学期的排课适不适合自己。如果目前的排课组合让你有一种忙不过来的感觉,考试作业超负荷的话,你可能就要考虑换一个组合了。
第三,如果能和小伙伴一起学习是最好的。毕竟大家选了一样的课,就能多交流分享,集思广益,互相帮助。

Last but not least,千万不要抄袭! CMU这边有多看重学术声誉,它的规则就有多严格,就算每一门课都有不同的底线,但抄袭行为绝对是所有课都深恶痛绝的。其中又数Introduction to Computer System, Introduction to Machine Learning这种基础大课最为严格。还有Cloud Computing这个课,老师甚至会追踪你在Quiz每道题上的停留时间来判断抄袭。
这里提供一段我做TA的时候知道的真人真事:有一组同学在Github上已经存在的project基础上写自己的project。尽管他们花了大量的时间改进,做出的project其实已经跳开了原来的那个project,但这依旧是抄袭。project明令禁止用已有的代码,用了就是抄袭,不要自作聪明地认为不会被发现,其实有专门的追踪工具。不管是抄袭还是被抄袭,用已有的代码作弊等等,反正跟抄袭沾了关系的人,结果都很惨,挂科甚至休学、退学的都有,其中还不乏一些成绩很好的同学,大家一定引以为鉴。
PS:我们18Spring选课很free,所以我选的都是自己真心想上和干货很多的课。现在ECE的选课规则貌似有变动,学弟学妹们可能需要看一下新规则和毕业要求,自己做一下调整。
关于课程的部分就到此结束,后面是我在CMU的就业心得和就读体验。

就业心得
读研之后才明白节奏有多快,一来就要找工作,我因为拖延症吃亏良多。希望大家就不要像我这样了,尽量早点开始准备。
我觉得CMU的career fair效果还可以,推荐给大家。我的实习就是在career fair找到的,正职是career fair + 内推。大家参加CF之前记得一定要认真准备。
另外,我前面在第一学期推荐过的那门找工作的课效果也不错。
至于就业情况,感觉我们这一届(17 Fall & 18 Spring)的情况还不错,主要还是靠亚麻爸爸那边捞了很多人。基本上只要公司招人,我们专业都有成功拿到offer的。
就读体验
首先讲讲学习方面。
我本科毕业于国内某985ece相关专业,来CMU学习之后,觉得这里的课程压力大到让人想退学,毫不夸张的说,我来这的第一个学期真实地每天赶due赶到崩溃,就这样了还有好几次赶不上Deadline。一路这样熬过来,还好我还能求助一下身边的大神,真的多亏了他们的帮助和鼓励,我渐渐地有了进步。

我每周的学习时间基本就是1027,就是每天从早上十点学到凌晨两点,一周七天从不间断。但也有睡得更早,起得更早的同学,这个作息就比较健康,但感觉大家的学习时间都差不了太多。大家都一样,几乎所有时间都被上课+写作业+找工作占满。其实也有效率低偶尔放空的时候,但真的没什么时间娱乐。
至于成绩,我这个学渣要想拿A是真的难,拿B还是可以的。只要态度认真一点,努力一点,毕业要求还是比较容易达到的。想要高绩点就要更拼了。
虽然我前面感叹了一大段学习的艰辛,但不得不说,CMU主校区的学习氛围真的很能感染人,课程设置和强度很大,学下来不仅能锻炼人的意志力和学习能力,还能治疗拖延症。我这两年学的东西是大学的时候所无法想象的,可能这就是先苦后甜吧。
关于做研究方面的信息,因为我个人目标是找工作,所以不是很了解。但据我所知,只要你主动一点,就能和教练联系,教授们都很approachable,很好说话。我个人因为当TA,所以跟TA那门课的教授很熟悉。

接下来讲讲生活方面。
我在CMU的生活还算不错,吃的话可以点中餐外卖,选择还挺多的。学校里面中国人含量还挺高的,所以交友不愁,大家也经常交流。我就住在一个全是熟人的公寓,平时经常上下楼串门,大家一起过年过节特别热闹。我很感谢大家的帮助和鼓励,多亏了他们,我在CMU才感觉有了支撑。
但是同胞太多也有个缺点,大家平时和外国人交流的机会比较少,所以不太利于口语锻炼。想要提高口语,关键是看你自己愿不愿意开口说话,不开口就永远没办法克服交流障碍。我自己就是一直喜欢主动出击到处开口交流,后面口语提高了很多。至于托福GRE多少分,其实参考意义不大,我就不说我多少分了。
至于跟外国人交流要看机会,有机会一定要抓住,我当TA的时候,就常跟同事们交流,其他的话没啥机会。但我真的每参加过这边的party,可能CMU真的不太存在party的可能性吧。不过要是放假或许可以试试看有没有时间。
最后提醒大家,匹兹堡很干,冬天很长,南方的小伙伴来这边容易皮肤过敏,所以记得多保湿 & 加湿。

这篇长文到这里就要结束了,希望大家看完能对CMU ECE的SDE项目有新的了解,尽量少走弯路。
AdmitWrite,基于共享经济模式建立的知名互联网留学平台,留学届Uber。迄今为止,平台入驻世界顶级名校导师已超过1000名,实现美国TOP30,英国G5,澳洲八大等多个地区名校全覆盖。学术大牛?名校学霸?外籍名校导师?牛人汇集地,你想要的都在这里。人文社科/商科/工科?理科/艺术/法学?不管什么方向,我们都能为你匹配同专业名校学霸,申请so easy!中介价格不划算?线上模式,拒绝无谓成本,打造极致专业度,极具性价比服务,让每一分钱都花到实处。
大牛谈留学之申请硬知识可以关注专栏:
学霸谈美国申请:哥大学姐带你冲藤校
大牛谈英国留学:剑桥学姐带你申海外名校
海量名校实战申请经验:海外名校申请经验