CMU-SE-SV 就读体验及选课分享。很高兴可以看到,这里变得越来越好

21375
28
go/cmu-se-sv-101 ( 开玩笑 ⁽(◍˃̵͈̑ᴗ˂̵͈̑)⁽
TL; DR: 如果能选到满意的课,并有志于在软件工程方向发展,CMU-SE-SV这个项目还是值得推荐的

楼主21Fall入学的CMU MS in Software Engineering 项目,现在是在SV校区的最后一学期。这三个学期体感差距比较大,从第一学期的一头雾水 —> 到第二学期的平平无奇 —> 再到第三学期的乐在其中。总结了一下,主要是选课的原因,所以把自己的经历分享给大家,希望可以帮助到大家,选到自己喜欢和满意的课,乐在其中。

首先介绍一下CMU SV这个校区。校区坐落在NASA Ames Research Park里面,离Google 新开的 Bay View Campus 很近,101高速在398口下,右转,直走到NASA Park,在NASA Park门口左转再走一段就到Bay View。每次进门的话要过NASA的安检,check id + student id,比较严的时候两个都要,没有id的话别忘了带护照。校区主要由一栋两层小楼+半栋一层小楼组成。两层小楼有2个可以容纳20人左右的小教室 + 2个可以容纳30人的中教室 + 1个可以容纳50人左右的大教室。一层小楼是今年刚翻新好的自习室,有六七张桌子,可以坐下四五十个人。SV校区主要有ECE,III,INI三个Department,分别是ECE 的SE和部分ECE项目,III的MSSM等项目,以及INI的部分可以在Pittsburg和SV校区都上课的项目。

MS in SE 项目分为两个Track (Applied, Standard),都需要修97学分满足毕业要求 (96学分选课 + 1学分Intro to Graduate Studies),Applied Track 的Summer Intern是requirement。96学分的选课由三部分组成,60 Units SE Core + 24 Units CIT course + 12 Units General Elective。CMU一般一门课12学分,也就是说如果要毕业,需要修5门SE Core + 2门CIT + 1门GE。而国际生每学期要maintain 3门course来满足full-time身份,所以三个学期共会上9门课,修108学分,多出来的12学分一门课,如果handle不了的话,有pnp的机会,不计入毕业学分。也就是说,三学期中pnp了一门课,是不会影响毕业的。

选课体验
  • 18-613: Foundations of Computer Systems

★★★★☆ (4.5/5) Instructor: Greg
语言:C。CSAPP是很多人说的CMU的镇校神课,主要是学习计算机底层的设计原理,数在计算机中如何表示的,内存、I/O、磁盘是怎么组织和工作的等等,lab用c做。这门课的是潜移默化和影响深远的,可能在短期内对找工帮助不是很显著,但是理解底层原理后,后面的工作中可以养成从计算机的角度思考问题的方式,总体好评。

  • 18-645: How to Write Fast Code I

★★☆ (2.5/5) Instructor: Low
语言:C。这门课应该改个名字,叫Instruction Set Structure Optimization 指令集架构优化。主要讲的是在Intel架构下用一些CPU独有的库函数SIMD等,加速运算的过程。上课内容没有名字那么人畜无害,很specific,而且Low老师挺认真,所以会的话会觉得简单,不会的话会觉得云里雾里。真实阐述了那一句“你的水课,我的噩梦”。给2.5分出于Low老师认真负责的态度,虽然我听不懂,但他课上的很认真。

  • 18-652: Foundations of Software Engineering

★★☆ (2.5/5) Instructor: Hakan & Cecile
语言:Javascript。2.5给到Hakan老师,typical的Hakan课,性价比很低,教的抽象,学的不深。课程内容是一些软件工程的概念,waterfall,scrum,agile等等,抽象的课程,抽象的quiz,抽象的概念,要花一大堆很耗时间的设计图,很好地体现了Hakan老师的水平,花了一堆时间在一些没有用的事情上。非常无语的引入了一个OLI的测验,并调高了这个并不重要的测验的评分比重,导致一堆人因为这个不重要的测验拉低了成绩,乃至在挂科边缘徘徊。Presentation的时候,Hakan要问一些自认为很体现他是个老师的问题,这些问题一眼就明,根本没有问的价值,这些问题恰恰体现了哈老师并不高的实际水平。这门课的代码部分是实现一个在线聊天室,有单聊,群聊等功能和每个组自己的一些功能。每个组contribute to各组的repo。如果这门课只有代码部分的话能给4分,加上Hakan老师各种操作,就只能-1.5了,但是这是MSSE的必修课,不喜欢也得上,很Hakan,respect给到哈老师。

  • 18-659: Software Engineering Methods

★★★★ (4/5) Instructor: Cecile
语言:Typescript。课程内容是做一个Emergency Contact Platform,模拟在山火情况下用户分享险情动态,医疗资源等场景。班上所有人contribute to同一个Github repo,不同的组做不同的feature,React前端,Nodejs后端,Circleci后deploy到Heroku上,用Jira做project management,Confluence做wiki,cicd的自动化程度还可以。总的来说是一个需要的collaboration和communication的完整前后端项目,需要设计,开发,部署,上线,workload适中,Cecile老师教的也还可以。

  • 18-664: Software Refactoring

★★★★ (4/5) Instructor: Leo
语言:Java。这门课主要是学一些重构的知识和技巧,以及体现代码质量的指标,上课的时候Leo老师会live coding手把手带做,实现一些traverse代码的方法,并get到指标,有 starter code。project是用Java仿照idea实现一些refactoring的方法。课程内容是有一点抽象的,还有优化的空间,但Leo老师很Nice,workload适中。

  • 18-668: Data Science for Software Engineering

★★★★ (4/5) Instructor: Leo
语言:Python。这门课有一些很Basic的ML内容,会需要调包Train Model,有Decision Tree, SVC, Random Forest等,比较Accuracy和F1 Score并分析。每门课Leo会手把手live coding带做。Team Project是自己参照论文做算法,或者大部分人做的都是上课讲的Genetic Algorithm的演进版本,改一些东西,提升一些指标,然后Presentation,workload适中。

  • 18-793: Image and Video Processing

★★★☆ (3.5/5) Instructor: Aswin
语言:Matlab。这门课主要讲一些Signal Processing的内容,包含图像的成像原理,一些对图像进行操作变化的公式,以及用Matlab在图像上的各种操作等。Workload不算水课,会理解一些数学和线性代数的知识。对于感兴趣的人应该会有所帮助。

  • 18-658: Software Requirements and Interaction Design

★★★★ (4/5) Instructor: Cecile
语言:Javascript。这门课是Typical的Cecile课,讲一些概念,写一些代码,包含一些HCI和SE的交叉内容。Project比较前端,可以Web也可以Mobile (iOS/Android),Mobile的话需要组员都有相关背景。Cecile老师也说不会学习到新知识,只会Reuse 18-652 FSE上学到到的知识,需要propose一些idea,做出来,然后presentation,使用Jama来做project management。充满了Cecile老师的个人风格,workload适中,体感适中。

  • 18-653: Software Architecture and Design

★★★★☆ (4.5/5) Instructor: Rafal
这门课有两个section,一个是Leo老师,一个是是刚博士毕业新老师Rafal,我上的是Rafal的Section,一个非常gentle,彬彬有礼,风度翩翩的波兰小哥,甚至带着一点刚进社会的青涩 ~(˶ ̄᷄ꈊ ̄᷅˵)~ 。课程内容主要是讲软件架构的演进和Microservices,包含一些Design Pattern。Rafal老师Nice又Gentle,上课感受非常好。

  • 15-319/619: Cloud Computing (CC)

★★★★★ (5/5) Instructor: Cloud Course Staff Team
语言:Java + Python。如果说15-613 CSAPP是CMU理论上的镇校神课,那CC是我眼里的CMU实操上的镇校神课,甚至改观了我对CMU这个学校的印象,在此之前我一度认为在CMU已经学习不到我想要学的知识了,直到遇到了CC。课程内容是在三家云(AWS,Azure,GCP)上配置机器,并在机器上做一些python的数据分析,也会包括一些机器集群上auto-scaled, load-balanced技术等。过程中会用到Linux命令行,Terraform,Docker,Kubernetes,Kafka,Jupyter Notebook,Spark等。没有Lecture,每周有一个video session,剩下时间是看文档做实操,然后提交auto-grading。CC的文档质量非常好,妥妥大厂Level的文档水平,循序渐进,娓娓道来。课程内容Modern,贴近工业界一线,课程的Infra也做得非常好,自动评分系统,starter code等等非常有水平,能感觉到Cloud Course Staff Team在背后做了大量的工作来保证这门课的课程质量以及高度自动化的流程,看到Sail平台上Staff Team背后做的工作后,对他们致以由衷的敬意。workload虽然不小,但花的每一分钟都是值得的。对于没有过相关经历的同学来说,上CC一门课能学到的东西,不亚于做一段暑期实习,再次致敬Cloud Course Staff Team 🫡。

以上就是各个课程的主观感受。如有雷同,纯属巧合,如有不同,以你的主观感受为准 ʕﻌʔ。

最后再说一些题外话。楼主本人有过多段实习经历,在中美互联网小厂,中厂,大厂都摸爬滚打过。体会过不同的技术,不同的公司文化。经历过没有Infra,手动Deploy代码 —> 草台班子Infra,一个Jerkin完事 —> 完整Infra,微服务K8S集群 —> 可能是科技公司里最完善的Infra,高度自动化。做过架构,做过业务,做过几个人用的小东西,也做过一两亿人用的feature,感受过Startup的被领导PUA,Move Fast,中厂的效率优先,指标优先,也体会过大厂的Move Steady, Deliver Impact, Diverse and Inclusive。第一学期刚从厂里出来,来CMU-SV的时候,有一种很深的割裂感,因为这里哈老师教的东西,属实是和工业界相去甚远,是有一些失望的,“CMU就这?”。但经过CC的Cloud Native的熏陶,Leo和Rafal的Architecture课程的前沿性,与Leo的相处,和Rafal老师的交流,以及Cecile老师一如既往的平易近人,也可能是因为最后一学期偏向软件架构的选课和我的经历有过一些重叠之处,总之最后一学期让我有一种如鱼得水,乐在其中的快乐。很喜欢这种可以和各个老师平等的交流和讨论我们设计的东西,我们实施的细节,我们所遇到的问题,我们提出的方法,以及我们将如何一起工作,共同解决这个问题的感觉。一个Team,Org,或者Company的文化,其实很大程度是被这个Org,Team,Company的Leadership 的行事风格所影响的,学校也一样。现在 CMU-SE-SV 有四位老师,Hakan,Cecile,Leo,和Rafal,开设了一些贴近工业界的新课,开始教一些业界前沿的知识,几位年轻的老师很Nice。相比于几年前,一直在改变,虽然依旧有一些不尽如人意的地方,但如今处处生机勃勃。很高兴可以看到这里变得越来越好。以前很劝退这里,但现在可以说,CMU-SE-SV,来了不亏 ʕ̯͡ˑ͓̯᷅ʔ。

如果这个帖子可以帮到你,走过路加个米。祝大家Offer多多,心想事成~ ₍ᐢ ͈ ༝ ͈ ᐢ₎♡

补充内容 (2022-09-21 05:14 +8:00):
发现了一些typo: Jerkin -> Jenkins... 为什么发出去的帖子没法再编辑了QaQ