OI劝退指南

OI劝退指南

写了6年代码,搞了4年竞赛,终于要到头了。万事终有结束的一天,现在我倒是希望我的竞赛早点结束。我不希望再在自己不喜欢的事情上浪费时间了。总之,撑到今年NOIP就好。结束之后,我决定不再参加任何算法类竞赛,也不接受关于算法竞赛的任何咨询和讨论。

正如标题所言,这一篇blog是作为一个失败者写给后死者们看的,希望以后的学生们不要盲目地被拉上贼船吧,希望他们能够做真正自己喜欢的事情。

后死诸君多努力 ” —— ??

回忆

​ 正所谓殊途同归,每个人都应该有一个不同的开始。至于我,一个被拉上贼船的人,自然不是对竞赛或者是算法感兴趣。在小学的时候,因为非常闲(这也导致我现在每天累的死去活来还考得一塌糊涂),所以天天在打游戏。那时候虽然已经是2011年了,我五年级,但是我还是很喜欢玩C&C系列中的Red Alert 2,一款2000年针对win2000左右系统开发的即时战略游戏。我对它进行了深入的研究,也不再满足于仅仅是在它既有的框架内玩游戏,就开始玩mod,以至于自己想要写一个mod。一开始先改一改配置文件(没错,就是那个rules.ini,玩过的都知道),后来发现这样也太局限了,就顺手接触了编程相关的内容。因为各种原因,我最先学会的,居然是VBS(就是那个windows脚本,天天被用来做无脑病毒)。后来由于要忙小升初,就浪费了一段时间。

​ 上初一之前,我被拉去参加了一个类似于竞赛预科班一样的东西,于是乎就学会了Pascal和基本的算法。初一开始,学校有NOIP的竞赛,我也顺手去报了名。然而我并不是那么重视这个东西,因为它主要是做题。在做够了八国联军的题目之后,我不想再看到题目。初一的寒假,本校唯一一次和盐城大丰的某个学校联系举行了一次冬令营,在那里我发现了自己的浅薄,那里的学生已经掌握了高阶的算法,基本上是我在高一的时候才会的东西。然而我并没有引起重视。在那里最大的收获是一个学生教练,Tsinghua计算机毕业,当时因为NOI金牌保送的。从他那里我了解了更加广大的计算机世界,比如java,c++,python和php这些语言。于是回来以后我就更无心竞赛,开始学这些东西。初二的时候,莫名其妙地过了初赛,NOIP普及组两日游,拿了个小奖。那年暑假,我才真正认真的开始竞赛,估计那时侯水平还是可以的,够得上提高组的二等奖了。那个暑假,我还开始了对编译器的研究,写出来一个小的解释器demo,可以有控制流和数组。初三的NOIP考得非常惨,因为少打一个空格导致最后一题爆零,错失一等奖。

​ 中考结束以后,事情很多,就没有再搞竞赛。只是在开学之后突击了一下,就去考了NOIP2017提高,因为没有开long long错失一等奖,非常气,就打算再忙一年。渐渐发现,自己已经跟不上趟了,数学思维的硬伤导致我的动态规划和数学内容非常差,图论和打表暴力还马马虎虎。计算机竞赛已经成为了一块心病,一个包袱,丢不掉,也不想去学,一直到现在,浪费了我不少时间,也没有多大长进,估计也不会有什么好的成果。

​ 这就是我的故事,6年,也就短短百余字。

遗憾

​ 这几年比较后悔的事情,就是没有在NOIP2017以后就退役,以及发现算法竞赛本质太迟了,直到年初我才大概搞明白什么才是我真正想要去学习的。还有就是初中太浪了吧。

结论

  • 第一个结论是关于算法竞赛本质

    算法竞赛,本质上更加倾向于数学,尤其是离散数学,而且基本超出了高中的范围,和高中课程基本没有什么联系。我作为一个数学渣,能撑这么久,主要还是编程能力在死磕。而且算法就是数学的一个分支,考到的内容一般比较抽象,对审题建模要求也比较高,计算机不过是个工具罢了。单单通过学习算法竞赛,你甚至不能搞懂计算机是怎么工作的,也不要妄想能够写出一个像样的应用。

  • 第二个结论是关于算法竞赛的优点

    首先可以对编程有一个基本的认识。

    其次可以学到许多离散数学的知识和以后基本用不到的算法(基本上二叉树封顶)

    还有对理科思维也是有一定的作用的

    最后当然是如果考得好(怎么说也得省队吧)的话,可以自主招生

  • 第三个结论是关于它的缺点

    这个竞赛就像高考一样,是考试。它会挖空心思来为难考生,有许多根本在现实中不存在的巨大数据量和限制,而且很多模型是不切实际的。这个考试还会对学生的代码风格和以后写大型程序的能力造成巨大破坏。最可怕的一点在于,它需要用到电脑(注意我说的这个用词)。这样就比较尴尬了,因为会情不自禁的打开b站,打开qq,打开游戏。。。。etc。

  • 第四个结论是关于初心选择

    虽然我不是很喜欢那个包子,但是初心还是非常重要的。我就是一个忘记初心的人,我本来想要做游戏,后来就开始被学竞赛,甚至走偏到了操作系统的歪门邪道上来。我现在比较后悔当时没有毅然决然放弃竞赛,而是为了一些什么去硬撑着,总觉得有点可惜,反而浪费了热情和精力。

    这里还要谈一谈所谓竞赛和工程。竞赛是智力游戏,而工程是荒野求生。竞赛关注算法的方方面面,而工程对效率、空间的要求较低,主要关注正确性,实用性和整体的架构。编程有很多方面,竞赛是给那些计算机科学家和未来的技术大佬准备的。如果立志成为工程师的话,其实不必沉迷过深,算法学到了就行了,竞赛什么的都去死吧。不是说算法不重要,而是真正重要的算法都不难也不多。通用算法就那么几个,剩下的就比较的specific了,它们只解决在特定情况下的某一小类问题。

  • 第五个,最后一个结论是关于心态

    这个竞赛和其他的竞赛一样,都比较考验智力。总会有那么一些人比你年纪小、能力强,天才层出不穷。不必太放在心上,因为他们本来就是用来仰望的,人还是要看着前面走路。在你看前面的时候,他们早已让别人无法望其项背了,不会太堵你的路的。如果喜欢,就继续做下去吧。不喜欢就尽早放弃,把时间让给真正有意义的事情。

展望

编程在未来应该是一个常用技能,就像现在的神经网络一样。无奈现在懂得人还是不多。很多情况下,人们还是需要一个比较高级的计算器的。在公司里叫做办公自动化(比如高效excel什么的),在科学研究中是建模的一部分(最流b的计算器之matlab)。编程不一定要参加竞赛,也不只是竞赛。我甚至会建议那些真正想要把编程作为一种爱好的人,真正想要做出一些属于自己的东西的人不要去参加竞赛。考试总是有着巨大限制的。

在暑假里我参加了一个学校里大佬搞得计算机普及项目,也去讲了一节课。我还是真心希望更多的人能够喜欢编程,也很欢迎和竞赛题无关的算法和技术讨论。

至于怎么入门和继续学习,我觉得从实践先做起,成就感和热情很重要。然后再去研究一些基本的算法和原理,最后就朝着目标前进吧。

江苏省扬州中学OI退役 2017级 xxx 于 2018年8月3日晚22时48分

Licensed under CC BY-NC-SA 4.0
摸摸猫猫
Built with Hugo
主题 StackJimmy 设计