我与计算机科学的前十年(2015-2025)

第一次接触

我是一个非常喜欢跑图(或者说是集邮)的人:玩 mc 的时候,经常干的事情就是打开地图 mod,找到一块尚未被探索的黑色区域,去那里探索一圈,寻找村庄,山峰等有意思的地点;玩其他游戏的时候也是这样,总是要尽可能收集所有道具,把可能的结局都体验一遍。现在看来,我这十年的种种经历,似乎都与这个跑图的爱好有不小的关系。

和计算机的最早结缘应该是小学了。二年级的时候,学校推荐参加一个网上比赛,比赛的形式大概就是玩一些教育性的小游戏,比拼打字速度,以及考察搜索引擎使用等等。不同年级的比赛内容有一些差别,比如前面提到的搜索引擎使用,似乎是小学高年级组的比赛内容了。

初赛是线上自由开放的形式。我也是抱着玩的心态,在母亲公司的电脑上打完了初赛,拿了个几乎满分的成绩,得以顺利进入到线下复赛。线下复赛也是运气极佳,莫名其妙就进了全国决赛,得以走出新疆,奔赴北京,见识到了北京高楼大厦里的现代化机房,还在清华校园里转了一圈。比赛本身的成绩算不上太突出,不过这对于二年级的我来说似乎也不太重要。

虽然这一次比赛经历和计算机科学本身并无太大的关系,不过这也算是我与电脑的“第一次接触”了吧。

初涉算法

与计算机科学真正意义上的第一次接触则发生在初一。彼时我刚刚结束了小学六年的童年时光,来到这所在全乌鲁木齐乃至全新疆都排在第一梯队的初中。

在开学后的一天,在一位朋友的介绍下,我来到了学校附近的一栋楼,上了一节编程课。在那节课上,我用一台安装了 Windows XP 系统的小小笔记本,敲下了属于自己的第一行代码,当 Hello, World! 的文字出现在黑色的命令行上时,一段长达十年的征程,自此而始。

这个小笔记本,为我打下了一些现在看来不太好的传统:由于笔记本的屏幕实在是小,而我当时就已经高度近视,将编辑器的字体调得偏大,使得一行实在显示不了多少字符。于是,为了压缩代码长度,那时的我形成了一个并不算优雅的码风:运算符两边不加空格,缩进采用单空格缩进,虽然说后面换了更大更好的电脑,这样的码风直到我 OI 退役后才被纠正过来。要是这样的代码只给我一个人看还好,不过中间这几年时间我写了不少题解,其中还有一些成为了标杆,让不少人看到了我这奇异码风的代码,在此不得不说一声抱歉啦。

初中的 OI 学习算是相对平淡的,那时更多还是作为一个兴趣活动在学,每周末去上两三个小时课,做三四道题,平时还是将重心放在课内学习上。寒暑假的训练时间会稍微多一些,毕竟基本上每天都能泡在机房里。

一开始用的 OJ 是 OpenJudge 中的 NOI 题库,16 年寒假,看到学长在网页上玩 flappy bird,我了解到了 CodeVS 的存在,注册了一个属于自己的账号。与 OpenJudge 不同的是,CodeVS 需要填写一个用户名。在学校上外教课的时候,有一次英语对话的时候,班上有人把我叫做“Studying Father”。这个名字也就被我“顺理成章”地拿了过来,并成为了接下来十年,乃至更长的时间尺度上我的身份标识。

后来,因为种种机缘巧合,有人送给了我一本刘汝佳编著的《算法竞赛入门经典》(第一版),我也得以借此机会一窥国外算法竞赛的发展情况,了解到了 UVa 这个西班牙的 OJ。虽然我当时的英语水平还很拉胯,不过靠着书中提供的中文题意,倒也足够做题了。

虽然说寒假暑假有一定强度的集中训练,不过学到的知识其实并不算多。就这样迎来了属于自己的第一次算法竞赛征程——NOIp 2016 普及组。初赛自然是没有太大难度高分通过。而复赛则栽在了 T1 上:答案变量忘记初始化,让我在这个送分题吃下了一个零蛋,最后只拿到了一个二等奖。

接下来就是归零,沉淀,从头再来,第二年再战普及组。那年的 T1 出现了浮点误差的漏洞,不过被我成功发现,并写了一个完全不依赖浮点运算的代码。T3 是一道 bfs 题,被我写出了一段长达 165 行的实现,有惊无险地拿下满分。靠着 300 分的成绩,我成为了当年新疆普及组的第一名。

走向全国

虽说普及组 300 分放在当时已经是一个很不错的成绩了,但对于我来说,这仅仅只是个开始,后面的路还很漫长。

初三下学期算是我学习算法的一个转折点。那时我考上了绿谷的 OI 特长生,在二模考完之后,开启了属于自己的第一次停课训练。在中考前停课听起来似乎有些离谱,不过一方面特长生有降分,备考的压力降了不少;另外一方面我的学习能力还算不错,靠着中考前的复习追赶进度不成问题。

如今看来,那段时间我的作息是无比健康的,实力增长速度也是最快的。白天早早起床去小机房,每人轮流讲一个知识点,下午再做题巩固。晚饭前会去操场上打一个小时的飞盘,锻炼身体的同时,也是在放松心情。这样的系统化训练很快补齐了之前残留的知识短板,让我的实力提升了不少。

在这段时间里,我开始接触算法竞赛的社群,加入了各 OJ 的用户群,开始参与到洛谷的社区的讨论中。我的洛谷打卡天数也从此累积起来,直到现在已经是两千余日。

洛谷打卡记录(截至 2025.07.17)

