Warum verwenden Teilnehmer an Programmierwettbewerben C ++ und Java? [geschlossen]

93

Nachdem ich an dem diesjährigen Google Code Jam- Wettbewerb teilgenommen und ihm gefolgt war, bemerkte ich die unglaubliche Anzahl [erfolgreicher] Teilnehmer, die C / C ++ und Java verwendeten. Die Verteilung der während des Wettbewerbs verwendeten Sprachen ist hier zu sehen .

Nachdem ich einige Jahre in C / C ++ programmiert hatte, habe ich mich kürzlich in Python verliebt, weil es lesbar und unkompliziert ist. In jüngerer Zeit habe ich funktionale Sprachen wie OCaml, Scheme und sogar Logiksprachen wie Prolog gelernt. Diese Sprachen haben sicherlich ihre Vorzüge und können meiner Meinung nach in bestimmten Situationen einfacher angewendet werden als C ++ und Java. Beispielsweise vereinfacht die Verwendung von call / cc durch Scheme das Backtracking (ein Tool, das zur Beantwortung mehrerer Probleme erforderlich ist), und die Logikspezifikation von Prolog kann, obwohl sie aufgrund ihrer Brute-Force-Natur ineffizient ist, bestimmte Probleme, die schwer zu lösen sind, drastisch vereinfachen (und sogar automatisch lösen) das Gehirn umhüllen.

Es ist klar, dass ein Wettbewerbsteilnehmer die Werkzeuge verwenden sollte, die für die Herausforderung am besten geeignet sind. Sogar die x86-Assembly ist vollständig - das rechtfertigt nicht die Lösung von Problemen damit. Warum sind in diesem Fall die Teilnehmer, die weniger gebräuchliche Sprachen wie Scheme / Lisp, Prolog und sogar Python verwenden, signifikant weniger erfolgreich als Teilnehmer, die C / C ++ und Java verwenden? Anders ausgedrückt, warum verwenden erfolgreiche Teilnehmer keine Sprachen, die zwar weniger Mainstream sind, aber wohl bessere Werkzeuge für den Job sind?

Für meine Frage gibt es mehrere Gründe. Vor allem möchte ich ein besserer Programmierer werden - sowohl im praktischen als auch im Wettbewerbsbereich. Nach der Einführung in so schöne Paradigmen wie funktionale und logische Programmierung ist es entmutigend zu sehen, dass so viele Leute sie zugunsten von C / C ++ und Java verwerfen. Ich stelle sogar meine Bewunderung für diese Paradigmen in Frage und mache mir Sorgen, dass ich als Lisp / Scheme / Prolog-Programmierer in einem Programmierwettbewerb nicht erfolgreich sein kann.

advait
quelle
11
Ich denke, die Ausführungsgeschwindigkeit könnte ein Faktor sein.
Zaki
Interessante Frage; Es wäre schön, Antworten von Teilnehmern zu erhalten, die an Code Jam oder anderen Wettbewerben (ACM usw.) teilnehmen. Laufzeitlimits können sich jedoch gegen interpretierte Sprachen
richten
11
Dynamische Sprachen haben ein großes Leistungsproblem: siehe Benchmark
NullUserException
Für Topcoder ist dies nur deshalb so, weil sie eine Regel haben, die die Verwendung von etwas anderem als den Python-Standardbibliotheken verbietet, was alles andere als triviale Aufgaben unmöglich macht. Auf der Suche nach Asteroiden in Weltraumbildern? Schade, Sie können nicht einmal NumPy verwenden.
Endolith

Antworten:

68

Gute Frage! Als jemand, der sich selbst ein bisschen mit Programmierwettbewerben beschäftigt hat, kann ich etwas zu sagen haben.

[Lassen Sie uns den Standard-Haftungsausschluss aus dem Weg räumen: Die Programmierung von Wettbewerben hängt nur lose mit der "Programmierung in der realen Welt" zusammen und testet dabei algorithmische Fähigkeiten und Fähigkeiten zur Problemlösung sowie die Fähigkeit, schnell fehlerfreien Arbeitscode zu entwickeln Zeitdruck, es korreliert nicht unbedingt mit der Fähigkeit, große Softwareprojekte zu erstellen, wartbaren Code zu schreiben usw. (abgesehen von der Tatsache, dass gut strukturierte Programme einfacher zu debuggen sind).]

