Ist die Programmierung in Python schneller als in C, C ++ oder Java? [geschlossen]

27

Unter herrscht die weit verbreitete Überzeugung, dass der umso produktiver ist, je dynamischer die Sprache ist und je weniger man sie tippt. Guido van Rossum schrieb 1998 über die Programmierproduktivität mit Python und die Suche im Internet. Ich sehe immer noch Leute, die genau auf diese Behauptung verweisen:

Syntaktisch sieht Python-Code wie ausführbarer Pseudo-Code aus. Die Programmentwicklung mit Python ist 5-10 mal schneller als mit C / C ++ und 3-5 mal schneller als mit Java. In vielen Fällen kann ein Prototyp einer Anwendung in Python geschrieben werden, ohne dass C / C ++ / Java-Code geschrieben werden muss. Häufig ist der Prototyp ausreichend funktionsfähig und weist eine ausreichende Leistung auf, um als Endprodukt geliefert zu werden. Dies spart erhebliche Entwicklungszeit. In anderen Fällen kann der Prototyp ganz oder teilweise in C ++ oder Java übersetzt werden - Pythons objektorientierte Natur macht die Übersetzung zu einem unkomplizierten Prozess.

Wurde dieses Problem wissenschaftlich richtig bewertet? Wenn nicht für dann vielleicht für Geschwisterskriptsprachen wie , oder ?

Ich suche keine Rationalisierungen, Analogien oder Erklärungen, warum es möglicherweise schwierig sein könnte zu antworten, es sei denn, es ist die Meinung von Forschern oder Experten, die sich die Zeit genommen hat, sich mit dem Thema auseinanderzusetzen.

Ich habe diese Frage anfangs bei Skeptikern gestellt. SE , und jemand schlug vor, ich solle sie auch hier stellen.

Kit Sunde
quelle
25
Nun, da Sie die Anzahl der möglichen Antworten eingeschränkt haben, wage ich nur einen Kommentar, indem ich eine andere Frage stelle, die zuerst beantwortet werden sollte (imho): Gibt es eine zuverlässige und zuverlässige Metrik zur Messung der "Produktivität eines Programmierers"?
Paul Michalik
1
@Paul Michalik - Ich würde annehmen, dass jedes Forschungspapier, das sich mit Produktivität befasste, eine Definition enthalten würde (ansonsten wäre es wirklich schwer zu messen). Wenn also jemand auf Forschung verweist, wäre es hilfreich, wenn er die Definition in die Antwort einbeziehen würde. Es gibt wahrscheinlich (ich vermute mal) mehrere völlig akzeptable Möglichkeiten, um die Produktivität zu messen.
Kit Sunde
1
@Paul Michalik - Sicher, aber wie viele der Aussagen, die Sie in Büchern, Blogs, Vorträgen und Artikeln von Programmierern lesen, werden tatsächlich empirisch getestet? Ich bin sicher, dass es bessere oder schlechtere Möglichkeiten gibt, die Produktivität zu messen. Zum Beispiel. "Kaffeekonsum / Zeit" wäre wahrscheinlich schlechter als die klassischen "Code / Zeit-Linien". Ich würde die Beurteilung spezifischer Produktivitätsansprüche, die wir gesehen haben, zurückhalten und kann die Verdienste auf dieser Grundlage argumentieren. Produktivitätsansprüche sind auch nicht einfach falsch, ich bin sicher, dass "Codezeilen / Zeit" etwas messen , wenn die Leute nicht versuchen, die Metrik zu zerstören.
Kit Sunde
1
Dieser Artikel könnte Sie auch interessieren: citeseerx.ist.psu.edu/viewdoc/…
DistantEcho
1
@ChrisF - Wollen Sie damit sagen, dass diese Frage nicht auf Programmierer zutrifft? Es ist zweifellos zu den Skeptikern, und es schien, auch hier zu passen. Ich hatte den Eindruck , dass Sie nicht , bis ich auf dieser Frage einen aktuellen Kommentar von Robert Cartaino lesen: skeptics.stackexchange.com/q/1963/631 , die im Wesentlichen sagt , dass es vollkommen in Ordnung ist , wenn es von Interesse für beiden Gemeinden ist, und Ich habe es erst getan, nachdem ich von einem anderen Benutzer dazu aufgefordert wurde. In Anbetracht der Tatsache, dass die Frage positiv bewertet wird, scheint sie auch für diese Community von Interesse zu sein.
Kit Sunde

