4000字DKU ECE总结+Duke课程评价:热爱可抵岁月漫长

11789
50
刚刚考完了在Duke的最后一门Final。毕业近在眼前。两年内我也从只会调包写Python成长到现在准备攻读系统方向的博士学位。两年时间里刷了几百道leetcode,写过web,也折腾过Linux kernel和分布式,有幸在知名的云厂商做了Infra实习,还写了个不太完美的编译器。

一切的一切都是始于我在两年前被爆发的Omicron吓到随手补申了一个DKU的ECE项目。毕业之际再来分享一下自己的体验,希望可以帮到将来的各位。

对这个项目感兴趣的话也可以参考我之前的一些就读体验:

instant.1point3acres.cninstant.1point3acres.cn

instant.1point3acres.cn
instant.1point3acres.cn

这篇帖子会分为两个部分,首先我会介绍一下第一年在昆山的学习结束后,第二年在Duke上过的一些课程评价
然后就是一如既往的碎碎念时间,一些毕业之际我希望记录下来的思考。

课程介绍
Duke确实不能像CMU一样提供包罗万象的课程,但是仍然有很多很独特而且高质量的课程选择。
我在Duke的第二年除了两门必修的management外一共选择了四门课。分别是ECE560 Information Security, ECE553 Compiler Construction, ECE566 Enterprise Storage System, CS590 Advanced Web Development,每一门都很值得推荐。

23 Fall
因为Fall学期的选择不是很多,我在23Fall只选择了ECE560一门专业课,然后把必修的两门management课同时学完了。

ECE560 Information Security
这门课涵盖了Security的方方面面,并且非常的practical。它并不会非常深入的介绍各种技术细节,比如加密算法的具体计算方式。而是更多的集中在高层的概念和实际应用上。这门课的主讲Tyler是一个非常有热情而且元气满满的教授,上课会给提问的同学发糖。

这门课给分友好,workload也不是很大。但是在作业中会让你实际进行课上讨论的方方面面。比如端口扫描,使用反向代理远程控制,彩虹表爆破密码,亲自给自己的服务器申请证书,在AWS上部署蜜罐来截获公网上千奇百怪的网络攻击等等等等,甚至包括如何在一分钟内打开一个密码锁(物理)。

这门课的最后一个作业是通过SQL注入攻破教授的一个网站,黑入他的服务器去找到有用的信息,让你亲身实践所有的这些操作。

更有意思的一点是,这门课的作业都不是直接公布在网站上,而是需要你自己破译。让我印象最深的一次是教授把图片线索藏在了维基百科的一个修改记录里面,然后通过图片的metadata来在学校里找到一个物理存在的二维码来获得作业的文件。真的充满了惊喜。

虽然这门课没有产出任何可以直接写在简历上的项目,但对我整个知识体系的构建是十分关键的。这门课除了让你对Linux的熟悉程度急剧上升以外不会给你太多的具体的“技术”。但它会给你在心目中搭起整个安全的框架。告诉你在设计软件的时候需要考虑到哪些方面。

这门课并没有出现在太多的选课列表上,可能因为名字不够fancy也不会给简历带来太多的增色。但从我的实习经验来看,安全恰恰是那个非常重要但是在学校里被很大程度上忽视的部分。这门有趣的课推荐给所有希望认真对待软件开发的人。

24 Spring
Spring开出的课程选择就比Fall要多的多的多。特别是还赶上Duke ECE最受欢迎的教授Drew修完陪产假归来。让我狠狠选了一波硬课。

ECE553 Compiler Construction
传奇人物Drew主讲,传说中Duke ECE最难的课。
在开课前教授专门发邮件警告了所有人: 551 and 651 were learning to swim. 553 is swimming across the ocean. In a hurricane. Chased by sharks.

