CMU ECE MS就读体验+一点点选课感受(struggle版)

avatar 289440
rosaline1995
34053
40
(写在最开头:就像我在前面回答问题说的那样,我个人虽然专业背景和项目匹配度很高,但本科的时候比较浪所以基础很差,个性也比较孤僻所以没人抱团,所以在这边成绩一般,学习吃力,信息来源也有限。以下选课信息和 上述体验,只适用于和我一样不那么擅长交际、没人抱团只能单打独斗以及基础较为薄弱的小伙伴。带着“中国学生只要学了就能拿A”的这种想法来看我写的内容,可能会比较容易失望,不建议浪费时间阅读)

到CMU也有两个学期了,拿到offer时惊喜激动不敢相信的心情却还清晰如昨。正好赶上寒假比较闲,索性开个贴总结一下自己选过的这些课和在这边的求学体验,如果能给后来者一点参考就最好不过了。

个人背景:国内某985通信专业,学校综排很好专排很差,综合GPA 85出头,专业GPA 不足85,T104 G324+3.5,无长期实习,只有比较水的电赛+美赛经历,和一次非常水的为期一个月的实习。有两次全奖交流经历,分别是台湾一个月+欧洲一学期。

能够拿到梦校的录取非常意外,投递申请的时候完全没想到会被录取,虽然投了秋季拿了春季(argue过但毫不意外地失败了),但还是高高兴兴地来了。gap的半年在某大厂做了一段没什么技术含量也不赚钱的实习,后来想想倒真不如留在家里认真预习一下课程来得划算——毕竟第一学期同时要适应新的环境、英语授课、美式学习氛围、和国内大多数本科院校相比陡增的任务量,还要学习繁难的课程、应对肝不完的due,起码来说,提前学一下几乎人人都会选的15213就能大大提升第一学期的幸福感。

生活和学习方面的大部分体验都在回答问题的时候讲过了,那么接下来就聊聊我的project和我修过的这些课:
我的project是MS in ECE 1point3acres.com CMU,最短一年最长一年半,不允许延期。每学期至少要修36学分,至多允许48学分。一门时长一学期的课是12学分,持续半学期的mini是6学分。毕业要求是96学分(60学分核心课,36学分任选课),这学期更新了核心课的要求,原来是只包括18-6xx (ECE类课程)、15-7xx(CS类课程)及以上level的课程,这学期把10-6xx(ML类课程)等多个学院的课都算进来了,但是“最多只能修4门ECE学院外的课程(也即课号非18开头的课)”的要求不变。不过考虑到有一部分CS课和ECE是共享课号的(两个课号,选的时候填入属于自己系的课号),加上ECE自己也开了很多偏软件的课程,我觉得对我来说基本足够。

选课方面:
18613/15513/18213/15213(原来的18600):Introduction to Computer System,传说中的“神课”,“优秀程序员入门必备”。基本上所有同学第一学期都会修这门课。用C写作业,最大特点是lab很有含金量,虽然比较繁琐也有点难,但要求非常清晰详实。考试刷题即可,做好时间规划刷好practice exam就不难。
Academic Integrity Violation查得非常严,一定要自己写代码,如果有可能的话连网上的代码都不要看避免干扰思路,或者起码全写完再看。 我第一学期修这个课的时候,有次lab据说抓住了70%的抄袭,一次性把这些人全挂了。
19 spring做了改革,单独拆出十节课由一个维也纳的老师来讲,剩下的课让大家去听15213或者看15213的录屏。作业也是跟着15213做,另外拆出两个extra lab作为18613的bonus,但不强制。这个欧洲教授的口音让我实在有点接受无能…讲课节奏也让我忍不住地打瞌睡。期中期末都是review session会给18613的学生多上一小时,复习18613的知识,给一些例题,考试的时候18613的学生会多一道题,但是题目和单独讲过的内容基本重合。我感觉整体就非常鸡肋,增加了很多搞不定的额外负担也没太大意义,到最后还是没多学到什么东西。因为初来乍到实在是不适应,这门课我第一学期修的时候前半段崩得一塌糊涂,期中之后就直接withdraw了。不过考前有一次跑去professor办公室哭说“我真的学不会”,教授很耐心地问了我的学习习惯,强调了“一定要多去office hour有不会的要抓紧问,有想法要表达出来不要放大困难”的这个道理,我觉得是很受用的。
19 fall再次改革,换了一个讲课条理很清晰、人也很耐心但是说话爱卡顿的美国老师,18613单独授课,一切内容都和15213一模一样。上学期15213有三五个老师来讲,这学期则只有两位,一个是年轻的语速飞快的30+教授,还有一个就是写教材的Randal Bryant老爷子,讲话慢吞吞的,但是讲的都是重点。前半学期因为暑假重学了一遍K&R的C语言教材+课程内容,所以非常轻松愉快,后半学期完全是从零开始新学,加上其他课事情多起来了,所以就非常灾难…
建议:
1)如果C基础不牢靠的话建议入学前读完K&R的C语言教材,充分理解指针的概念。
2)如果有可能的话入学前就写几个lab心里有个底儿,资料网上都很全。
3)上佳选择是边学边读教材,甚至不去上课只读教材,但是很多人往往没有这个耐心,仅供参考。
4)考前刷题很有用。

