"Scientifique informatique" est un peu large, car il inclut les personnes qui effectuent l'analyse numérique avec des implémentations papier / LaTeX et de démonstration, des personnes écrivant des bibliothèques à usage général, et des personnes développant des applications qui résolvent certaines classes de problèmes, ainsi que les utilisateurs finaux qui les utilisent. applications. Les compétences requises pour ces groupes sont différentes, mais il existe un grand avantage à être familiarisé avec le "full stack". Je vais décrire ce que je pense être les parties critiques de cette pile. Les personnes qui travaillent à ce niveau devraient bien sûr avoir une connaissance plus approfondie.
Connaissance du domaine (par exemple, physique et ingénierie)
Tout le monde devrait connaître les bases de la classe de problèmes qu’ils résolvent. Si vous travaillez sur des EDP, cela signifierait une connaissance générale de quelques classes d’EDP (par exemple, Poisson, élasticité et Navier-Stokes incompressible et compressible), en particulier quelles propriétés sont importantes pour capturer "exactement" et ce qui peut être jusqu’à discrétisation error (ceci informe le choix de la méthode concernant la conservation locale et les intégrateurs symplectiques). Vous devez connaître certaines fonctionnalités et types d’analyses présentant un intérêt pour les applications (optimisation de la levée et de la traînée, prévision des défaillances, inversion des paramètres, etc.).
Mathématiques
Tout le monde devrait avoir une connaissance générale des classes de méthodes pertinentes pour leur domaine de problèmes. Cela inclut les caractéristiques de base de l’algèbre linéaire dense et dense, la disponibilité de "méthodes rapides", les propriétés des techniques de discrétisation spatiale et temporelle et la manière d’évaluer les propriétés nécessaires à un problème physique pour qu’une technique de discrétisation soit appropriée. Si vous êtes principalement un utilisateur final, cette connaissance peut être de très haut niveau.
Génie logiciel et bibliothèques
Une certaine connaissance des techniques d'abstraction et de la conception des bibliothèques est utile pour presque tout le monde en informatique. Si vous travaillez sur des méthodes de preuve de concept, cela améliorera l'organisation de votre code (ce qui permettra à quelqu'un d'autre de le "traduire" plus facilement en une implémentation robuste). Si vous travaillez sur des applications scientifiques, cela rendra votre logiciel plus extensible et facilitera l’interface avec les bibliothèques. Soyez prudent lorsque vous développez du code, de sorte que les erreurs soient détectées le plus tôt possible et que les messages d'erreur soient aussi informatifs que possible.
Outils
Travailler avec des logiciels est une partie importante de la science informatique. La maîtrise de la langue de votre choix, la prise en charge de l'éditeur (balises, analyse statique, par exemple) et les outils de débogage (débogueur, valgrind) améliorent considérablement l'efficacité de votre développement. Si vous travaillez dans des environnements par lots, vous devez savoir comment soumettre des travaux et obtenir des sessions interactives. Si vous travaillez avec du code compilé, une connaissance pratique des compilateurs, des lieurs et des outils de construction tels que Make vous fera gagner beaucoup de temps. Le contrôle de version est essentiel pour tout le monde, même si vous travaillez seul. Apprenez Git ou Mercurial et utilisez-le pour chaque projet. Si vous développez des bibliothèques, vous devez connaître les normes de langage de manière assez complète pour que vous écriviez presque toujours du code portable dès la première fois, sinon vous serez enterré dans les demandes de support des utilisateurs lorsque votre code n’intègrera pas leur environnement funky.
Latex
LaTeX est le standard de facto pour la publication scientifique et la collaboration. La maîtrise de LaTeX est importante pour pouvoir communiquer vos résultats, collaborer sur des propositions, etc. La création de figures avec des scripts est également importante pour la reproductibilité et la provenance des données.