Nun zu einigen Antworten:

  • C ++ / Java sind auch in der realen Welt häufiger als andere Sprachen, sodass Sie überall einen höheren Anteil erwarten würden. (Aber es ist noch höher in der Wettbewerbspopulation.)

  • Viele dieser Teilnehmer sind Studenten oder haben als Studenten an Wettbewerben teilgenommen, und C ++ / Java sind häufigere "Muttersprachen", die Studenten lernen. (Studenten beginnen heutzutage vielleicht mit Scheme, Haskell, Python usw., aber Highschooler (oft Autodidakten) seltener.) Tatsächlich verwenden viele osteuropäische Teilnehmer immer noch Pascal und sind damit erstaunlicher als der Rest von uns wird jemals mit irgendeiner Sprache sein.

  • Bei Wettbewerben auf Schul- und Hochschulebene werden diese Sprachen normalerweise verwendet. Die Internationale Olympiade der Informatik (IOI) erlaubt nur C, C ++ und Pascal (oder vielleicht erlaubt sie jetzt Java; ich habe nicht Schritt gehalten), und der ACM Intercollegiate Programming Contest (ACM ICPC) erlaubt nur C, C ++ und Java. TopCoder erlaubt C ++, Java, C # und VB (wirklich: p); und vor kurzem Python. Man könnte also sagen, dass das "Contest-Ökosystem" mehr C ++ / Java-Programmierer enthält. Google Code Jam und IPSC gehören zu den wenigen Wettbewerben, bei denen Code in jeder Sprache zulässig ist.

  • Nun stellt sich die Frage, warum die Teilnehmer in GCJ, wo sie eine Sprache frei wählen können, nicht Python oder Scheme wählen würden. Der wichtigste Faktor ist, dass diese Sprachen langsam sind . Sicher, für die meisten realen Programme sind sie leicht schnell genug, aber für die engen Schleifen, die häufig dazu führen, dass ein Programm für alle Testfälle unter der Grenze von n Sekunden ausgeführt wird, sind diese Sprachen für keine der beiden Sprachen geeignet die algorithmisch komplizierteren Probleme. (Ein Problem, das entwickelt wurde, um O (n log n) -Lösungen zu akzeptieren, aber nicht Θ (n 2 ) -Lösungen für C / C ++, schließt häufig sogar optimale O (n log n) -Lösungen in langsameren Sprachen aus. Sogar Java hatte früher ein Handicap USACO; Ich bin mir nicht sicher, ob dies immer noch der Fall ist.)

  • Ein weiterer Faktor sind die Bibliotheken: C ++ und Java haben bessere Bibliotheken für häufig nützliche Algorithmen und Datenstrukturen (z. B. rot-schwarze Bäume, C ++ 's next_permutation), während Pythons Bibliotheken (gut genug für die reale Welt) hier weniger nützlich sind und Prolog und Scheme ... Ich weiß nichts über ihre Bibliotheken. Dies ist ein relativ kleiner Faktor, da diese Programmierer bei Bedarf ihren eigenen Code schreiben können. :-)

  • Allzweck-Mehrparadigmensprachen sind nützlicher, um Dinge innerhalb der Zeitbeschränkungen des Wettbewerbs zu erledigen, als Sprachen, die Ihnen eine Philosophie oder eine Art und Weise aufzwingen, Dinge zu tun. Deshalb bleibt Prolog zum Beispiel immer unbeliebt. (Allgemeine Philosophie: Einige Sprachen "aktivieren" Sprachen, mit denen Sie alles tun können, einschließlich sich selbst in den Fuß zu schießen, andere "lenken", die Sie dazu zwingen, die Dinge richtig zu machen.) Aus diesem Grund ist C ++ dreimal so beliebt wie Java bei den allgemeinen Wettbewerbsteilnehmern und viel beliebter bei den Top-Teilnehmern. Da Code von niemand anderem gelesen werden muss, ist es in Ordnung und sogar nützlich, Schleifenmakros wie zu habenFOR(i,n)(weniger Code zum Eingeben und vor allem weniger Wahrscheinlichkeit, in Eile einen Fehler zu machen). Nichts gegen Java, es gibt einige Top-Programmierer, die auch Java verwenden. :-)

  • Obwohl viele dieser Top-Programmierer C ++ / Java / Pascal als "Muttersprache" haben, sind sie aufgrund ihrer Sprache nicht gut , sodass Sie darüber nicht verzweifeln müssen. Viele dieser Programmierer haben Wettbewerbe wie den ICFP-Wettbewerb gewonnen, obwohl sie absichtlich verrückte Sprachen wie Shell-Skripte, m4 (in Autoconf verwendet) und Assembly (das Team mit dem Namen "Ohne ASM kann man nicht buchstabieren") verwenden.

