CMU-SiliconValley-SE和Columbia-MSCS怎样选择
本人就读于哥伦比亚的MSCS项目,在这里借题主的问题和大家介绍一下这个项目的课程设置,并分享一下我的就读体验(包含生活、学习、就业等)希望看完本文能让你更加了解哥大,对想要申请MSCS项目的学弟学妹一个参考。
招生问题首先是大家比较关注的招生问题,哥伦比亚大学的MSCS项目招生人数还是比较多的,每年招生大概在200多人,而且中国学生的比例比较高,大约60%-70%都是中国人,其他主要是印度人、美国人、韩国人,再就是一些零零散散国家的人。而在中国同学之中,美本和陆本的同学人数基本上是五五开的。哥伦比亚大学在招生时的要求也是比较严格的,我觉得在我身边的国内同学水平都是很高的,身处其中还是比较有压力的。
学习体验不过今天我主要分享的不是申请部分的内容,这部分我就不赘述了,接下来进入正题,那就是哥伦比亚大学MSCS项目的学习体验。这个项目给人最为直接的感觉就是工作量大,学习压力更大,因为需要上的专业课很多,而且基本没有水课,所以我基本天天都泡在图书馆里。就算这样我还是觉得有些吃力,哥大的这个项目的要求是在三个学期修完10门课之后毕业,基本配置一般是442,四节专业课一起上的话作业是很多的,一个作业可能就要花上一天的时间,再加上还要刷题找工作,时间也是很紧张的。另外开学一个半月就会有期中考试,还需要分出精力来复习,那种紧迫感也是可想而知的。
选择这个项目的新生在刚刚入学的时候需要选择一个track,这个时候大家只要选择自己最喜欢的track就可以了,因为如果大家不是很喜欢自己选择的track的话,第二个学期是可以进行更改的。我建议大家选择machine learning这个track,这是因为这个项目选课十分的友好,基本可以选到所有的课程,因为这边分配选课是要根据你选择的track来进行优先分配,machine learning这个track优势还是比较明显的。
选课问题说到这里我再和大家说一下哥大的选课,在刚来哥大的时候我也被选课折磨了一番。说实话我之前从来没有见过哥大这样的选课模式,大家什么课都可以随意选择,所以我们只要下手稍微晚了一点,就呆在waitlist里面了。因此在开学前两周的选课周里,最好要尽自己所能去听所有的课,因为我们一旦选不上自己心仪的课程,还可以妥协去选一些别的课。这个时候如果我们前两周的课没有听,那么很可能错过第一个作业或是老师布置的选课认为,这样就失去了机会。因此在这边前两周我经常需要去听很多自己不喜欢又听不懂的课程,这对于我来说真的是一种煎熬。
所以我觉得选课一定要趁早,而且大家在选课的时候不要都去选硬课去值回学费,实际上在这里无论你选择了什么课,最后都是自己做reading,之后做作业,如果你选的课太硬,reading做不完的话后续的作业就会很麻烦了。事实证明我的这种想法是非常正确的,因为虽然我没有做project,但是OS也一直都是赶deadline的状态,一个学期需要学完APUE、OSTEP、Linux Kernel Development三本参考书,现在想起来都觉得有些残忍。
不过就算我们早早选课,像cv、ml这些热门的课程因为僧多粥少还是很难选到的,如果大家不能第一时间选课,那么就要进入waitlist了,有时一门课只有120人的容量,但是waitlist中却有150甚至200人在里面。不过大家也不用太过担心,因为我周围那些在waitlist的人基本在开学后一周之内都能选到课,这是因为哥大第一周是可以自由换壳的,而很多人在听课之后会放弃自己之前选的课程,不过这段时间也是很煎熬的,因为一旦真的选不到课还是很难受的。
项目质量说完了选课再说一下项目的质量问题,现在有很多的人说哥大的CS项目比较水,不过我并不是这么认为的,在我看来学习还是要靠自己,我们可以自己去选择一些硬课。像我选择的课程难度都不是很低,完完全全是靠自己的大量自习才能搞定的。而我选的课里只有一门我觉得有点水,那就是数据库,不过这也是因为我之前工作的时候使用数据库比较多,对于那些转专业没有相关经验的人来说,课程还是很有难度的。而且这门课的project是要在Google cloud上写一个完整的网站,这个工作量无疑也是很大的。
不过课程虽然不水,但是课程的质量也并非都那么高,这样也和授课的教授有着直接的关系。像我上过database system的课,这个教授给我的感觉就是他在外面有事业的,教书只是他的副业,在上课的时候他两道题就能讲上一个小时,甚至有些时候记不清上节课讲到哪里,作业给的也不是很好。而给我上machine learning的教授则活脱脱将这门课变成了数学课,作业很难,课程内容也十分的硬核,因此教授对于课程质量有着决定性的影响。
不过无论什么课程,这边教授上课讲的知识都是比较少的,一位教授的说法就十分的形象,他说他就像在教我们游泳,他只是负责把我们推下水,接下来都靠着我们的努力。有一个学期我选了四门课,其中两门课每个星期上课两个半小时,两门课一星期只上课一小时50分钟,剩下的时间都是自由安排的。不过有很多的homework和reading要做,所以时间是特别紧张的,因为老师在课堂上讲的东西是不足以帮助我们完成作业的,自学压力还是很大的。
而且CS的研究生项目是没有基础课的,像那种Python入门、数据结构入门这类帮助学生适应研究生的课程一概没有,因此几乎每一门课都需要我们自学很多知识。所以我们选课的时候也要做好规划,不仅是课程的难度,我们还要关注每一门课是否有期末考试,如果每一门课都有期末考试,那么我们也很可能应付不来。
因此这也要求同学们有一定的基础,像OS就需要我们很会C,同时懂得操作系统的概念而且了解文件IO、socket接口。而像machine learning这门课,老师会要求同学有很好的高数、线代、概率以及统计知识,如果没过关的话选课都不让选。
说完了这些选课方面的事情,我也和大家分享一下我选的几门课,让大家提前了解一下这个项目中课程的特点,这样大家未来选课的时候也可以做一个参考。
选课分享1、CSOR4231 ANALYSIS OF ALGORITHMS by Eleni Drinea优点
这门课的老师学术背景很厉害,她也十分的专业,在教学的时候更是认真负责,不仅在上课的时候所有的知识点都讲的很细,而且学生如果没听懂她还会回头重述一次。但是因为很多人在上课的时候经常听懵,所以她上课经常会重复,不过这也是没有办法的事情。另外她准备的算法案例不是那些烂大街的东西而是都经过了她的精心设计,可以确保同学们真正学到东西,而为了让同学们真正可以运用算法去解决问题,她布置的作业也不简单,不过两周一次的作业节奏还是很适合的。整个项目一共6次作业,加上一次mid term和final,作业而不需要写代码,都是设计算法,写出pseudocode。而且老师大概率会录制视频,所以很适合那些不爱去上课的同学自学。
缺点
不过这门课也还是有一些缺点的,首先就是老师对于同学们的期望太高,因此一个学期内包含的算法类型太多,知识量也很大,大家拼尽全力也只能勉强跟上老师的进度,压力山大。这也要求我们要有一定的专业知识基础,否则学起来实在是太过费劲。还有一点就是考试的时间太短,大约只有一个小时出头,不过题目量和一次作业差不多,所以考试分数普遍不是很高,只有数学大佬可以轻松过关,其他人就惨了。
个人建议
我之所以先写这门课的情况,是因为我当时考试的成绩真的有些不忍直视。这门课主要是算法设计,而不是背下来已有的算法,所以如果同学们在国内的时候就已经学过算法课或是有算法基础并不是太难,不然需要有很多练习才能融会贯通。总之我觉得这是必学的课程之一,这门课还是很有东西的,只是想要学好还是需要大量的时间的。不过如果你不是数学大神的话,我建议大家选择一些水课和这门课一起上,不然想要拿高分还是有些难度的。
2、COMS4118 Operating System I by Jae Lee
优点
接下来这门课学到的东西可以说是很多的,这门课的参考书包括了 \u0026lt;APUE\u0026gt; \u0026lt;OSTEP\u0026gt; 和 \u0026lt;Linux Kernel Development\u0026gt;,所以我们平时除了上课听讲之外,课外的阅读量是很大的,大家千万不要忽视这些参考书,因为上面的内容考试的时候是真的会考的。另外这门课的老师很有水平,专业知识也很丰富,最关键的是他对于Operating System是真爱,讲课也很有热情,而他布置的作业是急于Linux kernel的某个版本来做的,很多东西都需要我们自己读kernel代码才能写出来,非常的practical。这门课一共有7次作业,全是代码题,其中两次比较容易,是单人完成的,剩下的都是组队完成的,另外同样有一次mid term和一次final。
缺点
不过这门课也有一些缺点,首先就是课外阅读量的问题,虽然这可以帮助我们学到更多的知识,但是这阅读量的确有些太大了,一般的同学还是很难驾驭的。另外作业量也是很大的,因为这边的作业都是写代码,而其很多都要自己阅读代码差资料,所以尽管很多作业是组队做的,但是想要学到东西我们每个人几乎都是要自己完成一遍的,这个工作量也是很惊人的。
另外还有一点需要注意,那就是这门课对于同学们的基础要求比较高,如果没有足够的C语言基础那么就可以直接放弃了,而且这个课程也需要同学们有基础的Linux使用经验,毕竟这些代码都是在Linux上写的。
个人建议
有很多的人说这门课是哥大CS课程中难度最大的一门,我倒不是很清楚它到底是不是最难的,但是我知道这一定是学习需要花时间最多的,当时我也花了大量的时间在这上面,结果导致我算法死的很惨。需要注意的是这门课不是很容易选到,不过前两个星期退课的人也会很多,因为老师上课除了提到书上的知识,还会结合自己的工作、研究经验来补充一些内容,因此没有一定的专业背景和学习动力是比较难跟上的,所以退课的人也会比较多。
这门课前期会学习system call,之后开始进入kernel学习代码,这些内容基本都涵盖在前面提到的三本参考书中,所以后续如果不仔细读参考书的话考试一定会gg的。我觉得如果大家真的很喜欢OS或是想要了解OS,这门课大家一定要上,另外大家如果喜欢实践理论相结合的课程,这门课也是很好的选择。在这里我还有一个小建议,负责这门课的Jae平时还会教Advanced Programming,所以如果你想要申请这门课,最好可以提前一学期去听AP,这也可以帮助你打好C语言的基础。
3、COMS4111 INTRODUCTION TO DATABASES by Alexandros Biliris
优点
这门课和前面两节课画风并不是很一样,因为这门课的上课节奏是比较慢的,也很适合有基础的人“划水”,大家在选课的时候可以用这门课和那些比较硬核的课一起选,这样可以大大减轻学习的压力。另外这门课不涉及底层DB的时限和理论结构,比较专注于database design,所以很适合其他专业背景的同学来入门数据库。
另外这门课无论是作业还是project的量都不是很大,也不是很难,除了写网站的部分都可以在参考书和老师的课件中找到,学习起来挺轻松的。而这门课虽然不是很难,可是其内容也会涉及到自己写SQL以及optional的web programming,也是一门理论和实践相结合的课程,我们也能学到一定的知识。还有一点就是这门课的老师很风趣幽默,在上课的时候也会开一些玩笑来活跃气氛,唯一需要担心的就是你能不能接住。
缺点
但是这门课毕竟没有太多硬核的知识,所以课程的深度还是存在不足的,对于想要理解数据库底层的同学来说这门课不是很适合你。不过听说里面个别session中有些部分还是有难度的,需要使用python来实现index等机制,可是这依旧不能改变课程整体难度偏低的事实。而且这门课授课的节奏比较慢,举例也不会太多,对于没有学过DB的人这门课内容不难学,但是老师的上课模式会让同学们接受起来有些困难,我也亲眼见证这门课从最初的满课到后来零零散散只有20人不到来上课,这也很可以说明问题。
个人建议
所以整体来看对于那些没有DB基础的同学来说,无论是学习相关的概念还是写网站都是比较困难的,需要花很多的时间来自习,而对于我这种有基础的同学来说这就是一门划水课,这也是我上过最轻松的一门课,大家也要结合自己的需要来判断自己是否要申请这门课。
4、COMS 6998 Topic: CLOUD COMPUTING\u0026amp;BIG DATA by Sambit Sahu