那年的四月,ICPC World Finals 在北大举办,自然也吸引了我的关注。虽说比赛放在了工作日,我还是趁着午休时段偷偷跑回家里看直播,能看一会是一会。虽然没能实时目击到吉老师在最后时刻拿下了绝杀,让北大拿到了当年的季军的一刻,但在知道结果后,我依旧沉浸在喜悦的心情中。

那年的中考试题,是过去几年来最难的。印象深刻的是,化学试卷里有一道题,问“爆炸盐洗衣粉在超市的哪一类商品货架上?”这种生活常识题打了很多人一个措手不及。不过我还算有些生活经验,写上了日化类的正确答案。高难度的试题下,各校录取分数线纷纷跳水。绿谷 691 分的分数线(满分 800 分),放在全疆统一中考,难度大幅降低的当下,实在是无法想象的一个事情。

中考结束后没几天,我就投入到暑假训练当中。后来又坐上飞机去了 常州,第一次前往外地参加线下的集训,在被吊打的过程中,见识到了自己与强省的实力之间的巨大差距。

开学后,我幸运地进入到了学校的理科特长班,站到了更高的起点上。与隔壁班相比,我们班是氛围最轻松,看起来最摆的那个班。这样的氛围对于同样很摆的我来说,是再适合不过了。

十月份了解到了 OI Wiki 这个算法竞赛知识整合站点。开始用自己的 GitHub 账号在上面贡献一些内容。在包括我在内的一大批贡献者的参与下,OI Wiki 逐渐成为了国内自学算法竞赛的一个不错的宝藏。

那时的小机房还非常热闹,不单单有初中就开始学习 OI 的特长生,也有不少高中才开始接触 OI 的零基础生。NOIp 前的那些晚上,小机房的每台电脑前几乎都坐满了人,打飞盘等活动也是完全不愁找不到人。

对我来说,高一上的 NOIp 并不是一场令人满意的比赛。D1T2 没看出来是背包题,直接吃了很大的亏,最后以全疆第 12 名的成绩收场,距离省队还有很大的距离。

那一年是绿谷小机房的黄金时代,25 个省一,绿谷小机房拿下了其中的 23 个。

寒假去了冬令营,很多内容对于当时的我来说还是过于晦涩难懂了些,难怪冬令营被叫做冬眠营。在冬令营比赛日前一天,突然传来劲爆新闻:教育部的竞赛名单发布,NOI 系列赛没有位列其中,一下子引爆了我加的几乎所有群聊。看到肯德基三人篮球赛反而榜上有名,大家都在调侃明天比赛改为肯德基三人篮球赛。

不过第二天的冬令营竞赛还是平稳地举行,好似这个新闻不存在一样。靠着暴力拼好分,我意外地在这场全国性比赛里拿到了一块铜牌,取得了全国比赛的开门红。

在闭幕式上,竞赛名单的事情自然被 dzd 提起。不出意料,在收费问题上的分歧是 NOI 系列竞赛无法进入名单的原因。年中的 NOI 和年末的 NOIp,还能正常举办吗?当时的选手们,没有一个知道这个问题的答案。

在比赛之外,与网络上相谈甚欢的群友面基,也是冬令营的一个重要环节。从冬令营的讲者 松松松那里拿到了一只小黄鸭,这只鸭子至今仍放在我的书桌上;与湖北的 OIer wjyyy 进行了面基,圆圆真的是个很有意思的人呢。

后来,教育部重新公布了竞赛名单,将 NOI 增补进名单中,一切似乎又重归正轨。由于前面的几位选手放弃了省队资格,我意外地进入到了省队名单中,接下来的训练要以 NOI 选手的要求进行了喔。

五月的 CTSC 变成了 CTS,少了个 Contest,大家都在猜测这是不是为了规避教育部提出的竞赛不能收费的要求。很快这一猜测就在 CTS 闭幕式上被 dzd 亲口证实。

大家如果细心的话,你会发现,我们今年的选拔赛 少了一个字母“C”,C 就是 competition(大笑+鼓掌),为什么 C 没了呢?好,给你们直说吧,如果是“赛”,就不让收费(大笑+鼓掌),不让收费呢,CCF 是没钱的(大笑+鼓掌) 啊 没有一分钱的政府的拨款(大笑+鼓掌)。500 名同学呢 你就要失去机会,只有 15 名同学我们选拔4位,我们还是要收点费的,要不然没有钱也没法干这活,啊,当然这钱也不一定够。

dzd 在 CTS 2019 闭幕式上的讲话

CTS 2019 的关键词是“五道题里选六道”,缺题导致了计数类题目几乎一家独大。这对于缺乏计数相关训练的我无疑是致命的。最后只能和冬令营一样,从提交答案这种非传统题里捞点分,两天加起来甚至拿不到 50 分。

APIO 虽然靠着暴力实现了一天的成绩比两天高的效果,但是仍然没有够到三位数,继续打了铁。这两场比赛的失利告诉我,只会敲暴力是很难在赛场上有竞争力的,学习一些高阶的知识才能在全国性的比赛有竞争力。

运气很好的是,这年 CTS & APIO 我与学军中学的大佬 Mr_Spade 住到了同一个房间,得以有机会了解到浙江算法竞赛的发展情况,也趁机吐槽了一下学军的 XJOI 鸠占鹊巢让新疆 OI 没了存在感(大雾)。

值得一提的是,在 APIO 比赛日过后,我有幸参与到了 OI Wiki 社群的聚餐当中。大家都是很有意思的人呢。

撸串现场,同时还拿到了宣传小卡片。

NOI 2019 前一个月,我和 woshiluo 一块去雅礼特训。在长沙,我痛定思痛学了学多项式科技,不过也只是学会了多项式乘法这样最基础的内容。见到了雅礼小神童 lk,喝到了发源于长沙的奶茶品牌“茶颜悦色”。模拟赛自然是被吊打,每次模拟赛看榜直接自动翻到最下面就可以了。