ShreevatsaR
quelle
2
Genau; Wie gesagt, die Existenz von Bibliotheken ist ein relativ kleines Problem. Ich kann es entfernen, wenn Sie denken, ich habe es überbewertet.
ShreevatsaR
2
Das bisschen über Java im vorletzten Punkt ist nicht ganz richtig. Viele der Top-Kandidaten von GCJ verwenden Java.
NullUserException
1
[Der andere Teilnehmer am Finale ("linguo") verwendete Python und hat während des Wettbewerbs Sprachen wie LOLCODE, Piet, FALSE, Whitespace und FRACTRAN verwendet!]
ShreevatsaR
4
Ich möchte dem Teil über Geschwindigkeit nur ein wenig hinzufügen. Die "Geschwindigkeit" in Wettbewerben wie dem GCJ ist die Laufzeitkomplexität des Codes (dh Big-O). Im GCJ wird normalerweise der richtige Algorithmus auch in einer langsamen Sprache akzeptiert (daher gibt es viele akzeptierte Python-Einreichungen), während ein langsamer Algorithmus selbst in asm ewig dauert. Es gibt Ausnahmen, aber im Allgemeinen sind Sie auch mit einer langsameren Sprache sicher, wenn Sie den richtigen Algorithmus / die richtige Technik verwenden.
MAK
1
@EvgeniSergeev Was Sie sagen, gilt für die meisten Programmierwettbewerbe wie IOI / TopCoder, aber speziell in GCJ beträgt das Zeitlimit für die große Eingabe normalerweise 8 Minuten, und die Probleme sind normalerweise so konzipiert, dass auch Python-Lösungen bestehen können. Noch vor 10 Jahren lautete die Faustregel ~ 10 ^ 9 "einfache" Operationen pro Sekunde. Um also beispielsweise O (n ^ 2) von Ω (n ^ 3) zu unterscheiden, benötigen wir nur n ^ 2 <10 ^ 9 * 60 * 8 <n ^ 3 oder ungefähr 8000 <n <692000. Sie können n = 20000 nehmen, und n ^ 2 algo dauert selbst in einer 400x langsameren Sprache (10 ^ 9/400 pro s) nur 160 Sekunden, während gerade schnelles n ^ 3 dauert 8000 Sekunden.
ShreevatsaR
14

Ich mochte Jerry Coffins Idee, Teilnehmer des Google AI-Wettbewerbs zu zeichnen, also nahm ich alle Ergebnisse und zeichnete sie (berechneter Mittelwert, Standardabweichung und grafische Darstellung der Normalverteilungskurven in Excel).

Mit Lua und JS bekam das:

Ohne (es gab nur wenige Teilnehmer, daher sind die Ergebnisse möglicherweise verzerrt):

Es sieht so aus, als ob Java-Teilnehmer deutlich schlechter abschnitten als die anderen, während Go, Common Lisp und C am besseren Ende sind.

Tatiana Racheva
quelle
Die Frage bezieht sich jedoch auf den Google Code Jam und nicht auf den Google AI-Wettbewerb (Ihre Antwort ist der erste Ort, an dem ich davon höre). Daher ist es möglicherweise relevanter, diese Grafiken für Google Code Jam zu zeichnen. Tatsächlich erwähnt die Frage solche Statistiken bereits (2010) ; siehe auch 2011 , 2012 , 2013 und 2014 (derzeit in Bearbeitung) .
ShreevatsaR
12

Warum sprechen wir alle Englisch und nicht Esperanto ? Nun, es ist einfach so passiert. Obwohl Englisch inkonsistent und aufgebläht ist und Esperanto absichtlich als "besseres Werkzeug" konzipiert wurde.

Ein Grund ist also eine Tradition. In den meisten Schulen wird Programmieren immer noch in C / C ++, Java, Pascal oder sogar Basic unterrichtet. Und nehmen Sie an diesen Wettbewerben teil, hauptsächlich Studenten, die eine Sprache wählen, die sie besser kennen.
Sie können auch feststellen, dass die meisten algorithmischen Bücher Psedudocode im Stil von Pascal oder Ada enthalten und sehr, sehr selten - Lisp. Ich weiß nicht warum, vielleicht auch eine Tradition. Oder vielleicht ist es einfach nicht so gut für die Algorithmen.