Drew上课行云流水,没有PPT,一支笔一块白板从头讲到尾。中间穿插许多drew式冷笑话。令人非常印象深刻。
这门课的主线是使用一门函数式编程语言SML,在MIPS指令集上开发出一个语法类似于Pascal的Tiger语言编译器。从前端的lexing, parsing, semantic analysis 一路到后端的instruction selection, dataflow analysis, register allocation. 最后得到一个可以运行的编译器。

这门课的第一个挑战就来自于编程语言SML,作为函数式编程语言,它和我们熟悉的imperative programming比如procedural或者Object-Oriented有极大的不同。 没有循环,一切循环基于递归实现。没有变量,一切都是常量。拥有极其严格的类型系统和类型检查,稍有不慎就疯狂报错。用这个语言写代码一开始上手极其痛苦,感觉自己的大脑在不断燃烧。但是写到学期末期也逐渐隐约体验到了这些系统带来的好处。很多代码逻辑在编译期就可以通过类型系统的严格约束来保证了正确。基于类型系统衍生的pattern matching在处理树形的递归时得天独厚的优势。以及递归事实上对于思维负担的减少。到后期也感受到了很多语言新特性中对于函数式编程的借鉴。给我创造了很多Aha moment

第二个挑战就在于编译原理本身了,它说简单也简单,说难也难。它简单在其实跟计算机其它知识的关系并不是十分紧密。比如说你几乎不需要掌握任何计算机系统的知识,只要知道基本的汇编就可以学习并完成一个编译器。但是它内部涉及的算法和理论又很有挑战,需要花很多时间去理解和实践。我在这里其实有点掉到坑里了。因为对于大部分CS课来说,比如操作系统或者网络,其实理论的部分就是一些概念,并没有什么理解上的难度。大家上课听过即可,更多时间花费在实际coding去感受这些概念。我一开始使用了相同的方式来学习这门课,然后发现在没有花时间消化理论的情况下几乎一个字母都写不出来。甚至上课如同听天书。诚恳的建议后面想挑战这门课的同学在上课前一定做好预习,阅读完教材的相应章节,并且确保课后理解了所有概念。这样会轻松许多。

功利的来讲,这门课的内容对于绝大部分软件开发的工作来说是没有任何作用的。不会有任何人在面试里问你如何用graph coloring来完成register allocation. 你大概率也不会亲自去修改你编译器中的dataflow analysis和各种optimization。但如果你确实十分好奇编译器是如何工作的,以及想切实挑战一把被functional programming折磨后豁然开朗的感觉的话,不用担心转码的身份,这门课不需要特别多前置知识,只要你自信自己的coding水平以及愿意投入足够多的时间。欢迎来挑战。

ECE566 Enterprise Storage System
这是Tyler在秋季开的一门课,之前由于疫情暂停了一些年。Tyler在加入Duke前在一家云存储公司有着很多年的工作经验。我选课的时候单纯冲着Tyler选的,实际课程也确实没有让我失望。

这门课就是由他实际的工作经验凝结而成。话题从单机的文件系统和块设备,到设计虚拟化存储系统,云端的High availability, disaster recovery,security等等话题。
这门课比较有趣的一点是会给每个组分配一个真的!物理!服务器,每个小组会在lab里安装硬盘,安装操作系统,然后实际部署在Duke的数据中心里。整个学期的lab都会在这个服务器上完成。

Preview


这门课的final project非常开放,可以是和存储相关的任何话题,从Cloud Cache,Deduplication, Compression或者安全相关的话题,或者基于文件系统做一些有趣的应用。

我们在这门课上基于Linux的用户态文件系统(FUSE)做了一个Dropbox客户端。这个project应该是我在整个Master写过最有趣的project,首先是解决了成吨的并发问题,另外因为是基于用户态文件系统,我们可以截获所有操作系统发来的文件系统请求。然后做出非常有意思的抽象。比如我们实现SmartSync的特性让用户看到文件存在而实际不存在,在实际打开文件时才触发下载来节约内存空间。

课上的其它组的project也非常有趣,有同学做的MP3文件系统,在文件系统级别提供MP3按歌手/专辑/日期等等分类。有同学做了Cloud Cache,也有同学做了为CD光盘提供的write-once文件系统,包含了复杂的加密和压缩,百花齐放。

