(原标题:如果办一届编程奥运会,哪个国家能夺金?)
世界上哪个国家的程序员最优秀?
很多人可能会猜是美国。毕竟,比尔·盖茨、肯·汤普森、丹尼斯·里奇和高德纳这些鼎鼎大名的程序员都来自美国。但与此同时,印度也不示弱,它的程序员队伍正在飞速壮大。俄罗斯程序员亦在国际上有着不小的名声。比如今年美国民主党全国委员会邮件遭泄,引发所谓的“邮件门2.0”事件,给美国大选都造成了不小的影响,而此事据信就是俄罗斯黑客所为。
那么哪个国家的程序员最为优秀呢?我们不妨从编程竞赛的角度,对各国作一番评比。
HackerRank是一家经常性地提供编程测试的网站,发布过数以万计的编程难题,帮助开发者提升编程技能。它吸引了来自世界各地的几十万开发者的参与,分成算法、安全、分布式系统等15个不同的竞赛类别,允许各种不同的编程语言,包括Java、C++、PHP、Python、SQ等。这个社群逐日扩张,现在已经有超过150万名开发者参与竞赛。HackerRank将参赛人数最多的50个国家和地区提出来,作了一个评比,评分过程既考虑了准确度也考虑了答题速度,并作了一定的数据处理,使难度各异的不同类别具备可比性。
中国综合实力居首
从HackerRank的统计数据来看,得分最高的是中国,俄罗斯紧随其后。中国程序员在数学、函数式程序设计和数据结构竞赛中独领风骚。
俄罗斯主导了最受欢迎、竞争最激烈的算法竞赛。算法竞赛中包含数据排序、动态规划、关键词搜索等各种逻辑任务。由于算法考试常在程序员面试中唱主角,所以很多程序员都会用算法竞赛练手。这也在一定程度上解释了这个类别的高人气。
再来看看开头提到的美国和印度,虽然HackerRank的参赛者绝大多数都来自美国和印度,但这两个国家都没有进入前25,只分列第28和31位。
HackerRank员工张世弥(音)是一位来自中国重庆的软件工程师,在HackerRank的函数式程序设计竞赛中跻身前十。对于中国程序员的出色表现,他作了这样一个分析:“和其他国家比起来,中国大学的教育资源相对有限,所以学生在走程序这条路的时候,面临的选择也比较少。很多优秀学生都去参加编程竞赛了,因为这些竞赛提供了其中一条出路。”
“中国还有很多学生从初高中时代就开始编程了,而且专啃全世界都鲜有人能够解答的难题。中国还举办专门针对年轻程序员的编程竞赛,比如全国青少年信息学奥林匹克联赛(NOIp)和全国青少年信息学奥林匹克竞赛(NOI),每年都会在国内选拔4名选手出征国际信息学奥林匹克竞赛(IOI),今年派出的4人当中就有3人夺金,1人夺银。这种趋势已经维持了将近十年。”
张世弥补充说,“而且其中还有一个特殊的规则:选手在赢得金牌以后就不能继续参与下一届比赛了,所以但凡是夺金的中国选手都是首次出征便得胜归来的。可见他们有多优秀。”
各国程序员的偏好与特色
相对而言,中国程序员对数学类竞赛表现出了特别浓厚的兴趣,也顺理成章地拿下了这一类别的冠军。与此同时,捷克开发者对Shell的偏爱也非其他国家能及,并且也称霸该领域。
就编程语言来看,在绝大多数国家,程序员参赛用的最多的都是Java,但也有少数是例外,比如马来西亚和巴基斯坦程序员最多用的是C++,中国和中国台湾的程序员最多用的是Python。
程序员在参与HackerRank的竞赛时,如果没有取得任何进展就放弃了,也会留下一个分数,分值为零。瑞士的零分用户占比最低,仅为2.5%,因此可以说,瑞士程序员是世界上最坚持不懈的程序员。中国程序员在这一项上排名居中,零分用户比例为4%。最容易放弃的是巴基斯坦的程序员,零分用户比例达到10.1%,这个国家的总体得分也是50个国家与地区中最低的。
综合来看,如果我们今天举办一场编程奥运会,那么奖牌榜排名前三的国家将依次是中国、俄罗斯和波兰。美国和印度若想进入前25,还得再下一番功夫才行。