魔镜魔镜,世界上最优秀的程序员在何处?

348

这里写图片描述

  • Donald Knuth — AI之父
  • Ken Thompson — B语言之父,Unix之父
  • Dennis Ritchie — C语言之父,Unix之父
  • Linus Torvalds — Linux之父

上个世纪,美利坚孕育了一大批上神级别的软件工程师。(问题一:Unix之母是个什么样的女人?)

美国的计算机技术与计算机教育经过最近20年的发展,已变得触手可及。与此同时,世界上那些欠发达的国家,也正在把本国一部分年轻人训练成经验丰富的开发者。

所以,一个有趣的问题随之而来,到底哪个国家拥有世界上最优秀的程序员呢?或许更重要的一个问题是,为什么某些国家引领着某一方潮流呢?

中俄处于世界领先地位

数据来源于一个叫做HackerRank的编程网站,它旨在为数以百万的开发者提供编程挑战,同时也为企业提供招聘服务。通过使用不同国家的编程人员如何解决广泛领域 (例如算法和数据结构,或编程语言,如C ++、Java)的问题的信息,HackerRank的数据统计显示,世界上最好的程序员来自中国,紧随其后的是俄罗斯。出乎意料的是,美国仅仅排在第28位。

这里写图片描述

中国是一个幅员辽阔的人口大国,庞大的人口基数使得诞生出许多编程奇才,战斗民族也是如此。

但是单凭这一点也难以解释为什么中俄的开发者排名如此之高。结果只是因为这些中俄的开发者喜欢参与HackerRank的挑战,所以一直稳居前列(恕我孤陋寡闻,目前只上CoderByte和LeetCode)。但是往往中国和俄罗斯的开发者在其他编程网站中的表现也领先着其他国家,其中包括由Google托管并管理的国际编程赛事Google Code Jam。

虽然中国和俄罗斯的开发者在HackerRank挑战的十五个领域中有很好的表现,但值得注意的是,来自特定国家的开发者在某些特定领域的表现也很出色:小岛国比较擅长人工智能,香港则生产最优秀的Python程序员,最好的Ruby程序员在芬兰(不是湾区吗?),丹麦开发者写SQL比较6,最好的DBA来自瑞士,乌克兰则是信息安全,斯里兰卡是分布式系统最强大的国家,而法国则是C++比较顶尖。下面这这份清单:

这里写图片描述

越早学习编程,越好

首先来思考一下为什么中国和俄罗斯有如此多经验老道的程序员。HackerRank的首席技术内容官Heraldo Memelli说:“很大的原因就是这些国家教育的关注点。从小就学习数学,科技和编程,任何地方都可能出现伟大的程序员,但是这些学科会使得开发者在诸如编程挑战的编码事务中大获裨益。”

HackerRank上中国排名前列开发者的Shimi Zhang支持这一观点。他说:“数学和计算机科学在中国非常受欢迎,家长和学生对这些话题以及其他技术和科学话题都非常关注。中国的教育方式使得着中国学生从小就开始学习,而且当中国学生学习编程时,往往喜欢刨根问底。”

“而且许多中国学生从小学开始就很努力,因为没有足够的优质教育资源给所有聪明的中国学生。”“他们必须刻苦学习才能进入一所好的中学,高中和大学,很多中国学生在学习编程时都保持着这种习惯。”(小编周末不约会不泡吧,却在这里翻译洋文,哎。。。都是这样过来的)

美国大学生和中国大学生学习编程的方式也存在差异,但Shimi Zhang认为美国的高等教育体系是有优势的。“中国大学的相关基础课程是由普通老师而不是教授来讲授,所以这些课程的质量并不像美国的大学那么高,美国的大学生在大二或者大三就可以加入研究小组,但在中国这只存在于某些重点大学。

尽管美国在这方面有更好的体系,但这似乎不足以超越中国的初级基础教育和中国的竞争带来的好处。

需要更多的编程马拉松

美国的大学希望通过学习中国的教育模式来提高编程学科的教育水平?HackerRank的Memelli认为,在课程当中添加有竞争力的问题并准备解决方案,或者甚至是外部课程,可能是一个好主意。“想到一点,美国的教育工作者可以通过组织实际的编程挑战,在线的编程马拉松等来补充学校所教授的内容。”

相比之下,Shimi Zhang说,美国学目前擅长解决实际问题,开发产品。相比之下,中国学生在实际问题上磨练编程技能的机会较少,所以他们花更多时间在学术上面,关注基础知识。“这实际上有助于(中国学生)在进入行业之前建立起扎实的基础知识。确实,中国正在催生世界顶尖的程序员,但是美国学生仍然很善于解决实际问题,做着改变世界的事。”

归因

由于中国和俄罗斯教育的教育模式,中国和俄罗斯可能在各种编程领域都会有出色的表现,不仅仅是像HackerRank这样的编程挑战。但是,是什么使得一些国家在特定领域有过人之处?例如,为什么芬兰程序员特别擅长Ruby?

Memelli认为,原因可能是因为该国出现了一些“怪癖”。“很难确切地知道,但是一些国家在特定领域的高排名可能会归结为该国的学校课程,或者某个公司或行业在该国重要,或者出于某种原因特定的编程语言在那里很受欢迎。“(Java语法简单,没有指针那种东西,入门快,量产快,而且经久不衰,活跃度一直很高,所以Javaer在中国越来越多。。。培训班首选)

对于Memelli观点的最后一点:特定的编程技能可能会在需要它们的地方落地开花。如果一个国家需要大量的AI专家来支撑某个行业,那么很可能会有越来越多的人来学习和使用AI相关技能。

这似乎听起来像是废话,但是在招募具有你需要的具备特定技能的开发人员,或招的人决定着某个项目基础运营的时候,这确实有着重要的意义。具有特定的编程技能的人并不是均匀分布在世界各地的,知道去哪里寻找他们才比较重要。