大作业回顾:前言
大作业回顾系列文章的前言
本文章是“大作业回顾”系列文章的前言。该系列的所有文章,文章主体部分主要记录心得体会,而不过分关注技术细节:一来部分大作业历史久远,技术细节的相关记忆已经颇为模糊;二来有些大作业的所展现出的技术水平实在不好拿出手,只能说是在当年(大一大二)的诸多大作业中显得有些新意,能够脱颖而出主要是靠同行衬托。
既然要么细节上记不清楚,要么技术上拿不出手,要么兼而有之,为什么要写文章加以记录呢?其实我写这一系列文章,主要是写给自己,颇有一种“抢救历史记忆”的意味在其中。大学以来,大作业(或者说是各类project)耗费了我的大量时间精力,不记录一下的话,就有点对不起自己“浪费掉”的大好时光了。当然,如果这些回顾能够对其他人有所帮助的话,不论是经验还是教训,都是再好不过的。
本系列文章所回顾的所有大作业均已在github开源。
前言
大学以来,本人有个传统,除了完型填空类的大作业,其它所有专业课的大作业,必须做到最好。事实上,截至大三上学期结束,我也基本上做到了所有大作业都名列前茅:C++、并行程序设计、计算机图形学三门课的大作业均为全院第一,python和NLP的大作业(总分均为96分)不确定是不是年级第一,但基本没见过比我高的——所有大作业结课的专业课中,我基本上都是年级第一。
我没有什么吹嘘自己能力的意图。相反,大作业尽善尽美是有巨大代价的,我牺牲了很多其他事务(e.g. GPA),换来了相对高水平的一系列大作业。大作业分为两种,完型填空类和自主创新类。完型填空类大多给定一个非常完备的框架,难度可高可低,工作量可控,但自主创新的空间较小。自主创新类则不一定会给较为完善的框架,甚至会和课程内容本身基本无关,大多需要自己想一个idea然后慢慢摸索。这就导致自主创新类的大作业有“丰俭由人”的鲜明特点,如果你想混,那自然可以写个大概差不多,交差走人;如果想做好,工作量应该说是上不封顶。这就导致我基本上每个考试周都有还没写完的大作业,因为自主创新类的大作业是永无止境的,只要不到DDL,永远可以做得更好。大作业改好了,考试周也就到了,留给复习的时间也就所剩无几了。
事实上,从效用最大化的角度来说,我的大学生活是很失败的。将近三年下来,我基本没怎么玩,平均每学期打游戏的时间比初高中还少(高中至少每周还能看别人玩会儿三维弹球,初中更不说了)。健身也比初高中少多了,大学以来除了三年日均走路15000+步,基本没有别的锻炼。然而,我的学分绩排名是不够突出的,和花在学业上的时间完全不成正比——毕竟平时玩玩闹闹,期末前一个月狠狠复习,能换来的学分绩排名肯定会比我现在这个排名好看多了。
现在回过头来看,不好说自己的选择是对是错。认真做大作业固然可以提高工程能力,甚至可以锻炼科研素养,但代价却往往是学分绩排名。牺牲学分绩来换取一份好看的大作业,是否值得?拿到了某个学期里一门专业课的年级第一,其它考试结课的必修课怎么办?不过,我坚信,计算机的科研并不是简单的做题解题,也不是对着课程PPT进行模式匹配,更不是用往年习题去搞过拟合。工程能力和科研素养,只能从踏实的工程实践和文献阅读中得到锻炼。
目前,我的专业能力和经验主要是通过一系列大作业,点点滴滴地积累下来的。虽然这所谓的“能力”不算特别拿得出手,但总归是大学时光的见证。如今,写下大作业回顾的这一系列文章,算是给本科期间的艰辛探索写下些许注脚。