最新八千字 CMU SV (SE/ECE) 详细指路/攻略/劝退手册

avatar 496086
cmusvtruth
66867
76
最新 CMU SV (SE/ECE) 详细指路/攻略/劝退手册

# 前言

本文基于笔者在 CMU-SV 校区的亲身经验写就,希望能让读者准确把握这个项目的定位,免得后悔来此,或者后悔没来。虽然我个人对这所学校有很大的意见,但是我不得不承认它是有它的生态位的,因此会尽量客观地讲述。我可以保证事实部分没有偏差,但是所有的建议都请谨慎领取。

# 太长不看版

CMU-SV 不是 CMU 水平项目!你不能在 SV 接受到如同 Pittsburgh 一样的优质课程!

CS 本科生,想要进一步学习 CS 技术(OS? 编译器?ML? 分布式系统?) -> 别来,浪费生命
转专业,想要学习一些 CS 基础 -> 可以来,但是要积极地取舍,无视垃圾课,尽量选有意义的课(下附攻略)
不 care 学习,只想拿 opt 求职 -> 可以来,就业率非常华丽
目标不是程序员而是 PM 或者创业,想要认识人脉 -> 可以来,不过可以考虑 SV 的 SM 等专业

# Overview

CMU-SV 校区想必各位已经很熟悉了。从几年前创办开始,人数越招越多,bar 越来越高,而就业数据始终不衰退地华丽,引起了很多人的兴趣。但是我在此再次重复提醒大家一点:

CMU-SV 不是 CMU 水平项目!你不能在 SV 接受到如同 Pittsburgh 一样的优质课程!

请时刻记住这一点,虽然你有 CMU alumni 的 title, 能收到 CMU 的毕业证,但是你没有受到 CMU 水平的研究生教育。你不能指望来了这个校区学习了三个学期以后,就能像知乎/微博/GitHub 上的 CMU 学长们一样在技术上独当一面。

造成这个现状的原因,是选课限制。各种众所周知的 CMU 神课,有的仅限于匹兹堡的 SCS 学院,宽泛一点的是匹兹堡的任何学院,但是,没有 SV 的份。这边能选到的,除了 CC, ICS, DL 等寥寥两三门以外,就只有两类:Pittsburgh INI 学院的一些远程课,和 SV 自己开设的垃圾课。

更可怕的是,如果你是 SV-SE 专业,而不是 SV-ECE 专业的话,你的选课限制将空前严重:在全部的 8 门课中,有多达 5 门是所谓的核心课,需要在 SV 编制的课程列表中选择。这个课程列表 - 你已经猜到了,充满了毫无意义的水课、腐朽生虫的旧课、离题万里的脑洞课,和一两门姑且还有一点点价值的课(以下有分别陈述)。如果你期待在这样的课上提高自己的技术水平,那你可能要失望了:最好的方式莫过于根本不上,然后自己去看书、看视频、写代码。毕竟,学校的桌椅和咖啡还是管够的。

说到硬件条件。CMU-SV 的校园可能和你想象得不太一样。在国内,一个校园 = 一个封闭式的花园状地块,里面星罗棋布着教学楼、自习室、宿舍、食堂和操场。在美国,大部分的校园除了不封闭之外也基本如此。但是 CMU-SV, 因陋就简地说,只有两栋楼,一栋一层(自习室)一栋二层(办公室+教室)。的确,由于学生不多,指望能有一个大校园是不现实的;但是如果你想要丰富的校园生活,那你可能要失望了。这里确实有许多非校园的生活,比如湾区的 talk、食物、户外,但是说回 CMU-SV 本身,不好意思,一律欠奉。

既然这个学校有如此这般的缺点,它有没有优点呢?当然有,而且十分明确:求职神项目。在过去的许多届,基本是全员好 offer, 大厂的包裹接到手软,数据甚至比 Pittsburgh 的许多优质项目还强。这一点,可以说是和地理位置有关:既然不需要付出机票和住宿,HR 就更愿意为你提供面试。另外的话,身在湾区,人脉也会积攒很多。如果你认识了许多在工作的学长,自然不难 offer.

