Breakertt Blog

一起实现梦想的故事!

爱丁堡大学 MSc CS 硕士就读体验

Breakertt's Avatar 2022-05-31 Life

在经历了高考抉择和疫情动荡之后,我在 Omicron 爆发的前夜飞回了英国,开始了一年水硕的学习。

抉择

在 2021 年的上半年,我陆陆续续收到了 UCL Software Systems Engineering, Manchester Adavanced Computer Science 和 UoE Computer Science 的 offer,同时也与 Imperial Advanced Computing 失之交臂。

曼彻斯特虽然曾经有阿兰图灵坐镇,时过境迁,它的计算机系已经荣光不再。很显然,我不会去曼彻斯特,然后就是 UCL 和 UOE 之间二选一了。

UCL
Pro: 大城市,G5,世界排名高
Con:项目一般(我并不想做软件工程),选课不自由,还要考语言(虽然不难)

UoE
Pro: 选课自由,CS Ranking 英国第一,有关系不错的学长在那边,风景治安好
Con:世界排名不如 UCL,村

在思考再三之后,我选择了爱丁堡,谁会想去花一年时间读不太喜欢的东西换一个仅仅差了没几名的世界排名呢?不过,当时的我并没有想到爱丁堡可以给我远不止我想的。收到爱丁堡 offer 几个月后,我顺利拿到了本科文凭,在一些小波折(本科学校不给 1+3 的成绩单,签证延期)之后,我坐上了前往英国的飞机。

开学初体验

在和女朋友隔离了半个月之后,我就要开学了,她也要回到她自己的城市。爱丁堡第一学期还是线上授大课,所以入学手续也很简单。

一切都很新鲜!作为爱丁堡的强势学科,信息学院有两幢大楼,一幢研究用(Informatics Forum),一幢教学用(Appleton Tower, AT),我作为一个授课学生只能使用 AT。我不太喜欢 work from home,因为效率会很低,所以尽管新冠肆虐我也会经常去 AT。AT 本身不错,尤其是风景,大概是我这辈子见过最好的之一。但是里面的硬件设施真的很一般(Intel i5 6th Gen, HDD),不过因为装的都是 Ubuntu,到也不卡就是了。

选课 / 教学向的 100 学分(不包括 IRR,IPP)

这边选课需要自己先在 Path 系统选好,然后发送给 Personal Tutor。然后 Persoal Tutor 会联系你开个会,聊一聊然后正式把你的选课注册进系统。如果他觉得有些 advanced level 的课程你没有相应的基础的话,他也许会帮你避一下坑。不过,在其他事物上,爱丁堡的 PT 和诺丁汉的 PT 一样给不了太多帮助(甚至更没用,很少回邮件),不过我也没有遇到过真正紧急需要 PT 的时刻。

大方向的确立

都说爱丁堡没课可以选,但是事实上爱丁堡可能已经是开计算机课最多的英国大学了。如果你是爱丁堡的 CS master,有很多大方向可以选择,详细的可以参见 handbook。这里的主要想法是,研究生阶段修课需要有一个明确的主线,而不是再是凑学分。打个比方,如果你想做并行计算相关的,PPLS (Parallel Programming and Language System) PA (Parallel Architecure) EXC (Extreme Computing) 就是很适合一起选;再打个比方,如果你想做 NLP 的话,你可以选 TTDS (Text …) MLP (Machine Learning Pratical) ANLP (Acce.. Natural Language Processing) 这个组合。当然,这个只是对于 MSc CS 的学生,别的 MSc Cybersecurity 和 MSc AI 之类的都已经有自己的主线。

一些碎碎念

很多人说爱丁堡没啥课好选,其实这边的选课范围已经非常的宽泛和自由。即使你是 MSc CS,你也可以选上 ANLP + MLP + TTDS。虽然和前几年随便乱选没法比,但是在英国已经算不错的了。

课程分享 - 安全

Blockchain & Distributed Ledgers (BDL)

