2021年终总结

匆匆忙忙地,又是一年。

仍记得2020年最后一天,我在学校旁的酒店里考了最后一次托福。整整一年后的2021年最后一天,我在学校的GHC楼里对着数百万条日志徒劳地找着bug。

恍恍惚惚地,这漫长的一年终是过去了。

1月13日,在第二轮申请截止前的最后一天,5舍自习室里,我赶完了MSIN项目要求的小作文,检查了最后一遍语法然后点了提交键。虽然时常自嘲自己只是去当个分母,但好歹是尝试的最后一个梦校项目。想着或许以后只有刷课时才能再见到这个令人仰望的校名,此外便是此时此刻离它最近,脸稍稍有些发热。看了看电脑右下角的时间,快十一点了,但似乎还来得及在学校关门前冲出去买瓶饮料。于是戴上耳机,冲下楼,出了校门买了瓶冰镇的可乐,又冲回学校。慢慢走到共青场,看着安静的夜空,绕着跑道,时不时仰头灌口汽水,一圈,两圈,。。。,终于平复了内心的起伏。

相当幸运地,2月的时候竟收到了offer。

之后就是在学校挣扎着最后一学期的专业课和毕业论文的时光。不出所料,最后一学期仍然没学到什么东西,失望的次数多了也就习惯了。比较有趣的是一门教安卓开发的课,最后课程项目用kotlin写了一个在安卓上的NES模拟器,为此算是圆了毕业前写一个emulator的想法,还移植了十几个游戏上去。包括一开始的既定目标——超级马里奥,虽然交的时候颜色映射设置错了参数,导致变成了暗黑马里奥。。。此处要@nalzok,帮了天大的忙了。比较有意义的是,感觉是第一次有了个小小的idea,然后去把它编程实现,挺开心的。

久负盛名或者说烂大街的15213从5月末也开始上课了,这次把CSAPP每章都认真看了一遍,还做了笔记(再一次证明之前写的post之后是不会看的,因为我已经忘了几乎所有内容,但是在上课期间还是能帮自己理清思路的)。彼时同时上着4门专业课,硬着头皮改着毕业论文,甚至因为最后一门专业课拖到7月初才期末考试一度以为没法毕业。。。。。。。最后求爷爷告奶奶地在7月15日拿到了毕业证书,算是彻底和ECNU说了拜拜,也是同一天,校园卡自动注销。

CSAPP的几次实验没有大的麻烦,倒是最后的考试感觉质量堪忧。。。有很多题目出错的情况。

考完的第二天,我坐上了去往浦东国际机场的高铁,第三天就到了匹兹堡。又过了两周,我开始了我的研一生活。

是的,很不幸,我的大四没有毕业旅行,没有摸鱼划水,有的大多只是不知路在何方的忧郁和迷惘。

是的,很不幸,现在想来我的四年大学可以说是相当失败的,学校的授课质量可以用“上课就是影响学习”来形容。然而我又是一个喜欢好好上课的人。。。一心想多刷几门的公开课,最后几乎全鸽了。。。去伯克利交流,一心想好好上神课,却又是炒冷饭再学一遍数据结构、os、写cpu。。。我想这其实还是自己的问题,因为到最后只有你自己了解你自己、care你自己、知道你自己喜欢的东西。有的时候很讽刺,就好似一个循环,大二上CSAPP期中考试的时候,因为考了第一被助教夸安徽出学霸。然而有用吗,不见得。两年之后我又重新开始上起了CSAPP。。。苦笑。。。

不出所料地,CMU每门课都有着巨大的工作量,或许也因为大四和研一衔接的过于紧密导致太累有些消极怠工,最终这学期只上了两门系统课,存储系统和并行架构,还有一门项目必修的经济学大杂烩。

SS: 不愧是PDL,存储系统课自底向上从SSD的原理和机制讲起,接着是磁盘、文件系统接口、以FFS和LFS为代表的文件系统到RAID多磁盘系统再到内核分布式文件系统(NFS、AFS)再到库文件系统GFS、BigTable,然后是数据备份和保护机制。接着就是一系列guest lecture以及较新的以LSM tree为基石的文件系统。这门课程的project需要实现一个SSD的flash translation level和一个通过fuse实现的以本地SSD为前端、远程AWS为后端,支持deduplication、snapshot的混合文件系统cloudfs。我C++写的十分平庸,但是也算尽力避免写出屎山代码。这门课上完大致也了了我较为系统学习偏低层存储系统的心愿,每次课的论文我也有尽力好好看!但愿能为我下一步入门数据库系统打好基础。