另一个优点也是地理位置带来的。由于身在湾区,和工业界接触紧密,学校每周都会有来自工业界的大佬来 Talk. 有的时候分享技术细节,有的时候分享创业经历,有的时候分享产品思维。这自然是你扩展人脉的好机会。

还有就是,你的同学们会很不错。这点得益于越来越高的 bar, 和不断涌入的新鲜学弟学妹们。

# 课程解读

以上的 Overview 中,我言明了 CMU-SV 校区的课程之烂。在此我详细地解释一下。以下课程从好到坏排序。(前几个并不烂)

## “神课” 18-613 Introduction to Computer Systems

这门课,也就是传说中的 CMU 神课 15-213. 课号虽然不同,但是是完全同一门课,一起上课一起做作业。只不过 15- 是 SCS 学院, 18- 是 ECE 学院,另外 2 表示本科生 6 表示研究生而已。

这门课在 18 年是有在 SV 的老师教课, 19 年变成了视频远程课,在教室看来自匹兹堡教室的视频推送。该课历史悠久,著名的入门书籍 CS:APP 就是它的教材。在这门课里你能学到一个计算机程序的基本模型,包括内存模型、信号模型、IO 模型等等。在课程中你将有机会写一个属于自己的 shell, 一个 malloc 内存管理器,和许多其他的东西。推荐所有想做程序员的人学这门课。

## “神课” 15-619 Cloud Computing

同样神课 CC. 这门课没有课程视频,即使是本部也没有。有的只是许多 project. 在这门课中,你将走马观花地使用 Amazon AWS 中的大部分服务,尝试写出若干 Cloud Native 的小服务,并在啃 write up 和与队友撕逼之间掌握自我学习的能力。该课程 workload 很大,即使是有经验的人也需要 30+ 小时每周的时间。在选这门课的同时,建议找好可靠的队友(大腿)。推荐所有想做后端和 infra 的人学这门课。

## “神课” 11-785 Deep Learning

自然,神课都是本部的。这门课也是享誉业界的好课,从最基本的 NN 和 SGD 一直讲到 Reinforcement Learning, 并且伴有丰富的学习材料和 Project. 如果你有志于做 Data Scientist... 这门课可能不够,毕竟这样的岗位基本都需要 PhD. 不过,本课能让你对 ML 有一个基本的了解,让你将来做 ML Infra 的时候和同事 PhD 交流之时不至于露怯。推荐所有想做 DL 方向或者有相关方向的人学这门课。

## “还行” 18-652 Foundations of Software Engineering

这门课是 SV 自办的课,也是 SE 项目的必修课。因为所有 SE 学生都要选,所以 ECE 项目的同学们很可能选不上。技术上说,这门课没什么可讲的。主要就是团队协作来写一个网页版聊天室。需要的技术栈是任何前端框架 + Node.js + Express.js + MongoDB. 如果你是 CS 本科生或者在本科有志于转码写过小网站,很有可能这门课对你来说没有任何难度。不过本课的目的也不在于此,而是在于教一些软件工程方法:Scrum, Kanban, Design Pattern, CI/CD 等等。如果你恰好在正规一点的公司实习过,本课对你应该就没有什么价值了。当然,如果它是你的必修,还是要修。

## "还行" 14-848 Cloud Infrastructure & 14-736 Distributed Systems

这两门是 INI 学院的远程课。INI 学院有些项目的最后一学期在 SV 校区,因此 INI 学院给我们也开设了几门远程课,主要都是 Greg Kesden 这位老师的。此人讲课十分有特点:他假设你有一定的基础知识,然后以聊天的形式来展开问题和架构,因此有背景的人可能会听得很舒服,但是没背景的人会听得云里雾里。考试和作业比较随意,所有的问题都可以回答 "It depends", 只要后面言之成理都是满分,作业迟交几天也无所谓。如果你想要搞分布式,还是值得一听的。

## “还行” 18-661 Introduction to Machine Learning for Engineers

这门课是 SV 校区自己开设的课,老师是年轻的亚裔 Carlee 姐姐。这门课是刚开设不久,还在调整难度:由于 Carlee 本人数学功底很强,而项目的同学们来自五湖四海,前两个作业做得同学们叫苦不迭。不过后来调整了难度。如果你想做 ML 相关的工作,又缺乏基础,可以一听。

