时间总是过得很快,2014年才刚刚进入大学,转眼间便已然成为一名大三学生。
记得自己上大学前很喜欢看网络小说,对其中所描述的学院生活感到非常向往,父母亲戚在劝诫我不要打游戏时,也常常用上“游戏这种东西上了大学随你打”这类话。因为没有体验过,又因为人们口中的大学生活非常符合我对享乐生活的设想,所以我就把大学当做了一个非常美妙的“天堂”。
而刚上大学的那段时间也确实如此,我喜欢大学自由的上课风格,喜欢寝室无约束的玩游戏环境,也因为远离父母,终于有一种解放的感觉。可人总是有点“犯贱”,以前爸妈不让我玩游戏,我偶尔能玩一会感觉到非常满足,而现在任我玩时,我反而渐渐觉得有些无聊。玩游戏玩到无聊,所以注意力就开始转移到其他地方。我想起了初中时曾经买过c++书籍(虽然就翻了几页,而且还是谭浩强叫兽的),想起了编程这个玩意,所以就决定研究下编程。当时个人对C++这门语言比较认同,所以就准备先去图书馆借C++的书看。
先去网上找了找,大牛们推荐了《C++ primer》这本书,于是我去图书馆借本来看看。去了图书馆后,发现这书已经被人借光了,而空闲的只有《C++ primer plus》。我一看这书好像差不多,而且还加了个plus,好像很高端的样子,于是就开始读这书。这可以说是我的编程启蒙书。这本书看起来只加了plus,但和原来要的那本书可以说是天差地别。plus开始从C-style代码讲起,后面讲再单独讲C++内容。当时我看完C部分就感觉差不多,准备去小试牛刀。在偶然中和一个教编程的老师聊天时,我还非常自信的说“C++其实就是C加一点面向对象的东西”。现在想来,当时的自己不可不谓狂妄自大。C++和C其实可以说是两种风格差异巨大的语言,只是C++兼容了C的内容。
在这之后,一个学长向我推荐了学校ACM的教练,我通过电话并线下到办公室和教练陈老师聊了聊。陈老师给我介绍了计算机能做哪些有趣事情,并介绍了HDU_OJ,并让我去刷一下11页的题目。
我对其中说的一个简单例子印象很深:计算机能完成找迷宫出口。对这件事情我感到很困惑,当时的我知道编程里面有循环、判断语句,还有函数调用,但为什么就这些简单的东西就能完成迷宫中找一条路呢?当时没想出来,后来也因为新生的事情多,把它抛在脑后。
事实上,当时的我其实还什么都不会,11页这个任务也就有空去做一做,没空就拉倒。就这样一直到了大一上结束,我突然发现有很久没和陈老师联系了,于是自己又厚着脸皮跑办公室去找了陈老师。陈老师告诉我,寒假有ACM集训,你可以来参加一下。我一听觉得不错,就答应了下来,就这样,我第一次开始了ACM集训。
第一次集训,给新生讲了搜索的内容。搜索正是能解决迷宫找出口的方法,于是自己仔细听,却发现没怎么听懂。做习题时,别的大一同学都飞快做完5、6道题(zzt,xiang578),我却只能为了1道题而苦苦努力。当时第一次接触到了递归这个概念,也知道了回溯,但对搜索还是不能很好理解。人笨只能用笨办法,自己对着一份搜索代码只能实行单步调试,一步步看递归是怎么回事,为什么dfs在回溯时需要清除清除标记,一道“骨头的诱惑”能让我思前想后始终不得纲领。寒假集训还讲了些其他东西,但具体是什么依然记不太清,但自己对于搜索(或者说是递归)还没有入门。
集训结束后,我坐上了回家的高铁,顺手拿出了图书馆借的《挑战程序设计竞赛》翻了翻并仔细看了下汉诺塔(Hanoi)的过程。或许有些事情就是这么水到渠成,寒假集训半月始终不得要领的递归,在看完汉诺塔讲解以后突然一下子就明白了递归是怎么回事,同时也感受到了递归写法的简洁和强大。火车上只有短短的一小时,但这一小时的顿悟给我彻底打开了编程世界的大门。
关于编程,其实我在学算法的时候比学数学抱有更大的热情。数学的推理非常美妙,但也只局限在一个小圈子里的人能看得懂。而编程这个东西可以把我掌握的东西通过程序实现出来,当实实在在的东西出现在电脑上时,我收获的是巨大的成就感,或者说,我能确切感受到我也改变世界的能力。
在这之后,我加入了校ACM集训队,并参加集训。寒暑假教练会在vjudge上拉比赛,平常会安排时间找人讲课,就这样,我大学除了上课,周二下午公休在集训,周四下午公休在集训,周日一天集训,周六一般也会跑去机房写题,人生被ACM充斥了大量时间。在这期间,我也认识了许多集训队的小伙伴,zzt , xiang578 , wtq , godWang 等等。 (Continued)