0%

ETH Zurich Master in Computer Science 体验以及课程评价

前言

总算是通过了 ETH Zurich Master in Computer Science 除了毕设外最后一门课,借着这个机会来介绍一下这个项目的体验还有课程评价。

(下文会用 MSCS 来代替 ETH Zurich Master in Computer Science

总体评价

我会尝试从多个维度评价 MSCS 来尽量还原一下这个项目的体验。对课程评价感兴趣的可以跳转到后面一节。

培养方案

虽然 MSCS 宣称 Major + Minor 的灵活选课模式,即只要修够了 Major 的学分和任何一个 Minor 的学分即可毕业,但是事实上:

  • Minor 之间以及 Minor 和对应的 Major 重合度非常高
  • 有些 Minor 分布不均匀,比如 Networking 有 75% 的课开在一个学期,只有 25% 的课在另一个学期。

我个人觉得 Minor 的区分意义真的不是很大。

学习强度

ETH 一个学分对应 30 个小时的学时,而 ETH 一个学期(教学周)只有 14 周,这也就意味着如果只考虑工作日学习 8 小时,一个学生一个学期最多只能学习 14 * 5 * 8 / 30 = 18 个学分,即使包括休息日每天学习 10 个小时,一个学生一个学期最多也只能学习 32 学分左右。然而 MSCS 整整有 120 学分!也就是说,按照前面取工作日的估算,至少需要 3 年才能毕业 MSCS。事实上,我在和一位教授聊天的时候,也得到了相同的评价:

(ETH Computer Science Master) ... is absolutely one of the most intense master programs over the world.

要想通关 MSCS 也最少需要 3 个学期,因为在培养方案里存在一条长度为 3 的关键路径:2 个 Lab -> Practical Work -> Master Thesis。然而,即使我事实上在课程上花费的时间远远小于 30 小时/学分,对我来说 4 个学期通关已经是极限了。这里引用 r/ethz 的名句:

are you studying? no? then go study.

可以说 ETH 的学习强度是独一档的。

科研氛围

每年瑞士有一半的科研经费会涌入到 ETH 中,2019 年这个数字是 25 亿美元的一半,因此瑞士的 PhD 有着在全世界一骑绝尘的工资以及非常浓厚的科研氛围。这里的科研资源真的非常丰富,而且所有人都是静下心在做扎实的工作。

如果有兴趣在瑞士做 PhD,最好的办法就是 Semester Project 或者 Thesis 和心仪的组合作先互相了解,因为科研资源丰富,这边通常会有足够的题目给学生来做,甚至有时候一些科研项目会下放到教学中。经常可以见到的例子就是某门课的 Project 最后变成了一篇非常不错的 Paper,科研资源的丰富可见一斑。

个人吐槽

好了,优点基本都说完了,接下来就是我个人对 MSCS 不满意的点:

首先课程压力极为繁重,竞争非常残酷。4 个学期毕业意味着每个学期平均是 30 学分,前文已经提到了,按照 ETH 的设计在教学周内是几乎无法完成的,所以学生如果想早点毕业,那就不得不再额外抽出休息时间学习,然而一个更残酷的事实是,即使你已经花了很多时间了,仍然会有学生比你更拼:)。

其次就是性价比低。前面提到了,MSCS 通常通关速度也就是 4 个学期两年,这已经比绝大多数 Master 项目长了,更别提一个不小心就有可能会延长学习时间。当然有的人也会说,学到的东西也更多了,可是对我来说我真正感兴趣的课程少之又少,很多时候要么是学习已经非常熟练的知识,要么就是硬着头皮学习毫不感兴趣的知识,我认为这样反而会分散我的精力。

最后就是开学前考试的奇葩制度。前面提到,理论上教学周的时间是无法完成教学任务的,或许是为了解决这个问题,在 ETH 是没有真正意义上的寒假和暑假的,只有从学期结束到考试前的 lecture-free period。没错,在 ETH 本学期的考试是在下学期开始前完成的,而理论上中间的时间只是用来复习而已,再加上 peer pressure 基本上压力会在 MSCS 的学习循环(学习周-复习-考试-学习周)中一直持续。

总的来说,如果满分100分,我只能给 MSCS 打个 70 分。

课程评价