Ein weiterer Grund wäre die Geschwindigkeit. Obwohl es für Google Code Jam kein Problem ist, ist in fast allen Wettbewerben eine doppelte Geschwindigkeitslücke ein Unterschied zwischen den Urteilen "Akzeptiert" und "Zeitlimit".
Mit anderen Worten, wenn der optimale Algorithmus in C ++ zehnmal schneller als in Ruby ausgeführt wird, kann dies bedeuten, dass der suboptimale Algorithmus in C ++ immer noch schneller ist als ein guter in Ruby. Und Wettbewerbsautoren möchten normalerweise keine O (n ^ 2) -Einreichungen zulassen, wenn O (n * logn) erreicht werden kann.

Nikita Rybak
quelle
7
Nur ein Kommentar zu Ihrer Analogie: Esperanto scheitert kläglich an seinen Zielen. Seine Klänge entsprechen ziemlich genau denen des polnischen Dialekts von Zamenhof, und seine Grammatik ist unnatürlich und kompliziert. Es ist in keiner Weise eine gute universelle Sprache; Klingonisch wirkt in vielerlei Hinsicht besser wie eine natürliche menschliche Sprache. Man könnte wohl argumentieren, dass es Ähnlichkeiten mit C ++ und Java gibt, aber das wäre unfair :) (Siehe auch xibalba.demon.co.uk/jbr/ranto .)
Antal Spector-Zabusky
1
@Antal Nun, Analogie mag fehlerhaft sein, aber Sie verstehen meinen Standpunkt. Zwischen dir und mir spreche ich auch kein Esperanto :)
Nikita Rybak
(natürliche) Sprache ist ein Abzeichen der Stammeszugehörigkeit , und Programmiersprachen werden von vielen der gleichen Belastungen beeinflusst
Trapez
12

Zunächst würde ich Ihre Prämisse in Frage stellen [Bearbeiten: oder was ich als Prämisse betrachte - dass Kandidaten, die C ++ und Java verwenden, ungefähr gleich gut abschneiden]. Im Folgenden finden Sie beispielsweise die Sprachen, die für die Einträge verwendet wurden, die an den ersten 100 Stellen und an den letzten 100 Stellen des letzten KI-Wettbewerbs von Google eingegangen sind:

Alt-Text

Teilnehmer, die C ++ und Java verwendeten, schienen bei diesem Wettbewerb nicht annähernd gleich erfolgreich zu sein. Kandidaten, die Python verwendeten, schienen ebenfalls nicht besonders gut abzuschneiden, obwohl es erheblich weniger von ihnen gab, was jede Schlussfolgerung in dieser Hinsicht schwächte.

Zweitens ist ein großer Teil der Erklärung (wie andere betont haben) zweifellos nur die Anzahl der Personen, die mit jeder Sprache vertraut sind. Es gibt wahrscheinlich mehr Leute, die gerade einen Kurs in Java belegen, als die Gesamtzahl der Leute, die jemals Lisp, Scheme oder Prolog geschrieben haben.

Edit: Ich denke, eine dritte Möglichkeit ist einfach Vielseitigkeit. Um ein extremes Beispiel zu nennen: Prolog ist für einige Probleme sehr gut geeignet, für viele andere jedoch ebenso schlecht . Nur wenige Menschen können (oder zumindest) mehr als eine oder zwei Sprachen gut genug lernen, um sie in einem Wettbewerb zu verwenden. Daher wählen die meisten Menschen, die sich für solche Dinge interessieren, wahrscheinlich Sprachen, die für fast alles einigermaßen gut funktionieren, anstatt Versuch, für jedes Problem, das ausgewählt werden könnte, eine spezielle Sprache zu lernen.