在经历了一个月的特训后,我们俩坐上高铁奔赴广州,开启了 NOI 的征程。下车时扑面而来的热浪给我留下了过于深刻的印象,和寒假来时的清凉形成了鲜明的对比。

作为省队最后一名,我又一次得以与外省选手同住,不过这次是云南,一个同样被鸠占鹊巢夺走名字的省份,其中一位正是 范滇东,后来到了大学又一块当了四年的同学。

虽然在湖南经历了一个月的难题洗礼,但上了赛场还是现了原形,依旧是一档档地抠暴力分,而不会敲正解或是高分的解法。虽然获奖率高达 85%,但我仍然不幸成为了那最后的 15% 中的一员。

回家休整了一个星期后,小机房一行几人去了中山纪念中学集训。在集训期间,又一则重磅新闻传来,CCF 宣布暂停举办 NOIp 竞赛,而在若干天后,则宣布举办 CSP-J/S 以代替之前被暂停的 NOIp。明眼人都看得出来,这是绕过竞赛零收费要求采取的措施。虽然后来 NOIp 恢复举办,但 CSP-J/S 事实上成为了 NOIp 的前置竞赛,继续发挥着收费的作用。

CSP-S 的成绩并不算令人满意,六道题只拿了 200 出头,虽说是全疆第六,能进队参加 NOI,但放在全国来说还是算不上太出色的成绩。

CSP-S 后,我在 xht37 的邀请下加入到了洛谷题目管理组,开始参与到这个规模庞大的算法竞赛平台的建设中,一直坚持到今天,已经五年有余。

如果一切就这样平稳进行下去的话,我接下来可能还会再去参加几轮线下集训,再去几场线下比赛旅游,NOI 努力一把的话也许能拿到一块铜牌(在银牌数量扩增后说不定能冲一下银牌?),满意地退役并回归文化课。不管结果如何,我至少为此奋斗过。

未曾想,2019 年是我 OI 路上最后的欢乐时光,而一系列重磅炸弹即将在 2020 年引爆,并最终改写了我的人生轨迹。

阴影笼罩

2020 年初,自主招生取消的传闻最终还是落地了,取而代之的是强基计划。这一变化让当年的高三生措手不及,原来拿到的各种约瞬间成为一张废纸。虽然有银牌以上破格入围的政策,但仍然需要在占比 85% 的高考中拿到足够的高分,对于不少脱产竞赛的同学(特别是已经高三的同学)来说,这无疑是一个晴天霹雳。

而雪上加霜的是,冬令营前夕,新冠肺炎疫情逐渐失控,最终导致了武汉的封城,随着人员流动,疫情不可避免地向其他地方扩散,全国各地都进入防疫状态,学校的授课节奏被打乱,高考被推迟,线上授课成为了彼时学校仅有的选项。即将举行的冬令营也因此被迫无限期推迟。

一开始,大部分人觉得这次疫情和我刚出生时的非典一样,会在年内结束。好消息是,国内的疫情是压下去了,然而国外的疫情又开始爆发,又给国内防疫带来了不小的挑战,不时就有地方爆出新病例,情况不容乐观。

疫情阻隔了线下的交流,也让我把目光转向线上。2 月,我第一次成为了洛谷的紫名——管理员。当时我在各大平台还没有一个属于自己的头像,亟需要一个头像作为我的身份标识。而在那段时间,一套小恐龙表情包变得流行起来,其中一个开心的表情吸引了我的注意。这个表情也就被我拿来成为了一直使用的头像,希望这个表情能给我自己以及大家传播积极乐观的心态!

我一直使用的小恐龙头像(2020.02 至今)

水群则是线上活动的另外一大组成部分。水群的一部分目的是放松,另外也能看到一些新资料,从中学到一些知识,同时还能打探一些情报,为自己的未来规划好道路。

随着冬令营和 APIO 的报名通知再次发出,也许一切就要重回正轨了呢。然而,偏居一隅的新疆终究还是没能逃过疫情的突然袭击。七月中旬,一例本土病例的曝光让全市一下进入了封城状态,那一晚的城市变得无比拥堵,大家都急于回到自己的家中。

我就这样在封闭中迎来了属于自己的 18 岁生日。之后没多久,NOI 的报名通知发出,作为疫情地区的选手,我们一开始自然没能获得参与线下赛事的机会,而是收到了参与线上同步赛的建议。这一建议毫无悬念就是给我的五年 OI 生涯判了个不明不白的死刑。后来在教练的争取下,终于允许我们设立分赛场,与长沙的选手们同步比赛。

然而,仅仅靠 CCF 的同意并不足以让分赛场落地,我们还需要与省组织单位协调分赛场的具体事宜,这就让人头大了——好消息是,当年的新疆省队清一色地就读于绿谷,选手的聚集相对容易解决,学校也表示愿意提供场地支持比赛进行,同时协调了社区开具相关证明让我们能离开小区。之后则是人员的安排,作为省组织单位的新疆科协需要派人参与到监考等事宜,这一过程则卡了壳。科协和特派员一直以消极的态度在处理此事,难以看到解决问题的曙光。

即使已经感觉到希望渺茫,我此刻也别无选择,唯有继续做题,写题解,为了那微弱的可能性倾尽全力。

然而,一切努力终究还是在一夜之间化为了乌有。在 APIO 的前一天,科协方面给予了我们否定的最终答复,宣告了分赛场计划的最终流产。