这门课上可以提供漂亮的project,然后深入了解系统底层以及很多现代存储架构的实践。也可以满足你摸服务器和datacenter的好奇心。也是五星好评。

CS590 Advanced Web Development
这门课比起被叫做Advanced Web Development, 一个更好的名字可能是All of Web Development。它并不advance,对于web开发经验不多的人也十分友好,但是包罗万象给你介绍整个web开发的图景。

这门课以Typescript全栈开发为工具介绍整个现代Web开发的实践,课程内容从Typescript的事件队列等机制开始,讲到Vue和Vue的设计理念,再到RESTFul API,反向代理,socketIO,MongoDB,负载均衡,中间件,安全,容器化,测试。教授会宣称这门课欢迎web零基础,但由于涵盖的内容极多,个人认为最好还是对前端和后端有基础的了解。比如起码知道HTML CSS和Javascript分别是干嘛的,知道数据库和后端服务器的基本原理。大概知道Docker和Kubernetes都在做什么。不然容易被巨量的信息淹没最后不知所措。

如果你真的具备这些知识,这门课被称为All of Web Development 就毫不为过。

大学中的应用开发课程常常被人诟病为toy,因为和工业实践脱节。经常出现各种通信全走HTTP毫无安全性,Single Server毫不scalable。但这门课通过大量介绍工业界的实际实践并要求学生使用来很大程度上避免了这个问题。

教授Dennis在工业界有极其深厚的经验,是前IBM主管云服务部门的副总裁。管理着上百人的技术团队,自我介绍职业生涯写过超过100万行代码。他把以上的这些主题全都精心准备到了每节课的代码例子中。每节课80%的时间都在live demo。并且极其的supportive,在本人正在创业,拥有极其忙碌的schedule的情况下还在final project快due之前开了起码七八个extra office hour帮助大家debug。

顺便一提Dennis的debug能力非常离谱,帮同学debug作业都能三言两语定位解决。我有一次Kubernetes拉下来的镜像由于硬盘满了出现损坏,拉起时出现毫无报错信息的Crash。他在完全不知道background的情况下稍微看了一下拉起时的现象就断定是镜像损坏。当我问及没有报错信息如何查出来时,他悠悠的回答:just experience and intuition。经验丰富到令人咋舌

这门课的final project会强制要求同学应用这些工业界的实践:比如kubernetes部署,部署CI/CD pipeline,反向代理,使用load balancer,OIDC作为登录方式等等。最后可以在简历上有一个非常漂亮的Full Stack项目。

这门课唯一的缺点大概就是作业的要求写的比较随意。所幸TA给分也比较大方。可以比较纯粹的focus在学习本身。

另外这门课平均每周会有一个quiz来检测课上和阅读材料所学,也是变相的鼓励大家及时复习,跟上进度。

Dennis是Visiting Professor,所以这门课不保证每年都会开,如果对Web Dev感兴趣而且遇上他开课一定不要错过强烈推荐。

碎碎念时间
热爱可抵岁月漫长
原谅我用了这么俗套的小标题。但我确实想不到更加合适的了。我们在经历绝望的经济下行,中美互联网增长到顶。转码不再是一条容易赚快钱的明路。

本来觉得此时此地气氛烘托到这了似乎应该有很多可说的,可百转千回到了嘴边似乎又倏地消失了。过去的两年像是一瞬,但又真真切切的改变了我。

我上了很多“无用”之课,读了很多“无用”之书,确实在这里走出了一条路,很幸运能够继续在我热爱的领域继续研究,继续学习。

我不知道将来会不会被现实打倒。向钱或者生活屈服。

起码现在当我在折腾操作系统,折腾代码的时候,我是快乐的。

最后再向大家推荐一下DKU ECE这个项目。诚然,我一开始是把它当作Duke ECE的平替来看待的。因为背景不佳被Duke拒绝后的替代品。但我在亲身体验之后,感觉起码对于我来说,DKU是一个优于Duke ECE的选项。