10601:Introcduction to Machine Learning,用Python(作业允许用Matlab/Octave/Python/C/Java等等,但是大多数人最终都会回归Python的怀抱)。
如果对ML有些好奇不妨一修,上完课之后大概就对“自己是否适合搞ML”这件事儿有个概念了。至少本学渣上完之后再也不打算摸ML了,惹不起躲得起……教授郭美丽是真的帅,英语也很标准,但是我就是不能够很好地消化知识,一考试就跪在大片大片的记忆和概念题上。代码部分倒是真的不难。大佬们都说这是一节轻松愉快作业也不难写的课,期末给分会curve很多。
建议:
1)多复习多看笔记多去office hour,有概念问题一定要抓紧跟TA沟通及时解决,不要等到要写作业了才去office hour排长队,会很焦虑。
2)课后professor推荐的阅读材料最好能读一读,有助于提升阅读速度 ,加深理解,写lab也会松快很多。
3)养成良好的Python编程习惯,熟悉class, 最好还有list和dictionary(具体指alias、浅拷贝深拷贝之类,有助于debug).

17637:Web Application Development,我上的是春季学期的课,幽默风趣的Jeff老爷子上课,用Django做框架,语言是Python,还会学一点点JavaScript,给分不错,结课需要project和final exam,做project的队友非常重要。
大佬们都说讲的东西特别基础收获不大,我学起来也微微的吃力,不过个人觉得这还是蛮好的一节课。课程轻松有趣有录屏(PPT上只摘录了主要知识点,具体细节都是上课的时候教授通过带着大家去看例子的代码来讲清的),workload只要上课听懂了就不算大,debug也不难。往年据说都是人工批改,而后给大家一段时间来修正自己交上来的作业里的错误,我们这学期是头一回用了批改机,需要等待TA把批改代码写出来,所以相当于可以迟交(虽然不太光彩)也可以反复多次提交,学期内的偶尔一两次算分的quiz也全都是做完对完答案再交,整体非常宽松。期末做project充分应用所学、看大家各种奇思妙想的过程特别有趣。
一开始一直在wait list里差点以为都挤不进去了,后来一直坚持去上课,教授要我们把名字写在纸条上交给他,他又扩充了名额,才算是 把所有人都捞上来。很幸运地,在我这个过得乱七八糟的第一学期,在这个课上机缘巧合遇到了非常给力的队友,大佬几乎一手包办了所有课上没学过的有难度的内容,而且给出了非常明确的分工、project时间线和project内容规划,我只要顺着一一做完、完善细节即可。最后的得分也很不错。期末是概念题+手写代码考试,需要对代码和框架的细节非常熟悉。
建议:
1)不懂的时候耐心看视频,不要急于Google,去Office Hour寻求帮助也是很高效的方法。
2)期末做project的时候明确目标(想清都需要实现哪些功能、具体如何完成 ),做好分工,定好时间线。
3)敲代码的时候少复制粘贴多手动输入,提高熟练度(养成条件反射的话期末考试肯定就稳了😂)。

