追求神乎其技的程式设计之道(二)

来源:百度文库 编辑:神马文学网 时间:2024/04/29 18:40:26

资讯奥林匹亚与程式竞赛

在升上高中前,我因缘际会透过一个国中的同班同学认识了他的哥哥YJL。YJL比我大三年,我要进中一中时他刚好毕业,很巧的是他很会写程式,一直都是中一中的资讯能力竞赛代表队成员。刚认识他时,他就demo给我看他用QBASIC自己写的横向捲轴射击游戏,当时看得我目瞪口呆,我完全没法想像QBASIC竟然能写出这么顺畅且华丽的游戏。这个demo如果不说,我一定会以为这是市面上在卖的商业游戏(我那时还以为一定要学C才能写出这种游戏)。

透过YJL我也得知原来高中还有资讯能力竞赛和奥林匹亚这种比赛,听他述说跟全国的高手一起比赛写程式时,让我不知不觉也热血沸腾起来。我把他高中时留下的各种参考资料全带回家,并透过他认识了更多还在中一中的强者学长们,就这样在踏进高中校门的同时也决定了我这三年的方向。

这里我先介绍一下对于高中生最重要的资讯比赛。高中的学科能力竞赛是教育部主办的比赛,包括数学、物理、化学、生物、地球科学、资讯,每间高中通常会先办个校内初赛来选出代表选手,再由这些选手参加各区域的能力竞赛,最后各区的前N名(每科的人数不同)才能参加全国竞赛。以资讯科来说,我记得是校内取6名,中区再取6名进全国决赛。到了全国决赛能拿到前10名,还能直接保送进资讯奥林匹亚的培训营,不用再另外参加培训营的入营考。至于资讯奥林匹亚(International Olympiad in Informatics, IOI)则是国际性的资讯比赛,参加的人是从每个国家挑选出来的顶尖高中生,每年轮流由一个参赛国举办,选手要进行两天每次连续五个小时的头脑比赛,其中只有一半的人可以得到奖牌。

这些比赛和一般的程式比赛其实很不一样。这种比赛比的是解决问题的能力,不是比赛软体实做的能力。题目比较像数学问题,只是除了纸笔外,还得用某种程式语言实做出能解出正确答案的程式,也就是说参赛者必须想出问题的解法(演算法),再透过自己擅长的程式语言写进电脑,让电脑执行后输出问题的答案。这种解题比赛主要考验的是运用资料结构和演算法以有效率的方法解决问题,并写出正确程式的能力。大学有个类似的比赛是ACM ICPC,问题类型和IOI很类似,但比赛的模式和方法则有很大差异,有兴趣的人可以自行寻找相关资料。虽然IOI是给高中生参加的比赛,但IOI题目的水准其实非常高,如果你能轻易解出IOI的问题,那… 我跟你打赌去Google面试也有99%的机率会通过。顺便一提,Google Code Jam就是一个开放给所有人参加的解题比赛,题目类型就跟IOI和ACM ICPC差不多,前一百名就有奖金,还能免费去Google Mountain View总部玩一玩喔。

参加比赛是一个评估自己实力的好方法,没在比赛会场上较劲过,真的很难体会解题与写程式能力的差距可以有多么巨大。一个顶尖的程式设计师和一个普通的程式设计师,其生产力是很轻易的能有十倍甚至百倍以上的差距,而写出来的程式码品质及效率也是同样会有如此巨大的落差。

透过良性的竞争,高中这段时间也成了我进步最快的一个时期…..