"Scienziato computazionale" è piuttosto ampio perché include persone che eseguono analisi numeriche con paper / LaTeX e implementazioni di prove concettuali, persone che scrivono librerie di uso generale e persone che sviluppano applicazioni che risolvono determinate classi di problemi e utenti finali che utilizzano quelle applicazioni. Le competenze necessarie per questi gruppi sono diverse, ma c'è un grande vantaggio nell'avere una certa familiarità con lo "stack completo". Descriverò quali sono le parti critiche di questo stack, le persone che lavorano a quel livello dovrebbero ovviamente avere una conoscenza più profonda.
Conoscenza del dominio (ad es. Background fisico e ingegneristico)
Tutti dovrebbero conoscere le basi della classe di problemi che stanno risolvendo. Se lavori sui PDE, ciò significherebbe una certa familiarità generale con alcune classi di PDE (ad esempio Poisson, elasticità e Navier-Stokes incomprimibili e comprimibili), in particolare quali proprietà sono importanti per catturare "esattamente" e quali possono essere fino alla discretizzazione errore (informa la selezione del metodo per quanto riguarda la conservazione locale e gli integratori simplettici). È necessario conoscere alcuni funzionali e tipi di analisi di interesse per le applicazioni (ottimizzazione di portanza e resistenza, previsione del guasto, inversione dei parametri, ecc.).
Matematica
Tutti dovrebbero avere una certa familiarità generale con le classi di metodi rilevanti per il loro dominio problematico. Ciò include le caratteristiche di base dell'algebra lineare sparsa rispetto a quella densa, la disponibilità di "metodi veloci", le proprietà delle tecniche di discretizzazione spaziale e temporale e il modo in cui valutare quali proprietà di un problema fisico sono necessarie affinché una tecnica di discretizzazione sia adatta. Se sei principalmente un utente finale, questa conoscenza può essere di altissimo livello.
Ingegneria del software e biblioteche
Una certa familiarità con le tecniche di astrazione e la progettazione di biblioteche è utile per quasi tutti nella scienza computazionale. Se lavori su metodi di prova, questo migliorerà l'organizzazione del tuo codice (rendendo più semplice per qualcun altro "tradurlo" in una solida implementazione). Se lavori su applicazioni scientifiche, questo renderà il tuo software più estensibile e faciliterà l'interfaccia con le librerie. Sii difensivo quando sviluppi il codice, in modo tale che gli errori vengano rilevati il prima possibile e che i messaggi di errore siano il più informativi possibile.
Utensili
Lavorare con il software è una parte importante della scienza computazionale. Competenza con la lingua scelta, supporto dell'editor (ad es. Tag, analisi statica) e strumenti di debug (debugger, valgrind) migliorano notevolmente l'efficienza dello sviluppo. Se lavori in ambienti batch, dovresti sapere come inviare lavori e ottenere sessioni interattive. Se lavori con il codice compilato, una conoscenza pratica di compilatori, linker e strumenti di creazione come Make ti farà risparmiare molto tempo. Il controllo della versione è essenziale per tutti, anche se lavori da solo. Impara Git o Mercurial e usalo per ogni progetto. Se sviluppi librerie, dovresti conoscere gli standard linguistici ragionevolmente completamente in modo da scrivere quasi sempre il codice portatile la prima volta, altrimenti verrai seppellito nelle richieste di supporto dell'utente quando il tuo codice non si sviluppa nel loro ambiente funky.
LaTeX
LaTeX è lo standard di fatto per la pubblicazione e la collaborazione scientifica. La competenza con LaTeX è importante per poter comunicare i risultati, collaborare su proposte, ecc. Scrivere script per la creazione di figure è importante anche per la riproducibilità e la provenienza dei dati.