Ist wissenschaftlicher Code ein Bereich, der unterschiedlich genug ist, um gängige Kodierungsstandards zu ignorieren?
Nein, ist es nicht.
Forschungscode wird oft "weggeworfen" und von Leuten geschrieben, die keine Entwickler sind, unabhängig von ihrer akademischen Qualifikation. Ein Teil des Forschungscodes, den ich geschrieben habe, würde mich zum Weinen bringen . Aber es hat geklappt!
Eine Sache, die zu berücksichtigen ist, ist, dass die Gatekeeper der Projekte das vorantreiben, was enthalten ist. Wenn ein großes Projekt begann als wissenschaftliches / Forschung Code - Projekt, Arbeits endet, und ist jetzt ein Chaos, hat jemand die Initiative zu ergreifen , es Refactoring.
Es ist sehr aufwändig, vorhandenen Code zu überarbeiten, der keine Probleme verursacht. Vor allem, wenn es überhaupt domänenspezifisch ist oder keine Tests hat. Sie werden sehen, dass OpenCV einen Stilleitfaden hat , der sehr umfassend ist, auch wenn er nicht perfekt ist. Rückwirkend auf den gesamten vorhandenen Code anwenden? Das ist nichts für schwache Nerven.
Dies ist noch schwieriger, wenn der gesamte Code funktioniert. Weil es nicht kaputt ist. Warum das Problem beheben?
Doch diese Projekte gedeihen, werden gepflegt und weit verbreitet!
Dies ist in gewissem Sinne die Antwort. Arbeitscode ist immer noch nützlich und wird daher mit größerer Wahrscheinlichkeit beibehalten.
Es könnte ein Durcheinander sein, besonders am Anfang. Einige dieser Projekte begannen wahrscheinlich als einmaliges Projekt, "das niemals wiederverwendet werden müsste und weggeworfen werden könnte".
Bedenken Sie auch, dass es bei der Implementierung eines komplexen Algorithmus sinnvoller sein kann, über größere Methoden zu verfügen, da Sie (und andere mit der wissenschaftlichen Seite vertraute Personen) den Algorithmus konzeptionell besser verstehen können. Meine Abschlussarbeit befasste sich mit Optimierung. Die Hauptalgorithmuslogik als eine Methode zu haben, war wesentlich einfacher zu verstehen, als sie auseinanderzubrechen versucht hätte. Dies verstieß zwar gegen die Regel "7 Zeilen pro Methode", bedeutete jedoch auch, dass ein anderer Forscher meinen Code einsehen und meine Änderungen am Algorithmus schneller verstehen konnte.
Wenn diese Implementierung weg abstrahiert und gut entworfen würde, würde diese Transparenz für Nicht-Programmierer verloren gehen .
Mitbeantworter: Diese Frage bezieht sich auf die Codebasis von Open-Source-Bibliotheken für rechenintensive Aufgaben in einem oder mehreren wissenschaftlichen Bereichen. Bei dieser Frage geht es nicht um Wegwerfcode. Bitte machen Sie eine kurze Pause, um sicherzustellen, dass Sie alle hervorgehobenen Aspekte erfassen, bevor Sie eine Antwort schreiben.
Ich denke, die Leute haben oft die Idee, dass alle Open-Source-Projekte wie folgt beginnen: "Hey, ich habe eine großartige Idee für eine Bibliothek, die sehr beliebt ist und von Tausenden / Millionen von anderen genutzt wird", und dann geschieht jedes Projekt so.
Die Realität ist, dass viele Projekte gestartet werden und sterben. Ein lächerlich kleiner Prozentsatz von Projekten "schafft" es auf die Ebene von OpenCV oder VTK usw.
OpenCV startete als Forschungsprojekt von Intel. Wikipedia beschreibt es als Teil einer "Reihe von Projekten". Seine erste Nicht-Beta-Version war 2006 oder sieben Jahre nach dem ersten Start. Ich vermute, dass das Ziel anfangs aussagekräftige Beta-Versionen waren, nicht perfekter Code.
Außerdem hat sich die "Eigentümerschaft" von OpenCV erheblich geändert. Dies führt zu Änderungen der Standards, sofern nicht alle Verantwortlichen dieselben Standards anwenden und diese für die Dauer des Projekts beibehalten.
Ich sollte auch darauf hinweisen, dass es OpenCV schon einige Jahre gab, bevor das Agile Manifest, von dem Clean Code inspiriert ist, veröffentlicht wurde (und VTK fast 10). VTK wurde 17 Jahre vor der Veröffentlichung von Clean Code gestartet (OpenCV war "nur" 9 Jahre zuvor).