Antworten:

17

Ousterhouts Artikel 1 über Skriptsprachen besagt, dass der Programmierer umso produktiver ist, je höher die Programmierebene ist. Wenn wir das annehmen, wie Boehm 2 sagt , ist die Anzahl der Zeilen, die ein Programmierer in einer bestimmten Zeit schreiben kann, konstant und unabhängig von der Sprache oder ihrem Typ (niedrige Ebene, Systemprogrammierung, Skripterstellung), kann man die Behauptung leicht glauben. Das resultierende Verhältnis der Anweisungen pro Quellcodezeile kann bei Skriptsprachen eine Größenordnung (oder mehrere) besser sein als bei Systemprogrammiersprachen.

Da Skriptsprachen für häufig auszuführende Aufgaben (z. B. Datenstrukturen, Manipulation von Zeichenfolgen) in hohem Maße auf vorgefertigte Dienstprogramme angewiesen sind, besteht ihre Hauptverwendung darin, die Produktivität zu steigern und gleichzeitig die Geschwindigkeit zu verringern, indem eine leicht zu erlernende und für die Pflege von Programmen effiziente Syntax bereitgestellt wird mit. Man greift nicht auf eine Skriptsprache zurück, wenn höchste Ausführungsgeschwindigkeit benötigt wird.

[1]: JK Ousterhout, Skript: Höhere Programmierstufe für das 21. Jahrhundert , Computer (IEEE), 1998
[2]: B. Boehm, Wirtschaftsingenieurwesen für Software , Prentice Hall, 1981

Jawa
quelle
9
Dies ist zwar eine gute Antwort, aber vergessen Sie nicht, dass moderne Nicht-Skriptsprachen in der Regel auch mit vorgefertigten Dienstprogrammen gefüllt sind, die die Entwicklung beschleunigen. C # fällt mir ein. Jeder, der Python fühlt, verfügt über mehr vordefinierte Dienstprogramme als C #. Er kennt Python einfach besser als C #. In der Realität haben beide eine große und vergleichbare Auswahl an "eingebauten" Dienstprogrammen.
Roman Starkov
@romkyns, für jedes nicht triviale Projekt müssen Sie viel Code schreiben. Selbst wenn Sie viele Legosteine ​​haben, kommen die Bionicles nicht auf magische Weise zusammen.
2
@Thor, aber es hilft wirklich eher, diese Legosteine ​​im Voraus zu haben, anstatt zuerst eine Ölbohrmaschine, eine Kunststofffabrik und einen Legoblock-Extruder bauen zu müssen.
Roman
2
Sowohl C ++ als auch Java haben generische Container, und C ++ 11 hat eine so umfassende Standardbibliothek für Sortieralgorithmen und Iteratoren usw. Ich bin nicht davon überzeugt, dass jemand, der Python programmiert, einen wesentlichen Vorteil haben würde. Außerdem verbringe ich einen Großteil meiner Programmierzeit damit, herauszufinden, was ich tun muss, und nicht zu tippen. Ich denke also, nur die Anzahl der Zeilen zu zählen, die es braucht, um etwas zu tun, ist kein klarer Indikator dafür, wie schnell ein Programmierer in dieser Sprache wäre.
Sam Redway
7

Wenn Sie die Produktivität als "Zeit zum Schreiben eines bestimmten einfachen Programms" messen , hängt dies viel mehr von der Erfahrung des Programmierers und seinem schnellen Verstand ab als von der Sprache, die Sie wirklich als Programmierer bewerten, und nicht von der Sprache.