抱着悲愤的心情,尽自己的全力打完了 NOI 前的 APIO,拿到了银牌。就这样在一个奇怪的时间节点,以一种无情的方式,我的算法竞赛生涯画上了一个粗暴的中止符。

间章——文化课之路

再怎么心怀不甘,文化课生活还是要磕磕绊绊地开始。前两年靠着竞赛生的身份少做了不少作业,高三也该回归正轨了。

虽然已经退役了,小机房的大门还是开放的,趁着中午或者晚上过去续下洛谷打卡天数,打开 QQ 水群成为了一项重要的放松活动。当然还有的人选择在机房疯狂打游戏颓废。

虽说有些不情愿,当年的 CSP-S 和 NOIp 还是作为占位符去了,分别拿到了全疆第一和第二的成绩。

到了一月份,一模的糟糕排名给我敲响了警钟,意识到再摆烂就没学上了,果断开始主动加训,自己买了卷子开始刷。一方面是巩固知识,另外一方面也是锻炼熟练度。到了二模成绩就坐火箭起飞了,一举拿下年级 80 多名,全市排名 150 名的高分,北航一度已经在射程之内了,让我的信心增长了不少。

从不惧怕任何对手!

在经历了三年前那次最难中考后,我们这一届学生又经历了最难的高考——原来的全国 I 卷和 II 卷合并,变成了全国乙卷,难度向着以前的 I 卷靠拢,相比于之前一直使用的 II 卷困难了不少,考完之后又是一片哀鸿遍野之景,令人感慨。

高考后的一个周末,woshiluo 拉上了我和雅礼的 skydogli 去打 美团杯。在起队名阶段,我想到了有人发的表情包:一个企鹅发抖表情,下面配着“Linux 内核恐慌”的字样,便提名了“kernel panic”这样一个 CS 味很重的队名。

运气很好拿到了阳光普照奖,得到了一根骑手主题的充电线。然而之后某次带出去参加活动的时候不幸弄丢了(悲)。

高考成绩算是挺让人满意,全疆理科排名 322,也算是有学上了。择校并没啥太多的选择空间,综合考虑了地理位置等因素后,我最终选择在良乡的 BIT 开启我接下来四年的大学生活。四年后回来看这个选择,虽然 10043 禁令在一定程度上禁锢了我未来出国发展的道路,但确实已经是相对意义上的最优解了。

步入大学

刚进入大学,是否打算法竞赛,还没有一个肯定的答案。计算机的方向那么多,何必只揪着算法这一个方向来呢?

幸运的是,大一上我接触到了 PKU 大佬编写的《CS 自学指南》,一个真正广阔的计算机科学世界正向我徐徐展开:理论计算机科学,人工智能,体系结构,操作系统…这就是属于计算机科学的无限可能啊。

那年的 1024,我趁着促销买了很多 CS 相关的书籍,当时真的是怀抱着雄心壮志,准备将这些书挨个认真学习一遍的。现在看来虽然确实学了不少内容,但也有很多书并没有翻开过几次,是有些操之过急,眼高手低了。

大一的大类培养阶段,让我好像也找不到什么能在学校里干的事情:上的课程几乎全是基础课,里面还有工程制图这样一门实在不知道为何开设的课程,让立体感不佳的我颇为痛苦,这门课也成功拿下了我大学四年中除了体育课之外的最低分数。全是基础课意味着没有什么深入学习计算机科学的机会,要学还是得靠自己。

不过算法竞赛的老本在这里,在兼顾 CS 学习的前提下,继续打算法竞赛自然也就成了惯性选择。9 月去人大打了一次 CSP 认证,拿到了 370 分的分数,从而获得了 CCSP 的入场券。之后因为疫情原因无法出京参加总决赛,便再去人大打了分区赛,拿下了一块银牌;10 月因为机缘巧合,赶上了 CCPC 网络赛的重赛,在 xzm 学长的协调下,组建了自己在大学的第一个 XCPC 队伍前去参赛,当然,在毫无 XCPC 经验的情况下,这次比赛自然是翻了车。

值得一提的是,由于强基计划的横空出世,国内大学生算法竞赛的形势也进行了重新洗牌。在自招时代能获得大幅度优惠,轻松飞升各 top 高校的选手们,面对强基的突然到来手足无措,被迫飞入寻常 211 甚至双非高校,这其中尤以 20 届选手为甚——仅仅提前半年才得知消息,叠加疫情对高三备考的影响,真的是祸不单行。这些选手进入大学后纷纷投入到 XCPC 的竞争中,使得校际竞争的激烈程度瞬间上了一个大台阶。不少昔日不知名的高校,靠着“抽卡”获得了高阶选手,得以实现金牌甚至出线零的突破。

大一寒假参加了学校 ACM 俱乐部的寒假集训,重新把高中学的那些东西捡了起来。寒假结束后,我拉上了网络赛时的队友 cyq(indogent)和毛遂自荐的 qyf(Sencho_Ceon)组了队,在征询美团杯的两位队友同意后,“内核恐慌”成为了我大学四年算法竞赛的队名。

大一下,面对着大类分流的现实压力,我不得不投入更多时间在校内课程的学习上。靠着这学期前 5% 的大类排名,我得以顺利进入计算机学院修读 CS 专业,并取得了一个相对理想的专业排名。

校园内悠然自得的鹅们。

大一结束后的暑假,我们队得以跟着参加 20 级的暑期多校训练,也算是走上了正轨。高强度的暑期多校训练,让我尝到了中学时线下训练熟悉的味道,不过这次因为疫情,没办法聚在学校和队友一块打比赛,只能在线上通过语音和文字相互沟通了。

不幸的是,疫情在这个暑假再一次在新疆蔓延开来。很快整座城市就回归了两年前暑假的封闭状态。

