Language agnostic 为什么编程竞赛选手使用C++;Java呢?

Language agnostic 为什么编程竞赛选手使用C++;Java呢?,language-agnostic,Language Agnostic,在参加完今年的比赛后,我忍不住注意到使用C/C++和Java的[成功]选手数量惊人。比赛期间使用的语言分布情况可见一斑 在用C/C++编程了几年之后,我最近爱上了Python,因为它的可读性/直观性。最近,我学习了OCaml、Scheme等函数式语言,甚至Prolog等逻辑语言。这些语言当然有其优点,在我看来,在某些情况下,它们比C++和java更容易应用。例如,Scheme对call/cc的使用简化了回溯(一种解决多个问题所需的工具),而Prolog的逻辑规范虽然由于其暴力性质而效率低下,但可

在参加完今年的比赛后,我忍不住注意到使用C/C++和Java的[成功]选手数量惊人。比赛期间使用的语言分布情况可见一斑

在用C/C++编程了几年之后,我最近爱上了Python,因为它的可读性/直观性。最近,我学习了OCaml、Scheme等函数式语言,甚至Prolog等逻辑语言。这些语言当然有其优点,在我看来,在某些情况下,它们比C++和java更容易应用。例如,Scheme对call/cc的使用简化了回溯(一种解决多个问题所需的工具),而Prolog的逻辑规范虽然由于其暴力性质而效率低下,但可以极大地简化(甚至自动解决)某些难以绞尽脑汁的问题

很明显,参赛者应该使用最适合挑战的工具。即使x86程序集也是图灵完成的——这也不能证明用它解决问题是正确的。在这种情况下,为什么使用较不常用的语言(如Scheme/Lisp、Prolog,甚至Python)的参赛者比使用C/C++和Java的参赛者的成功率要低得多?用了不同的措辞,为什么成功的参赛者不使用那些虽然可能不太主流的语言,可以说是更好的工作工具吗?


我的问题有几个动机。最重要的是,我想成为一名更好的程序员——无论是在实践方面还是在竞争方面。在介绍了函数式编程和逻辑编程等漂亮的范例之后,看到如此多的人放弃它们,转而使用C/C++和Java,令人沮丧。这甚至让我质疑我对上述范例的钦佩,担心我不能在编程竞赛中成为一名成功的Lisp/Scheme/Prolog程序员。

有趣的问题,可能应该是社区维基

请按国家/地区查看入围者的数量:。注意东欧和俄罗斯的人数。这些地方有非常强大的C++社区,还有java,有很多原因。

看看限定词和期末考试中的数字语言。C++的开始不到一半,在决赛中有75%个。好的程序员都喜欢C++或C++来制作程序员。也许在你掌握C++的时候,其他的事情就变得微不足道了。
不过,您可以自由得出自己的结论。

首先,正如您所指出的,
C++
Java
是主流语言。这自动意味着开始进行编程竞赛的人将首先被介绍给他们——通过学习
Lisp
作为第一语言的方式:)我也定期参加此类竞赛——我使用
C++
进行竞赛,尽管我最喜欢的语言是
Java
。我只是想练习除Java之外的另一种语言,
Java
——而且
C++
的冗长程度稍低,运行速度更快,这对编程竞赛很重要。
现在我要说的是,人们首先成为主流语言的专家。要参加编程比赛,你必须对所使用的语言有相当好的掌握。你没有时间在互联网上搜索愚蠢的东西——比如忘记了一个构造。只是速度是一个重要的因素。要在比赛中使用
Lisp
,您必须喜欢它。我认为外面没有那么多人。如果我错了,请纠正我。老实说,你提到的优点简化了回溯:无论用什么语言,回溯都很容易——声明一个方法,然后为每个可能的结果再次调用它。再简单不过了。到目前为止,我还没有感觉到我正在使用的语言会让我在编程比赛中绊倒。

为什么我们都说英语而不说英语?嗯,事情就是这样发生的。尽管英语不连贯、臃肿,世界语被有意设计成“更好的工具”

因此,一个原因是传统。在大多数学校,编程仍然是用C/C++、Java、Pascal甚至Basic来教授的。参加这些比赛的大多是学生,他们选择他们更熟悉的语言。
此外,您可以注意到,大多数算法书籍都以Pascal或Ada风格的psedudocode为特色,很少使用Lisp。我不知道为什么,也许这也是一个传统。或者也许这对算法来说不太好

另一个原因是速度。虽然谷歌代码堵塞不是问题,但在几乎所有比赛中,2倍的速度差距是“接受”和“时限”判决之间的差异。

换句话说,如果C++中的最优算法比Ruby中的10倍快,这可能意味着C++中的次优算法仍比Ruby中的一个好的算法快。如果可以实现O(n*logn),竞赛作者通常不希望允许O(n^2)提交。

一个重要原因可能是,每个竞赛都不支持python或prolog之类的语言。特别是。和。参赛者自然会选择一种在每次比赛中都可用的语言。另一个原因可能是执行速度。是的,另一个原因是这些是大多数人首先学习的语言。

大型库是Java在ACM ICPC中的卖点。能够意识到您需要一些随机的数据结构或算法,并将其从标准库中取出,这非常方便。

好问题!作为一个涉足编程竞赛的人,我可能有话要说

[让我们把标准免责声明放在一边:竞赛编程与“现实世界中的编程”只是松散地联系在一起,它测试算法和解决问题的技能以及快速无bug工作的能力