The Sophomore Grind

今天是放假后的第四天,我得以闲适地坐在咖啡馆里,生活的轨迹逐渐变得自由而可控。我无论如何也不愿忘掉我在这个学期的经历——尽管期末考试一结束,它们就迅速变得飘渺起来了。

Grind of ICS

这个学期,选课时,我曾一度期望能够选一门高年级的专业课来让自己更为充实,却又苦恼于课程时间冲突;如今回想起来,一定是上个学期的经历给了我盲目的自信。开学没多久,课表就让我开始措手不及,预习、上课、作业、大作业……几乎每次都是刚好排满了一周的时间,这令我无法喘气。同时,我发现自己没有喜欢上这学期的任何一门课程——这是最糟糕的地方。

计算机系统导论(ICS)是一门从 CMU 引进的课程,它所用的教材是《深入理解计算机系统》(CS:APP)。CS:APP 的前言中提到了这本书推荐的几种教学计划,它们无一是需要讲授所有章节的,有些教学计划甚至需要两个学期;而北大愿意在一个学期讲授整本书的内容。我几乎只是在自学这门课程,这并不是因为我拥有过人的自学能力,而是因为上课时我总是无法跟上老师的速度;同时,在我看来,ICS 的老师能给我带来的收获仅比那些只读 PPT 的老师多一点点。于是,我只能自学,每周都要花一整天的时间如坐针毡地读几十页书,然后做一份书面作业,并约莫每两周完成一份 lab 作业。

每一个 lab 作业都是一次痛苦大过收获的磨砺。诚然,lab 是 ICS 课程最大的魅力之一,精心设计的配套工具与文档让这些 lab 质量极高,但我仍旧不喜欢其中的多数作业。datalab 让我们用尽量少的位运算实现一系列函数,bomblab 需要反汇编,buflab 让我们进行缓冲区溢出攻击,archlab 要实现一个朴素的处理器,cachelab 则要对特定问题做缓存优化……无论如何,我都难以说服自己热爱上这些 lab 里那些无比 tricky 的细节。tshlab 让我们实现一个 shell,malloclab 需要实现一个分配器,proxylab 则要我们实现一个代理服务器。这三个 lab 着实让我颇感兴趣,因为我可以做出一些实际可用的东西。我大概能发现,我喜欢抽象与创造性,而难以热爱繁杂的细节与无尽的优化。

CS:APP 这本书在绝大部分评价中都被奉为极优秀的教材,但我在阅读这本书的时候,却难以感受到这一点。我觉得我不是在读一本知识结构严谨完整的书,而是在读一本小说。这种无结构感集中体现在目录上:为什么「整数表示」、「整数运算」、「浮点数」是同级的三个节,而「浮点运算」却是属于「浮点数」的一个小节?(这类例子不胜枚举)遣词造句固然严谨易读,但是行文却如散文一般,知识点分散各处。以我的思维方式,我不认为这是一本好书应有的特质。或许与其他同类的书比较之后我才会意识到这本书的妙处,也或许我就是不适合读这样的书。

对于我来说,这门课难学的根本原因在于它的基本思路是反抽象的——这与我的思维方式矛盾。在最后一节课上,老师总结到,这门课不是「教我们如何开车」而是「让我们把车盖子打开看看」。在我看来,整个学期我就像是在慢慢剥开一个美妙身体的皮囊,发现里面满满的都是错综复杂、歪歪斜斜、精密无比的血管与神经。It is so ugly, but it works.

在学期快结束的时候,我突然意识到一件事情(这非常蠢):计算机系统不等于计算机操作系统。意识到这一点后,这本书的知识结构才开始慢慢在我脑中成型,最后我花了一整天的时间把所有线索串起来,这让我非常愉悦;如果在学期初我就了解到这一点,我或许会以更大的热情来学习这门课程。要做到这些只能靠读者自己的总结,书上至多给出了一个非常高层次的视角。

但无论如何,这门课终归结束了。在这一个学期,它让我慢慢地摸索如何去 tradeoff,如何从细节开始去把握一个复杂的系统,最后,它给予了我读懂其他所有计算机类书籍的(或许是盲目的)勇气——这多像是成长的过程:学会权衡利弊,学会面对现实,学会拥有自信。

Grind of Other Courses

尽管 ICS 令我热情消退,但它却让我收获满满。相较之下,有些课程就如同灾难般无可救药,Web 技术概论就是最佳的例子——这门课让人很难寻觅它的可取之处。

