同样神课 CC. 这门课没有课程视频,即使是本部也没有。有的只是许多 project. 在这门课中,你将走马观花地使用 Amazon AWS 中的大部分服务,尝试写出若干 Cloud Native 的小服务,并在啃 write up 和与队友撕逼之间掌握自我学习的能力。该课程 workload 很大,即使是有经验的人也需要 30+ 小时每周的时间。在选这门课的同时,建议找好可靠的队友(大腿)。推荐所有想做后端和 infra 的人学这门课。
. .и
## “神课” 11-785 Deep Learning
自然,神课都是本部的。这门课也是享誉业界的好课,从最基本的 NN 和 SGD 一直讲到 Reinforcement Learning, 并且伴有丰富的学习材料和 Project. 如果你有志于做 Data Scientist... 这门课可能不够,毕竟这样的岗位基本都需要 PhD. 不过,本课能让你对 ML 有一个基本的了解,让你将来做 ML Infra 的时候和同事 PhD 交流之时不至于露怯。推荐所有想做 DL 方向或者有相关方向的人学这门课。
## “还行” 18-652 Foundations of Software Engineering
## "腐朽" 18-655 Service Oriented Computing (以及 Jia 老师的所有其他课)
这是另一门神奇的烂课。如果前一门课的描述是「诡异」,这一门的描述就是「腐朽」。从第一节课开始,整门课程就流露着上个世纪末期,Orcale 和 IBM 还叱咤风云意气风发,打算用 Java, Eclipse, XML 和专利费一统江湖的旧时光。
这门课的老师是 Jia Zhang, 是在 Service Computing 领域颇有影响力的老资格人物。不幸的是,这个领域早就死了,现在已经完全沦为了许多人自娱自乐的产物。千万不要把这个所谓的 Service 与现在正在流行的 AWS/GCP/Azure 这种 Cloud Computing 服务混淆:要知道正是后者杀死了前者。
让我们把时光倒转到 Late 1990s, 那时候没有 iPhone, 没有 Google, 没有 Facebook, 更没有 AWS. 当时世界上的信息产业的主要形式,是大公司向 IOE (IBM, Oracle, EMC) 等大厂花大价钱购买机器、软件、维护和技术支持,用海量的钱换取自己内部数据的电子化和快速统计。在这个时候,软件的开发模式是瀑布模型,架构是 Huge Monolithic, 交互是 Private Protocol. 这个时候,Oracle 正确地预见到将来软件会更加分散、更加小块、更加灵活。但是他走上了完全错误的道路。他们的技术路线是:开发模式接着瀑布,架构选择用一个 JVM (Typically Tomcat Server) host 许多 Java App, 交互选择基于 XML 搞一个协议 (SOAP) 来传输 Java Object. 为了允许服务之间互相发现,搞了一个基于 XML 的 Service Registry (UDDI), 并且搞了一个基于 XML 描述 web service 的语法 (WSDL), 甚至还发明了一套基于 XML 的所谓 Workflow, 来让你通过写 XML 来调用其他 Service, 并把他们的结果整合起来。没错,用 XML 写业务逻辑。最后,他们在 Eclipse 里面把这一整套全家桶集成起来。聪明的你看出来问题了吗?
没错,这一套系统是完全彻底的 Vendor Lock in, 如果贵司真的用了这么一套系统,可以说是永世不得翻身,估计时至今日还是要每年给 Oracle 交上大笔的维护费,来让他们帮忙维护贵司的 service infrastructure. 另外,充满了 XML 的传输也是臭名昭著地低效、人类不可读,叠床架屋的 SOAP 标准也会莫名其妙地不工作并且让你无法知道原因,正如 Oracle 的所有其他产品一样。2019 年的新鲜工程师们听到这么一套技术,恐怕会脸上目瞪口呆心中窃笑。在 Amazon 放出了他们的 AWS 以后,这一套垃圾迅速、彻底地走入了历史的垃圾桶,消失得仿佛不留一丝痕迹,而这个名为 Service Computing 的学术领域,也慢慢沦为了自娱自乐的小圈子。 毕竟,我们今天使用 Python 和 Node 做微服务,JSON 做传输协议,Kubernetes 做编排/负载均衡。日子过得很好,不是吗?
然而,时至今日,在 CMU-SV 校区的 Jia 老师仍然在孜孜不倦地教着这一套技术栈。在她的第一门课,匆匆定义了一下什么叫 Service Computing (这个定义请背下来,期末考试要默写)之后,她严肃地说,每一届都有学生要求我修改课程内容,但是这是我的课,我是不会修改的,你可以选择不上。当时我还太年轻,并没能理解这句话背后的含义。等到我理解的时候,已经晚了。值得一提的是,如果你是 SE 的学生,你将一定需要选她的课,而她的所有其他课,都有本课作为前置。所以其实你并不能选择不上。
.1point3acres
课程评分包括“参与度”、Project 和期中期末两次考试。就 Project 来说,首先你需要装一个 Eclipse, 然后开始生成好几个 Oracle 视若珍宝的 Web Service, 然后……开始写富有厚重历史与沉甸甸血泪的 Java 和 XML 吧。至于期中期末的考试,可以说很接近国内本科生的考试了。发给你一张卷子和一个空白小本本,请你在小本本上回答问题。主要内容包括:概念默写(Service Computing 的定义)、手写 XML (WSDL 定义,SOAP 报文)等等。
.1point3acres
这里分享两个期末考题。第一个是 WS-I Orgnization 的创立目的。这个题目本身没什么特别的,背就是了。有趣之处在于,如果你真的好奇这个组织的状态,你会发现这个 2002 年创立的组织,在 2010 年就已经解散了。但是这个题目还存在于此,令人不得不怀疑整套课程的编制年份。. check 1point3acres for more.
. check 1point3acres for more.
第二个题目是为什么 XML 比 JSON 好。答案是 XML is a Language, but JSON is not. XML can be validated, but JSON can not. 显然,这个题目的编制者既不知道什么是 Language, 也不知道什么是 JSON Schema.
无论如何,强烈建议任何人不要选这门课。无论你的目的是学习技术、拓展人脉还是纯粹找工作,这门课只会损害你的大脑而不会有任何技术考古学以外的意义。当然如果你是 SE 项目必须选的话……还是得选。
## “跑路” 18-645 How to Write Fast Code
.--
SV 自开课。这门课的标题颇有一点哑谜的感觉。它既不是教你怎么快速地写代码,也不是教你怎么做性能调优,而是教你怎么并行计算的。主要分为三块,thread, GPU, MapReduce. 所以怎么写出很快的代码呢?只需要氪金变得更强、买更多计算资源就好了。
这门课的神奇之处在于,基本上没有在上课。具体来说,有一半以上的课程会在上课前半小时被取消。这件事情初次发生的时候,老师的群发邮件说的是女儿生病了本次课临时取消,我们还惊奇了一下。但是后来,邮件里就是简单地说 Today's lecture is cancelled 于是已经到了教室的同学们就耸耸肩回到自习室。再后来,老师和学生就有了默契:学生不去教室,老师发邮件。
推荐所有人选这门课——作为每周需要时间不超过 3 小时的课,你将省出充足的时间来进行你想做的事情,无论是自学、社交还是刷题。毕竟它还是一个 SE Track 里面的课。