Ich glaube, dass zeitgesteuerte Codewettbewerbe darauf hindeuten, dass die Sprache für diese Art von Aufgaben nicht wirklich wichtig ist. Es gibt keine Sprache, die solche Herausforderungen leichter meistert als andere (zumindest nicht, wenn Sie die relative Beliebtheit von Sprachen berücksichtigen).

Wenn Sie die Leistung als "die Effektivität des besten Programms" messen, das in einer bestimmten Sprache geschrieben ist, dann ist es noch weniger sprachabhängig. Sehen Sie sich zum Beispiel die Ergebnisse des Galcon AI-Wettbewerbs an . Der Gewinner steht in Lisp. Der nächste Lisp-Eintrag belegt jedoch Platz 280. Was sagt uns das über die Eignung der Sprache, eine großartige KI effizient zu schreiben? Meiner Meinung nach nichts. Es sagt uns nur, dass "bocsimacko" die effektivsten Algorithmen entwickelt und implementiert hat. Für die Aufzeichnung war die Zeit kein wichtiger Faktor in diesem Wettbewerb - die Leute hatten mehr als zwei Monate Zeit, um ihren Code zu entwickeln.

Wenn Sie die Leistung als "langfristige Kosten für die Aufrechterhaltung eines Projekts" messen, dann sind Sie meiner Meinung nach auf etwas fixiert. Vor allem, wenn Sie nur die besten Leute für den Job einstellen und die Kosten in Mannstunden und nicht in Dollar angeben. Ich bin der festen Überzeugung, welche Sprachen hierfür am besten geeignet sind, habe jedoch keine konkreten Hinweise, mit denen ich Sie verknüpfen könnte. Vielleicht hat jemand anderes Links für diese Art von Aufführung.

Roman Starkov
quelle
7
"Sie bewerten wirklich den Programmierer, nicht die Sprache" - Nicht, wenn dies tatsächlich wissenschaftlich erfolgt. Nehmen Sie 100 Programmierer. Wählen Sie ein allgemeines Projekt aus, z. B. "Kalender-App mit diesen speziellen Anforderungen schreiben". Die Anforderungen sind an automatisierte Komponententests gebunden. 50 Programmierer schreiben die App in C ++, 50 in Python, die nach dem Zufallsprinzip ausgewählt werden, damit die Qualitätsentwickler gleichmäßig verteilt werden. Das Ergebnis wäre eine Punktzahl, die die durchschnittliche Zeit bis zum Abschluss mit der Anzahl der bestandenen Komponententests kombiniert. Vergleichen Sie den Durchschnitt der Python-Ergebnisse mit dem Durchschnitt des C ++ - Ergebnisses und ... SCIENCE!
Morgan Herlocker
2
@Prof Vielleicht, wenn Sie von jedem tausend bekommen ... aber dennoch, wie kontrollieren Sie die Tatsache, dass nur Leute mit einer bestimmten Denkweise und einem bestimmten Niveau an Fähigkeiten C ++ kennen werden?
Roman Starkov
Sie könnten Ihre Stichprobe nur von Leuten ziehen lassen, die einen Eignungstest in C ++ und Python bestehen können. Viele meiner alten Professoren machten sehr ähnliche Studien. Sie nehmen auch einige Annahmen an, die andere hier besprochen haben: programmers.stackexchange.com/q/73715/3792
Morgan Herlocker
6

http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf ist eine der wenigen Studien, bei denen meines Wissens ein direkter Vergleich der Produktivität in verschiedenen Sprachen durchgeführt wurde. Es ist alt, aber lesenswert, wenn Sie das Thema interessant finden. Der Vergleich weist eine Reihe schwerwiegender Mängel auf, zu denen der Artikel sehr ehrlich ist.