在具体评价之前,有几点需要说明:

  • 我个人技能树主要是 System 方向,包括并不限于操作系统、编译器等等,但是对 AI 几乎一窍不通(仅了解最基础概念,会用 PyTorch),因此在选课口味和评价上会有非常大的偏差,所以要注意同一门课适合的人也是不一样的。
  • 只会去我感兴趣的线下课,上面已经提到了我感兴趣的课程非常少,所以下面的绝大多数课我都没有去过线下,有些体验可能不完整。
  • 我会着重于“性价比”的评价,基本可以用 grades / (efforts per credit) x 100% 这个式子来定义,毕竟及格万岁:)。

Information Security Lab

内容上主要是写代码解决一些问题,HS21是Elliptic Curve、TLS、Cryptographic Reductions、TEE、Software Security、DDoS这几个部分:

  • Elliptic Curve:我倒数喜欢的crypto,主要是实现基础椭圆曲线,意外的很友好,看PPT完事。 TLS实现:我前几喜欢的Network,但是最垃圾的Lab之一,要求实现一个简易TLS协议,示例代码不仅出了很多纰漏,描述也不清不楚,工作量大,性价比最低。
  • Cryptographic Reductions:倒数喜欢的crypto+1,说白了就是做数学题,很多题具有脑筋急转弯的性质。
  • TEE:个人觉得非常无聊的Lab,我不知道这些东西和TEE有什么联系,如果TEE就是做这些事情的话也太简单了,但是比较简单划水的一期。
  • Software Security:简单来说就是打CTF Pwn,如果打过比赛的话难度基本为0,不然的话会很吃力。
  • DDoS:出于个人时间原因我跳过了,所以不评价,但是我简单扫了一眼pdf感觉还凑活,相比前5个Lab最大的优势是有即时反馈,并且保证分数不低于反馈分数。简单来说是ACM和OI的区别,大大降低了心理压力。

整体难度中等,但是非常消耗时间,每两周一个DDL。给分的话我觉得只要时间花到了及格问题不大,性价比中等。

Hardware Security

噔 噔 咚!

内容上介绍了近些年来 CPU 和 Memory 相关的攻击实现,比如 RowHammer,Meltdown 这些。教授本身就是做这个方面的前沿所以讲起来非常ok,是我目前出勤次数最多的课,也是我在 ETH 最喜欢的课之一。

难度上比较高,形式是前半个学期每周一次DDL实现 attack,后半个学期两周一次 Project,最后两周做开放式 Research,和 ISL 一起选的下场就是每周都有至少一个大 DDL,如果 System 比较吃力的同学不要像我一样作死。

给分总评全班最低分是5.0,根据某个同学的说法,可能是过于Push自动筛选掉了不能拿5.0的学生(笑)。

上图是代码量。个人认为性价比偏低,但是这个 topic 对我来说太棒了。

Concepts of Object Oriented Programming

这门课我修的时候是纯网课,比较羞愧的是我一学期没有学过一分钟,考试前几天速通,但是非常非常意外的是这是一门非常优秀的课!一方面教授很好的把复杂的概念用非常清楚的逻辑还有适当的例子讲了出来,另一方面这门课很好的解答了语言设计中 Why 的问题,比如我写了很多C++,这是我第一次思考我在做inheritance 的时候是在干什么。

难度我觉得适中,比较偏理论,如果对C++、Java、Python、Scala、C#中至少三门熟悉的话上起来会比较轻松,不然的话会浪费很多时间复习语言特性。

原来有期中考试加分,我选的时候只有一次期末考试了,因为非常感兴趣所以分数还不错,性价比整体比较高。

Advanced Topics in Communication Networks

主要是讲 MPLS 和 Traffic Engineering,搞 homelab 的垃圾佬应该会喜欢听,我去过几次线下课。Project 主要是写 P4 搞 SDN,简单来说就是给交换机编程实现课程上讲的网络协议,去年的课程是 FRR + P4 + OSPF 明显有趣一些,HS21 不知道为什么把 FRR 和 OSPF 砍了。

难度的话需要对 network 有一定基础才能比较快乐,比如如果连 OSPF 和 BGP 的区别都反应不过来那我不建议选这门。

给分的话 Project 给分最低分是 5.25,但是期末考试给分感人。据一位朋友说,这个老师的课 5 分已经算非常高的分了,再考虑到 Project 的工作量,性价比属实很低。

Reliable and Trustworthy Artificial Intelligence

