¿Es el código científico un reino lo suficientemente diferente como para ignorar los estándares de codificación comunes?
No, no es.
El código de investigación a menudo es "desechado" y escrito por personas que no son desarrolladores en segundo plano, por muy sólidas que sean sus credenciales académicas. Algunos de los códigos de investigación que escribí me harían llorar . ¡Pero funcionó!
Una cosa a considerar es que los guardianes de los proyectos conducen lo que se incluye. Si un proyecto grande comenzó como un proyecto de código académico / de investigación, termina funcionando y ahora es un desastre, alguien tiene que tomar la iniciativa para refactorizarlo.
Se necesita mucho trabajo para refactorizar el código existente que no está causando problemas. Especialmente si es un dominio específico o no tiene pruebas. Verá que OpenCV tiene una guía de estilo que es muy completa, incluso si no es perfecta. ¿Aplica esto retroactivamente a todo el código existente? Eso es ... no para los débiles de corazón.
Esto es aún más difícil si todo ese código funciona. Porque no está roto ¿Por qué arreglarlo?
¡Sin embargo, estos proyectos prosperan, se mantienen y se usan ampliamente!
Esta es la respuesta, en cierto sentido. El código de trabajo sigue siendo útil y, por lo tanto, es más probable que se mantenga.
Puede ser un desastre, especialmente al principio. Algunos de estos proyectos probablemente comenzaron como un proyecto único que "no necesitaría ser reutilizado nunca y podría desecharse".
También considere que si está implementando un algoritmo complejo, puede tener más sentido tener métodos más grandes porque usted (y otras personas familiarizadas con el lado científico) pueden comprender mejor el algoritmo conceptualmente. Mi trabajo de tesis estaba relacionado con la optimización. Tener la lógica del algoritmo principal como un método fue considerablemente más fácil de entender de lo que hubiera sido intentar separarlo. Ciertamente, violó la regla de "7 líneas por método", pero también significó que otro investigador podría mirar mi código y comprender más rápidamente mis modificaciones al algoritmo.
Si esta implementación se abstrajera y se diseñara bien, esta transparencia se perdería para los no programadores .
Para los demás respondedores: esta pregunta se refiere a la base de código de las bibliotecas de código abierto para tareas computacionalmente intensivas en uno o más dominios científicos. Esta pregunta no se trata de código desechable. Haga una pausa por un momento para asegurarse de comprender todos los aspectos resaltados antes de escribir una respuesta.
Creo que la gente a menudo tiene la idea de que todos los proyectos de código abierto comienzan como "oye, tengo una gran idea para una biblioteca que será tremendamente popular y utilizada por miles / millones de otros" y luego cada proyecto sucede así.
La realidad es que muchos proyectos se inician y mueren. Un porcentaje ridículamente pequeño de proyectos "lo hacen" al nivel de OpenCV o VTK, etc.
OpenCV comenzó como un proyecto de investigación de Intel. Wikipedia lo describe como parte de una "serie de proyectos". Su primer lanzamiento no beta fue 2006, o siete años después de su inicio. Sospecho que el objetivo inicialmente era versiones beta significativas, no un código perfecto.
Además, la "propiedad" de OpenCV ha cambiado significativamente. Esto hace que los estándares cambien, a menos que todas las partes responsables adopten exactamente los mismos estándares y los conserven durante la duración del proyecto.
También debo señalar que OpenCV existió durante varios años antes de que se publicara el Manifiesto Ágil del que se inspira el Código Limpio (y VTK casi 10). VTK se inició 17 años antes de la publicación de Clean Code (OpenCV fue "solo" 9 años antes).