O "Cientista Computacional" é um tanto amplo, pois inclui pessoas que fazem análises numéricas com implementações em papel / LaTeX e prova de conceito, pessoas que escrevem bibliotecas de uso geral e pessoas que desenvolvem aplicativos que resolvem certas classes de problemas e usuários finais que as utilizam. formulários. As habilidades necessárias para esses grupos são diferentes, mas há uma grande vantagem em se familiarizar com o "full stack". Descreverei quais são as partes críticas dessa pilha; as pessoas que trabalham nesse nível devem, obviamente, ter um conhecimento mais profundo.
Conhecimento do domínio (por exemplo, formação em física e engenharia)
Todos devem saber o básico da classe de problemas que estão resolvendo. Se você trabalha com PDEs, isso significa alguma familiaridade geral com algumas classes de PDE (por exemplo, Poisson, elasticidade e Navier-Stokes incompressível e compressível), especialmente quais propriedades são importantes para capturar "exatamente" e o que pode ser discretizado erro (informa a seleção do método referente à conservação local e aos integradores simpléticos). Você deve conhecer alguns funcionais e os tipos de análise de interesse para os aplicativos (otimização de elevação e arrasto, previsão de falha, inversão de parâmetros etc.).
Matemática
Todos devem ter alguma familiaridade geral com classes de métodos relevantes para o domínio do problema. Isso inclui características básicas de álgebra linear esparsa versus densa, disponibilidade de "métodos rápidos", propriedades de técnicas de discretização espacial e temporal e como avaliar quais propriedades de um problema físico são necessárias para que uma técnica de discretização seja adequada. Se você é principalmente um usuário final, esse conhecimento pode ser de nível muito alto.
Engenharia de software e bibliotecas
Alguma familiaridade com as técnicas de abstração e o design da biblioteca é útil para quase todos na ciência da computação. Se você trabalhar com métodos de prova de conceito, isso melhorará a organização do seu código (facilitando a tradução de outra pessoa para uma implementação robusta). Se você trabalha em aplicativos científicos, isso tornará seu software mais extensível e facilitará a interface com as bibliotecas. Seja defensivo ao desenvolver código, para que os erros sejam detectados o mais cedo possível e as mensagens de erro sejam o mais informativas possível.
Ferramentas
Trabalhar com software é uma parte importante da ciência computacional. A proficiência no idioma escolhido, o suporte ao editor (por exemplo, tags, análise estática) e ferramentas de depuração (depurador, valgrind) aumentam bastante a eficiência do desenvolvimento. Se você trabalha em ambientes em lote, deve saber como enviar tarefas e obter sessões interativas. Se você trabalha com código compilado, um conhecimento prático de compiladores, vinculadores e ferramentas de criação como o Make economizará muito tempo. O controle de versão é essencial para todos, mesmo se você trabalha sozinho. Aprenda Git ou Mercurial e use-o para todos os projetos. Se você desenvolver bibliotecas, deverá conhecer os padrões de linguagem razoavelmente completamente, para que quase sempre escreva códigos portáteis na primeira vez, caso contrário, você será enterrado em solicitações de suporte ao usuário quando seu código não for construído em seu ambiente desagradável.
Látex
O LaTeX é o padrão de fato para publicação e colaboração científica. A proficiência no LaTeX é importante para poder comunicar seus resultados, colaborar com propostas etc. O uso de scripts para criação de figuras também é importante para a reprodutibilidade e a proveniência dos dados.