Das Gesamtergebnis ist, dass Sprachen auf niedriger Ebene (z. B. C, C ++) länger zum Schreiben benötigen, viel weniger Speicher benötigen und viel schneller ausgeführt werden können. Aber mit sehr hoher Variabilität. Hochwertige Skriptsprachen benötigen in der Regel die Hälfte der Zeit für das Schreiben und weisen eine geringere Variabilität im Ansatz auf. In einem anfangs überraschenden Ausmaß gibt es eine offensichtliche Möglichkeit, etwas in einer Skriptsprache zu tun.

Beachten Sie, dass alle Leistungszahlen für Java mit einem großen Körnchen Salz aufgenommen werden sollten - das Papier wurde in den 90er Jahren hergestellt, bevor die Leute viel Erfahrung mit Java hatten und bevor die JVM gut optimiert wurde. Beide Faktoren sollten sich erheblich auswirken.

btilly
quelle
1

Allgemein ausgedrückt ist das Schreiben eines Programms in Python normalerweise schneller als das Schreiben desselben Programms in C, C ++, Java.

Es wird wahrscheinlich auch langsamer laufen.

Es gibt natürlich bestimmte Anwendungen, für die andere Sprachen möglicherweise schneller sind, da bestimmte Aufgaben "nativer" unterstützt werden.

Obwohl mir keine Studien bekannt sind, die diese Steigerung der Geschwindigkeit / Produktivität bestätigen (wie ein Kommentator erwähnte, kann es schwierig sein, dies genau zu messen), wurde die Ausdruckskraft der Sprache direkt untersucht.

Ich denke, dass eine Korrelation zwischen Sprachausdruck und Programmiergeschwindigkeit einen gewissen Wert hat. Stellen Sie sich einfach ein einfaches Iterationsmuster vor und sehen Sie, wie ein Pythonic for-Loop- oder Listenverständnis prägnanter sein kann. Es kann nicht nur sofort schneller getippt werden, sondern es beseitigt auch die Bedenken hinsichtlich einzelner Fehler, unzulässiger Indizes und anderer Probleme, die den Kodierungsprozess erheblich verlangsamen können.

Dies zeigt eine Tabelle und eine Schätzung der Expressivitätsverhältnisse von Sprachen. Während es mit einem Körnchen Salz eingenommen werden sollte, sind die darin erwähnten Fußnoten sehr lohnenswert.

http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness

jon_darkstar
quelle
-5

Als ich das letzte Mal (zugegebenermaßen vor einiger Zeit) Java verwendet habe, brauchte ich einen Bildschirm voller Code, um eine Datei zu öffnen und in diese zu schreiben. Vergleichen Sie das mit ein paar Zeilen in Python oder Perl, und Sie können erraten, welche schneller ist.

Natürlich haben alle Sprachen ihre eigenen Stärken und Schwächen, aber für die meisten Aufgaben ist Python schneller zu schreiben.

wobbily_col
quelle
6
„Es hat einen Bildschirm voller Code zu öffnen und Schreiben in eine Datei“: Setzen Sie diese in eine Utility - Klasse mit zwei Methoden write()und read()und in dem Rest Ihres Java - Projekt Dateizugriff wird wie in Python als prägnant sein. Ich denke, Ihr Beispiel ist ein bisschen zu eingeschränkt, um Python und Java zu vergleichen (obwohl ich der Meinung bin, dass Java tendenziell ausführlicher ist).
Giorgio
Sicher, aber Python, Perl und höhere Sprachen haben im Allgemeinen im Voraus darüber nachgedacht, und daher müssen Sie die Dienstprogrammklassen nicht schreiben (oder nicht so viele von ihnen). Die Verwendung einer Utility-Klasse nimmt immer noch Zeit in Anspruch und ist ein Prinzip von wiederverwendbarem Code, der abhängig von der tatsächlichen Ausführung sowohl für Java als auch für Python gilt.
wobbily_col
Dies setzt voraus, dass Java 50 - 60 Codezeilen benötigt, um eine Datei zu öffnen und zu schreiben. Das ist einfach nicht richtig.
22.