„Computational Scientist” jest dość szeroki, ponieważ obejmuje osoby, które wykonują analizy numeryczne przy użyciu papierowych / LaTeX i wdrożeń typu proof-of-concept, osoby piszące biblioteki ogólnego przeznaczenia oraz osoby opracowujące aplikacje, które rozwiązują określone klasy problemów, oraz użytkownicy końcowi, którzy je wykorzystują Aplikacje. Umiejętności potrzebne tym grupom są różne, ale znajomość „pełnego stosu” ma dużą zaletę. Opiszę, co uważam za kluczowe części tego stosu, ludzie, którzy pracują na tym poziomie, powinni oczywiście mieć głębszą wiedzę.
Wiedza w dziedzinie (np. Podstawy fizyki i inżynierii)
Każdy powinien znać podstawy klasy problemów, które rozwiązuje. Jeśli pracujesz na PDE, oznaczałoby to pewną ogólną znajomość kilku klas PDE (np. Poissona, elastyczności oraz nieściśliwego i ściśliwego Naviera-Stokesa), w szczególności jakie właściwości są ważne, aby uchwycić „dokładnie” i co może zależeć od dyskretyzacji błąd (informuje o wyborze metody dotyczącej lokalnej ochrony i integratorów symplektycznych). Powinieneś wiedzieć o niektórych funkcjach i typach analiz interesujących aplikacje (optymalizacja siły nośnej i przeciągania, przewidywanie awarii, inwersja parametrów itp.).
Matematyka
Każdy powinien mieć pewną ogólną znajomość klas metod odpowiednich dla ich problematycznej dziedziny. Obejmuje to podstawowe cechy rzadkiej i gęstej algebry liniowej, dostępność „szybkich metod”, właściwości technik dyskretyzacji przestrzennej i czasowej oraz sposób oceny, jakie właściwości problemu fizycznego są potrzebne, aby technika dyskretyzacji była odpowiednia. Jeśli jesteś głównie użytkownikiem końcowym, ta wiedza może być bardzo wysoka.
Inżynieria oprogramowania i biblioteki
Znajomość technik abstrakcyjnych i projektowania bibliotek jest przydatna dla prawie wszystkich osób w dziedzinie obliczeń. Jeśli pracujesz nad metodami weryfikacji koncepcji, poprawi to organizację twojego kodu (ułatwiając komuś innemu „przetłumaczenie” go na solidną implementację). Jeśli pracujesz nad aplikacjami naukowymi, sprawi to, że twoje oprogramowanie będzie bardziej rozszerzalne i ułatwi interfejs z bibliotekami. Zachowaj ostrożność podczas opracowywania kodu, aby błędy były wykrywane tak wcześnie, jak to możliwe, a komunikaty o błędach były jak najbardziej pouczające.
Przybory
Praca z oprogramowaniem jest ważną częścią nauki obliczeniowej. Biegłość w wybranym języku, obsługa edytora (np. Tagi, analiza statyczna) oraz narzędzia do debugowania (debugger, valgrind) znacznie poprawiają efektywność programowania. Jeśli pracujesz w środowisku wsadowym, powinieneś wiedzieć, jak przesyłać zadania i uzyskiwać interaktywne sesje. Jeśli pracujesz ze skompilowanym kodem, praktyczna znajomość kompilatorów, linkerów i narzędzi do budowania, takich jak Make, zaoszczędzi dużo czasu. Kontrola wersji jest niezbędna dla każdego, nawet jeśli pracujesz sam. Naucz się Git lub Mercurial i używaj go do każdego projektu. Jeśli tworzysz biblioteki, powinieneś znać standardy językowe w miarę rozsądnie, aby prawie zawsze pisać przenośny kod za pierwszym razem, w przeciwnym razie zostaniesz pochowany w prośbach o wsparcie użytkownika, gdy Twój kod nie zbuduje się w ich funky środowisku.
Lateks
LaTeX jest de facto standardem publikacji naukowych i współpracy. Biegła znajomość LaTeX jest ważna, aby móc komunikować swoje wyniki, współpracować nad propozycjami itp. Skrypty tworzenia liczb są również ważne dla odtwarzalności i pozyskiwania danych.