这个项目有我见到过最负责的Coordinator,全心全意用120%的精力帮同学们联系企业,找内推。很大一部分同学都是通过Coordinator联系的机会而找到暑期实习机会。我们这届100%的实习上岸率,在绝大部分同学是转码背景+经济下行的情况下我感觉是很难得的。体感下来Duke这边提供的就业支持基本等于没有支持,今年Duke MEng甚至直接群发邮件让大家waive实习要求。可以说是高下立判。

另外第一年2+2的课程设置让我们这些转码小白有了自己的时间可以安排。自由决定补课还是准备面试。在国内没有时差也极大的助力面试,让我很幸运拿到很满意的实习offer。

在留美如此困难的情况下,如果你希望在国内转码,从事你喜欢的这个职业,那DKU绝对是胜于Duke的更好选择。

这里给我机会让我进入这个领域,这里的学生眼里有光,我很感谢这里带给我的一切,让我找到了奋斗的方向,并且可以为之努力着。

我真的很爱这个项目,真的很爱这所大学。

Preview


补充内容 (2024-05-11 13:17 +08:00):

回帖的画风似乎又变到了争论项目的好坏上。

在这里还是希望提醒一下各位选校的学弟学妹们。
项目的好坏固然有评判,比如从计算机的研究实力来讲,从录取的生源水平来讲,CMU显然大于Duke大于DKU。但我们并不是在做计算机项目天梯榜,我们只是一个教育的消费者。大家对于项目的选择要考虑清楚自己的背景和需求。

如果你希望找国内工作·,仅仅需要一个综排好看的大学title,那欢迎你来DKU。如果你不惜一切代价留在美国,那美国学校提供的cpt权重就要大的多。如果你是维持身份的打工人,显然day1 cpt学校可以爆杀以上任何一所。

我对于DKU的好感很大程度上跟我的个人需求和背景有关:我并不强求留美工作甚至倾向于回国,我在乎Duke的title和就读体验,我的自学能力和热情尚可,不依赖课程。因此对于我来说DKU确实比Duke强,因为我十分确定如果Duke录取了我,我是不可能在暑假找到如此让我满意的实习机会的,而没有这个实习机会,我也不会有现在的博士机会。而这一点仅仅是因为DKU 1. 第一年课少让我可以全力学习基础知识和面试知识 2. DKU让我有国内找实习的氛围,不用纠结冲国内还是冲美国。3. DKU的coordinator在很早就内推帮助我获得了一个保底offer让我没有后顾之忧的冲大厂

相比于以上两个优势,DKU稍差的课程质量和没有cpt就无足轻重了。

我的需求显然和强烈希望留美工作的人是不同的,和非常需要高质量的课程来提升自己的人是不同,和非要在地里给CS项目排个天梯榜的人是不同的。不说回帖中的诸位英豪,和我同一届的同学对于这个项目都有和我看法截然相反的。

而我能做的也仅仅是根据我的经验提供我所知道的信息,最终的选择还是要问自己。

希望大家都能选到适合自己的学校,适合自己的项目。

ps: 关于大家提到的项目就业率这件事情,大家要理性看待,作为本科的统计学子,推荐我当年选offer时地里看到的一篇帖子,非常通俗的讨论了就业率中的Simpson's Paradox
instant.1point3acres.cn

补充内容 (2024-05-12 19:32 +08:00):

From 评论区23届匿名学长:
提供一个很重要的信息给打算回国就业且没有京沪户口的同学:dku ece无法在上海落户。落户要求是中外合作提供中外学校双证(dku ece只有duke单证)或者第一年网课证明(这个证明是开不出来的,duke提供了其他support材料,但不起作用)。最终落户的case还是被拒了。2022年毕业的同学因为都留美了没有发现这个漏洞,2023年毕业的同学现在面临这个问题。
  • 62
50条回复