Szukam zasobów na temat wzorców projektowych i zasad oprogramowania numerycznego, potencjalnie, ale niekoniecznie, ze szczególnym uwzględnieniem obiektowego podejścia do kodów numerycznych.
Zdaję sobie sprawę z tekstu, Pisanie oprogramowania naukowego: Przewodnik po dobrym stylu , ale wciąż dotyczy to wielu rzeczy, takich jak problemy z liczbą zmiennoprzecinkową, jak i kiedy optymalizować itp.
Szukam informacji o większym obrazie projektowania kodów numerycznych, a nie o czymkolwiek, co dotyczy algorytmów i tym podobnych.
Mam nadzieję, że są na to zasoby i nie pozostało tylko po prostu przeglądać bibliotekę po bibliotece, zwłaszcza, że nie ma przewodnika na temat tego, jak robić rzeczy poprawnie zaprojektowane, oprócz mojej wiedzy o dobrych idiomach i praktykach w C ++.
(To nie jest specyficzne dla języka, ale jeśli jest jakaś treść specyficzna dla języka, wolałbym C ++.)
źródło
Odpowiedzi:
Po opracowaniu oprogramowania numerycznego od 20 lat stwierdzam, że prawdopodobnie wykorzystaliśmy większość wzorców projektowych opisanych w Księdze Gangu Czterech ( patrz tutaj ). Pod koniec dnia oprogramowanie numeryczne jest także oprogramowaniem złożonym na dużą skalę, więc nic dziwnego, że obowiązują te same zasady projektowania, co w przypadku innych programów.
Istnieje oczywiście szereg przypadków, które są naprawdę specyficzne dla algorytmów numerycznych (patrz, na przykład tutaj ), ale znajomość „tradycyjnego” zestawu wzorców projektowych jest już naprawdę dobrym początkiem.
źródło
Polecam tego Matthew G. Knepley. Języki programowania dla obliczeń naukowych. prefiks arXiv arXiv: 1209.1711, 2012 ( https://arxiv.org/pdf/1209.1711.pdf )
Radzę również szukać i czytać inne kody, na przykład trójkąt, PETSc, MoAB, deal.II, feniki i wiele innych. Nie wszystkie rozwiązania będą dla Ciebie działać, ale w końcu radzenie sobie i uczenie się od innych (doświadczonych programistów i odnoszących sukcesy kodów) jest najlepszą lekcją projektowania kodu.
Co więcej, myślę, że lepiej jest dołączyć do istniejącego projektu i zostać współpracownikiem lub programistą. Czasami lubisz zaczynać coś nowego, ale musisz mieć solidne argumenty, aby to zrobić.
źródło