文/PriceonomicsDataStudio
译/王挺
来源/Priceonomics
哪个国家拥有世界上 的程序员?
许多人会认为是美国。毕竟,美国是比尔?盖茨,肯?汤普森(KenThompson),丹尼斯?里奇(DennisRitchie,与KenThompson联合发明了C语言和Unix系统)和唐纳德?克努斯(DonaldKnuth,现代计算机科学的先驱人物,创造了算法分析学科)等诸多编程名人的故乡。但话又说回来,印度拥有许多诸如印度理工学院等 科技院校,而俄罗斯的黑客一向以“高效率”而著称。
那么,是否有一种方法可以来衡量哪个国家拥有 的程序员呢?
通过分析来自HackerRank(Priceonomics的客户之一)的数据,我们找到了答案。HackerRank定期为程序员举办众多的编码挑战,通过参与挑战来提高程序员的编码技能。成千上万来自世界各地的程序员参加了各种编程语言以及知识领域的挑战,诸如Python语言、算法、安全领域以及分布式系统等。HackerRank根据程序员完成挑战的准确性和速度,对他们进行评分和分级。
根据数据显示,中国和俄罗斯拥有 才华的程序员。中国程序员在数学、函数式编程以及数据结构领域的挑战中击败了其他所有国家,而俄罗斯程序员在 以及 竞争的算法领域具有统治地位。尽管美国和印度有众多程序员参与了HackerRank的挑战,但在排名方面,他们仅获得了第28和第31名。
在开始进一步分析之前,我们先来观察一下参加比赛的程序员最热衷参与的挑战类型。在HackerRank比赛中,程序员可以选择参与15个不同领域的挑战。有一些领域要比另一些更受欢迎。下表显示了各领域完成挑战的参与度比例。
▲这张表格展示了HackerRank上最多人完成的项目。前三名分别是算法、Java、数据结构
的是算法领域,有接近40%的程序员参与其中。这个领域的挑战包括数据排序、动态规划、关键词检索以及一些其它基于逻辑的任务。而作为算法领域的挑战者,程序员可以使用任何编程语言,这也部分解释了为什么该领域如此受欢迎。(算法也是程序员面试过程中的一个关键内容。)
与算法相比,参与度第二的Java领域和第三的数据结构领域就相差很远了,这两个领域分别有接近10%的开发人员参与挑战。而分布式系统领域和安全领域是参与度 的挑战领域。
那么,基于这些挑战,哪一个国家的程序员得分 呢?
为了找到答案,我们分析了每个国家在各领域中的平均分。在取平均分之前,我们首先对每一个领域的得分进行了标准化处理(将每一个独立得分减去平均值后再除以标准差,即z-score)。这样处理后,我们就能够在不同领域之间进行平等的分数对比。接下来,为了方便理解,我们将得到的z-score换算成1-的分值度量。
我们选取了50个国家的数据。来自这些国家的程序员在HackerRank比赛中参加了数以千计的比赛(最少的也参加了多个)。下面是我们的发现:
▲参加HackerRank比赛的国家得分。前三名分别为中国、俄罗斯、波兰中国得分 ,因此中国程序员获得了的分值,名列 。然而和第二名相比,中国只是以十分微小的优势取胜——俄罗斯的得分是99.9分。波兰和瑞士则得到了接近98分的好成绩,分列第三和第四位。在名单中,巴基斯坦以57.4分垫底。
印度和美国虽然贡献了最多数量的程序员,但甚至没有进入到榜单的前半部分。印度得到了76分,名列31位;美国得到了78分,名列28位。
虽然中国在平均分上战胜了其他所有国家,但这并不意味着它在每个领域都能 。那么,在某一特定的技能领域方面,哪个国家贡献了 的程序员呢?让我们再看看在每个领域方面名列前茅的国家。
▲各领域不同国家的得分情况。中国在数据结构、数学、函数程式语言中拔得头筹不出所料,中国在很多领域的表现都相当 。来自该国的程序员在数据结构,数学和函数式编程领域击败了对手, 。
另一方面,俄罗斯在 的算法领域拔得头筹。在该领域波兰和中国分别排名第二和第三。
那么,如何解释不同国家在不同领域中的表现差异呢?一个可能的解释是俄罗斯的程序员更热衷于参与算法领域的挑战,并从中获得了更多的锻炼机会。而中国程序员更热衷于参与数据结构领域的挑战。
我们还比较了各国程序员,在不同挑战类型中所花费的时间,并将其与参加该项挑战的HackerRank用户的平均数据进行对比。经过这样的分析后,我们发现了在各个领域中,哪些国家的程序员更愿意接受挑战。
▲在同一领域中,最有可能参与和最不可能参与该项竞争的国家。中国程序员较少选择的项目包括Java、SQL、数据库、Ruby正如上表所示,中国程序员在数学领域的参与度远高于该领域的统计平均值。这也许可以帮助解释为什么在该领域中国程序员能够占据榜首。同样,捷克程序员在Shell领域展现出了很高的参与度,而在该领域捷克 。
但除了这两个例子以外,其他国家的数据并没有显示出这样的相关性。一个国家的程序员更愿意参加某项领域的比赛,并不代表他们在该领域的得分排名就能更高。
我们也想知道不同国家是否对编程语言具有特殊偏好。印度程序员是否更钟情于C++?墨西哥人会使用Ruby编程吗?
下图列出了不同国家程序员参与不同编程语言挑战的比例。
▲各国程序员所使用的编程语言情况总的来说,各国程序员对Java挑战的参与度要高于任何其他编程语言挑战(也有少数例外,例如马来西亚和巴基斯坦的程序员更喜欢参与C++挑战,而在台湾,Python挑战 )。斯里兰卡对Java挑战的偏爱度 。而为HackerRank贡献了大量程序员用户的印度位列第八。
巴基斯坦、斯里兰卡和尼日利亚在榜单中垫底,这些国家的程序员可以向瑞士程序员学习他们的坚韧不拔的精神。当一名程序员在HackerRank进行挑战时,如果在挑战开始就放弃,那他/她只能得到零分。而在所有国家中,瑞士程序员的零分比例 ,这也使瑞士程序员成为当之无愧的“全世界最顽强的程序员”。
▲各国程序员参加比赛的放弃率每一天,世界上的程序员都在相互竞争,希望能够成为下一个比尔?盖茨或唐纳德?克努斯。
如果我们现在举办一场编程奥林匹克竞赛,数据显示中国将获得金牌,俄罗斯将带着银牌回家,而波兰将取得铜牌。尽管美国和印度在科技展示推广方面做出的努力值得称赞,但他们连排名的前25位都进不了。
来源:峰瑞资本
赞赏