CMU MSIN 两年课程感受

avatar 313889
linna1998
9949
8
毕业季摸鱼系列,总结了一下在CMU两年期间上过的课程。我在2019年秋季入学CMU Information Networking Institute 的Master of Science in Information Networking项目,在2021年5月毕业。两年来我上了一些计算机方向的课程,和小部分的其他专业课程。本文总结了我上过的课程的感受,有些课程还带上了我自己的workload分析,朋友们在选课时可以参考。

2019 Summer
15513 Introduction to Computer Systems – 6 units
15513是一门CMU非常经典的计算机课程,甚至被推广到了我的本科院校。这门课会涉及到计算机体系结构,操作系统,编译,计算机网络,和C语言等知识。整体看起来覆盖的范围很多,讲得像是多而且全。
我本科就莫名上过一遍,所以这次就是一边出去玩一边上的课,主要想重新写一遍lab。于是在火车上debug, 在Airbnb写代码,度过了十分难忘的毕业旅行hh

2019 Fall
14-776 Fundamentals of Business Management
这门课是我项目的必修课,是一门很好玩的类似小MBA的课程。课程中会涉及到商业经济管理的知识,就是把商业相关的每一块的最最基础的部分讲一下,像概论讲座的合集。作业中包括了组队模拟运行一个公司并且做汇报展示公司的业绩。虽然我现在忘记了大部分的知识,但是还记得老师提到的做slides的目的是“讲一个故事”。
我之前从来没有过商业的认识,所以这门课提供了新的思考方式。同时这门课程让我觉得商业挺好玩的,也对Coursera上面的相关课程产生了兴趣。

15-618 Parallel Computer Architecture and Programming
因为本科没能上到并行课,于是上了CMU的并行。这门课是非常完备清晰的课程,课程之间的逻辑性很强。课程内容包括SIMD, CUDA, OpenMP, MPI 等,作业有四个assignment和最后的self-defined project。有些assignment带有玄学调参的色彩。但是后来我当Teaching Assistant 看到Randy的解法之后才意识到,可能是有特别generalized的解法的,只是比较复杂。最后的project 可以做得很复杂,也可以摸鱼的弄过去。
这门课在春季和秋季可能是不同的老师在教,我个人觉得都差不多。

18-746 Storage Systems
这门课的老师George好帅!这门课讲得底层,有点ECE的那种味道。会讲到SSD里面的逻辑和算法,Hard disk的逻辑和算法,操作系统层面的文件系统,等等。如果是In person上课还会传阅一个拆开来的hard disk, 十分酷炫。
作业有两个Project,每个都会有3个左右的checkpoint. 第一个project相对简单,第二个难度飙升。个人感觉第二个project后面如果搞不动了可以放弃,也还好。这门课有期中期末考试,主要看slides和project就行。

2020 Spring
11-642 Search Engines
一门标准而经典的搜索引擎课程。会涉及到page rank,网页相关性的排序,等。整个课程和作业都十分的流畅。作业包括了在一个小的搜索引擎的基础上不停加东西。我个人感觉写project的时候正确性差不多就行了,不要在意细节,不然调起来debug真的是很累。

14-736 Distributed Systems
我的项目的必修课,14开头的Distributed Systems. 我上课的时候老师是Greg,我个人和他的授课风格不是特别相合 TAT 于是几乎靠自学,project靠抱TA的大腿。借着写project的机会还速成了一下写Go,还是挺好的。神奇的是,我面试居然真的有涉及到过2-phase commit, Lamport timestamp, 只能说世事奇妙。

17-514 Principles of Software Construction - Objects, Design, and Concurrency
Josh和Charlie的一门设计完备的软件工程课,非常工业界。这门课会涉及到很多design pattern, 画UML图,面向对象的想法,等等。我建议想成为software engineer的朋友们都可以上一下这个课,因为这门课本身的实用性很强。这门课用的编程语言是Java, 是Josh心爱的语言。

2020 Fall
15-611 Compiler Design – 15 units
Workload: 294 hours
编译原理的课程,对前端、后端、和编译器的优化都有所涉及。主要目标是把高级语言代码比如C代码转化成为汇编代码。具体内容会讲到AST, IR Tree, 寄存器分配,图染色算法等。在编辑器优化上会讲到一些对循环的特殊处理,SSA等。
Project们是一系列的项目,在start code的基础上写一个C0的部分语言的编译器。每一步会增加对分支语句的支持、函数调用支持、数组支持等。看着C代码们被转化成汇编并被执行还是十分有成就感的。如果对编译相关知识感兴趣的话,非常推荐选择。Writeup 偏向ambiguous,都不大长。意识到要写什么和怎么写也是挺重要和花时间的。
这门课的workload极大的取决于队友,因为所有的project都是组队写的。我体会到的workload是目标拿B模式下队友比较划水的workload。我觉得如果好好选队友的话,workload会比这个小。

