MashPlant的笔记

“你将孤单度过一生”

0%

大三下总结

“因循苟且,逸豫而无为,可以侥幸一时,而不可以旷日持久。”

划水

从寒假开始讲起吧。2020.1.20坐火车从北京回武汉,当天注意到新闻里关于疫情的报道渐渐变多,但是心里还是觉得这应该不会太严重,甚至还想着,”我全程戴着口罩坐火车回来,这应该就是对我的生活的最大的影响了吧”。事实证明后来的影响大到了无可估量的地步。

1.21的时候相关的新闻就开始爆发了,而且向着越来越严重的方向发展,后来我想,如果我只是计划晚一天回去,也许就不会回去了。我当然觉得这是一件很可惜的事情,因为自己在家里一直在划水,想着如果在学校的话肯定会好一些,至少不至于用性能这么差的电脑。不过我估计,假设我真的没有回去,那我可能也会觉得可惜,想着如果我在家的话会怎么样。说到底是我自己的问题,跟在哪里也许没有什么关系。

decaf-hs

从回家到开始上托福课,再从托福课结束到开学,两段时间里几乎什么都没有做,现在唯一还记得的就是写了一个Haskell版的Decaf编译器(当然,上托福课的时候也什么都没有做,所以这就是整个寒假我做的唯一的事了)。只写到PA3,也没有仔细比较过结果,只是测了几个例子。Haskell真的太难了,每写一步都要考虑很久,而且因为惰性求值,我经常在尝试一些看起来完全等价的写法,有时候会卡死,有时候就不会,说到底我根本没有理解其中的原理。写到PA3已经花费了我很多时间,我完全无法设想后面的PA4/5能怎么写了。

我自己尝试过学Haskell很多次了,这也是一次尝试,虽然这次有充分的时间可以投入,但是还是感觉太难了,学不懂。从那到现在,我也没有再碰过Haskell,感觉这和我日常的编程实在差的太远了,这样的话估计当时学的东西到现在也全都忘记了。

我是对软件分析与验证这个方向挺感兴趣的,但是连Haskell也学不会,这不是相当于门槛也没有跨进去吗,那我还配感兴趣吗?

托福

上学期得知很多学校要求托福考试时间是在入学的两年以内,而不是申请的两年以内,所以之前的那次托福很有可能等于白考了。这在上个学期让我心情低落了相当长一段时间。本来是打算这个寒假报个托福班,再学一次再考一次的,但是遇到了疫情,考试取消了,课程也改成线上的了。这样其实基本不太可能认真的投入了,感觉每天浑浑噩噩的,就这么混过去了,口语自己几乎根本没有练,听力和作文也还是很不熟练。当然,后续也一直也没有考试的机会,即使当时真的掌握的更好,对之后的考试其实也是不会有任何帮助的,我的记忆都是相当短期的。

我想起来去年的这个时候,自己一个人住在寝室里,那时又回想起高中有段时间一个人在寝室里准备化学竞赛,感觉情景非常类似。十几天里,每天早上六点多起来跑个步,吃一点早餐后骑车五公里去上托福,上午上课,下午做题和记单词,结束后再骑回来,晚上在寝室里对着听力和口语发呆,感觉像是不可逾越的困难一样。考试的前一天晚上绕着操场走了几圈,当时心里想的是,我这学期应该选OS,不能让别人对我失望;同时这学期也是学GRE的最好的时间了,也应该报个班。那时我真的感觉自己是在为未来而努力,但后来证明这些都是徒劳,做或者不做对未来没有一点的影响,就像我为之努力过的很多其他事情一样。

开学

事情很少,我自己找了几本书看。有些看得进去,比如TAPL,有些看不进去,比如SSA Book和Software Foundation。但是不管看不看得进去,现在里面的内容我都已经不怎么记得了。我自己当时心里应该也知道这一点,只是不愿意承认:我现在做的事情,没有意义。

chyyuu每周有一个交流时间,参加了几次,每次都只能说没有什么成果。我在忙什么呢?作业吗,看书吗?其实根本没有什么忙的,就是什么都不想干,最好能找点什么事情做来打发时间,实在没有的话就玩玩手机也是差不多的,反正结果也没有什么区别。这个交流参加了几次之后就没有再参加了。