这门课采用了函授的方式,学生不需要去教室上课,而是在课程网站上学习课程材料、提交作业,但这门课并没有足够好地运用了函授的方式,反而使得学习效率更为低下。作为 Web 技术课程,它拥有自己的课程网站,但这个网站却丑陋得让人情绪波动,几无美感可言,像是花了一个下午赶出来的。课程的理念是「用 Web 技术教授 Web 技术」,实际上它却在用 20 年前的 Web 技术教授 10 年前的 Web 技术。有些知识固然是不老的,然而技术却在以很快的速度更新换代,这门课程至少应该讲授一些现代的、真正实际可用的技术,而不是变成「Web 历史概论」。

上个学期我选了程序设计实习的 MOOC 班,课前自学,课上讨论问题,由于老师很认真也很 nice,我学到了许多 C++ 知识。这个学期我选了数据结构与算法的 MOOC 班,用了更多的努力得到了更少的收获。

每周我们都需要提前学习新一章的内容,预习由课余时间承担。我每周都需要在预习这件事上耗费至少一天的时间,这并不只是因为课程内容有难度、我自己的效率低下,如果老师在 MOOC 课程的视频里不只是在读 PPT,我想我能用更少的时间学到更多的东西。课堂上,学生会做每个专题的 pre,在我看来,这并没有达到预期的结果:学生会先做本章的总结——不见得有多有用,然后做一些拓展——没多少人听得懂,结果就是原本只有三四十人的课堂,只剩几个人还在听课,于是这门课也变成了完全自学的课。这门课的作业负担非常繁重,除了之前所说的预习外,在网上的 MOOC 课程中,学生还需要每周完成一些练习题、三道编程题目、几道较难的书面作业题,加起来大概需要一到两天的时间去完成。

与大量的投入不相匹配的是不多的收获。由于之前有些许的竞赛基础,我本以为学习这门课程会轻松一些,但没有。我发现在这门课上学到的数据结构与算法知识与在高中学到的竞赛知识并不完全一致,这不是因为大学里的内容更为正确,而是因为这门课描述数据结构与算法的形式比较特立独行。我总是能感觉到那些算法的描述如此佶屈聱牙、浮于表面、不够优美,好像是一个没有受过专业训练的人写出来的一样。这样的不一致让我矛盾而烦躁,期末考试前也只能背诵了事。

数据结构与算法实习是数算的配套实习课程,但我丝毫不觉得这两门课程具有逻辑上合理的匹配性。当数算才刚开始讲线性表时,数算实习已经讲完线段树了,然后在作业里留了主席树的题目。数算实习在这个学期讲了五个数据结构与算法专题:线段树/树状数组、树堆、后缀树/后缀树组、空间数据结构、二部图。对于我来说,以上所有专题都是自学的,因为当老师在读那些排版丑陋、逻辑混乱的 PPT 时(甚至老师自己都承认 PPT 是东拼西凑的),我能感受到的只有昏昏欲睡。上机考试的题目几乎都有省选、NOI 难度,无竞赛基础的同学可做的大抵只有背代码(因为有许多原题)。另一方面,这门课程不知为何还讲了一些软件工程的知识,比如代码风格、程序排错、软件开发过程等。尽管有一个社交网络分析大作业,我认为这些软件工程知识的理论与课程中的实践是完全脱节的,期末考试前能做的依然只有背知识点。对于计算机类课程来说,考前需要大量的死记硬背,这的确是一件让人匪夷所思的事情。最后,这门课还引发了一次广泛的讨论备份版),许多同学提出的观点都相当有价值,但是老师的讨论似乎与同学不在一个频道,同时也没有建立起师生平等的讨论环境,最终一场轰轰烈烈讨论就不痛不痒地结束了。

集合论与图论这门课程期望学生能在一个学期学完十几章的内容,于是课程的速度大约是一周一章,最快的时候达到了一次课一章。尽管老师对这些知识烂熟于心,同时也非常聪明,但以他这样的速度上课,我也只能囫囵吞枣。

我选了西方音乐史,希望能培养起对古典音乐的兴趣,然而,这门课俨然成为了纪录片放映课。每次的课堂内容不外乎看一部关于某位作曲家的纪录片,然后老师上台点评几句。作为音乐史课程,期末考核却是当堂的音乐鉴赏,我无法理解老师在此的意图。一学期下来,我偶得了三四首喜欢听的曲子,这大抵是全部的收获。

由于之前已经学会了蛙泳,所以游泳课上我也没学到什么。至于马克思主义基本原理,我几乎一节课都没听过。

Grind of Ache