## “还行” 15-688 Practical Data Science

来自 SCS 学院的远程课。每三学期开一次。主要介绍了用爬虫收集数据、进行统计量的分析、SVM 等等常规的数据科学方法。上过的同学说 workload 比较大,但是还比较有趣。

## “水课” 49-807 Exponential Innovation

SV 自设课。和技术毫无关系。主要介绍的是业界大佬对将来科技发展趋势的分析,有些论文可读,有些 Talk 可听。需要交流技能,分数比较好。

## “诡异” 18-657 Decision Analysis and Engineering Economics for Software Engineers

这门课……一言难尽。作为 SV 自设课,并且是 SE Track 内的课,我在最后一个学期被迫选了它。听名字,我本以为内容会是设计软件结构的 tradeoff 和调优,然后事实上它和技术毫无关系,更进一步地说,和整个 IT 业界毫无关系。它是一门投资课。而且是一门糟糕的投资课。

这门课的主要内容是,作为一个职业经理人,面对手头有的资源和有风险的决策,该做什么。典型的开头是:你是一个经理,现在在考虑是否引入 XXX Testing 方法,如果引入了,将会引起多少开销,而有可能会减少多少 bug 因此省多少钱,请根据 excel 表格里面的数据来做出决策并写 report. 请注意这里的 XXX Testing 只是故事背景,把它换成石油钻井的压裂,或者银行保险的新模型,毫无区别。

上课情况也不容乐观。每次课都有签到,逼迫所有人出席。后来发现有人会帮助朋友签到,就进化为上课现场写小 project. 据我观察,凡是逼迫人签到的课,无一例外都是烂课。毕竟,都研究生了,学生想上什么课不想上什么课,基本上还是用脚投票的。

课程内容可以说是以其昏昏使人昭昭。这门课每周两次,一次三小时一次五小时,全程会用亲爱的 Hakan 老师特有的平静语气,从头平铺直叙到尾。好在大家都不会睡觉——要么刷微博要么写别的作业。为什么不听讲呢?因为讲得实在糟糕:不仅仅是课程内容与接下来的工作生活毫无关系,并且他自己,个人看来也不完全懂。比如,在某次 project 中我们用 t-test 比较两个分布是否一致。在 limitations 里面我说,我们画了图发现这个分布不是很符合正态分布,于是在答辩的时候老师问我们为什么这是一个问题。显然,他并不清楚 t-test 的 assumptions. 为了减少口舌之累,我们最终蒙混过关,假装自己也不懂。

几乎每周都有作业。作业是一个巨大的、带有宏的 excel 表格,其中第一页是长长的故事背景和「使用指南」,后面的页码是要求你根据使用指南来写 excel 函数最终运算出想要的结果。如你猜想地一般,其实你的团队中没有人能够真正理解要做什么。为了能够看懂,你们回去翻了上课的 slides, 然而陷入了更大的迷惑。最终大家齐心协力可以糊弄出一个结果交出来,但是没有人能够成功复现自己的操作。

问题来了,既然这门课这么糟糕,我为什么还要选呢?想必你猜到了,这是 SE 项目的 core, 是必须抽选的。

建议所有人,包括有志于创业和金融的所有人,不选这门课。当然如果你是 SE 项目必须选的话……还是得选。

## "腐朽" 18-655 Service Oriented Computing (以及 Jia 老师的所有其他课)

这是另一门神奇的烂课。如果前一门课的描述是「诡异」,这一门的描述就是「腐朽」。从第一节课开始,整门课程就流露着上个世纪末期,Orcale 和 IBM 还叱咤风云意气风发,打算用 Java, Eclipse, XML 和专利费一统江湖的旧时光。

这门课的老师是 Jia Zhang, 是在 Service Computing 领域颇有影响力的老资格人物。不幸的是,这个领域早就死了,现在已经完全沦为了许多人自娱自乐的产物。千万不要把这个所谓的 Service 与现在正在流行的 AWS/GCP/Azure 这种 Cloud Computing 服务混淆:要知道正是后者杀死了前者。