我大概不能算一个合格的大学生,至少肯定不是一个合格的清华学生,我应该还是一个合格的高中生吧,只会做题的那种,真是对不起我的母校。花时间在考试和作业上,虽然心中可能会有些厌烦,但是心里也很充实,感觉这就是我应该做的事情;要是让我自己去探索点什么,没有立刻的反馈,也没有随时的指导,那我只能说,我目前还没有成功过一次。

如果我想要改变的话,大概也只可能改变自己对这件事情的心态,我想是不太可能改变这件事情本身了。现在我基本上是抱着这样的心态的,我没有必要因为自己会失败而拒绝什么可能的尝试,但是我也不太可能主动去争取,最后做成什么样子就随它去吧。

网络编程技术(A)

工作量真的很小,只有至多两次编程作业(我们还只有一次),两三百行的小玩具级别的。还有一个非常简单的考试,就是一些考基本概念的选择题,和一个找代码缺陷的大题。这种找代码缺陷的题老师上课也经常讲。

虽然考试很简单,但是我就是必须要很认真地去准备,ppt看了有三遍,其实可能一遍都不用看我也会做,我还是这么在乎分数,这是没有办法的事情,虽然我现在心里也渐渐承认,提高这一点GPA对未来可能没有什么帮助了,但是分数早就成为了我的信仰,是我怎么样也不会放弃的。

存储技术基础(A+)

前半段是一个研究生来讲一些基本的存储技术,比如SSD什么的,当时听的感觉还有点慌,感觉记不住,但是一看没有考试就不担心了。后半段是老师来讲一些应用,基本没怎么听。

有两次大作业,第一次是写一个KV引擎,代码在https://github.com/MashPlant/undergraduate_projects/tree/master/存储技术基础/kv。我写的挺简单的,基本就是一个内存里的map,只是保存到磁盘了而已。它有一些原子性,持久性的要求,我感觉如果要满足这些要求的话也没有什么花样可以玩。第二次是用FUSE自己随便写点什么,是组队的,不过我自己做了。我没有什么创意,看到指导里说可以写一个网络学堂映射的文件系统,那我就写了。先是照着Harry Chen的thu-learn-lib自己造了一个Rust版的thu-learn-helper,感觉写的还是很舒服的。然后基于fuse-rs造了一个网络学堂映射的文件系统,代码在https://github.com/MashPlant/thu-learn-fuse,这个库感觉想法还可以,用起来也还比较舒适,但是好久没维护了,不知道是不是凉了。

还有一个组队论文阅读的作业,每个人读几篇论文,一起写个报告。我基本没有怎么读过论文,感觉我的阅读能力还是不行,精神不好的时候经常就往谷歌翻译里一拖,看那些磕磕绊绊的中文也比这种状态下看英文快。可能我真就只擅长考试吧,或者更严谨一点说是我的实际能力没有达到我的考试成绩反映出来的能力。

大作业和论文阅读都有一个可选的展示环节,我都参加了,不过看别人做的东西,还是感觉自己太浅薄,重复了那么多遍自己熟悉的东西,最终也不能说有什么收获。

计算机系统结构(A)

去年选了另一个老师的系统结构,然后退了,这在去年的总结里已经说过了。不知道他今年的教学效果有没有变好一些。

今年换了个老师,感觉他讲课诚恳多了,至少不会不时蹦出来一句”我当年”怎么样的。不过这课本身死记硬背的东西太多,而且至少我是实在看不出来有什么应用,老师讲得好一些应该也没法让学生很投入的听。他说这像高中的化学,其实我看还是像生物更多一点。

小作业只有四次,好像都是前半学期布置的,后面就没有布置过了。大作业一个是Cache模拟器,一个是Tomasulo模拟器。听说另一个老师的第二个大作业改成了Meltdown和Spectre漏洞的利用,感觉好像挺有意思的,没想到他居然能做这种创新,去年上了他的课我还以为这两个模拟器的作业准备用一辈子呢。去年我退课的时候做了第一个大作业,当时感觉做的挺困难的,今年就做的轻松多了,有可能是我的能力提升了,也有可能是网上的资源变多了,也有可能是作业本身描述和指导的更清楚了。

