Estoy buscando recursos sobre patrones de diseño y principios para software numérico, potencialmente pero no necesariamente con un enfoque en enfoques orientados a objetos para códigos numéricos.
Conozco el texto, Writing Scientific Software: A Guide for Good Style , pero aún trata muchas cosas como cuestiones de coma flotante, cómo y cuándo optimizar, etc.
Estoy buscando información sobre la imagen más amplia del diseño de códigos numéricos, no sobre nada relacionado con algoritmos y similares.
Espero que haya recursos para esto, y no quede uno solo para ir de biblioteca en biblioteca, especialmente porque no hay una guía sobre cómo hacer las cosas correctamente, aparte de mi propio conocimiento de buenas expresiones idiomáticas y prácticas en C ++.
(Esto no es específico del idioma, pero si hay algún contenido específico del idioma, preferiría C ++).
fuente
Respuestas:
Después de haber desarrollado un software numérico durante 20 años, creo que probablemente hemos utilizado la mayoría de los patrones de diseño descritos en el Libro por la Banda de los Cuatro ( ver aquí ). Al final del día, el software numérico es también un software complejo a gran escala, por lo que quizás no sea sorprendente que se apliquen las mismas consideraciones de diseño que en otro software.
Hay, por supuesto, una serie de casos que realmente son específicos de los algoritmos numéricos (ver, por ejemplo, aquí ) pero conocer el conjunto "tradicional" de patrones de diseño es realmente un buen comienzo.
fuente
Recomiendo este Matthew G Knepley. Lenguajes de programación para informática científica. preimpresión de arXiv arXiv: 1209.1711, 2012 ( https://arxiv.org/pdf/1209.1711.pdf )
También aconsejo mirar y leer otros códigos, por ejemplo, triángulo, PETSc, MoAB, deal.II, fenics y muchos otros. No todas las soluciones funcionarán para usted, pero al final, hacer frente y aprender de otros (desarrolladores experimentados y códigos exitosos) es la mejor lección sobre cómo diseñar código.
Además, creo que es mejor unirse a un proyecto existente y convertirse en colaborador o desarrollador. A veces te gusta comenzar algo nuevo, pero debes tener argumentos sólidos para hacerlo.
fuente