17-313 Foundations of Software Engineering
Workload: 104 hours
我作为硕士学生强行上了一门本科的软件工程课程,并且很可能是课上唯一的一个硕士学生hhh大部分作业都是组队完成的,组队的时候遇到了很多很厉害的本科生们。感觉这门课的大部分知识都不直接是写代码,而是写文档、讨论、requirement gathering等。和本科生们组队之后学到了非常多,怎么开会分工合作、怎么推进度。这些都很适合用来回答面试的behavior question.

18-756 Packet Switching and Computer Networks
Workload: 111 hours
这个是我迫于项目要求而选择的课。在我上课的学期,一共四个人上完这门课。我主观觉得这门课十分的烂。它的项目很ambiguous 连writeup都写得十分混乱,全靠狂问TA和瞎猜。Start code非常恶心,逻辑诡异注释迷幻。老师上课内容飘逸,应付考试全靠自学。好处是,这门课会遇到很多网络十分底层的东西,并且被强迫着自学。这些网络底层知识,如果不是这门课我是真的不会有所了解。甚至这门课结束之后,我觉得人生中也很难有别的机会让我了解。比如说switch的各种连法…

94-800 Negotiation – 6 units
Workload: 36 hours
出于好玩选择的谈判课。一共有5-6次谈判,是非常新奇的经历。课程上会简述一些谈判的技巧和分析,比如怎么去看双方的BATNA (Best alternative to a negotiated agreement). 但是课程本身没有教很多trick,包括在执行上的具体话术和策略,还有怎么隐瞒自己并抢别人的利益。所以我觉得具体谈判就靠自我发挥了hhh 课程像是偏学术的角度去讨论和练习谈判。对我的帮助比较多的是练习了英语口语,敢于去讨价还价,并且意识到了真的有些朋友谈判太厉害了。

2021 Spring
15-605 Operating System Design and Implementation – 15 units
Workload: 332 hours
传说中的操作系统,时间黑洞。感谢我善良靠谱的队友,整个上下来还是挺舒服的。关于操作系统的基础知识,挺多我之前其他课都有涉及到过,所以课上内容本身就是认真听然后看看有什么新的角度和讨论。
Project是一系列的时间黑洞,全都是C. 我感觉OS projects们极大锻炼了我的C语言书写能力,包括code style, design, macro, static等等。Project上交之后会有刺激的TA批代码环节,就是literally把代码打出来在pdf上然后写批注。有点像是针对一个项目的code review. 因为只有这么一次code review的机会,所以里面会混杂着设计错误、code style错误、命名等等。大大小小的错都会在一起,啪的甩在批注上,特别壮观。
Project本身代码量还挺大的,最后有几千行。因为是一个比较大的系统,所以设计会很重要。相比于其他一些只设计不实现的软件工程课,这门课是设计+实现。所以如果设计不是很好,那自己在debug和重构优化代码的时候就会直接意识到惨烈后果。从Initiate project的角度来看,可以说是有始有终的从设计到实现,并且至少要维护到学期结束的一个项目。
总之如果觉得自己不会坑队友,并且能找到一位不坑的队友,那就冲OS吧。单纯是TA批代码这个环节,我觉得就能值回学费了。

17-637 Web Application Development
Workload: 80 hours
我是划水摸鱼上的web application. 用特别丑的UI和面向测试脚本debug的方式完成了所有的作业们。这门课会讲一点点的前端和多一些的后端,最后可以自己搞出来一个小的网站。我觉得这门课对system level design的要求不高。几乎照着example code和Google就能搞完作业。如果想画好看的网页,会对美学有一些要求lol

17-780 API Design and Implementation
Workload: 135 hours
Josh和Charlie开的课,但是挺一言难尽的。我本来想选这门课是因为听说它的workload不大,上起来舒服,但是现实狠狠打脸hhh 一直活在这门课会不会挂掉导致无法毕业的恐惧中。这门课的主要内容是,Josh作为写了20年Java的人,为你带来API 设计中的20+ Dos and Don’ts . 随着课程进行,我逐渐意识到了API设计是一种艺术——对于同一个问题,基于不同的原则会分析出不同的结果。这时候Josh用他的从业经验能给出:某种设计更好或者两种设计差不多好的结果,而我一脸懵。我觉得这门课会比较适合有较多编程经验的朋友们。

95-718 Professional Speaking – 6 units
Workload: 45 hours
为了练口语而选的课,也几乎都在练口语。练的偏向于商务英语,而不是daily conversation. 感觉课上讲到的presentation skills在未来的工作上会挺有帮助的。如果学期中有空闲时间的朋友,还是挺建议选一选的。

Notes
2020 Fall和2021 Spring的课程有标记按照小时的workload, 可以用来参考课程之间的相对workload关系。这个时间是所有花费在这门课上的时间,包括lecture, assignment, project, reading (如果我读了的话)。同时这些时间是我高强度工作下的时间,不包括看手机等等。至于我具体花费的小时数,我觉得参考意义不是特别大,因为这个和每个人自身情况与课程期待相关。
  • 74
8条回复