Chaque scientifique doit en savoir un peu plus sur les statistiques: quelle est la corrélation, quel est l’intervalle de confiance, et ainsi de suite. De même, chaque scientifique devrait en savoir un peu plus sur l’informatique: la question est de savoir quoi. À quoi peut-on raisonnablement s'attendre de ce que tous les scientifiques en activité savent comment créer et utiliser un logiciel? Notre liste de compétences de base - ce que les gens doivent savoir avant de s’attaquer à quoi que ce soit avec "cloud" ou "peta" dans son nom - est:
- programmation de base (boucles, conditions, listes, fonctions et entrées / sorties de fichiers)
- le shell / script de base shell
- contrôle de version
- combien pour tester les programmes
- SQL de base
Beaucoup de choses ne figurent pas dans cette liste: la programmation matricielle (MATLAB, NumPy, etc.), les feuilles de calcul bien utilisées, ils sont aussi puissants que la plupart des langages de programmation), les outils d'automatisation des tâches tels que Make, etc.
Alors: qu'y a-t-il sur votre liste? Que pensez-vous qu'il soit juste de s'attendre à ce que tous les scientifiques sachent ces temps-ci? Et que retireriez-vous de la liste ci-dessus pour faire de la place? Personne n'a assez de temps pour tout apprendre.
Réponses:
"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.
la source
Ma propre expérience est en informatique proprement dite, mes opinions peuvent donc être un peu biaisées. Cela dit, j'ajouterais "des algorithmes de base et des structures de données" à la liste. Ce que je veux dire par notions de base est essentiellement la recherche et le tri linéaires, ainsi que les structures de données telles que les arbres équilibrés, les tas ou les tables de hachage.
Pourquoi? Dans la plupart des algorithmes de calcul, vous passez un temps et des efforts extraordinaires à transférer des données et à ne rien calculer. Avez-vous déjà implémenté un code d'éléments finis? C'est environ 90% de l'organisation des données. La différence entre faire cela et le faire bien peut être un ordre de grandeur de l'efficacité de calcul.
J'ajouterais également un point mineur lié à l'informatique: une brève introduction sur le fonctionnement réel d'un processeur, ses atouts et ses inconvénients. Par exemple:
C’est un travail fastidieux et ennuyeux, mais cela ne prend que quelques minutes, et le garder à l’esprit vous permettra d’écrire du bon code dès le départ ou de concevoir des algorithmes qui ne reposent pas sur des caractéristiques matérielles inexistantes.
En ce qui concerne ce qu'il faut supprimer de la liste, je pense que SQL est un peu trop pour les scientifiques en informatique. En outre, le test de logiciel est important, mais c'est une science en soi. Les tests unitaires et les types de données abstraits corrects doivent être enseignés avec la programmation de base, et ne nécessitent pas de programme de maîtrise de deux ans.
la source
J'ajouterai peut-être à cela plus tard, mais pour commencer, je supprimerais le "script shell" et le remplacerais spécifiquement par "le script Python". Python est beaucoup plus portable que les scripts shell et plus lisible que des langages shell et de script comparables. Sa vaste bibliothèque standard et sa popularité dans les sciences (à l'exception peut-être de la biologie, qui utilise également Perl) en font une excellente lingua franca computationnelle , sans oublier une bonne première langue pour l'apprentissage de la programmation. C'est maintenant la première langue enseignée aux majors EECS au MIT et elle est populaire sur le marché du travail, en particulier dans l'informatique scientifique. Sa documentation en ligne est exhaustive et de nombreux textes de programmation basés sur Python sont également disponibles en ligne.
En utilisant Python, vous pouvez enseigner des constructions de programmation de base, ainsi que des scripts. De plus, Python offre un excellent support pour les tests unitaires. Python pourrait donc également être utilisé pour enseigner les tests unitaires. Python possède également une API de base de données étendue (qui peut remplacer ou augmenter l'obligation d'apprendre le langage SQL), ainsi que quelques utilitaires de construction offrant des fonctionnalités similaires à Make. Personnellement, je préfère SCons à Make, car je trouve Python plus facile à documenter et à tester que les scripts shell.
En fin de compte, le principe de motivation derrière mon shilling flagrant pour Python est l’efficacité. Il est beaucoup plus facile de rationaliser votre flux de travail si vous pouvez effectuer la majeure partie de votre travail dans une seule langue ou un seul outil, notamment lorsque cet outil est un langage de script expressif. Bien sûr, je pourrais tout faire en C, mais mon programme serait 5 fois plus long et il est probable que je n’ai pas besoin de la vitesse. À la place, je peux utiliser Python pour importer des données à partir d'un fichier texte, les tracer, appeler des routines d'optimisation, générer des variables aléatoires, tracer mes résultats, écrire les résultats dans un fichier texte et tester mon code. Si Python est trop lent, il est possible d’envelopper Python dans du code C, C ++ ou Fortran qui s’occupe des tâches de calcul intensif. Python est, pour moi, un guichet unique pour la plupart de mes besoins en informatique scientifique.
Python n'est pas encore exactement MATLAB; SciPy et NumPy ont encore du chemin à faire en termes de fonctionnalités, mais en termes d’utilité générale, j’utilise Python pour une plus grande variété de tâches que MATLAB.
la source
Calcul en virgule flottante. La plupart des sciences traitent des valeurs du monde réel, et les valeurs du monde réel sont souvent représentées comme des points flottants dans le monde de l'informatique. Il existe de nombreux pièges potentiels avec des flotteurs qui peuvent causer des ravages sur la signification des résultats.
La référence préférée pour ce sujet semble être "Ce que chaque informaticien devrait savoir sur l'arithmétique en virgule flottante (1991)" de David Goldberg http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.22.6768
la source
Un scientifique en informatique doit avoir une connaissance suffisante en informatique, en mathématiques et dans un domaine d'application en science / ingénierie. Je voudrais inclure des compétences dans chacun des domaines suivants:
Mathématiques:
L'informatique:
Science / Ingénierie - dépend de l’application dans laquelle vous souhaitez vous spécialiser. Dans mon cas particulier (ingénierie), j’ajouterais des éléments tels que la mécanique du continuum, le transfert de chaleur, la dynamique des fluides, la méthode des éléments finis, etc. vous possédez de nombreux domaines scientifiques, plus vous êtes polyvalent en tant que scientifique en informatique.
la source
Excellente question suivie de réponses fascinantes! Je voudrais ajouter un petit ajout. Autant que je sache (moi-même et par procuration), un outil Tout-en-un est généralement très utile. Un tel outil pourrait être MATLAB, Octave ou même Python (avec des bibliothèques). Chaque fois que vous rencontrez un problème dans votre "zone de confort", une bonne idée (pour autant que je sache et que je pense) serait de vous essayer à un outil Tout-en-un. Vous pouvez essayer d'écrire vos propres codes plus tard. L'avantage de tels forfaits est que la programmation n'interfère pas avec la compréhension de ce que vous faites.
Prenons un exemple d'infographie. L'écriture d'un code pour la traduction, la rotation ou la mise à l'échelle d'une figure correspond à 10 lignes de code dans MATLAB (tops), mais peut fonctionner pour des pages en C. Je ne dis pas que C n'est pas bon. Tout ce que je dis, c'est que si vous n'avez pas une bonne raison d'écrire des codes en C, MATLAB serait un moyen plus simple, meilleur et plus intuitif.
Certains peuvent être en désaccord et affirmer que la programmation de type C est un excellent moyen de renforcer l’intuition. Peut etre c'est. Mais lorsque vous n'avez pas à traiter un problème plus de quelques fois, il n'est guère justifié de s'asseoir et d'écrire vos propres codes dans une langue comme C.
la source
Bon sens et intuition… Ce dernier ne vient qu'avec le temps et après avoir «survécu» à deux expériences honteuses dans le grand monde.
la source