Jerry Sarg
quelle
1
Nun, es scheint, dass die meisten Top-Teilnehmer C ++ / C # und weniger Python / Haskell / Lisp / Scheme / Ruby / Prolog verwendeten, was die Prämisse der Frage stärkt, nicht wahr? Die Frage war nicht, C ++ und Java untereinander zu vergleichen (obwohl dies interessant ist, danke), sondern so etwas wie: "Warum sind" nette "Sprachen an der Spitze weniger erfolgreich? Warum wählen die guten Kandidaten (die vermutlich viele Sprachen beherrschen) nicht eine davon aus? “ Aber ich stimme zu, dass Vertrautheit einer der Hauptgründe ist.
ShreevatsaR
Mein Eindruck (vielleicht falsch) war, dass die Frage annahm, dass Teilnehmer, die C ++ und Java verwenden, ungefähr gleich erfolgreich waren. Das mag in einigen Wettbewerben zutreffen, schien aber in diesem sicherlich nicht zu sein. Obwohl es sicherlich wahr ist, dass es weniger von ihnen gab, schienen Teilnehmer, die Go, Haskell, Lua und CL verwendeten, erfolgreicher zu sein als diejenigen, die Java verwendeten (obwohl C ++ in Bezug auf die Erfolgsrate zugegebenermaßen zumindest in dominierte dieser besondere Fall).
Jerry Coffin
5
Verzeihung, aber dies sollte eigentlich eher ein Balkendiagramm als ein Liniendiagramm sein ...
Tzaman
Oh mein. Ich habe seit einer Stunde Mühe, ein Diagramm zu erstellen, das Sinn macht, und ich mache keine Fortschritte. Excel- und Google-Tabellen machen mich dumm.
Tatiana Racheva
Kann Lisp technisch nicht als C / C ++ - Makro-Präprozessor verwendet werden ...? Sie könnten es so aussehen lassen, als hätten Sie ein C ++ - Programm eingereicht, aber tatsächlich haben Sie in Lisp codiert!
aoeu256
12

In fast allen Google Code Jam-Runden codieren mehr der leistungsstärkeren Teilnehmer in C ++.

Unten finden Sie die Sprachstatistiken aus Google Code Jam 2012, Runde 1A, 1B und 1C (von oben nach unten aufgeführt). Die Anzahl der Teilnehmer in jeder Runde beträgt 3.686, 3.281 bzw. 3.189.

Sprachstatistiken von Google Code Jam 2012, Runde 1A Sprachstatistiken von Google Code Jam 2012, Runde 1B Sprachstatistiken von Google Code Jam 2012, Runde 1C

Rose Perrone
quelle
8

lustige Frage, sollte wahrscheinlich Community-Wiki sein.

Sehen Sie sich die Anzahl der Finalisten nach Ländern an: http://www.go-hero.net/jam/10/regions . Beachten Sie die Anzahl der Menschen aus Osteuropa und Russland. Diese Orte haben aus mehreren Gründen sehr starke C ++ - Communities sowie Java.

Schauen Sie sich die Zahlensprachen in den Qualifikationsspielen an: http://www.go-hero.net/jam/10/languages/0 und das Finale: http://www.go-hero.net/jam/10/languages/6 . C ++ startet weniger als die Hälfte und hat 75 Prozent im Finale. Entweder bevorzugen gute Programmierer C ++ oder C ++ macht die Programmierer. Wahrscheinlich werden andere Dinge trivial, wenn Sie C ++ beherrschen.

Es steht Ihnen jedoch frei, Ihre eigenen Schlussfolgerungen zu ziehen.

Anycorn
quelle
5

Zunächst einmal, wie Sie gezeigt haben C++und JavaMainstream-Sprachen sind. Dies bedeutet automatisch, dass Leute, die mit Programmierwettbewerben beginnen, zuerst mit ihnen bekannt gemacht werden - übrigens, wer Lispals Muttersprache lernt :) Ich nehme auch regelmäßig an solchen Wettbewerben teil - ich nehme C++an Wettkämpfen teil, obwohl meine Lieblingssprache ist Java. Ich möchte nur eine andere Sprache üben als Java- auchC++ist etwas weniger ausführlich und läuft schneller, was für Programmierwettbewerbe wichtig ist. Nun zu meinem Punkt - Menschen werden zuerst Experten für Mainstream-Sprachen. Um an Programmierwettbewerben teilnehmen zu können, müssen Sie die von Ihnen verwendete Sprache gut verstehen. Sie haben keine Zeit, im Internet nach dummen Dingen zu suchen - wie ein Konstrukt vergessen zu haben. Es ist nur so, dass Geschwindigkeit dort ein wichtiger Faktor ist. BenutzenLispIn einem Wettbewerb müssen Sie es mögen. Ich glaube nicht, dass es so viele Leute gibt. Korrigieren Sie mich, wenn ich falsch liege. Und ehrlich gesagt vereinfachen die von Ihnen erwähnten Profis das Backtracking: In welcher Sprache auch immer das Backtracking einfach ist - deklarieren Sie eine Methode und rufen Sie sie für jedes mögliche Ergebnis erneut auf. Einfacher geht es nicht. Ich habe bis jetzt nicht das Gefühl gehabt, dass die Sprache, die ich benutze, versucht, meine Füße für Programmierwettbewerbe zu stolpern.