15112:Fundamentals of Programming and Computer Science,大一的课,从零开始教Python,两个midterm一个final外加一个term project,非常美式的课堂,教授是我心里CMU最棒的professor之一的Kosbie.
之前就是在地里+知乎上看到同一个学姐的推荐,第一个学期觉得自己基础够好也学过Python没必要重复劳动,结果经历了生活的毒打之后决定还是放平心态从零开始,顺便感受一下传说中“全美最好的五节本科生课之一”是个什么样子。一学期下来的感觉就是,虽然累但超级超级开心!Kosbie真的是一个元气满满有神奇魔力的教授,心态年轻为人幽默,有各种奇思妙想,对学生像朋友一样~他常常强调“time is the most valuable resource here”,也能够感觉到他在课上充分践行了这句话,只剩下两三分钟他就有可能可以讲很多很多东西,三五分钟写出来的代码就感觉可以“make a difference”。我感觉自己原来是个时间观念很差缺乏规划性的人,而且第一学期心态差到距离due还有五六个小时的时候开始哇哇哭,还有三个小时的时候紧张到大脑停止思考,还有一两个小时的时候就彻底什么都做不了了只能眼睁睁看着时间流逝然后作业交不上。但是这学期就进步很多,可以抓紧时间刚到最后一秒,写出了蛮多我原来觉得“在有限的时间内根本做不完”的作业。Kosbie还常常同大家强调好的睡眠的重要性,每次考前收到他群发的邮件往往都是说“不要再复习了你已经知道得足够多学得足够认真了该睡了”,上课也会严格看着大家精准抓出玩手机打瞌睡的同学,说“希望可以通过这门课让你们认识到高中和大学的区别,建立起好的大学生学习习惯”。邮件的最后一句往往是“Carpe diem”,我一直以为是“及时行乐”,但他在期末前的课上对我们说,是希望可以每天都比昨天进步一点点,更接近自己的理想一点点。有时候上课也会听到他同大家谈人生谈理想,谈“应该利用你现在的优势地位促进平等、帮助弱小,你们还很年轻,要做自己真正喜欢的事,要做对社会好的事”,感觉是很一个很有理想信念的教育工作者。
同学TA差不多都是清一色的美国人,课堂气氛活跃,TA有好几十位,而且office hour持续时间长得不得了,piazza上也不管几点都有人在线,只怕学生不提问,不怕问题得不到解决。学期内有好几次活动,诸如hackathon或者puzzlehunt,我们临时到场临时组的一个小队居然还意外拿到了puzzlehunt的第一名,奖了一张100刀的礼品卡,挺惊喜的。学期结束的project真是八仙过海各显神通,我觉得自己已经尽量creative了,还是没什么拿得出手的idea。平常作业说清要求让我费点劲想一想还都能写得不错,但是这个project我是真的灵感枯竭,空有技术不知道做什么好……分配给我的TA年纪也很小 ,只有大二上 ,基本上就是问啥啥不知道任何意见都给不了甚至我觉得根本没懂我要做什么,跟她讲自己的计划的时候对方就说“我觉得不错这个想法好”,真正到了做出来的时候她又说“我看你这个太没有技术含量了我觉得你没通过考察”,明明前前后后说的东西是完全一致的……期末前的几周,我的好几门课大作业和projects挤在一起,我腾出相当多时间去做了这个project,最后拿到的分数还是非常非常差,而且是真的看了最终的project showcase才知道本科生是多么有能量……我都完全无法想象那么多fancy projects是大一学生的手笔,精致复杂又很有趣,太震撼了。
整体从零开始讲了一门语言,几种排序算法,时间复杂度的概念,NP-complete、recursion之类的概念,容量丰富,对计算机基础做了较好的概括和讲解。是一个不难但是要花蛮多时间的课:一周两节80分钟的正课,1节90-120分钟的advanced lecture,还有多节TA 90-120分钟的授课,分别是讲上周作业答案、复习这周所学内容、复习下周的quiz、点拨这周的作业,还有一节50分钟的writing session、一节50分钟的recitation和一节1小时的small group session(也是复习quiz)。然后还有大概耗时在5-20小时不等的作业。不过学完之后会有非常扎实的Python基础、英语口语听力能力的提高,有可能还能收获一个拿得出手的project,此外,对我来说还收获了一整个学期的好心情。拿出四节课之一的名额来上一节15112,我觉得划算。当然不建议大佬们修读,但是如果是转专业、对Python没概念的同学,不妨一读,上完之后的基础和自学的收获应该会不太一样。
建议:
1)上完课一定要抓紧复习notes,加深记忆,有些概念和模板很容易遗忘,要增加熟练度,有机会的话最好还可以再从头敲一遍example code。
2)TA的课只需去讲quiz的和recitation即可,重点是要掌握quiz的模式和出题思路,这样的话写起来就会比较得心应手。small group也可以去看看,多开口讲讲话提升一下英语能力。
3)term project开始之前会要求大家提交TA选择意向,建议不要学我佛系等待随机分配,一定要认真考察一下TA的背景,选年纪大一点经历丰富一点的TA,避免踩雷。
4)老生常谈,多问多沟通多表达。
5)考前的模拟卷最好做一做。

