保罗#
在 2017 年,我是大学的二年级学生。那时,我刚刚学习计算机编程不到一年。
保罗・登普斯特是我们大学的老师(在诺丁汉工作十年后,他现在在兰卡斯特教授)。我仍然记得他在课堂上的样子 —— 伴随着简洁的 PPT 排版,他快速而熟练地使用他的 IDE 和终端教我们这些无知的孩子基本的编程知识。
与其他老师教授的计算机理论课程相比,我更喜欢他的 C 语言课程。因为在我看来,这更实用且令人耳目一新。我记得他为我们安排的每周半小时测验既新颖又有趣,有时充满挑战,比如在时间限制内实现链表方法,或者要求一个格式错误的 C 语言源文件的格式(那时,我傻到手动输入格式而不是使用 IDE 格式化工具,老实说)。这种兴趣让我在期末编程作业中得了 99/100 的高分。
我第一年的 AdventOfCode#
当第一学期的考试复习季节到来时,保罗给我们发了一封邮件,介绍AdventOfCode.com(请原谅我丢失了邮件的原文,因为毕业后学校邮箱无法再登录)。
在邮件中,几段长短不一的文字介绍了这个网站是一个编程谜题网站。从 12 月 1 日到圣诞节,每天都有一个问题,每个问题有两个难度逐渐增加的部分。你完成每个部分就能获得一颗星,总共在 25 天内可以获得 50 颗星。世界各地的许多人都在参与。人们用它来玩速度游戏、准备面试、磨练编程技能、相互竞争,或者只是为了好玩。
保罗还建立了一个私人排行榜,邀请我们一起加入并玩耍。尽管最后参与的学生不到十个。
我点击了网站,几分钟内完成了第一天的问题,得到了两颗星。我很兴奋。
和我一样兴奋的还有我的一个室友。
在接下来的几天里,我们每天都在等待下午 1 点(中国 GMT+8,即东部时间 0 点)解锁问题,然后冲去解决问题。
然而,并不是每天都顺利,越往后走,问题越难。由于对问题含义的误解或错误答案,我们常常在提交错误答案后被卡住一段时间,并且因为编写低效的逻辑而等待很长时间(你一旦玩就会明白)。
我们写的代码很糟糕,但看到它解决了问题时非常开心。我们努力优化代码,希望它能更高效地运行。
有些日子,我甚至写了一个可视化问题解决过程的程序。
最后,我们解锁了 25 天。
我们非常开心。
每年十二月的 AdventOfCode#
自 2015 年以来,每个圣诞节,AdventOfCode 都有一个背景故事。随着每日问题解决进度的更新,故事逐渐发展,最终在圣诞节完成结局。每个解决问题的人都有一个快乐而富有挑战性的月份,这真是值得庆祝,并留下了美好而深刻的记忆。
在接下来的几年里,我会向不同的人介绍这个活动 —— 新同学、新朋友、新同事……
(截图是我在微信朋友圈分享这个活动的中文内容。)
在 2019 年的头几天,我甚至尝试每天用不同的语言解决问题(Songkeys/advent-of-code-2019)。
不幸的是,由于各种原因,我每年都无法坚持超过 20 天,无法再获得所有的星星。因为不再有太多时间投入其中,也不再有那些同学和朋友的陪伴。
然后,让我们再玩一次#
转眼间,五年过去了,已经是 2022 年。
我不再是那个无知的编码新手。如今,我写的代码很少是出于学习和兴趣,而更多是为了工作或项目目的。虽然有不同种类的乐趣,但与最开始相比,我总觉得缺少了什么。
我决定在这里立下一个 flag—— 无论今年发生什么,我必须在圣诞节那天获得 50 颗星。在接下来的几天里,我会慢慢填补前几年的检查点。
如果你被我感动了,那么今年的 12 月 1 日等着你!
社区#
顺便说一下,你还可以访问这些社区:
- Discord:我在这个 Discord 服务器上玩了好几年。这里有世界前 100 的高手,各种语言的高手和新手。不同时间区的人们常常一起等待主题解锁,一起讨论主题,互相帮助提供建议。
- Reddit:在这个子版块中,你可以看到更多其他活动(例如某一年的每日诗),以及来自大神和普通人的更多解释(例如,有人用 arduino 解决问题,用 minecraft 解决问题,用折叠屏手机解决问题,写论文解决问题的方法),还有许多有趣的表情包。
- 幕后花絮(视频):作者Eric Wastl在许多场合分享了一些幕后故事。
让我们一起玩吧。