Estou procurando recursos em padrões e princípios de design para software numérico, potencialmente, mas não necessariamente, com foco em abordagens orientadas a objetos para códigos numéricos.
Estou ciente do texto, Writing Scientific Software: A Guide for Good Style , mas isso ainda lida muito com questões como pontos de ponto flutuante, como e quando otimizar, etc.
Estou procurando informações sobre a imagem maior do design de códigos numéricos, não sobre qualquer coisa que lide com algoritmos e coisas do gênero.
Eu espero que haja recursos para isso, e não resta apenas passar por biblioteca após biblioteca, especialmente porque não há um guia sobre como as coisas projetam corretamente de maneira correta, além do meu próprio conhecimento de boas expressões e práticas em C ++.
(Isso não é específico do idioma, mas se houver algum conteúdo específico do idioma, eu prefiro C ++.)
fonte
Respostas:
Tendo desenvolvido software numérico há 20 anos, acho que provavelmente usamos a maioria dos padrões de design descritos no Livro da Gang of Four ( veja aqui ). No final do dia, o software numérico também é apenas um software complexo e de larga escala; portanto, talvez não seja surpreendente que as mesmas considerações de design se apliquem a outros softwares.
É claro que existem vários casos que são realmente específicos para algoritmos numéricos (veja, por exemplo, aqui ), mas conhecer o conjunto "tradicional" de padrões de design já é um bom começo.
fonte
Eu recomendo este Matthew G Knepley. Linguagens de programação para computação científica. pré-impressão do arXiv arXiv: 1209.1711, 2012 ( https://arxiv.org/pdf/1209.1711.pdf )
Também aconselho a procurar e ler outros códigos, por exemplo, triângulo, PETSc, MoAB, deal.II, fenics e muitos outros. Nem todas as soluções funcionarão para você, mas no final, lidar e aprender com outras pessoas (desenvolvedores experientes e códigos bem-sucedidos) é a melhor lição de como criar código.
Além disso, acho melhor participar de um projeto existente e tornar-se colaborador ou desenvolvedor. Às vezes você gosta de começar algo novo, mas precisa ter argumentos sólidos para fazer isso.
fonte