17681/17683:两门6学分的mini,分别是Java for Application Programmers(有录像),Data Structures for Application Programmers。韩国教授Terry Lee的课,是Jeff的好朋友,和Jeff一样耐心有趣、讲课细致,授课内容都比较基础系统,特点是给分超级差但是letter grade都还好(比如Java,最后40+就可以拿B-,70出头就已经是B+了)。
之前看过很多推荐说建议转专业的同学们上这个课,虽然我不大算转专业,data structure和Java我之前也都学过至少一遍,但是修完还是觉得很有收获。上课过程中看到有不少人为了省学分找同学要了course materials来蹭课,不过我个人还是倾向于选了然后去听,尤其data structure这门课。一方面是因为我人缘差确实不知道找谁要课程材料去😂,另一方面我觉得两门课的作业和考试都算是很有含金量,通过短时间内高强度的题量增强抗压能力,对熟练度提出了较高的要求,强逼着你去多加练习,同时Terry Lee非常善于设计quiz和final的考题,迫使你注意到课程里非常细微的知识点,有很多想破脑袋才能想通甚至只有跟TA聊完才能反应过来的edge cases,只有选了课写完作业交到自动批改网站才能被指出错误,空想是不能解决问题的。整体来说,这两门都是非常就业导向的,任务量也不算太重,除了一两次作业之外,大部分都可以在一天内搞定。
建议:
1)多复习,起码quiz前一定要复习一遍。我有一次太忙了没顾得上复习,结果眼睁睁看着很简单的题目愣是答不上,下场非常之惨……
2)作业赶在due之前起码两天写,一旦被错误卡出想不出原因就抓紧去office hour找TA,edge case有时候会很偏门很难想。
3)如果有可能的话,最好把example code都看一看,能手动敲一遍(尤其data structure)则最好不过。有助于大大加深理解,有效提高考试分数。
4)Java课上一定要记笔记,有很多东西PPT里没有,只在上课时由教授口述。

18645:How to Write Fast Code,很多人推荐的“水课”(但我个人并不这么觉得),四次作业一个final(并不在考试周)一个team project结课。
这门课最近几年似乎一直在改,至少我春季学期去上的第一节和秋季就大不一样,不是一个教授 ,大纲也截然不同。我这学期的教授是一个新加坡人,head TA是一个美国PhD小哥和两个印度MS。所有course staff都非常非常耐心负责,经常是本应一小时的office hour延长到两小时甚至更多,就为了帮大家解决问题。有一次我急着解决term project里的bug,赶在office hour最后几分钟才到,碰巧TA不在 ,硬着头皮发了一封邮件求助,结果没几分钟TA就过来了,耐心坐下来帮我debug了四十多分钟,还挺感动的。这方面来说,无可挑剔。
我们这学期大概讲了pipelining、throughput、latency等等基本概念,应用在kernel design中,还学了OpenMP、SIMD、MPI and Collective Communications,整体内容不算太多,每节课是110分钟,课上有非常多的小组讨论时间,但是可能是语言障碍以及教授表达的问题(当然我的渣渣理解力也要背锅),我理解起来还是有点吃力的,PPT放出来得也很晚,有时候催都催不动,piazza上回复得也很慢,还没有课程录像可供回看。但是如果勤去office hour的话,都是可以通过反复地提问重塑理解的。作业压力不大,每次作业多则三五天少则六小时,重点是很多时候要求可能比较模糊,要去Office Hour跟TA确认到底要问什么、思路是什么 。期末的project也很有用,因为不得不应用之前学过的所有东西,所以哪怕不理解也会通过反复的和教授、TA之间的沟通重新完成理解。期末考试占比30%,但是有和final出入不大的sample exam,只要好好做了考试就非常非常稳(没顾上做的血的教训就是我)。
建议:
1)课上一定要集中注意力听,因为有可能这节课过了很久很久之后才能看到PPT,如果急的话请主动催促。
2)多去office hour,有不懂的要赶快问赶快解决,否则可能时间久了迟迟看不到PPT上的知识点你都忘记了要问什么了。
3)抓大放小,只看主要概念,少看缩写等等,如果缩写对应的内容很重要的话,你总会在后面的学习里接触到的,不见得要急在这一时。
4)作业(尤其中间两次)最好提前三五天做,因为不接受late submission,一旦错过due date就会非常尴尬。
5)sample exam一定一定要做。

啰嗦了这么多终于暂时告一段落了。但愿这里面会有哪怕一点点有用的东西。这个寒假希望可以努力刷题下学期顺利上岸!
如果下学期结束进展顺利的话会返回再更新~
感谢阅读~

补充内容 (2020-11-12 13:26):
Update:因为20fall选课太猛了所以寒假腰疼了一个月除了睡觉和学了一点BQ技巧之外没干啥,最后一学期又撞上疫情,求职非常之惨OPT也批得极其坎坷卡了121天……

补充内容 (2020-11-12 13:26):
多亏最后一学期在lab一直干于是毕业成功由student转成了staff,拿到OPT之后一边在学校工作一边刷题投简历,苟到十月底终于上岸,马上要开始第一份在公司的工作啦!

补充内容 (2020-11-12 13:27):
如约返回更新一下最后一学期的选课情况,也算给后来者做个参考~(主楼没法儿更新了我贴在回复里)
40条回复