八月的时候,趁着疫情稍微缓和,我订了一张前往银川的火车票。在当时还未被疫情笼罩下的宁夏呆了一个星期,再坐上前往北京的飞机,得以返回学校。

这一次的我相比于 NOI 2020 的时候幸运了不少。在如今看来,如果当时的我没能趁着这次机会辗转到北京,我的那下半年将大概率一直在家里度过,那个赛季的算法竞赛和那个学期的线下课程,就只怕是要与我擦肩而过了吧。错过了这半年的我,之后的道路还能像现在这样顺利吗?

彼时的北京还尚且算是安宁,虽然一开始出校仍然需要辅导员审批,但没过多久就改成了报备制。虽不能自由出京,但京内闲逛还是相对随意的。

一次,在翻阅 CS 自学指南的过程中,我偶然看到了一本叫做《Software Foundations》的书籍,介绍了 Coq 这样一门形式化证明的编程语言,以及编程语言理论的相关知识等内容。这本书的缩写和我 ID 的缩写一样都是 SF,也许这就是一种缘分吧。也正是 SF 这本书,在接下来的一年时间里,带着我走入了编程语言的大门。

SF 本身就是 Coq 编写的代码,在学习课程的过程中,需要不断填充里面未完成的 Coq 证明。这种交互式学习模式就和打游戏一样非常容易让人上瘾——很容易就能从中得到正反馈。有好几个夜晚,我都忍不住看书写证明到很晚才睡觉。

受疫情影响,这个赛季的 XCPC 赛事还只能在线上进行。属于我们队的 XCPC 的出道战是 CCPC 的桂林站。靠着 cyq 超强的 ad-hoc 能力,我们队做出来了一道很有意思的结论题,意外拿下了一块金牌。这次比赛也算是出道即巅峰了?

然而接下来的 ICPC 合肥站就给我们泼了一盆冷水。学校一共派出了四支队伍参赛,取得了三金一银的优异成绩,而我们就是那个差了一道题的不幸的银牌。

ICPC 南京站则完全笼罩在疫情的阴影之下。彼时已是十二月中旬,围墙之内的校园已经不再安全,不时有传言道某幢宿舍楼里有人感染,某区域有人被转运云云,宿舍里大家也是备足了物资以防不测;围墙之外的世界则在风云变幻,网络上也是吵成了一锅粥。

南京站比赛当天,我发烧了。但此时也没啥选择,只能戴着口罩硬着头皮到教室比赛。比赛的那五个小时浑身发抖,硬撑着打完了比赛,最后以第 19 名的成绩拿下了金牌。说来惭愧,对于这块金牌,我并没有作出什么贡献。

期末周和上学期一样完全在线上进行。考完期末后没两天,我就坐上飞机回到了新疆。三年的疫情,就这样在混乱中达到了最高潮,又渐渐地退潮了。

随着疫情过去,在疫情中读过了大学前三个学期的我,开始压抑不住自己外出旅游的欲望。趁着大二寒假的超长假期,我安排了一场 沿着京广铁路的长途旅行。借着旅行纾解一下过去一段时间压抑的情绪,同时面到了很多一直通过网络交流,尚未线下见面过的群友们。

和 HBOIer 们一块吃了一顿饭!

对我来说,大学里最有意义的一个学期应该是大二下。在经历了大二上大量必修课程的拷打之后,大二下我决定给自己上上强度,一口气选了 8 学分,四门专业选修课。其中两门 TCS 方向的课程,两门 AI 方向的课程,主要目的是看看自己与这两个方向是否 match。

两门 TCS 方向的课程是组合数学和算法博弈论。组合数学是多年之后重新开设的课程,看课程名,原本觉得可能就是介绍一下组合计数之类的内容。后来才知道讲的是 概率可验证证明(PCP),刘老师自己也不太熟悉这一领域,笑着说这次开课其实是老师和同学一块学习了。课程自然上得是磕磕绊绊。另外一门则是算法博弈论,学习经历就相对平顺了一些。暑假在老师的推荐下还去了南大的 TCS 暑校。

无论是组合数学还是算法博弈论,这两门课似乎都涉及到了 TCS 中最理论的那一部分:计算理论。而南大的 TCS 暑校则让我接触到了 TCS 更多的可能性。不过这一个学期的经历下来,让我感觉到 TCS 似乎并不太适合我:虽然有多年的算法竞赛经历,但我对算法的实现与应用更感兴趣;而 TCS 作为一门理论学科,对于研究者的数理基础提出了更高的要求,这正是我所缺乏的。事实上,打了这么多年算法竞赛,我一直是推式子的苦手,CTS 2019 的惨状自不必多说,各种模拟赛上遇到了数学题也大概率是敲完暴力就跑,虽然多次下定决心加训,但效果总是不甚理想。

雨中的南大仙林校区南楼。

两门 AI 方向的课程则是知识工程和深度学习基础,分别对应了 NLP 和 CV 这两个 AI 主流方向。知识工程是一大堆公式灌入,让人晕头转向,迷迷糊糊做完了作业,感觉真正学到的东西并不是很多。深度学习基础则让人更加痛苦,教材本身还算不错,但是老师教学水平实在是一言难尽,大部分时间只好对着书本自学。结课作业是训练一个目标检测模型,给了一个非常大的数据集,强度相比之前的作业一下子上了很大一个档次。老师给我们发了不少云服务的代金券供我们训练,钱确实不少,但这点经费实在是杯水车薪。一开始写的代码有不少低级错误,还浪费了不少钱。到后期只好自掏腰包贴钱训练,做结课作业的那几天刚好又是南大的 TCS 暑校,基本上就是白天听课晚上跑代码,最后勉强跑出来了一个非零的低分拿去交差。虽然最后这门课我不知为何拿了很高的分数,但以我在这门课上的收获和成果产出,真的配得上这个分数吗?