两个大作业代码都在https://github.com/MashPlant/undergraduate_projects/tree/master/计算机系统结构。虽然我上交的Tomasulo的代码中有一个会影响结果的bug(github上的已经修复了),但是平时作业得分还是满分。考完了之后有空我还造了一个在线版的:https://mashplant.online/tomasulo,去年我感觉造GUI是非常困难的工作,当然其实现在本应也是很困难,因为我并不会前端,前端是抄的,不过有了这些资源的情况下做起来好像也不是很难了。

考试是开卷的,估计是想着如果要求闭卷,可能最后就成了一部分人闭卷一部分人开卷。虽然我自己一直认为自己记忆力还行,之前的考试也基本证明了,但是记这种东西的过程还是很痛苦的,能开卷当然最好。虽然是开卷,但考前我还是把ppt仔细看了很多遍,毕竟那么多复习的时间,实在也是没有什么别的事可以做了。

考试的时候,大多数题目都是很熟悉的,不看ppt也能直接写,少部分考到了一些很奇怪的知识点,比如TPU的脉动执行,这个点我考前看到最后一章的ppt,看着这么模糊的图,想着它是绝对不可能考的,就没有细看,再说我也是认真听了课的,这应该是真的没有讲。我就在考场上对着ppt现场拟合脉动执行的算法,感觉像是我在机器学习一样。最后还是看出来了,只是不知道是不是对的。

软件分析与验证(A-)

这个是软件学院的课,我对这个方向感兴趣,所以选了。

这门课前半段讲一些基础的知识,命题逻辑,一阶逻辑,一阶理论什么的,后半段用一个示例语言讲程序语义。前半段感觉还行,越听到后面感觉越虚,感觉都是一些无法应用的算法,至少只用课上讲的内容肯定是做不出什么东西,虽然这肯定不只是学校对我们的要求。而且很可惜的是今年因为形势特殊,为了给我们减轻负担所以取消了大作业,大作业的主题应该是写一些自动分析的工具之类的,本来我是很感兴趣,很想写一下的。

老师讲课相当仔细,但是也有点太仔细了,可能会花很多时间去解释一个我觉得很显然的例子,再加上是网课,走神是很正常的。平时书面作业大概三周左右一次,编程作业只有两次,PA1是写一个SAT Solver,PA2是写一个经Dafny验证的二叉堆 + 堆排序。不过我不明白为什么PA2单独算一次编程作业,因为书面作业中也有一次要我们写一个Dafny程序。好像我的PA2扣了几分?评分是6分,我也不知道满分多少,估计是10分吧。是学期结束后才出的分,出分时也没通知,也没有给argue机会。这个东西难道不应该是能够跑过就是满分吗?不然自动化验证的意义何在呢?


更新:我发邮件问了助教6分的原因,助教说在他用的Dafny版本下出现了四个error,一个error扣1分,所以就是6分。他的版本是2.3.0,我的版本是1.9.7,这就离谱了,居然会有旧版本能够证明,而新版本不能证明的情况,这要么是新版本证明能力下降了,要么是旧版本有bug。这个评分标准也离谱,四个error可能只是少了一两句话的结果,这种自动化验证的程序出现这种结果是很正常的,居然真就总评扣四分。

助教说习题课里说了要尽量用新版本的Dafny,两个问题,第一是习题课不是必上的,我很顺利地做完了实验为什么要上?第二是什么叫尽量新版本?按照网上的教程,这就是我安装的最新版本,我没有渠道可以得知还存在更新的版本。再说了,评测用的就是最新的版本吗,那要是我用的版本比他还新,然后也是我这里通过他那里error怎么办?毕竟新版本证明能力上升了才是正常的。很明显这个作业就不应该这么评测,肯定是要写报告,讲自己的思路,贴运行结果,这样才合理。如果一定要根据error数评分的话,一定要在实验指导里指明评测用的版本,而不是在习题课里来一句”尽量新”。