这门课介绍了目前区块链世界的各个方面,包括 bitcoin, etherum,共识算法,区块链经济学,等等。通过这门课,你可以对区块链这个东西有个比较基础的了解。这门课的主要问题是很多人根本听不懂,讲的有点太难,但是作业却很简单(但恶心)。这门课的作业内容基本上只需要前四周的内容,而且是没有考试的。总共有四个作业而且每个我都写了将近 10 页的报告,所以写到后面直接写吐了。好处是都是作业的话,对我来说就更好刷分一些。而且后面三个作业非常的雷同,都是和智能合约编写有关系,我本来期待后面两个作业可以弄点新的东西。不过,我看到很多我的 Master 同学毕设都在做 web3 相关的研究,如果你也想后续在这个方面有所建树,这门课还是很不错的!(区块链革命!!!!!!!)

评分:4/5

Security Enginnering (SENG)

选这门课的主要原因是我毕设和安全有关系,且我这辈子还没上过院士 + 教科书原作者开的课。这门课我这年有两个老师,一位是英国两院院士,我本科计算机安全课教科书《Security Engineering》的作者,从剑桥双聘过来的 Ross Anderson,另外一位是体系结构x安全届的学术新星 Sam Ainsworth,也是从剑桥过来的。这门课介绍了安全工程/安全研究的方方面面,Ross 负责广度(计算机安全和人社会)的部分,Sam 负责深度(计算机安全和计算机软件计算机硬件)的部分。

这门课上课部分分为 Lecture 和 Tutorial,Lecture 是放在 Youtube 上的,Tutorial 是线下的。整体来说我觉得课程内容还是很不错的,引人入胜。老师也准备了相关的题目放在 Tut 上一起讨论,比较遗憾的是大家的参与度都不是很高的感觉。

这门课有两个作业,都是 Paper Review,对当时的我来说是一个小挑战,但是最后得到的分数还不错。我觉得如果你之后想做科研的话,请务必好好做这两个作业。

总结来看,我对这门课最大的感受就是它把以前学过的基本上所有的计算机相关的东西(网络,操作系统,体系结构,软件工程,计算机伦理)都和安全和安全实践结合了起来,会让你对这些东西以及安全工程的认知提升到一个新的高度。举个例子,一般普通的计算机网络课不会讲目前的 Zero Trust 网络,但是这门课会教。不过从另外一个角度来看,如果你对这些内容一无所知的话,慎选。换句话说,这是一门标准的研究生课程,有一些显性的前置要求(本科的计算机安全)和一些隐形的前置要求(操作系统,计网,体系结构),同样的事情在下面的 Extreme Computing 和 Advanced Database Systems 两门课也有发生。

评分:4.5/5

课程分享 - 体系结构

Computer Architecure & Design (CARD)

这门课由两个方面的内容组成,一方面是 Design (设计),一方面是 Architecure(体系结构)。有人可能会疑惑,为什么我到研究生阶段才上这门课,其实答案很简单,因为我本科的学校根本!没有!做这方面的老师。我本科英国大一上过一门叫做 System & Arch 的课,但是讲的非常的杂乱,只是介绍了下时钟、频率和指令集,教了下 MIPS 的汇编和计算机网络的入门,而不是真正的体系结构课。扯远了,通过 CARD 这门课的学习,你可以学到单核 CPU 的设计,从逻辑门到指令集,从基础的五级流水到分支预测、数据转发、乱序执行。可以说,学会了这门课你就基本上掌握了直到本世纪初的 CPU (在 CMP 还没兴起之前)的设计。

从课程时间设置上来看,由 Lecture,Tutorial 和 Lab 组成。Lecture 是由 Prof Nigel Topham 一个人完成,讲了 Verilog 编程、手推逻辑门、流水线、寄存器、状态机、时序设计、分支预测、乱序执行、高速加法乘法器和内存结构。内容有点多,每节课都需要一些额外的时间去消化和理解,但是绝对是引人入胜。Prof Nigel Topham 是土生土长的英国人,口音非常的舒服,听他上课是一种享受。Tutorial 上会讲一些习题,很多习题都是从往年的试卷上出的,所以好好上 Tutorial 会对考试有很大的帮助。Lab 只在上半个学期(Coursework 1 的 ddl 之前)有,大家可以在 Lab 上问关于 Coursework 的问题。

