Gibt es Studien zur Wirksamkeit von statisch oder dynamisch typisierten Sprachen?
Speziell:
- Messungen der Programmiererproduktivität
- Fehlerrate
Berücksichtigt auch die Auswirkungen der Verwendung von Unit-Tests.
Ich habe viele Diskussionen über die Vorzüge beider Seiten gesehen, aber ich frage mich, ob jemand eine Studie darüber durchgeführt hat.
productivity
comparison
type-systems
dynamic-typing
static-typing
Winston Ewert
quelle
quelle
Antworten:
Einige schlugen vor zu lesen:
Nicht gerade auf statische Eingabe, aber verwandt:
Einige interessante Artikel oder Aufsätze zum Thema oder zur statischen Analyse von Programmen im Allgemeinen:
Und für diejenigen, die sich fragen würden, worum es geht:
Ich bezweifle jedoch, dass Ihnen eines davon eine direkte Antwort gibt, da es nicht genau die Studie durchführt, nach der Sie suchen. Sie werden jedoch interessante Lektüren sein.
PersönlichIch bin der festen Überzeugung, dass statisches Tippen anstelle von dynamischem Tippen die Fehlererkennung erleichtert. Ich verbringe viel zu viel Zeit damit, nach Tippfehlern und kleineren Fehlern wie diesen in JavaScript oder sogar Ruby-Code zu suchen. Und wenn es darum geht, dass Dynamic Typing die Produktivität steigert, liegt das meiner Meinung nach vor allem an den Werkzeugen. Wenn statisch typisierte Sprachen über die richtigen Tools verfügen, um eine Neukompilierung im Hintergrund zu ermöglichen und eine REPL-Schnittstelle bereitzustellen, profitieren Sie von den Vorteilen beider Welten. Scala bietet dies zum Beispiel, was es sehr einfach macht, in der interaktiven Konsole zu lernen und Prototypen zu erstellen, bietet Ihnen aber die Vorteile der statischen Typisierung (und eines stärkeren Schriftsystems als viele andere Sprachen, abgesehen von ML-Sprachen). In ähnlicher Weise glaube ich nicht, dass ich durch die Verwendung von Java oder C ++ (aufgrund der statischen Typisierung) einen Produktivitätsverlust habe. solange ich eine IDE benutze, die mir weiterhilft. Wenn ich nur mit einfachen Konfigurationen (Editor + Compiler / Interpreter) zur Codierung zurückkehre, fühlt es sich umständlicher an und dynamische Sprachen scheinen einfacher zu verwenden zu sein. Aber Sie suchen immer noch nach Fehlern. Ich denke, die Leute würden sagen, dass das Tooling-Problem ein umkehrbares Argument ist, als ob das Tooling für dynamische Sprachen besser wäre, dann würden die meisten Bugs und Tippfehler zum Zeitpunkt der Codierung angezeigt, aber das spiegelt meiner Meinung nach den Fehler im System wider. Trotzdem bin ich normalerweise ein Prototyp in JRuby und werde die meisten Dinge, die ich tue, später in Java programmieren. als ob die Werkzeuge für dynamische Sprachen besser wären, würden die meisten Fehler und Tippfehler zum Zeitpunkt der Codierung angezeigt, aber das spiegelt meiner Meinung nach den Fehler im System wider. Trotzdem bin ich normalerweise ein Prototyp in JRuby und werde die meisten Dinge, die ich tue, später in Java programmieren. als ob die Werkzeuge für dynamische Sprachen besser wären, würden die meisten Fehler und Tippfehler zum Zeitpunkt der Codierung angezeigt, aber das spiegelt meiner Meinung nach den Fehler im System wider. Trotzdem bin ich normalerweise ein Prototyp in JRuby und werde die meisten Dinge, die ich tue, später in Java programmieren.
WARNUNG: Einige dieser Links sind unzuverlässig, andere gehen über Portale verschiedener Computergesellschaften und verwenden gebührenpflichtige Zugriffe für Mitglieder. Tut mir leid, ich habe versucht, mehrere Links für jeden dieser Links zu finden, aber es ist nicht so gut, wie ich es gerne hätte.
quelle
Erst gestern habe ich diese Studie gefunden: Unit-Tests sind nicht genug. Sie brauchen auch statische Eingabe.
Grundsätzlich verwendete der Autor ein Tool, das in der Lage ist, ein Projekt automatisch von einer nicht statischen in eine statische Eingabesprache (Python zu Haskell) zu konvertieren.
Dann wählte er eine Reihe von Open-Source-Python-Projekten aus, die auch eine angemessene Anzahl von Testeinheiten enthielten, und konvertierte sie automatisch in haskell.
Die Übersetzung nach Haskell ergab eine Reihe von Fehlern im Zusammenhang mit der Art der Variablen: Die Fehler wurden von den Testeinheiten nicht entdeckt.
quelle
Meine Meinung. Es gibt zwar schwache Beweise dafür, dass dynamisch getippte Sprachen produktiver sind, sie sind jedoch nicht schlüssig. (1) Es gibt viele Faktoren, die nicht kontrolliert wurden. (2) Es gibt zu wenige Studien. (3) Es wurde wenig oder gar nicht darüber diskutiert, was eine geeignete Testmethode darstellt.
quelle
Hier ist ein Ausgangspunkt:
Das Papier stellt die allgemein verbreitete Weisheit in Frage, dass Programmierer bei sonst gleichen Bedingungen unabhängig von der Sprache dieselbe Anzahl von Codezeilen pro Zeit schreiben. Mit anderen Worten, die Arbeit sollte als empirischer Beweis dafür dienen, dass die mechanische Produktivität (geschriebene Codezeilen) kein gutes Maß für die funktionale Produktivität ist und zumindest sprachlich normalisiert werden muss.
quelle
Ich habe eine statische vs. dynamische Sprache gefunden: eine Literaturübersicht , die einige Studien zu diesem Thema auflistet und eine schöne Zusammenfassung zu jeder Studie gibt.
Hier ist die Zusammenfassung:
quelle
Ich glaube ehrlich gesagt nicht, dass statisches oder dynamisches Tippen die eigentliche Frage ist.
Ich denke, dass es zwei Parameter gibt, die zuerst kommen sollten:
Wenn Sie mit der Sprache vertraut sind, schreiben Sie Code und können Fehler mühelos aufspüren.
Wenn Sie entkoppelten Code schreiben und jede Funktion ausgiebig testen, werden Sie ausgereiften Code produzieren und somit produktiv sein (weil Sie nicht als produktiv gelten können, wenn Sie die Qualität des Produkts nicht einschätzen, oder?). )
Ich würde daher die Auffassung vertreten, dass die Debatte zwischen statischem und dynamischem Verhalten in Bezug auf die Produktivität eher umstritten ist oder zumindest durch andere Überlegungen weitgehend verdrängt wird.
quelle
Hier sind ein paar:
Stefan Hanenberg. 2010. Ein Experiment über statische und dynamische Typsysteme: Zweifel an den positiven Auswirkungen statischer Typsysteme auf die Entwicklungszeit. In Proceedings of the ACM Internationale Konferenz zu objektorientierten Programmiersystemsprachen und -anwendungen (OOPSLA '10). ACM, New York, NY, USA, 22-35. DOI = 10.1145 / 1869459.1869462 http://doi.acm.org/10.1145/1869459.1869462
Daniel P. Delorey, Charles D. Knutson und Scott Chun, "Beeinflussen Programmiersprachen die Produktivität? Eine Fallstudie unter Verwendung von Daten aus Open Source - Projekten", floss, S. 8, Erster internationaler Workshop zu aufkommenden Trends in der FLOSS - Forschung und Entwicklung (FLOSS '07: ICSE Workshops 2007), 2007
Daly, M .; Sazawal, V., Foster, J .: Work in Progress: Eine empirische Studie zur statischen Typisierung in Ruby, Workshop zur Evaluierung und Benutzerfreundlichkeit von Programmiersprachen und -werkzeugen (PLATEAU) auf der ON-WARD 2009.
Lutz Prechelt und Walter F. Tichy. 1998. Ein kontrolliertes Experiment zur Bewertung der Vorteile der Überprüfung des Argumenttyps einer Prozedur. IEEE Trans. Softw. Eng. 24, 4 (April 1998), 302-312. DOI = 10.1109 / 32.677186 http://dx.doi.org/10.1109/32.677186
quelle