最后结果是A-,我是相当不满意了,不过也还是4.0,而且批阅时间和出成绩的时间都是很久以前了,我就不争了。


考试也是开卷的,和系统结构同一天考。我从第十六周一开始复习到第十七周周三考试,就一直看这两门课,感觉复习的要吐了。这个考试比系统结构的简单一些,可以说全都是不用看ppt就能做。比较不舒服的一点是考前我把修正带用完了,修正带我已经用了这么多年,估计只要我还写一天字,就会用一天修正带。考试的时候一写错心里就很烦,如果有修正带的话肯定可以直接改掉,但是没有,我就在纠结我是全部划掉,还是尝试改一下,纠结的时候思路就断了。这让我想到了高三的九月调考,一样是很简单的卷子,考场上不在状态,那一次结果也是不怎么样。我觉得这考试真没什么题可以错了,我猜可能就是PA2扣了4分,其他作业加起来扣1分多一点,考试最多错了一点点吧,这样就A-了。

这个学期开学的时候我在看Software Foundation,讲Coq的。前面也说了,我看不进去,很多地方缺少解释,虽然我主要看的是中文版,但是应该也不是翻译的问题,毕竟我也可以看英文版的对应位置,我觉得就是前后逻辑接不上。这东西看起来是真的很神奇,也确实有它的应用价值,但我还是感觉离我平时的编程太遥远了。一学期的课上完了,感觉也没有什么进步,这本书也还是看不进去。

数据挖掘(B+)

选的时候只是为了填一下专业限选课的学分,上完之后就感觉真不该选,成绩出来之后更加后悔。我对沾点机器学习的东西基本就一点兴趣都没有。老师ppt念的确实没什么问题,但是我实在是听不进去。一般下午第二节课的时间我不是很困的,但是听这个课好几次都睡着了。

小作业就是平时讲的一些内容,要你手动跑一下数据挖掘的算法,大约一个章节一次,感觉覆盖的知识点并不是很全面。我感觉小作业似乎有点批的过于严格了,一道要求写过程的计算大题的两个答案我不小心写反了,然后就把分全扣了。还有就是第一次作业的一道选择题就在总评中占两分,我错了,但是这个真的就只能抱怨,没有什么可argue的了,毕竟评分标准是清晰的,对所有人都是一样的,只能怪自己运气不好。

大作业是论文作者消歧,就是给出很多论文的信息,把多篇作者名字相同但实际作者不同的论文聚类成不同作者的论文,三个人组队做的。这个是一个竞赛,在https://www.biendata.xyz/competition/chaindream_nd_task1,这个竞赛去年也有,所以我们就尝试改了一下公开的去年前几名的代码。有一个第五名的,我魔改了半天,越改F1越低。还有一个第二名的,一个队友先搭好,效果还行,在排行榜前面待了一段时间,但是后来就被别人挤到很后面去了,我们怎么改F1也没有超过最初的结果。Python实在是跑的太慢了,而且每天也只有三次提交机会,所以实在是没什么动力去卷了。

一开始的成绩是85分,我感觉太低了,去argue了一下。一个是上面我说的作业那个问题,助教给加了一分,还有一个是我说大作业主要是由我和另一个组员完成的,还有一个人在划水,我觉得如果分数都一样的话并不公平,所以申请加分,助教也给加了一分。除此之外就没什么可加的了,所以最后87分,好像绩点也没什么变化。喜提大三一年唯一一个算学分且不是4.0的课。

三年级男生手球

非常幸运地又选到手球了,这已经是我第三次选手球了。手球的网课也不出我的意料,比其他的体育网课要水得多。前大半个学期都是老师在微信群里喊一句上课,然后大家答到,接着讲几句手球相关的知识,一节课就这样结束了。到了后面改用腾讯会议,基本上也就是答个到,简单说十分钟就下课了,即使当时不在,过一会在群里解释一下也没有问题。考试就是几个手球动作,老师用视频发给我们,要我们自己做了录成视频发给他。

在一些群里看到有的低年级的体育老师一直都是强制要求视频签到,还有人因为自己错过了一次签到要扣分而想退课,不知道是只有我们这么水,还是大三的普遍会水一些。