让我们把时光倒转到 Late 1990s, 那时候没有 iPhone, 没有 Google, 没有 Facebook, 更没有 AWS. 当时世界上的信息产业的主要形式,是大公司向 IOE (IBM, Oracle, EMC) 等大厂花大价钱购买机器、软件、维护和技术支持,用海量的钱换取自己内部数据的电子化和快速统计。在这个时候,软件的开发模式是瀑布模型,架构是 Huge Monolithic, 交互是 Private Protocol. 这个时候,Oracle 正确地预见到将来软件会更加分散、更加小块、更加灵活。但是他走上了完全错误的道路。他们的技术路线是:开发模式接着瀑布,架构选择用一个 JVM (Typically Tomcat Server) host 许多 Java App, 交互选择基于 XML 搞一个协议 (SOAP) 来传输 Java Object. 为了允许服务之间互相发现,搞了一个基于 XML 的 Service Registry (UDDI), 并且搞了一个基于 XML 描述 web service 的语法 (WSDL), 甚至还发明了一套基于 XML 的所谓 Workflow, 来让你通过写 XML 来调用其他 Service, 并把他们的结果整合起来。没错,用 XML 写业务逻辑。最后,他们在 Eclipse 里面把这一整套全家桶集成起来。聪明的你看出来问题了吗?

没错,这一套系统是完全彻底的 Vendor Lock in, 如果贵司真的用了这么一套系统,可以说是永世不得翻身,估计时至今日还是要每年给 Oracle 交上大笔的维护费,来让他们帮忙维护贵司的 service infrastructure. 另外,充满了 XML 的传输也是臭名昭著地低效、人类不可读,叠床架屋的 SOAP 标准也会莫名其妙地不工作并且让你无法知道原因,正如 Oracle 的所有其他产品一样。2019 年的新鲜工程师们听到这么一套技术,恐怕会脸上目瞪口呆心中窃笑。在 Amazon 放出了他们的 AWS 以后,这一套垃圾迅速、彻底地走入了历史的垃圾桶,消失得仿佛不留一丝痕迹,而这个名为 Service Computing 的学术领域,也慢慢沦为了自娱自乐的小圈子。 毕竟,我们今天使用 Python 和 Node 做微服务,JSON 做传输协议,Kubernetes 做编排/负载均衡。日子过得很好,不是吗?

然而,时至今日,在 CMU-SV 校区的 Jia 老师仍然在孜孜不倦地教着这一套技术栈。在她的第一门课,匆匆定义了一下什么叫 Service Computing (这个定义请背下来,期末考试要默写)之后,她严肃地说,每一届都有学生要求我修改课程内容,但是这是我的课,我是不会修改的,你可以选择不上。当时我还太年轻,并没能理解这句话背后的含义。等到我理解的时候,已经晚了。值得一提的是,如果你是 SE 的学生,你将一定需要选她的课,而她的所有其他课,都有本课作为前置。所以其实你并不能选择不上。

课程评分包括“参与度”、Project 和期中期末两次考试。就 Project 来说,首先你需要装一个 Eclipse, 然后开始生成好几个 Oracle 视若珍宝的 Web Service, 然后……开始写富有厚重历史与沉甸甸血泪的 Java 和 XML 吧。至于期中期末的考试,可以说很接近国内本科生的考试了。发给你一张卷子和一个空白小本本,请你在小本本上回答问题。主要内容包括:概念默写(Service Computing 的定义)、手写 XML (WSDL 定义,SOAP 报文)等等。

这里分享两个期末考题。第一个是 WS-I Orgnization 的创立目的。这个题目本身没什么特别的,背就是了。有趣之处在于,如果你真的好奇这个组织的状态,你会发现这个 2002 年创立的组织,在 2010 年就已经解散了。但是这个题目还存在于此,令人不得不怀疑整套课程的编制年份。

第二个题目是为什么 XML 比 JSON 好。答案是 XML is a Language, but JSON is not. XML can be validated, but JSON can not. 显然,这个题目的编制者既不知道什么是 Language, 也不知道什么是 JSON Schema.

无论如何,强烈建议任何人不要选这门课。无论你的目的是学习技术、拓展人脉还是纯粹找工作,这门课只会损害你的大脑而不会有任何技术考古学以外的意义。当然如果你是 SE 项目必须选的话……还是得选。

## “跑路” 18-645 How to Write Fast Code

