Gibt es ernsthafte Studien darüber, wie gut ein erfahrener Programmierer, der die Sprache X beherrscht, Code verstehen kann, der von einem kompetenten Programmierer mit der Sprache Y für eine Reihe von weit verbreiteten Sprachen wie X und Y geschrieben wurde?
Natürlich ist die reale Welt nicht so einfach, da ein Programmierer nur eine Sprache beherrscht. Was wir wissen möchten, ist: Wenn wir unser Projekt in C # durchführen und eines Tages einige alte Physiker, die nur Fortran und Algol kennen, es betrachten, inwieweit würde es für sie Sinn machen? Mathematische Teile davon könnten für sie gut lesbar sein, wenn sie ignorieren, was für sie zufällige Satzzeichen sind. Oder könnte ein Python-Experte Fehler in meinem cleveren Ruby-Skript finden?
Es kann Probleme geben, von der oberflächlichen Syntax bis hin zur Ebene großer Konzepte wie Objekte, Vorlagen-Metaprogrammierung, Funktionalität und so weiter. Ich erwarte nicht, dass der eine Programmierer jedes Syntaxdetail von Code in einer "Fremdsprache" vollständig versteht oder der Religion eines großen Konzepts folgt, aber ich frage mich, inwieweit er den Hauptkontrollfluss bekommen würde, um den Punkt zu finden Stellen Sie sicher, dass ein Roboter, der für das Fahren eines Autos programmiert ist, den Motor abschaltet, wenn etwas auf dem Bildschirm gezeichnet ist und die Farbe oder Größe bestimmt.
Eine Studie von guter Qualität würde veröffentlichte akademische Forschungen, einen offiziellen Bericht einer Industriegruppe oder eines großen Softwareunternehmens beinhalten, obwohl ich systematisch unvoreingenommene Beobachtungen von erfahrenen Leitern von Workshops und Kursen oder anderen Quellen machen werde. Kein Interesse an kurzen Blogs, Einzelfallbeispielen oder Anekdoten. (Nun, vielleicht ein paar Anekdoten, wenn sie für eine gute Lektüre sorgen.)
Antworten:
Es hängt natürlich davon ab, inwieweit die Sprachen miteinander verwandt sind. Wenn Sie beispielsweise einen C- oder C ++ - Hintergrund haben und entweder C # - oder Java-Programmierung ausgeführt haben, sollten Sie die andere der beiden Sprachen (Java oder C #) leicht lesen und verstehen können. Wenn Sie Lisp gut kennen, sollte Scheme kein großes Problem sein. Ich habe einmal ein PHP-Programm ohne PHP-Kenntnisse getestet, nur mit meinen Kenntnissen aus C, C ++ und Perl. Ich bin mir ziemlich sicher, wann dieses Programm in Haskell oder Smalltalk geschrieben worden wäre, das wäre für mich immens schwerer als unmöglich gewesen.
Tatsächlich glaube ich nicht, dass eine akademische Forschung zu diesem Thema Sinn ergibt (zumindest keine ernsthafte). Es gibt keinen "erfahrenen Standardprogrammierer, der die Sprache X beherrscht", sodass in jeder Studie gesicherte Basisdaten fehlen würden. Die Leute haben unterschiedliche Kenntnisse und auch wenn sie die gleichen Schulen durchlaufen haben, sind sie unterschiedlich talentiert und motiviert.
Das kann schwierig sein, selbst wenn Sie mit der Sprache sehr vertraut sind, entweder weil die Codequalität so niedrig ist oder das verwendete Framework so komplex ist oder die Codebasis sehr groß ist.
quelle
Sie sind sich nicht sicher, ob es sich um eine akademisch durchgeführte Referenz handelt, aber eine selbsterklärende Benennung von Methoden, Klassen und Funktionen in C # / C ++ / Java / Python oder anderen Sprachen sollte das Verständnis der Codebasis sowie des Ablaufs von Geschäftsprozessen erleichtern.
Die Namenskonvention innerhalb des Projekts und allgemein in der Softwareentwicklung ist ein sehr wichtiger Aspekt. Die
its importance
Relevanz für die Erstellung hochwertiger Software wird jedoch häufig übersehen oder ignoriert.In .NET Framework verwendete Benennungsrichtlinien und in .NET verwendete allgemeine Benennungskonventionen sind ebenfalls eine gute Referenz.
quelle
Es hängt immens vom einzelnen Programmierer ab und davon, wie er Sprachen verinnerlicht. Ich habe absolut keine Probleme, in einem Dutzend Sprachen zu arbeiten, während ich einen Freund habe, der nur C ++ kennt. Er programmiert nicht schlechter als ich, er hat es einfach anders gelernt.
Persönlich finde ich eine verwandte Frage interessanter: Wenn es einen Fehler im Code gibt (dh Programmierer X dachte, er habe geschrieben,
someFunction(x, y)
aber er hat wirklich etwas anderes geschrieben), wie schwer ist es für den zweiten Entwickler, den Fehler zu identifizieren. Ein guter Programmierer X würde außerordentlich deutlich machen, was er vom Computer wollte, und das wäre leicht zu lesen. Wenn er jedoch einen Fehler gemacht hat, kann dies eine große Sache sein. Dinge wie der folgende C ++ - Fehler:Kann NOTORIOUS schwer zu erkennen sein, wenn Sie die Sprache nicht kennen.
quelle
Es kommt nicht nur auf den Programmierer an, wie andere gesagt haben, sondern auch auf die Ähnlichkeiten zwischen Sprachen, sowohl in der Syntax als auch in der Philosophie und in der Implementierung.
Viele verschiedene Sprachen verwenden eine C-abgeleitete Syntax. Wenn Sie mit dieser Art von Syntax vertraut sind, ist es daher einfacher, dem Kontrollfluss zu folgen. Das Gleiche gilt für stark typisierte und lose typisierte Sprachen, Sprachen mit Unterstützung für Funktionen höherer Ordnung, Abstraktionsgrad und programmatische Philosophien. Es kommt nicht nur darauf an, dass Sie die Syntax lesen können, sondern auch mit den Sprachkonzepten und -philosophien vertraut sind.
Wenn Sie zum Beispiel C gelernt hätten, wäre es vernünftig zu erwarten, dass Sie den Steuerungsfluss von C #, Java oder C ++ usw. ableiten können. Die Entschlüsselung von VB ist aufgrund der unterschiedlichen Syntax etwas schwieriger JavaScript aufgrund von Closures, schwacher Typisierung und Funktionen höherer Ordnung (ich weiß, dass Sie dies in C tun können, aber es ist ein wenig wackelig). Ich würde jedoch nicht erwarten, dass Sie Lisp, F #, R oder Assembly debuggen können, da diese ein völlig anderes Programmierparadigma verwenden.
TL; DR Es ist nicht nur wichtig, die Syntax zu erkennen. Meistens können Sie eine Deklaration oder einen Methodenaufruf entschlüsseln. Den Grund für das Verständnis und das Lesen von Code zu verstehen, ist jedoch entscheidend .
quelle