这门课的考评由两个 Coursework 和一个 Exam 组成。Exam 只要刷 Past Paper 就能得到不错的分数(我貌似是 92?)。Coursework 1 会给每个学生发一块 Xilinx FPGA 板子,然后让学生用 Verilog 写一些东西。因为我当时实习的时候旁边的工友都是做 FPGA 的,我早就想玩玩了,当时拿到板子特别激动。CW1 分四个部分,第一部分太简单就不说了,第二部分是写一个 ALU (纯组合电路),第三部分是写一个 RegFile (简单的时序电路),第四部分是把自己的写的 ALU 和 RegFile 放进一个老师给的 RISC-V 五级流水 CPU,然后实现数据冒险,最后开动自己的智慧再去进行一些优化。CW1 要写一个 report,同时也要把写好的 CPU 烧进板子在 Lab 给老师看然后评分。当你自己优化好的 CPU 插上 HDMI 之后在屏幕上点亮的时候,那种成就感是无以复加的。CW 2 是用 C++ 在 Intel Pin 上写三个分支预测器,不难,我就不多说了。

如果你看了我的文章决定选这门课,我还是要预警一下,CW 1 可能需要你花 50 个小时左右的时间去做,如果你没有下定决心学这个,请不要给自己添麻烦。

论对这门课的喜爱程度,我觉得可以排到我自从本科以来所有上过的课中的前三,当然也是因为它填补了我心中一直的空白。

评分:5/5

Parallel Architecure (PA)

这门课可以说是 CARD 课的延续,不过很遗憾,下一年貌似不开,不过我还是想写一些。接 CARD,我学习了单核 CPU 的设计,而 PA 就是介绍了自从本世纪多核 CPU 兴起之后的故事。这门课首先介绍了这 20 年来体系结构领域发生的变化,以及 Domain-Specific 的大趋势。然后就详细讲解了目前最流行的单 Chip 多核 CPU 中比较重要的主题:Cache Coherence,Memory Consistency & Synchronization。这几个主题很难理解,老师(Prof Vijay Nagarajan)花了好几周的时间去讲这些。在讲完这些主题之后,老师介绍了 GPU 和异构计算,以及异构计算的 Memory Consistency。这门课和 Security Engineering 一样,教科书也是教授自己写的(再次感叹爱丁堡师资力量的强大)。

这门课我觉得缺少了 Tutorial,这门课的 Lecture 比 CARD 还要更加难懂许多,如果有 Tutorial 答疑会好很多。

关于作业,两个作业都不简单。第一个作业是 Paper Review,ddl 有点早,改分有点低,不过只占 15% 就无所谓。第二个作业是让学生自己用代码去研究 Cache Coherence 和 Memory Consistency,要用到 C 语言和 pthread (老师不会教,硕士生默认会),同时也要写一篇类似于科研报告一样的东西,我写了 15 页,最后给分挺慷慨(我拿了 87)。我个人的想法是整体工作量对于一门 10 学分的课有点多了。

这门课我花的时间和 CARD 一样是偏多的,但是学会了真的应该会对以后的生涯,无论是 SDE 还是 system research,都会有帮助。Prof Vijay 人也很好,上课随时可以答疑。

评分:4.5/5

课程分享 - 其他计算机系统

Extreme Computing (EXC)

这门课的内容稍微有点散,不过可能形散而神不散。这门课由两位年轻的教授,Dr Amir Shaikhha 和 Dr Mai Luo (他的知乎) 共同授课。Amir 会介绍 MapReduce,Spark (以及 MLlib)和 Pregel,同时着重于 Spark 的实操,教授了 Scala 语言并布置了两个相关的 Coursework。我之前学过 Haskell 所以 Scala 对我来说其实没啥,但是身边很多朋友就因此被劝退了。同时,Amir 的导师是 Scala 的发明者(之一?),能从一门语言的发明者的学生那边学习到一门语言也是一种很奇妙的经历。