我对 AI 的印象本就算不上太好,这学期的经历让我对 AI 的印象进一步恶化。不可否认 AI 对当下社会生活的巨大重塑作用——事实上我并不抗拒使用 AI 相关工具。但 AI 的科研现状实在无法吸引我投入其中:过多的参与者,过多的论文,感觉有些向着生化环材靠拢的趋势。这其中确实不乏一些优秀的研究者,高质量的成果,也正是他们成为了推动 AI 发展的主要力量,但大部分研究似乎还是调参为主,有点数学建模的感觉了。感觉 AI 的高速发展似乎也在一定程度上推动了 CS 专业的内卷,头部本科生人手一篇 A 好像也在成为常态。我实在有些担心,在这样浮躁的环境下,我真的能做出什么有意义的工作吗?看到今年 NeurIPS 27000+ 篇的恐怖投稿数量,真的让人倒吸一口冷气。

这学期的算法竞赛方面,寒假几乎没能进行太多有效的训练。就这样在三月底去上海参加了 EC Final,结果只拿到一块铜牌,最大的收获全点到了旅游和面基上。本来凭借着 CCPC 桂林的成绩能去一趟 CCPC Final 的,不过由于队友期末考试冲突,最后也未能成行,这个学期也就成了算法竞赛的一个低谷期。暑假前夕,qyf 表示了退役的意愿,我便邀请了同届零基础的 rising star xyf(xuyufeiya)加入了队伍。

与 EI 群群友在 EC Final 进行一个聚餐
洛谷题目管理组聚餐

未选择的路

I shall be telling this with a sigh

Somewhere ages and ages hence:

Two roads diverged in a wood, and I –

I took the one less traveled by,

And that has made all the difference.

The Road Not Taken, by Robert Frost

排除了 AI 与 TCS 这两条路径后,系统方向似乎就成为了一个绝佳的候选项。在这其中,实践经验丰富的 PL 越来越成为我心中的最佳选择。开学前花了点时间学了下 Haskell,让我更加坚定了继续在 PL 深入研究下去的想法。

不过在迈入科研之前,首先要面对的是疯狂的背靠背比赛期。为了尽可能缩短战线,在和队友讨论了一番后,我们队选择了在赛季前期背靠背连赛三个周末,而我又在中间插入了一场 CCSP,于是便出现了十天不回学校的名场面。

这一轮行程首先从西安开始。西工大的偏远给人留下了过于深刻的印象——从北绕城外的西安北站出发,打车到秦岭脚下的西工大,一共花了 140 多块:一路经过了市区中的马路,市区边缘的国道,再黑灯瞎火的乡间小路,点点亮光下的小镇道路才到达学校。

第二天去学校的时候,看到了路口处“东大村”的石刻,原来这真的是村啊(笑)。

东大村的标识。

在西工大体育馆内与扶苏再次面基,没想到扶苏他们的赛程和我完全同步,接下来三场比赛,每次见面都可以问候上一句 “How old are you?” 了。

西安站的命题可以称得上是灾难性的。命题完全由 nfls 的选手负责,偏偏正式赛那天还是 CSP-J/S 复赛,出题人根本无法到现场,这似乎提前暗示了这场比赛并不靠谱。后来“凹包”成为了这场比赛最大的关键词,直到今天仍然被作为反面案例反复提及。最后西安站拿到了一块银牌。

前脚坐着高铁到达北京西站,后脚就坐上京通号向着北京站进发。在候车室匆匆写完了作业,等到京沈流动宾馆 K53 次开检。

第二天早早到了沈阳,也没啥心思抓住这唯一的时间段旅游,只想躺在酒店休息。下午签到出来就找群友吃饭去了。不得不说大东北的物价还是太便宜,铁锅炖吃下来人均开销也就四十出头。

东北铁锅炖。

接下来就是从早上九点干到晚上九点的正赛了,996 提前体验了属于是。三道算法题还算是尽力而为,两道系统题顺利做出一道,最后拿下一块平淡的银牌。

白天在 CNCC 会场闲逛,参加了颁奖典礼,晚上在沈阳北站附近的餐厅和群友吃了晚饭,卡着点到了沈阳北站门口。回程的 K54 停在了最靠北的站台,南广场进来的我拖着行李箱一路小跑,得以有惊无险地上了车。

第二天在朝阳下抵达北京站,再一次坐上京通号穿越地下直径线的隧道,在北京西站无缝换乘,坐上京雄城际,得以成为校内最早到大兴机场的人。坐上国航的 A321,向着大西南飞去。随着飞机在桂林落地,我得以解锁一个全新的省级行政单位——广西。

桂林站的表现仍然难称得上满意,最后以中位银牌草草收场。

桂林的象山景区。

从桂林回来后,终于可以卸下过去三场比赛中不断积累的行李,我也得以迎来属于自己的短暂休赛期。然而下一场南京站就在眼前,还需要憋住这最后一口气继续加训。

一直很喜欢 sua 的命题风格,去年的南京站就觉得我们队和 sua 的题相性良好(当然另外一部分原因则是疫情影响了所有队的发挥),这也是我们队将南京放到 ICPC 第一志愿的重要原因。

袋鼠已经成为了南京站的吉祥物。

南京站开题节奏还算平稳,中期虽然略有卡题,不过后面很快追上了进度,最后极限拿下了金牌。有一个小插曲是,当时订的返程车票是周天晚上的,虽然赛场距离南京南站仅有一个地铁站的距离,但活动的拖沓还是耽误掉了计划中的冗余时间。幸好在发完银牌后,老师主动提出先发金牌,才得以带上奖牌极限赶上了回京的列车。因为行李一开始还放在校外的酒店,我和 xyf 不得不回去拿行李箱,也错过了滚榜的精彩时刻。