SV 自开课。这门课的标题颇有一点哑谜的感觉。它既不是教你怎么快速地写代码,也不是教你怎么做性能调优,而是教你怎么并行计算的。主要分为三块,thread, GPU, MapReduce. 所以怎么写出很快的代码呢?只需要氪金变得更强、买更多计算资源就好了。

这门课的神奇之处在于,基本上没有在上课。具体来说,有一半以上的课程会在上课前半小时被取消。这件事情初次发生的时候,老师的群发邮件说的是女儿生病了本次课临时取消,我们还惊奇了一下。但是后来,邮件里就是简单地说 Today's lecture is cancelled 于是已经到了教室的同学们就耸耸肩回到自习室。再后来,老师和学生就有了默契:学生不去教室,老师发邮件。

推荐所有人选这门课——作为每周需要时间不超过 3 小时的课,你将省出充足的时间来进行你想做的事情,无论是自学、社交还是刷题。毕竟它还是一个 SE Track 里面的课。

# 生存攻略 - 技术向

如果你有兴趣提升自己,以至于在毕业的时候成为一个足以独当一面的软件工程师,可能这个项目不适合你。如果你像我一样误打误撞进入了这个项目,下面有一些建议。

上策:转到 ECE Pittsburgh. 这个操作在我们这一届并没有人做过,但是在过去的时候有。如果你转到了本部,选课限制将会大大放松,你将有机会选到本部 ECE, SCS, INI 的各种课程,毕竟这个时候你就是不被歧视的一等公民了。

中策:如果你是 SV-SE, 请转到 SV-ECE. 以上课程详解中的著名烂课,多半是 SE Track 要求的;如果你是 ECE 的学生,毕业限制会小。尽管你并不能选到全部想选的课,但是至少不需要在 XML 和 Excel 的地狱中挣扎三个学期。注意,尽管你的毕业 Title 是 ECE 而不是 SE, 这并不会影响 HR 对你的看法。

下策:如果你由于种种原因最后还是呆在了 SE 项目,请尽量选水课、workload 低的课、有好队友的课,尽一切努力不去配合学校的培养计划。省下来的时间,自己学习想要的课程。尽管你不是 Pittsburgh 校区,也不是 SCS 学院的,但是你仍然是 CMU 的学生,有 CMU 的各种远程资源、私有课件、内部 Project 和运行环境。请搜索 "CMU 神课",来进行自我学习吧。毕竟,这也是身为软件工程师乃至一切工程师的最重要能力。

# 生存攻略 - 人脉/产品/创业向

坦白地说,对于这一方面我了解不多。但是,SV 校区有一个 III 学院以及其中的 SM 项目(Software Management),他们的课程中有许多创业、管理相关的内容,也会时常有业界大佬进行分享。学校本身也会偶尔邀请业界人士进行 Talk, 你在公共 Lobby 的墙上就能找到最新的活动。还有就是,身在湾区可以利用 Meetup 和 Eventbrite 等服务来找到相关活动。通过这些来拓展人脉,是不难的。

# 生存攻略 - 找工作向

找工作在这个校区并不难,无论你有志的方向为何,都能找出足够的时间进行刷题、练口语和准备简历。这里值得一提的是时间点。如果你是秋季学期入学,请在开学之前就开始你的准备工作, 因为 8 月份就需要投出实习简历,而 9 月到 10 月将会是第一波 OA 的开始。如果你是春季学期入学,你将没有机会暑期实习,但是请回国找国内大厂实习,以积攒工程经验。另外,学校在 Pittsburgh 办的 Career fair (TOC) 你也是可以去的,请和小伙伴们买飞机票和住宿。多在 LinkedIn 上找学长学姐,多在 Lobby 和微信群里认识人,他们会是你的助力。

# 结语

看到这里,CMU-SV 这所学校的项目是否适合你,应该已经清楚了。一言以蔽之,这是一个以就业/创业为唯一导向的项目。希望大家擦亮眼睛,做出正确的判断。

补充内容 (2020-12-5 11:34):
2年后的今天,看到这个贴子给大家提供了帮助很开心。一个新闻是本帖中提到的 Jia 老师已经离开 CMU 到别的学校去了。祝她前程似锦,哈哈。
  • 361
76条回复