ACM竞赛感悟¶
前言¶
笔者的水平不高,简单的概括就是双非二本零基础ICPC银,在字节打过杂。写这篇文章的目的是为了我校的学弟学妹们能够少走一些弯路,这篇文章仅代表了个人的一些看法,希望后人能够从中有所收获。
梦的开始——为什么来打ACM¶
背景:
- 喜欢数学,充满好奇心。
- 浙江高考选技术的时候接触到了最简单的冒泡排序、二分查找等基础算法,对编程产生了浓厚的兴趣。
- 高考发挥失常,心中一直有遗憾在,想做些什么证明自己。
起因:被高中同学亦是大学同学的龙哥拉去听ACM宣讲,觉得挺好玩的,就入坑了。
我对ACM的看法¶
- 从功利的角度来说,这是一件性价比不高,甚至极低的事情。如果只是想去博一些所谓的荣誉(虚名),其实有很多更简单、轻松的方式。
- ACM可好玩了,大致上可以理解为给你某个场景下的一些条件和约束,然后让你求某个想要的结果,结合自己所学的知识点去思考解决方案。重要的是思考本身,同时能快速正确的实现自身想法的能力也十分重要。
- ACM竞赛相对其他的比赛来得客观、公正,不会因为你是名校就对你高看一眼,亦不会因为是弱校就比他人低一等。你的努力会反馈到你的成绩,你在竞赛榜单上的排名是你努力的缩影。
建议¶
无论是否对ACM感兴趣,如果将来想从事计算机行业的任何领域,那么我都建议去玩一玩ACM,去花一些时间搞明白这些看起来很难的东西,最后总是会有些收获的。如果最后发现自己仍然不喜欢,或者把一切的问题在努力之前都归结于自己没有天赋的话,那么应该及时止损,转专业或是从事非计算机行业。个人认为大部分同学都被所谓的高薪给骗过来学计算机,实际上很多人并不喜欢,并没有投入大量的课外时间,只靠上课是远远不够的,自然也就学不好。编程是需要实践得真知,多去写代码比你做一些纸质的编程题去单纯为了应付期末考试要有意义的多。如果只是不会解决困难的问题,那么不要紧,你仍然能够成为很棒的程序员,实际上的工程问题并不会都像竞赛那么困难,但也许去参与一些开源项目,去学习一下名校课程,做对应的Lab或是去实习会更适合你,去找到适合自己的领域。
功利的来说,对于想从事计算机行业的学生而言,本科毕业一般是考研和工作两条路,这里的难度可以参考LeetCode meduium/hard,不会太难,所以如果只是为了功利本身建议学一些基础常见的东西其实就够用了。
考研:很多名校复试时会要求机试,大家的面试成绩实际上是不会差太多的,那么机试就显得格外重要,至少不要因此成为你的短板。
工作:笔试、面试的时候会考察一些算法题。
寄语¶
ACM竞赛确实是非常有挑战的事情,我始终觉得去做一些困难、有挑战的事,后续再去做别的事的时候会发现这其实没什么大不了的,并没有以前打ACM来得困难。同届退役考研的ACMer,也考上了985/211。在我看来,他们只是把自己的认真努力转移到了另外的领域罢了,我愿意相信无论是什么领域带着这股劲去做都能成功。努力了并且运气不错,就会有该有的回报,即使失败了也不过再来一年罢了,人生很长,去做自己想做的事,并不会因为多一年少一年而怎样。太阳终会升起,眼前的黑暗终将过去,努力的人会有光明的未来的!
希望大部分人能够坚持至少为期1年的ACM,认真学一些基础算法知识,后期实在觉得力不从心再退出去做一些项目,这段旅程仍会对你写项目有很大的帮助,许多算法题本身就是工程上的很多问题的抽象。对大部分人来说坚持并努力过之后,在合适的时间点退出才是更有利的选择。
希望仍能有小部分人能够喜欢ACM,并坚持下去。你们这一小戳人承载着我校的未来,可以自己去各大OJ上找一些有趣的题,去学会大部分常见的算法,努力提升自己的水平,争取参与区域赛并获奖。当你的水平达到获奖的水平时,或早或晚会有机会证明自己的。同时也不要太执着与获奖本身,你学到的东西是自己的,谁也拿不走。
希望大家都能从ACM中学到些什么,而不是竞赛、荣誉本身,能够感受到算法竞赛的魅力,享受这个过程。除了竞赛,人生还有很多有趣的事情值得去做,希望大家能够开心、健康地过上自己想要的生活!最后祝愿考研的同学能够顺利上岸,找工作的同学能找到心仪的工作,希望大家都能有光明的未来吧!
如何学好竞赛?¶
- Don't cheat.
- 兴趣是最好的老师,去尝试着解决一些简单的问题,如果觉得这很有趣,那就坚持下去,解决更多的问题。
- 不要总觉得自己太笨,要相信大部分人都是一般人,别人能做到的事情你也可以。
- 不要把别人成功的原因仅仅归结于天赋本身,天赋固然重要。如果哪天你努力过了,刷题不比别人少的时候,到那时再感慨自己没有天赋也不迟。很多人并不知道别人背后付出了多少,就把一切的一切都归结于别人比自己聪明,好给自己找一个借口放弃。
- 题目的质量比题目的数量更重要,去做自己好像会做但又不会做的题目,学会走出舒适圈,扩大自己的知识面。不要总去做一些简单的题目,然后引以为豪的觉得自己刷了多少多少题,你只是看起来很努力,实际上并不是这样的,不过是欺骗自己罢了,这比不努力更可怕,不自知反而会害了自己。
- 坚持打codeforces/atocder,只要有就去打。
- 不要畏惧英文,竞赛常用的英文就那么些,多看看就都懂了,比赛也可以带字典!
- 不要太功利。
- 去做你认为有意义的事,做之前思考为什么要去做,做成后是否会开心,想明白后踏踏实实地去做事情,如果还是没想明白就先做起来,旅行的意义也可以在旅行的过程去寻找。你想要的会在将来的某一天会回报你的,等到了那天你会发现自己所做的事其实并没有白费。
- 比获奖更重要的是你的思维、理解力会在这个过程中有很大的提升。
- 不要觉得自己来打竞赛就是为了获奖,获了奖再去找个好的工作,放平自己的心态。
致谢¶
感谢陪我打比赛的队友们!感谢一路上帮助我的老师、学长们!感谢找工作时帮助我的ACMer们!(这里就不列举具体名单了,怕会打扰到大家的生活。)