然后我们就会发现 MapReduce 的范式有它自己的局限性,Spark MLlib 只能做一些传统的机器学习任务。这时候我唯一在爱丁堡接触到的中国老师,做 MLSys 的麦洛老师会介绍一些关于分布式/并行深度学习的知识。麦洛老师介绍了一些分布式机器学习的范式和框架,都是业界目前炙手可热的 Topic。Mai Luo 介绍的 MLSys 论文和李沐最近新发出来视频中挑选的论文高度一致(GPipe,Parameter Server)。

最后 Mai Luo 和 Dmitrii Ustiugov 还有一些客座教授(Guest Lecture)介绍了一些云计算相关的内容,比如分布式数据存储(GFS,对象存储)和各类的虚拟化技术(Docker,K8S,Amazon Firecracker 和函数计算)。Dmitrii Ustiugov 目前在 ETHz 做博后,听说已经拿到了港科广的教职,各位对函数计算感兴趣的可以去陶瓷他做第一个 PhD 哈哈哈。

这门课我这年的 CW 不难,考试也不难,好好准备好好学就可以拿到很好的分数,但是可能明年(22/23学年)会难一些?I don’t know to be hoenst.

这门课最大的特点是和目前以云为主的 SDE 工作高度契合,如果你毕业之后是想找 SDE 的工作,这门课会给面试中 System Design 环节带来很大的帮助。

评分:5/5

Advanced Database Systems

首先,这门课不教 SQL。这门课讲的是如何去构造一个现代数据库,也是从单线程出发,然后最后讲数据库事务(并行)和分布式数据存储(2PC)。我觉得这门课的内容在 DRPS 页面已经介绍的很好的了,我就提几个点吧。

  • 这门课和 SENG 一样,有一些隐藏的前置知识要求。老师会默认你会有一些操作系统、系统设计、体系结构的知识,不过其实完全不会也可以学会,只是如果你是本科 EE/Math/etc. 转专业过来的且选的都是的 AI 课,可能上的会有些吃力
  • 这门课的 Lecture 量很大
  • 这门课的 CW 有点难,但是不是完全做不出来那种,我写了 2000 行左右吧。然后 CW 评分 90% 的部分是纯纯机改,剩下 10% 是代码可维护性。我没有学过 Java 的朋友也做完了,拿了 90+。
  • 这门课的考试要复习的有点多,不过给分不低
  • 两个老师人都很好

评分 4.5/5

IRR-IPP-毕设 / 科研向的 80 学分(包括 IRR,IPP)

讲完了可以自由选择的学分之后,我想来谈谈爱丁堡 MSc CS 对以后想在科研道路有一定建树的同学准备的 80 科研学分。

这 80 学分包括了以下三个板块:

  • Informatics Research Review (10 Credits)

    IRR 是一门教你写综述的课,我不觉得这门课安排的很好,不过无论如何给了你 10 学分的时间去学会写一篇 Literature Review。相比我女朋友的学校,把写 Review 直接放进 Dissertation,爱丁堡真的已经是在手把手带你做科研。
    这个 Literature Review 的主题是自选的,上限是 8 页,不过我建议最好写一点本校有老师在做的方向,这样可以和后期的 IPP 契合。

  • Informatics Project Proposal (10 Credits)

    IPP 是 IRR 的后续和 Dissertation 的前奏。IPP 就是给自己的毕设写一份 Proposal,自己的导师会打分。我真的建议 IPP 要好好写,不然连毕设都没开始你的毕设导师已经放弃你了==

  • Dissertation (60 Credits)

    这个我目前还在体验,不过因为我导师 + 我 self-propose 的原因,我在去年 12 月和今年 4 月放弃了休息,提前做了一些工作。因为每个人和导师合作的行为模式都有区别,所以我就简单讲一下 self-propose。self-propose 指的是自己提一个毕设题目,而不是等到第二学期从导师给的论文题目里面挑。self-propose 做的课题一般会更前沿,更有可能发表一些。不客气的说,有些毕设课题从题目开始没有发表论文的可能性了。
    self-propose 很麻烦,要自己选老师自己陶瓷,如果你以后不想做科研我真的不推荐,但是如果你想,这个真的会很有帮助。

本文最后更新于 天前,文中所描述的信息可能已发生改变