这场背靠背赛季以团队一金两银,外加我的一个个人银奖结束。凭借着南京站的金牌,我们队得以再度突围参加 EC Final。不过在此之前,是时候思考一下后算法竞赛时代下的个人道路了。

相对于 AI,PL 在全世界都是相对小众的领域,而国内搞 PL 的学校和老师就更少了,主要集中在北大,南大等学校。而我学习的 SF 这本书,正好就在北大开设了相应的课程。而北大同城的优势,对我来说意味着能获得更多线下交流和沟通的机会。

在学长的鼓励下,我发出了一封陶瓷邮件,很快就得到了回复,得以加入 PLL 参与科研。是时候该实现从学习者向着科研者的身份转变了。

年底的 EC Final 则是我们队距离 Final 金牌最近的一次,表面上我们距离金牌只差了不到 50 分钟罚时,但事实上还是一道题的距离。如果我们前面速度再快一点,留给 I 题的时间更多一点,也许就是金牌了呢?只可惜这世上没有如果。

时隔一年后,再次坐在了这个体育馆里。

大三下虽然学时不多,却要同时面对着 CS 核心专业课高强度的考验和科研的重担。凑巧的是,实验室开组会的时间刚好是我前半学期中唯一没课的那一天。因此果断决定给自己上强度——坐着地铁从南五环外的良乡,去北四环外的燕园开会,也是提前过上社畜生活了(笑)。

这年年初,房山线与 9 号线的跨线运营终于落地。靠着官网和车站公布的时刻表,我得以过上了卡点赶车的规律作息。就这样成功坚持了两个月,后半学期软工课的开设,占掉了那唯一的空窗期,才让我回归到 remote 模式。

四门专业课——计网,计组,编译,软工——各个都不是省油的灯,这其中尤以计网为甚。计网是课程考核形式的集大成者:40% 的平时分,竟然能囊括考勤,作业,小测验,实验,编程项目和论文,几乎包含了所有平时考核可以用到的形式。更倒霉的是,上课的老师因为某种个人原因,无法在原定的上课时间给我们上课,于是只好把课程调到了周末,自然是引得大家怨声载道。

平时部分的任务这么多,但期末依旧是固执的 60%。

别看实验只占 10%,但是实验的项目却一点都不少,多达十几个。实验平台用的是华为的某个已经停止维护的模拟器,虽说只是按照教材要求按部就班一步步执行命令,再把运行结果填入实验报告即可,但堆积成山的报告实在是让人心累。

更糟心的是,期末考试安排出来之后,发现计网考试安排在了所有专业课中的最后一门,还和北大夏令营的开营日刚巧在同一天。不得不说句难听的,计网真的是恶心人恶心到了学期的最后一天。好消息是,考试在上午,夏令营的机试则在晚饭后,咱还得谢谢他嘞。前脚在理教考完计网,后脚饭也不吃就和朋友一块打车往 PKU 赶,还好除了错过了早上的开营仪式和营员服外并无什么损失。

北大夏令营机试的难度并不算高,这倒是和隔壁形成了鲜明对比。晚上在酒店简单准备了下第二天的面试,虽然说第二天的面试表现其实不太令自己满意,但应该问题不大。面试出来之后约上了几位群友在燕园漫步,聊起各自的当下和未来。

第二天去参加了 MoonBit 的 Meetup,晚上回宿舍收拾好东西,第二天就要搬家进城了,和良乡说再见了喔。

开启新征程

既然确定了科研道路,大四的算法竞赛征程也就真的变成了旅游模式。队友也是实习的实习,科研的科研,暑假多校缺勤严重也成为了常态,在校内的选站顺位自然也是名列垫底。

大三开始的项目得以成为大四的主线,随着想法逐渐成形,做实验,写论文成为了接下来的工作重心。另外一个任务则是大四上的一门必修课,拉着一个小组去开发一个软件系统。不过大家此刻已是心不在焉,各自忙着考研,就业和科研的事情,对项目也不咋上心,项目推进一直慢吞吞,进度管理几近崩坏,最后靠着把所有人叫到一块通宵突击了一天才完成了项目。

CCSP 和 CNCC 自然还是要去的。由于今年没了两头赛站的包夹,我得以在浙江度过了完整的一周,以 5 分之差战胜了粉兔,压线拿到了一块银牌。

CNCC 感觉已经被 AI 彻底占领了,各领域都在讨论如何应对 AI 带来的机遇与挑战,如何使用 AI 推动本领域的发展,整个 CS 似乎已经彻底变成 AI 的样子了。继续坚持做传统方向的研究还现实吗?我也不知道这个问题的答案。

在 CNCC CCF 论坛上,我有幸被邀请做了一段简短的发言,谈及对当前中学算法竞赛教育的看法。

大四的赛站选择了 CCPC 重庆和 ICPC 上海。由于学院经费紧张,报销政策从之前的不打铁就报销变成了只报销金牌区域赛,一场非金牌的区域赛和全部的总决赛,钱包的压力也是大了不少。不过还好有惊无险在上海拿下一块金牌,解决了经费危机的同时,也第三次拿下 EC Final 旅游的机会。

年底,坐上了西户线的仿动集普速列车,再次来到秦岭脚下的东大村。

DF4D 刷上了这样一个动集的颜色,看着真的有些不太习惯。