Petar Minchev
quelle
Der Plural der Anekdote sind vielleicht keine Daten, aber ich habe Scheme als meine erste Sprache gelernt und mein CS-Einführungskurs war in Haskell. Ich stimme jedoch zu, dass dies ungewöhnlich zu sein scheint: C / C ++ / Java / Python scheinen die beliebtesten zu sein.
Wang
Guter Punkt; Ich denke, das bringt die Sache auf den Punkt. Für Programmierer, die genug Übung darin haben, die Dinge zu tun, die häufig auftauchen, gibt es in anderen Sprachen wirklich keinen großen Vorteil. (Und Funktionen wie beispielsweise Perls Textverarbeitungsfähigkeit sind bei diesen Wettbewerben selten von Nutzen.)
ShreevatsaR
3

OMG ... Die Leute gehen alle die Statistiken und Zahlen durch !!

Vergessen wir nicht die Grundlagen. Dies sind die einzigen zwei Sprachen (meistens), die Menschen in Colleges / Schulen beigebracht werden ...!

Das könnte den schweren Ansturm beantworten!

Arpit
quelle
3

Ein wichtiger Grund könnte sein, dass nicht alle Wettbewerbe Sprachen wie Python oder Prolog unterstützen. Insbesondere ACM ICPC World Finals unterstützen C / C ++ und Java . Und TopCoder unterstützt auch nur C ++, Java, C #, VB und jetzt Python . Für die Teilnehmer ist es selbstverständlich, dass sie eine Sprache auswählen, die in jedem Wettbewerb verfügbar ist. Ein weiterer Grund könnte die Ausführungsgeschwindigkeit sein. Und ja, ein weiterer Grund ist, dass dies die Sprachen sind, die die meisten Menschen zuerst lernen.

taskinoor
quelle
2

Große Bibliotheken waren ein Verkaufsargument für Java in ACM ICPC. Es ist praktisch zu erkennen, dass Sie eine zufällige Datenstruktur oder einen zufälligen Algorithmus wünschen, und diese einfach aus den Standardbibliotheken zu ziehen.

Wang
quelle
2

Denken Sie daran, dass C ++ nicht nur die Mehrheit unter allen Teilnehmern ist, sondern dass sich der Prozentsatz im Verlauf der Runden immer weiter verbessert.

Ich würde sagen, es ist wahr, dass die meisten Teilnehmer Studenten sind (da es sich jedoch um ein offenes Turnier mit Chancen auf ein Vorstellungsgespräch bei Google handelt, müssen Sie berücksichtigen, dass viele Teilnehmer einen Abschluss haben). Aber die letzten Runden sind nur für Leute mit viel Erfahrung. Sie sind nicht nur Studenten, die gerade gelernt haben, in C ++ / Java zu programmieren.

Natürlich funktioniert das Studentenargument auch gegen Sprachen wie LISP und OcaML oder ProLog. Das sind Sprachen, die in KI-Bereichen häufig verwendet werden, aber in der Mainstream-Welt lernen und verwenden Studenten sie am wahrscheinlichsten.

Andere große Wettbewerbe als Google unterstützen nur wenige Sprachen, aber das würde immer noch nicht erklären, warum Pascal oder .net nicht in der Nähe des Java-Niveaus sind (da sie bei den großen Wettbewerbsereignissen tendenziell gleichermaßen unterstützt werden).

Viele der besten Programmierer dieser Wettbewerbe sprechen viele Sprachen. Aber sie bevorzugen es immer noch, C ++ während der Runden zu verwenden, es muss aus einem größeren Grund sein als "gelerntes C ++" zuerst.

Ich würde gegen die Behauptung argumentieren, dass andere Sprachen als C ++ oder Java bessere Werkzeuge für den Job sind. Wenn direkte Daten besagen, dass die Finalisten eher C ++ und Java verwenden, ist dies ein direkter Widerspruch zu dieser Behauptung.

Die Wettbewerbsdaten von Google AI widersprechen eigentlich keiner Prämisse bezüglich des Code-Staus. Es zeigt tatsächlich, dass Top-Programmierer Sprachen wie Common Lisp verwenden können, wenn es wirklich das bessere Werkzeug für den Job ist. Wenn wir diese Daten verwenden möchten, um anzunehmen, dass CLISP ein großartiges Werkzeug für KI-Wettbewerbe ist, sollten wir auch annehmen, dass C ++ ein großartiges Werkzeug für Algorithmus-Wettbewerbe wie GCJ ist.

UltraAwesomeAnonymousSpy
quelle