Unter Programmierern herrscht die weit verbreitete Überzeugung, dass der Programmierer 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 Python, dann vielleicht für Geschwisterskriptsprachen wie Ruby , Perl oder PHP ?
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.
quelle
Antworten:
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
quelle
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.
quelle
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.
quelle
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
quelle
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.
quelle
write()
undread()
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).