Paul#
2017 年,我大学二年级。这时的我真正专业地学习计算机编程不到一年。
Paul Dempster 是我们的一位学院教师(在 Nottingham 任职十年后,他现在去了 Lancaster 任教)。我至今仍记得他在课堂上的神采 —— 伴随着简洁的 PPT 排版,飞速熟练地用 IDE 和 Terminal 教我们这些懵懵懂懂的孩子们基础编程知识。
相比于其他老师任教的计算机理论课,我更喜欢上他的 C 语言课程。因为在我看来这更实用、爽快。我记得他安排给我们的每周一次半小时随堂测验的题目新颖有趣,有时也充满挑战,比如限时完成 linked list 方法,又比如给一个排版错乱的 C 语言源文件,要求限时 format 这个文件( 当时的我蠢到手敲格式而不是用 IDE formatter)。这份兴趣让我在期末的编程作业中,拿下 99/100 的成绩。
我的第一年 AdventOfCode#
当大二上学期的复习季来临,Paul 给我们发了一封邮件,向我们介绍了 AdventOfCode.com (原谅我弄丢了邮件原文,因为学校邮箱毕业后就再也登录不了)。
邮件里,用大大小小几个段落,介绍了这个网站是一个编程谜题网站,从 12 月 1 日起到圣诞节,每日一题,每题又有难度渐增的两部分。每完成一部分会获得一颗星星,25 天总共有 50 颗星星。全球有很多人都在参与。大家用它来玩速解比赛、做面试准备、锻炼编程技能、互相比拼、或者仅仅娱乐。
Paul 还建立了一个 private leaderboard,让我们加入进来一起玩。虽然最后加入的同学不到十几个。
我点开网站,几分钟时间便完成了第一天的题目,拿到了两颗星星。我很兴奋。
和我一样兴奋的还有我的一位室友,一个学霸,一个狠人。
我们接下来的几天就每天下午一点(GMT+8,即 EST 零点)等着题目解锁,然后冲刺解题。
然而不是每天都很顺利,越往后,题目难度越大。我们经常因为题意理解错误而提交了错误答案或写错逻辑后被冻结一段时间,也经常因为写了效率很差的逻辑而等待很久很久(once you play, you will see)。
我们蹩脚地写着代码,但是非常欣喜地看到它能解出题目。我们又努力地优化代码,希望它能跑得更高效。
有些天,我甚至写出了可视化的解题过程。
最后,我们解锁了 25 天。
我们非常开心。
每一年十二月的陪伴#
从 2015 年起,每年的圣诞节,AdventOfCode 都有一个背景故事,伴随着每日解题进度的更新,故事也逐渐发展,最后在圣诞节那天完成结局。而解题的大家们度过了开心又有挑战的一个月,实在是值得庆祝一番,而且又留下了美好深刻的回忆。
而我在接下来的每一年都在把这个活动介绍给不同的人 —— 新的同学、新的朋友、新的同事……
在 2019 年的前几天,我甚至尝试了每天用一种不同的语言解题( Songkeys/advent-of-code-2019 )。
可惜,出于各种各样的原因,我却撑不到十几天,再也没能拿齐所有星星了。因为再也没有太多时间腾出来投入,也再也没有那些同学朋友的陪伴了。
那,再来玩吧#
转眼间,竟然五年过去,已是 2022 年了。
我再也不是那个懵懵懂懂的代码新手。如今,我写的代码也很少是为了学习和兴趣,更多是带着工作或项目目的去编程。虽然也有不同的乐趣,但比起当初,总觉得少了些什么。
我决定立下一个 flag—— 今年无论如何,也得在圣诞节那天拿齐 50 颗星星。而接下来的这些天,我会慢慢补打卡前些年的关卡。
如果你被我打动了,那今年的 12 月 1 日等你一起!
社区#
对了,你还可以逛逛这些社区:
- Discord :我在这个 Discord 服务器玩了好几年。里面有重进全球前一百大神,有各种语言的高手,也有萌新。不同时区的大家经常一起等题目解锁、一起讨论题目、互相帮助给提示。
- Reddit :在这个 subreddit,你能看到更多其他活动(比如某年的每日一诗),更多神人的解题(比如有人 用 arduion 解题 , 用 minecraft 解题 ,用 折叠屏手机解题 , 写了一篇论文论证解题方法 ),还有很多有意思的梗图。
- Behind the scenes (videos) : 作者 Eric Wastl 在很多场合都分享了一些幕后故事。
一起来玩吧。