是我更讨厌的 AI ,为了混学分选的。内容主要是讲 Adversary attack 和对应的 Verification,全都是这个教授自己的研究成果,其实还是挺有趣的,但是我个人觉得讲的过于简略,想完全搞懂需要去读他的论文。另外有部分分数来自Project,主要是实现他课上的算法,比较有趣。

难度的话我觉得主要来源于老师讲的不太清晰,可能有基础的同学会更加轻松,至少我非常吃力。

给分是30%的 Project 和70%的期末,HS22 据说难度进一步增加了,考试一片哀嚎,不过 Project 给分很不错,性价比中等吧。

Advanced Systems Lab

第二门 Lab,主要是理解如何对 CPU Performance 进行建模和测量,非常有趣的一门课,由 Project、Midterm 和 Homework 组成,其中 Project 需要组队利用课上的知识去实际解决一些性能相关的问题比较有挑战性,Homework 基本是送分,Midterm 我没有考太好不过影响不算很大。

整体难度不算很高,也基本不需要太多的前置知识,占用时间虽然很多,但是整个学期下来看的话比较平均,因此性价比也中等。

Advanced Operating Systems

操作系统课,从底层实现一个微内核系统,基本要实现所有操作系统中涉及到的概念,包括串口编程、内存管理、多核同步等等,形式上和 Hardware Security 类似,组队每 1 - 2 周一个 DDL,最后会有自选题目,比如我选的是网络栈实现,最后是整个班唯一一个把带宽跑满的实现:)。

整体上可以说这门课比 Hardware Security 还要 stressful,但是含金量极高,可以说秒杀其他任何一门课。除了操作系统的各种核心概念,C 语言调试能力,代码抽象能力都可以锻炼到,然而美中不足的是,一门我每周要花差不多 2 - 3 天的课竟然只有 7 学分?!在我看来这门课应该至少值 14 学分的工作量。总之,如果 C 语言基础不佳,或者对操作系统没有足够的了解(注意这是货真价实的 Advanced)慎选这门课,即使最后做下来很有成就感,获得的学分也和付出完全不成正比,性价比极低。

Program Analysis for System Security and Reliability

介绍了程序分析常见的技术,和 RTAI 一个老师,因此风格也类似,课程内容基本都是自己的研究成果,但是和 RTAI 不同的是这门课的 topic 我更加熟悉一点。给分是 50% 的 Project 和 50% 的考试,Project 是用 Souffle 实现污点分析,可以 2 人合作但是我是 1 个人做的,难度不算很高但是细节非常多。至于考试,基本和 RTAI 一个风格,比较难。

整体上性价比和给分还不错,但是考试太难是一个很大的减分项。

Network Analysis

这门课是 GESS 课,简单来说就是社会科学相关的课,在培养方案中必须修一门。课程内容主要是对图的一些分析,涉及一部分图论知识,个人感觉更像是数学课,基本不用什么编程,形式上期中考试 3 道题然后期末考试 6 道题,每道题 10 分,取其中最高的 6 个求和得到总成绩除以 10 然后按照 0.25 进位得到最终成绩。

注意这门课 lecture 和 slides 都没什么用,直接看 notes 备考就可以。

一共 3 个学分,我花了大概有 50 小时在上面拿的分数也比较合理,性价比一般吧。

Research Topics in Software Engineering

这门课是 Seminar,也是培养方案中要求的课程之一。所有的 Seminar 形式都是类似的,会给出一个列表的近期 Paper,学生选择后做一个 30 分钟左右的汇报,教授或者助教根据汇报的质量进行打分,同时课堂参与(包括出勤)也会占一部分分数。

一般来说并不需要 2 学分对应的工作时间,性价比算高的,如果最后少几个学分毕业可以考虑多选一门。

Applied Security Laboratory

这门课是用来替代 Practical Work 的课程。内容上主要是两部分,第一部分是独立学习他们给的一本手册,里面会介绍一些 Security Principles 和常见的攻击防御,第二部分是组队开发一个系统来实践之前的 Principles,最后所有的小组会互相评测系统。这门课最有意思就是组队开发的系统必须要留两个隐秘的后门,然后评测的时候需要利用学习到的知识来挖掘后门,尤其是还会发现一些无意间留下的后门,最后 Pre 的时候看大家互相挑错还是很有意思的。

