"Computational Scientist" es algo amplio porque incluye a personas que realizan análisis numéricos con papel / LaTeX e implementaciones de prueba de concepto, personas que escriben bibliotecas de propósito general y personas que desarrollan aplicaciones que resuelven ciertas clases de problemas, y usuarios finales que utilizan esos aplicaciones. Las habilidades necesarias para estos grupos son diferentes, pero existe una gran ventaja de tener cierta familiaridad con el "stack completo". Describiré lo que creo que son las partes críticas de esta pila, las personas que trabajan en ese nivel, por supuesto, deberían tener un conocimiento más profundo.
Conocimiento de dominio (por ejemplo, antecedentes de física e ingeniería)
Todos deben conocer los conceptos básicos de la clase de problemas que están resolviendo. Si trabaja en PDE, esto significaría cierta familiaridad general con algunas clases de PDE (por ejemplo, Poisson, elasticidad y Navier-Stokes incompresible y compresible), especialmente qué propiedades son importantes para capturar "exactamente" y qué puede depender de la discretización. error (esto informa la selección del método con respecto a la conservación local y los integradores simplécticos). Debe conocer algunos tipos de análisis funcionales y de interés para las aplicaciones (optimización de elevación y arrastre, predicción de fallas, inversión de parámetros, etc.).
Matemáticas
Todos deberían tener cierta familiaridad general con las clases de métodos relevantes para el dominio de su problema. Esto incluye características básicas de álgebra lineal dispersa versus densa, disponibilidad de "métodos rápidos", propiedades de técnicas de discretización espacial y temporal y cómo evaluar qué propiedades de un problema físico son necesarias para que una técnica de discretización sea adecuada. Si usted es principalmente un usuario final, este conocimiento puede ser de muy alto nivel.
Ingeniería de software y bibliotecas
Alguna familiaridad con las técnicas de abstracción y el diseño de la biblioteca es útil para casi todos en la ciencia computacional. Si trabaja con métodos de prueba de concepto, esto mejorará la organización de su código (facilitando que alguien más lo "traduzca" en una implementación sólida). Si trabaja en aplicaciones científicas, esto hará que su software sea más extensible y facilitará la interfaz con las bibliotecas. Sea defensivo al desarrollar código, de modo que los errores se detecten lo antes posible y los mensajes de error sean lo más informativos posible.
Herramientas
Trabajar con software es una parte importante de la ciencia computacional. La competencia con el idioma elegido, el soporte del editor (por ejemplo, etiquetas, análisis estático) y las herramientas de depuración (depurador, valgrind) mejoran en gran medida la eficiencia de su desarrollo. Si trabaja en entornos por lotes, debe saber cómo enviar trabajos y obtener sesiones interactivas. Si trabaja con código compilado, un conocimiento práctico de compiladores, vinculadores y herramientas de compilación como Make le ahorrará mucho tiempo. El control de versiones es esencial para todos, incluso si trabaja solo. Aprende Git o Mercurial y úsalo para cada proyecto. Si desarrolla bibliotecas, debe conocer los estándares de idioma de manera razonablemente completa para que casi siempre escriba código portátil la primera vez, de lo contrario, quedará enterrado en las solicitudes de soporte del usuario cuando su código no se construya en su entorno funky.
Látex
LaTeX es el estándar de facto para la publicación científica y la colaboración. El dominio de LaTeX es importante para poder comunicar sus resultados, colaborar en propuestas, etc. Crear secuencias de comandos para la creación de figuras también es importante para la reproducibilidad y la procedencia de los datos.