EC Final 的风格依旧是非常邪门,排行榜上看到一堆强队翻车。我们队表现也不甚理想——不过很难说得上是翻车,毕竟不训练的情况下上限也就摆在那了。正赛只拿到了铜牌,倒是在挑战赛上终于斩获奖项,赚了点钱。华为之夜本来想着能不能来个三等奖-二等奖-一等奖的递增序列,结果不知道是不是因为已经拿了 1000 块奖金的缘故,一个奖都没中。

EC Final 结束后,按道理我就算是正式退役了。参加了这么多次比赛,目送了无数认识的朋友离开赛场,这次终于还是轮到了自己,令人感慨。原本还准备和高中同学在大四下一块打星一场邀请赛作为谢幕之旅,不过最后也没报名成功。

不过意外总是来得太突然,这一届大二选手遇到了我们当年的状况——考试时间和 CCPC Final 冲突,于是一路递补后轮到我们队参赛。xyf 沉迷科研不想再来,于是紧急拉了 dr 过来组队,不过他最后进了北大夏令营,又因时间冲突无法参加。最后这场属于内核恐慌的谢幕战,终究是只剩下了两个人。

三月极限赶完了 OOPSLA 论文的初稿(感谢熊老师和吉老师的指导!),本来说之后花一个月时间稍微加训的,最后还是没 push 动自己。也不知道这一个月自己干啥去了,好像这个剧本有些眼熟?

就这样在五一假期后坐上飞机去了深圳,再转大巴车到了南沙,路上体验了心心念念的 B747-400 和崭新的深中通道。还有幸被教练邀请在开幕式上作了 发言,作为退役老选手太感动了(哭)。

返程乘坐的 B-2472 停靠在首都机场的远机位,也让我有机会用照片记录下空中女王的英姿。

虽然说 CCPC Final 的题目风格和 EC Final 一样邪门,但缺乏训练更是发挥不佳的一个关键原因。直到滚榜滚到我们队前的一刻才得知没有打铁,最后以铜牌倒数第三名结束了我的算法竞赛生涯,可以说是大学四年所有的正式赛里,表现最差的一次比赛了。一想到 CCPC Final 会在一定程度上决定学校下一赛季的 CCPC 比赛名额,就感到颇为惭愧。

回来就是赶毕业论文,准备毕业答辩,时间一下紧张起来。有好几个夜晚写论文写到天亮了才上床睡觉,准备毕业答辩的时间又刚好和 OOPSLA 的 rebuttal 重叠,不过好在有惊无险全部搞定。

30 号一大早完成答辩,四年大学算是结束了?六月稍微放松了一阵子,坐了回刚刚恢复的中蒙国际列车(当然也没出国),然后就是走出校门到处吃好吃的,21 号回到熟悉的良乡参加毕业典礼。

说实话,这四年的时间里,我对良乡的感情是要比中关村深厚很多的,这不单单是因为良乡呆三年,中关村呆一年,而是因为这四年里几乎所有的课程,大部分的社团活动都在良乡进行,而在中关村的生活总感觉似乎空虚了不少:没了课程后,日常生活变成了一点零线,作息不可避免地开始混乱起来,感觉有的时候还是需要一个主线来 push 自己。

行万里路

回顾一下自己过去十年的足迹,惊奇地发现自己的足迹竟已遍布全国大部分的省份。

我的旅行足迹(2015.09-2025.07),由 中国制霸生成器 生成。

新疆的闭塞让我无比珍惜每一次外出的机会,后来到北京上学后亦是如此。随着疫情逐渐结束,出游的愿望重新点燃。我得以在线下参与各种活动,同时还能策划属于自己的长途旅行,在这一过程中,我得以欣赏大好河山,品尝风味美食,面基有趣好友。

过去一段时间收集到的各群友的头像徽章(截至 2024 年底)

旅行的端点固然重要,而连接两点的边亦是旅行的重要组成部分。算了一下,我过去十年仅在铁路上走过的里程,就已有 80000 km 有余,足以绕地球赤道两圈,这其中有各种各样的列车,各种各样的线路,各种各样的人。它们让我旅行的路途不再单调无趣,让交通本身,也成为了旅行的一部分。

因此,我开始用镜头与文字,记录下关于交通的一切,这其中,有辞旧,有迎新,有独特,有普通。

辞旧 – 2023 年 12 月 19 日,送别京原线末班非空 6437 次
迎新 – 2025 年 6 月 3 日,乘坐五年后恢复开行的中蒙国际列车 K23 次。
特殊 – 2023 年 9 月 30 日,乘坐“润泽江南”亚运主题涂装的复兴号智能动车组
普通 – 2024 年 10 月 19 日,乘坐 1461 次到达上海站,准备前往杭州。

终章,亦是序曲

毕业证和学位证,为我的本科四年,学习计算机科学的前十年划上了一个句号,而博士生的录取通知书,则带领着我开启新征程。

这十年时间里,有笑,有泪,有愤慨,有怨恨,有自责,有激动,有满足,有自豪;这十年时间里,有黑色命令行下的第一行输出,有未初始化变量带给我的当头一棒,有敲下一大段代码最终 AC 的惊喜,有飞盘下的挥汗如雨,有在全国赛场上打铁的失落,有被迫接受命运支配时的不甘,有面对大学新生活的期待,有沉迷学习的快乐,有站在岔路时的迷茫,有课内任务带来的压抑,有新征程开启时的昂扬。这就是人生,一个混沌系统,充满着不确定性,同时也是一个开放世界,拥有无限的可能。

感谢这十年来一直给予我支持的父母,师长,同学和伙伴们,是你们让我的这十年丰富多彩,有你们,真好。

是时候与陪伴了十年的算法竞赛说再见了。接下来,就在 PL 的赛道上开启新征程吧!

2025 年 7 月 18 日

《我与计算机科学的前十年(2015-2025)》上有5条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理