整体上难度不算很高,工程量非常低因为课程的关注点是 Principles 的应用而不是开发能力,尤其是当时我们评测的系统85%的功能都没实现也没什么问题,考虑到其他的 Lab 或者是 Semester Project 的工作量,性价比着实很高,就是比较难抢。

System Security

介绍系统安全的课,整体上深度比较浅,但是覆盖的面非常广,基本上涉及了所有常见的系统安全问题,最有意思的是涉及了 TEE 相关的攻击,在其他课程里基本很少见,不过 HS22 删掉了缓存相关的攻击有一点遗憾。给分是 20% 的作业和 80% 的期末考试,作业如果打过 CTF 应该比较简单,我基本都是一个晚上就搞定了,考试的话难度并不高,但是题量比较大。

整体上难度中等,据说一般给分不会很高,但是通过的话也不太需要非常多的努力,所以性价比还算不错。

Design of Parallel and High-Performance Computing

这门课的内容和之前的 Advanced Systems Lab 有 40% 左右的重合因为有同一个教授,因此先修任何一门再修第二门都会轻松一点。另外 60% 的内容主要是并行、内存模型和锁相关的知识。整体上不算特别难,但是比较偏理论,最有价值的是内存模型相关的知识,这是我第一次真正理清各个概念之间的关系。给分的话是 50% 的 Project 和 50% 的考试,Project 的话是从助教给的题目中选一个合作开发最后提交报告,考试相对来说不算特别难,而且每年的题型比较固定,好好复习问题不太大。

整体难度中等,但是有整整 9 个学分,因此性价比非常不错。

Informal Methods

为了混学分选的,但是意外的还不错的一门课。整体课程设计是 COMP6721 的子集,有兴趣提前了解内容的可以参考其指导书,ETH 这门课只 cover 了其中 50% 左右的内容,主要包括如何用类似形式化的方法去证明程序没有错误,以及一次性写出正确的程序(比如二分法中加一在哪里,要不要带等号等问题)。考核是三次作业分数取平均值,前两次作业只要好好听课看 notes 都比较简单,印象里大概各自只花了 1 - 2 天就可以拿到快满分,最后一个作业工作量大也比较难,我花了大概 2 周在上面(会留包括寒假在内约1个多月的时间完成),但是给分整体上都比较宽松,最后我拿了快满分。

最大的问题是答疑速度非常缓慢,moodle 直到结课了还有不少问题助教根本没有回复过,基本上只能依赖邮件直接去问和同学互助。另外这门课没有 slides,老师是直接板书类型的,课后能看的只有手写的一些 notes,因此上课非常非常重要,我个人经验是上课 2 小时能弄懂的话可以节省课后 4 - 8 小时的时间。

整体上性价比比较高的一门课,主要是不太占用教学周时间,第三次作业可以寒假慢慢写。

一些小知识

  • ETH 出分的 DDL 一般是 grading conference,最晚应该不晚于开学第一周的周五
  • 关于 grading conference,VIS 那边说基本就是让差一点及格的学生能及格的过程,算是“公开的秘密”,另外也有 TA 透露过他们也会尝试给学生“找分”
  • 虽然 Practical Work 和 Thesis 都需要很多前置条件,但是事实上只要联系教授和 Studies Administration 一般总可以注册上,不过缺少 Practical Work 去注册 Thesis 我的确没有听说过,事实上也比较难以双开
  • 迟到了也可以参加考试,给 exam office 打电话如果需要帮助
  • 超过期限想要加考试/退考试也是可能的,给 exam office 打电话
  • graded semester performance 如果不退课会在成绩单第二页(addendum)上留下 fail,session exam 不去会留下 no show
  • 不注册 session exam 的话这门课不会出现在成绩单上
  • 在 ETH 一门课只能重考一次,因此如果挂了两次这门课就不能再修了,如果恰好是毕业必修的课而且没有替代,那就毕不了业了
  • 但是在出分前的重考似乎是不算的(此条没有确证过,因为一般教授很少会在当期组织重考)
  • ETH 最近有一个内部的评课系统可以参考

后记

MSCS 的学习真的是一趟压力非常大的旅途,我不是一个抗压能力特别好的人,感谢一路上有天下第一可爱的女朋友的陪伴和支持,我们都会变得更好的!也祝各位学业顺利!

引用