CMU CS System课程介绍

avatar 57048
yuchunzi
13743
6
马上也要毕业了,贡献在地里的第一篇帖子好了。。。主要是介绍一下CMU我上过或者旁听过的系统课程,希望对来CMU想学system的同学们选课有些帮助。

首先,如果只是想学CS找工作而其实对CS没什么兴趣,好好刷题吧,学web或者mobile显然是更轻松愉悦身心的选择,奉劝还是不要去碰系统了,213什么的都完全没必要上。

Prerequisite:
15213(Intro to Computer System)(5 stars): 基础中的基础,如果你想要做OS,这些知识就是最重要的基础(虽然还是很表层的知识),如果想要做稍高层的system,这些知识也要掌握,还是会有帮助的。重要的是这个课会给你打下一个不错(仅仅是不错)的C programming基础,如果pointer什么的都搞不清楚,就不要搞系统了。。。

Intro Level:
15410(Operating System)(5 stars): extremely challenging的一门课(我觉的同等难度的课在CMU还有个两三门,例如compiler,15412)。基本上就是一个学期写一个可以用的,但是极其简陋的操作系统。头两个project相对简单。project 2是写一个user level thread library,project 3是写一个kernel,project 4每年都会有点变化好像,一般是写多核或者unix signal。代码量差不多一万多行C的样子,但是重要的是debug真心恶心,各种race condition呀,GDB一行一行的找BUG。总的来说是很好的一门课,Dave能把这么OS这么老技术的课讲得这么interesting十分难得。而且可以让你对concurrency的理解上升一个层次,上完以后就感觉没有自己debug不出的bug了(显然是个幻觉哈 :D)。缺点就是上完这门课你依旧不知道真的OS是怎么做的。。。所以只能算是OS的入门课程,如果想做OS这个课一定要选,但是上完之后还要选一些更高级的OS课(感觉除了15412,CMU好像没什么这种课。。。我没有仔细研究过,所以我觉的唯一的办法就是去读kernel了。。。18648 real-time embedded system涉及些linux kernel hacking,但是主要是scheduling,lock和file system这部分,感觉还是很浅,也许唯一的办法就是去APPLE/ORACLE/Google作OS了)

15440(Distributed System)(5 stars): 这个课是想做分布式系统的入门课,主要是介绍所有关于distributed system的基础知识,包括网络,RPC, commit protocol,distributed file system,fault tolerance等内容。这个课有两个版本(Greg Kesden和David Anderson)。喜欢两个版本的人都有,我个人感觉因为David Anderson实际上在做这方面的research,他的版本会更系统介绍的更全面,但是Greg这个人很有意思哈,不喜欢他的人一上课就头痛,喜欢的人就觉的他蛮搞笑的,大家就自己选择吧。我个人可能更喜欢David Anderson的风格,但是我上的是Greg的版本。Project里比较好的一个就是写一个MapReduce framework with the underlying file system。我们当时写了9000多行JAVA,感觉还是很有成就感的,虽然基本上任何optimization都没有做。Anyway,强烈推荐上一下这个课。

15415(Database Applications)(4 stars): 这个课其实并不是很system的课,但是我推荐上这门课是因为数据库里涉及的ACID related topics和fault tolerance比较普适,在下面我要提到的一些课程中,这些知识会被一次又一次的重复,但是感觉都没有在这门课里花的时间多,所以我觉得这门课是在这方面打基础的最好课程。其他的知识,比如SQL,B Tree,都是基础知识呀,你要是不懂这些你都不要意思说是从CMU毕业的不是。而且今年的新老师Andy作new sql数据库和main memory database很厉害的呀,也是后面我要提到的advanced topics in database system的老师。

Advanced classes:

15719(Advanced Cloud Computing)(4 stars): 在CMU有两门cloud computing的课,15619和15719。我没有上过15619,但是感觉619完全是engineer方面,换句话说, Amazon EC2 API培训课,但是个人感觉也是很好的。15719相比619更偏向系统设计方面,上课主要是读一些新的论文,比如说YARN, Dapper等比较新的系统。project方面因为这门课实在是太新了(去年是第一年开),所以不是很well designed。我上的时候用的是Open Stack,感觉也是API培训的感觉,但是我感觉收获最大的还是读那些论文,让我对cloud领域新的趋势有了一定的了解,十分开阔眼界。而且课程load不是很重,所以建议想接触一些cloud方向新知识的选择这门课。上完这门课后如果你是VLIS专业的可以选择 15648 Studio Big-Data System。这门课和15719风格很像,也是读paper写project,load也差不多,我个人比较喜欢。如果不是VLIS的同学基本上就选不进15648这门课了。

15799(Advanced topics in database system)(5 stars): Andy在CMU新开的课,强烈推荐,涉及数据库研究的各个领域,第一节课是Paxos,学过分布式系统的人都知道Paxos或者类似协议现在可以说是作分布式系统中实现replica,fault tolerance的基础了。随后的课程就是在每个topic上读几篇paper,NO-SQL, NEW-SQL, Streaming System等等等等。如果想做cloud system和database的同学这门课一定不能错过的,绝对开阔眼界。但是感觉load稍微有点重,每周三四篇paper review再加一个一学期的大项目。不过绝对物有所值的课程!

15749(Engineering Distributed System)(6 stars): 说实话这个课是我在CMU的最爱哈,强烈推荐!!!老师是Satya,他也是AFS和Coda file system的主要设计者。首先要说的是不要被这门课15410 B作为prerequisite的要求吓到,只要有良好的C基础(要比15213的C基础好才行),这个课并不是extremely hard。这门课涉及到了所有实现分布式系统中的问题,从caching, consistency model,prefetching,到content addressable storage(data deduplication),再到fault tolerance等,可以说涵盖了大部分你需要知道的分布式知识。更好的一点是Satya经验实在是太丰富了,所有这些topics听着他娓娓道来,怎样考虑各种现实问题,在什么条件下要使用什么策略,绝对受益匪浅,对今后设计系统有很大帮助。虽然如果你上过前面我提到的这些课,很多知识你都已经学过了,但是Satya的讲解肯定会加深你对这些知识的理解。project方面也很有意思,其中的两个是在coda file system中加一些feature。建议喜欢分布式系统的同学必选呀!

其他一些我觉的值得推荐的系统课:
15412 OS practicum:上一次只有6个INI的勇士上了哈,是做一个学期project的课,topic应该是自选的,难度应该是难于15410的

18746 Storage System: 也是Garth的课,我因为选的课太多实在是没时间上了,不过应该是很好的课,建议有时间的画选一下,但是如果你想上所有我前面详细介绍的课,你不一定有时间的。

15712 Advanced Operating System: 我记的是David Anderson教的,内容和上面很多的课有重复,包含了Paxos,Dynamo,MapReduce,以及很多系统方面的知识,有project,有时间可以去听下。
  • 39
6条回复