Le code scientifique est-il un domaine suffisamment différent pour ignorer les normes de codage communes?
Non ce n'est pas.
Le code de recherche est souvent «jeté» et écrit par des personnes qui ne sont pas des développeurs de formation, quelle que soit la solidité de leurs diplômes. Une partie du code de recherche que j'ai écrit me ferait pleurer . Mais ça a marché!
Une chose à considérer est que les gardiens des projets pilotent ce qui est inclus. Si un grand projet a commencé comme un projet de code académique / de recherche, finit par fonctionner et est maintenant un gâchis, quelqu'un doit prendre l'initiative de le refactoriser.
Il faut beaucoup de travail pour refactoriser le code existant qui ne pose pas de problème. Surtout s'il est spécifique à un domaine ou n'a pas de tests. Vous verrez qu'OpenCV dispose d'un guide de style très complet, même s'il n'est pas parfait. L'application rétroactive à tout le code existant? Ce n'est pas pour les faibles de cœur.
C'est encore plus difficile si tout ce code fonctionne. Parce que ce n'est pas cassé. Pourquoi le réparer?
Pourtant, ces projets prospèrent, sont maintenus et largement utilisés!
C'est la réponse, dans un sens. Le code de travail est toujours utile et il est donc plus probable qu'il soit maintenu.
Cela pourrait être un gâchis, surtout au début. Certains de ces projets ont probablement commencé comme un projet unique qui "n'aurait jamais besoin d'être réutilisé et pourrait être jeté".
Considérez également que si vous implémentez un algorithme complexe, il peut être plus judicieux d'avoir des méthodes plus importantes parce que vous (et d'autres familiers avec le côté scientifique) pouvez mieux comprendre conceptuellement l'algorithme. Mon travail de thèse était lié à l'optimisation. Avoir la logique de l'algorithme principal comme une méthode était considérablement plus facile à comprendre qu'il ne l'aurait été de la séparer. Cela a certainement violé la règle des «7 lignes par méthode» mais cela signifiait également qu'un autre chercheur pouvait consulter mon code et comprendre plus rapidement mes modifications de l'algorithme.
Si cette implémentation était abstraite et bien conçue, cette transparence serait perdue pour les non-programmeurs .
Aux autres répondeurs: Cette question se réfère à la base de code des bibliothèques open source pour les tâches de calcul intensif dans un ou plusieurs domaines scientifiques. Cette question ne concerne pas le code jetable. Veuillez vous arrêter un moment pour vous assurer de bien saisir tous les aspects mis en évidence avant d'écrire une réponse.
Je pense que les gens ont souvent cette idée que tous les projets open source commencent par, "hé j'ai une excellente idée pour une bibliothèque qui sera extrêmement populaire et utilisée par des milliers / millions d'autres" et ensuite chaque projet se passe comme ça.
La réalité est que de nombreux projets sont lancés et meurent. Un pourcentage ridiculement infime de projets "parviennent" au niveau d'OpenCV ou VTK etc.
OpenCV a commencé comme un projet de recherche d'Intel. Wikipedia le décrit comme faisant partie d'une "série de projets". Sa première version non bêta a été 2006, soit sept ans après son premier lancement . Je soupçonne que l'objectif initial était des versions bêta significatives, pas un code parfait.
De plus, la «propriété» d'OpenCV a considérablement changé. Cela fait changer les normes, à moins que toutes les parties responsables n'adoptent exactement les mêmes normes et ne les conservent pendant la durée du projet.
Je dois également souligner que OpenCV existait depuis plusieurs années avant la publication du Manifeste Agile dont Clean Code s'inspire (et VTK près de 10). VTK a été lancé 17 ans avant la publication de Clean Code (OpenCV n'était "que" 9 ans auparavant).