无论我是否喜欢这些课程,也无论有些课程有多差劲,我终还是能学到些什么东西,然后慢慢遗忘那些不重要的部分。可是这个学期结束后,有些东西却似乎将持久地留下来,比如脖子疼,再如肩膀疼,又如背疼,还如腰疼。

大量的课程负担带来的并不只有精神上的疲劳,还有更多的身体上的疲惫。在上学期我就已经知道自己有腰椎间盘膨出,背上的肩胛骨附近也会在洗衣服的时候慢慢、慢慢地麻木。这个学期繁重的学业,让我开始逐渐感受到头颅的重量,或许这是因为我越来越有思想了(笑)。这些疼痛现在还不会影响生活,却如影随形地纠缠着我,对我说,你累了,你累了。

其他人看起来都活得好好的,好像早晨十点钟的太阳,而我看起来就像是要落山了一样。「健康是第一位的」,这句话说着毫不费力,真相却并非如此简单直接。有太多的时候需要用一点点健康换取更多的收获,而获得健康又需要大量的投入,人总是不可避免地目光短浅。我尝试每周游泳,每晚锻炼,每小时站起来走走,这总是有用的,又总是难以坚持的。

Grind of Emotion

void

Grind of Future

在期末的时候,我突然意识到,在这个学期,自己的热情、兴趣被各个课程不断地消磨,理性、思考能力在忙碌中不断地流失,上进心逐渐沉没在压力与焦虑中,我开始变得平庸。意识到这个事实是阻止这种趋势的前提,然而要让这个趋势有较大的逆转,需要发生一些足够深刻的事情——至于会是什么事情,我当然不知道。

前几日我把博客搬到了新的主机里,在整理时不免泛泛地又读了几篇很久以前的文章。三四年前的我,原来是那样一个不知谦虚、锐气十足的少年,现在我却愈发觉得自己所知甚少。过去的我,封闭而敏感、懵懂而多愁,现在我却逐渐得以打开心中的死结,甚至开始尝试主动调节自己的情绪。数年前的我,无论如何也无法想象世界将以如此丰富的姿态展现在自己面前,也无法料到,在北大一年半就使我改变了这么多。

但是,未来会怎样呢?在学期开始时我就迷茫于未来,这半年我并没有再过多地去考虑这个问题——这并不是因为我想清楚了,而是因为它因忙碌而被搁置了。要明白自己想要什么,本质上是一个很难的问题,我不认为周围有多少人考虑清楚了自己的未来。我先是想读博士,而后想念硕士,再后来干脆想毕业后直接工作,然后又想读硕士、读博士……当我看到学姐写下「说到底我还是不喜欢编程的」时,我在考虑,如果两年之后,我从计算机知识汪洋的海底浮上来时也如此想,我该做些什么。

离二十周岁只剩两个月了。年龄提醒我,自己早已是成年人了,但我的内心似乎还是那个意气风发、多愁善感的少年。It’s like 19 forever. 每当我看到那些 20 岁的健壮的形体时,我都会想起自己孱弱的身躯;每当我看到同龄人做的那些令人惊叹的事之时,我都会想起自己的碌碌无为;每当我看到本科毕业生拥有的坚实能力时,我就会想到大学只有四年,已经没多少时间了。我明白成长不是一件急于求成的事情,焦虑之后,只能亲力亲为。

在过去,许多事都在变得更好;在未来,一切当然是会变得更好的。当封闭、肃杀的冬天过去,闷湿、忽冷忽热的春天再过去,开放、炽烈、每个毛孔都在呼吸的夏天就会来了。

*标题借鉴自 The Ph.D. Grind

《The Sophomore Grind》有6个想法

  1. 有点像的。

    在 无尽的忙碌,困顿, 迷茫, 恍惚中 浑浑噩噩,而自知很晚。
    每个学期都会这么想,每个学期却依然在重复。

    以前我很欣赏
    别把鸡蛋放在一个篮子

    现在, 孤注一掷 这个词,却让我感动良久。

    ps. blog主题原来的好一些,更容易专注。
    pps. 推荐typecho,简洁到美。
    ppps. 其实大部分人的本科科研经历都不值得一提,不如一起做点有意思的东西吧。

  2. 这学期做得最难受的事情就是,学期初努力地追15-213的进度,没想到学期中段的我连自己的课程都已经应付不来最后放弃。

    对于数算的MOOC,我也实在不觉得从张老师那里能够得到比我自己的老师教授的更多的东西。在这一点上我与许多人有着共鸣。

    你对自己有太高的要求,这是我最羡慕的一点。

    共勉

发表评论

电子邮件地址不会被公开。 必填项已用*标注