不知不觉中就被 cue 了。。。
那么,我们也来聊聊一个问题——ACM 比赛在大学中意味着什么?(至于我为什么不读博而去华为的问题,其实原因很多,归根结底还是我菜和怂,这里就不过多讨论了)对于这个问题,我个人的结论是:ACM 比赛是一种证明的方式,却不是一种学习的方法。
假如你 AC 了某道或某套题,也许只说明了:
- 你的 coding 实力达到了一定的程度。
- 你了解问题的解法或者你的解法在正确的方向上前进。
至于能不能在题目中学到东西,其实大部分时候是不行的。
再举一个例子,做 ACM 题时可以解扩展 GCD 问题的人有三类(之所以选这个例子是因为 eGCD 的模板比较短):
- 会用 eGCD 模板的,但手边一没有模板就做不出来的人。
- 记住 eGCD 模板的人。
- 不需要模板,可以通过数学推导写出 eGCD 的人。
如果单纯从这个角度让大家选择谁是你心目中最“牛”的人,那么正常人都会选第3种。但是,第3种人却不一定是参加 ACM 比赛最合适的人。因为第3种人参加比赛收益比低(收益比=比赛带来的收益/投入的时间)。如果再考虑上社会收益,那么收益比还会再下降。
如果你能明白我上面说的两段话,那么相信你对“为什么有些明明看起来很适合打比赛的人却不建议打比赛”这个问题有所理解了。其实对于一个学生来说最理想的状态是让比赛的收益成为学习理论知识的一种副产物,而拿比赛成果去找学校深造和找工作只是副产物的一种变现手段,却不是唯一的手段。打比赛,得像是一种“顺手而为”才行。
当然,对于我们绝大部分的学生来说,远远达不到这个程度,更多的人是没有主动去学习理论知识的动力的,需要比赛收益带来的甜头来剌激学习,即给自己找个理由学习。那么这些人还是需要去打比赛的。我对这类学生有如下三点建议:
- 比赛的同时别放弃课程知识。如果你觉得老师教的不好,那么请自习,除非你真的确认某课程对你的末来一点用都没有(这种情况几乎不存在,至少还有学分不是?)
- 抽空看看计算机理论基础书籍,包括数学、计算机硬件、计算机软件等方向(不知道读什么书去问斌头老师啊)。就我个人看来,这类书籍是适合多次阅读的(也可能是我太菜了,一次看不透)。
- 每场比赛后还要对题目重新分析,一是补题,二是许多题目做出来不等于你真的理解了题目的思想(比赛做题猜结论的情况太常见)。如果有可能,数学的证明是不可少的。
说了这么多,希望能对各位师弟师妹有所帮忙。最后,祝斌头老师桃李满天下,师弟师妹们学业有成!