PP: 并行架构课前2/3个学期上完了所有的课程,后1/3个学期要求完成一个自选的project。说实在的并行编程感觉有些应用specific了,毕竟调到最后都是常数优化,而这需要大量的实践经验,不是单纯上课就能掌握的。前半部分课程内容给出了一个比较general的并行编程pipeline,从问题分解(decomposition)到任务分配(assignment),到并行实例编排(orchestration),再到具体的硬件资源的映射(mapping)。接着从共享地址空间、消息传递、数据并行三种模型介绍了具体的实例。后半部分的课程内容更偏架构一些,有讲到多核cache的协议及实现、各种锁在多核架构下的性能tradeoff,无锁编程、事务内存、编译器预取等等。总的来说也学习使用了一波CUDA,OPENMP,MPI,值得一提的是CUDA的assignment非常有趣,是通过GPU加速一个circle render。最后的project我们选的是用C++实现一个fork join框架,我们的实现有child stealing和continuation stealing两种,其中比较难实现的是continuation stealing,为了避免魔改编译器,我们最后借助c++20提供的协程支持,最终竟然也实现出来了,基本上包括了线程池、无锁分布式队列、work stealing算法这几个部分。在PSC高性能集群上递归求斐波那契竟然能跑出来128线程96x,64线程63x,32线程32x几乎线性的加速比,感觉还是不错的哈哈。虽然快排和矩阵乘法稍微差些,但是64线程之下基本都是线性的加速比。最后和老师的对线部分,由于我口语太过拉垮,在和todd解释的时候,知道回答的问题由于忘记英语怎么说。。。没有回答好。但是最后和brain对线就稍微好了一些,他还挺喜欢我们这个项目的,说是比较完整,有实现有性能分析有测试,甚至还想让我们回去补一个测试,看到我们一脸懵逼,最后说是joking。。。。最后看到成绩OMG,给了我们组100分(中位数85分),因为最后项目占比25%,虽然两次考试都是中位数的水准,但是直接把我抬进了A。。。看到成绩的我人是懵的。。。

经管: 这门课我觉得是挺有用的,就是节奏也太快了,而且我对这门课的内容也太不熟悉,上起来其实累的程度和专业课也差不了多少。。。再加上我还比较喜欢看reading,导致很心累。。。一开始教了四大报表、会计学的一些东西,紧接着就是微观经济学的一本巨无霸厚书,然后是宏观经济学的一部分知识。。。加上有5次quiz,每次考起来都很折磨,最后两次实在看不进去大厚书,直接刷武大的微观经济学mooc,刷完了然后发现知识点覆盖得非常一致。。。。就是少了宏观的部分。。。有的时候请教国内相关专业的同学,和我说他们大三才涉及类似的东西。。。对于我这种以往从不关心经济理论知识,唯一的相关信息来源是各种假大空微信营销号的人来说,很是头疼(尤其是各种英文专业名词。。对一开始我还专门写了post做笔记。。。)。有趣的是作为课程一部分的一个模拟经营项目,大致是把所有小组划分成几个世界,每个小组对应一家公司,每个公司需要周期性通过分析各种报表、分析竞争对手的行为以及控制各种参数,比如价格、公司位置、库存、研发投入、green value投入、市场营销、外币储备、甚至集装箱数量等等n多参数,来相互之间模拟对抗。最后我们组在第一个周期就亏本的情况下(但老师的评价是这其实很不错,因为第一个周期我们投资了最多的钱(甚至还借钱了。。)在商品质量上,抢占了商品质量的高点,比对手的商品质量高很多,之后的周期会有非常大的优势,因为客户有一定记忆也就是所谓的品牌效应),最终净资产、净利润、分红等各项指标都达到了我们世界的第一。emmm,最终从我们的策略和结果来分析我觉得高质量+高价格的高端市场才是王道,虽然市场份额不一定是最高的。。但是利润是真高啊。。。。其他组基本上奉行的是一般质量+高市场份额的策略,最终在竞争者众多的情况下,利润空间十分有限。。。。。

总的来说这学期应该学到了一些东西吧,我也不清楚。。。拿了满绩,当然这是在我选的课并不多的情况下,不太好的是自己经常压力莫名巨大。。。,尤其是前2/3个学期,处于一种厌学的状态。。。晚上肝到很晚,时常需要熬夜看SS、PP、经管的reading,然后也不知道为什么就是不想睡觉也不想学习,压力一大就熬夜刷剧,导致自己精神状态也不是很好,感觉记忆力也下降了。可能跟大四下和研一上衔接得太紧密了又不停熬夜缺少休息有关。。。一门教面向对象设计和实现的课17514最后也是退课了。。。。剧倒是刷了n部,看了扫黑风暴,狼溪两季,Halt and Catch Fire全四季。。

在一周又一周的lab和quiz的步步紧逼下,我在CMU的第一个学期飞速逝去。后1/3的学习逐渐步入正轨,每天在GHC落地窗边幸福地学习着,看着paper,码着代码。12月15日出的最后一门成绩宣告了研一第一个学期的结束。感觉2021是梦一样的一年,上半年还在地球的那一边苟活着,下半年就到了另一边苟活着,然后毫不停歇飞速地结束了我在CMU的四分之一。15日左右我也开始了我tinykv的正式学习之旅,于是就有了我篇首在重重叠叠的log中找寻bug的奇妙经历,然后用了三周半的时间,将将赶着在ddl前把几个project赶完交了上去。当然得以遇见的是由于零优化,性能部分被其他组吊锤。。。最终只拿到了成功参赛奖(苦笑,又一次,交的20组里面正好排第10,苦笑,average guy,正如朋友所说,竟如此平庸)。倒是看着榜单挂出来的校名,感觉很不是意思,感觉对不起那个说在GHC学习是一件幸福的事情的自己·,总感觉做得不够好,可以说很差吧,顶着足够吹牛半生的校名,或许少一点摸鱼,少一点熬夜无脑刷剧,提高一点自学SML的效率,就能挤出来优化的时间了?最开始计划的读写分离和异步快照优化想来算是最基础的默认每个组都会实现的优化了吧。。。。

害,whatever,这便是我的2021。