Quelle langue dois-je apprendre pour la science informatique?

11

Je suis entièrement nouveau dans la notion de science informatique et je cherche un bon point de départ.

Je comprends qu'il n'y a pas de meilleur langage objectivement, mais j'aimerais apprendre un langage qui a une présence incontestablement forte et proéminente en matière de science informatique - une langue considérée comme ayant des capacités et une efficacité exceptionnelles.

Pour commencer, je penchais vers la modélisation liée aux liaisons et interactions atomiques, avec un besoin de représentations / simulations graphiques.

Certaines langues ont-elles tendance à être meilleures pour certains domaines que d'autres (c.-à-d. Physique vs mathématiques pures)? Ou est-ce que le choix d'une langue est basé sur d'autres facteurs?

J'ai souvent entendu le nom Fortran.

Suggestions?

user1299028
la source
1
C ++ et Fortran sont des langages bien connus dans la communauté. Récemment, vous pouvez voir une augmentation de l'utilisation des langages dynamiques. Vous choisissez souvent votre bibliothèque et non votre langue.
vanCompute
9
Je me souviens du dicton que les vrais programmeurs peuvent écrire Fortran dans n'importe quelle langue.
hardmath
1
Voici une question très similaire avec beaucoup de réponses: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
Ondřej Čertík
1
«Je comprends qu'il n'y a pas de meilleure langue objective» - précisément, alors pourquoi ne pas apprendre à être indépendant de la langue, afin que vous puissiez écrire dans la langue qui vous est lancée?
JM
2
Vous devez maîtriser l'anglais. Sans cela, vous n'irez nulle part en science informatique.
Johannes

Réponses:

15

Il s'agit principalement des bibliothèques numériques à votre disposition qui vous aideront à accomplir votre tâche. C / C ++ a un grand nombre de bibliothèques numériques implémentées pour eux, mais étant des langages de bas niveau ne sont pas les meilleurs pour prototyper quelque chose rapidement.

Je pense que pour aller rapidement vers une solution, je recommanderais d'utiliser quelque chose comme Matlab ou Mathematica. Ils ont un grand ensemble d'outils et sont de très haut niveau. Très probablement, votre implémentation là-bas ne sera pas mise à l'échelle pour une utilisation en production, mais cela pourrait être un terrain de jeu agréable pour essayer différentes méthodes. Une fois que vous connaissez un chemin à suivre, vous pouvez toujours implémenter quelque chose en C / C ++ plus efficacement.

akg
la source
4
Beaucoup de gens - à l'intérieur et à l'extérieur du monde universitaire - ne font pas vraiment confiance au code, à moins qu'il n'ait au moins une suite de tests automatisés minimale. Je ne sais pas à quoi ressemble l'outillage pour de telles choses dans matlab et mathématique, mais il y a plusieurs paquets sympas pour des langages plus courants comme Python et C ++.
cjordan1
3
MATLAB a MATLAB xUnit, mais Python et C ++ ont plus (et, à mon avis, de meilleures) suites de tests.
Geoff Oxberry
24

Python!

  1. Commencez directement à l'aide de la bibliothèque numpy , de petits scripts et du shell interactif ipython .
  2. Obtenez plus avancé à l'aide de nombreux livres et tutoriels gratuits .
  3. Soyez plus productif en utilisant scipy comme interface avec des routines numériques hautement performantes et matplotlib pour la visualisation
  4. Profitez de modules puissants et bien développés pour le calcul scientifique comme Krypy , FeNiCS et bien d'autres
  5. Notez que la transition en douceur entre la programmation plate et orientée objet et la modularité inhérente de Python rendent les projets plus importants faciles à gérer.
  6. Rendez votre code aussi rapide que C ou Fortran en réécrivant simplement les parties critiques dans cython . Vous pouvez également facilement inclure des routines écrites en Fortran ou C .

Cela paraphrase ce que je pense être la meilleure façon d'aborder un problème de calcul scientifique. Commencez par mettre la main sur le problème en jouant avec des exemples de jouets dans de petits scripts. Devenez plus systématique et mettez en place une suite de code. Faites ensuite fonctionner votre code !!! Enfin, si nécessaire, effectuez l'optimisation du code. Ne réinventez pas la roue et ne faites pas d'optimisation prématurée.

(Avantages supplémentaires: Python est gratuit - aucun problème de licence, grande communauté, par exemple sur stackoverflow, modules pour une bonne programmation comme test unitaire ou journalisation ...)

Jan
la source
5

Fortran: comme Matlab, facile à apprendre et à utiliser et rapidement productif, mais seulement bon pour l'informatique numérique

C ++: Difficile à maîtriser (cela vous prendra des années) mais beaucoup utilisé en dehors de l'informatique numérique (sécurité d'emploi)

Python: beaucoup recommandé de nos jours mais trop lent pour un travail non trivial. Vous devrez écrire tous vos noyaux sous-jacents coûteux en calcul en C, puis les appeler depuis Python, ce qui signifie que vous devrez apprendre (au moins) deux langues

user4245
la source
1
Je dirais que la courbe d'apprentissage de Fortran et C ++ est quelque peu similaire. J'ai acquis des compétences suffisantes dans les deux pour résoudre la fin plus simple des problèmes en quelques mois chacun provenant d'un arrière-plan de java, matlab et c #. Selon les langues que quelqu'un connaît, je pourrais voir le c ++ être beaucoup plus facile à apprendre que fortran car la plupart des gros codes sont écrits dans des versions datées.
Godric Seer
@Godric: À ~ 600 pages, la norme Fortran 2008 est inférieure à la moitié de C ++ 11 (~ 1300 pages)
stali
1
@stali, oui, mais par exemple, je travaille avec environ un quart de million de lignes de code hérité écrites en Fortran77. J'ai donc dû apprendre le style de 77 pour pouvoir travailler avec lui, 90-95 pour y apporter des modifications maintenables (car les blocs communs sont attrayants), puis '08 pour ne pas être coincé sur une décennie dans le passé. Fortran, bien qu'ancien langage, a subi d'énormes changements au cours des dernières décennies, et à moins que vous ne partiez de zéro, apprendre son héritage n'est pas anodin.
Godric Seer
2
Je ne suis pas d'accord avec l'affirmation selon laquelle Python est "trop ​​lent pour un travail non trivial". En effet, si vous écrivez vos multiplications matricielles-vectorielles (et similaires) uniquement en Python, vous allez avoir un mauvais moment. L'abstraction vers des langages plus efficaces a déjà été faite pour vous: NumPy, Scipy ont probablement tout ce dont vous aurez besoin. Ou l'un des 50 000 autres packages.
Nico Schlömer
1
@ NicoSchlömer Je serais d'accord avec "trop ​​lent pour un travail non trivial". Ma simulation en Python (Numpy / Scipy) est plus lente que le même code en version Fortran90 environ 10x. Je recommande Fortran90 ou C ++.
fronthem
4

Réponse courte
Apprenez les bases du code orienté objet via python et apprenez les bases de l'informatique via C. Lorsque vous êtes au moins assez bien avec ces deux autres langages, apprenez le C ++, car vous pouvez faire à peu près tout en C ++ et exécutez-le rapidement (même s'il faut une éternité pour écrire).

Réponse plus longue
Alors, voici la chose: pour votre premier projet, vous serez dans le laboratoire de quelqu'un travaillant sur le code de quelqu'un d'autre. Dans ce cas, ce sera eux qui choisiront le langage de programmation. Ce que je pense personnellement est plutôt génial!

Je veux dire, en tant que débutant, vous ne connaîtrez pas vraiment votre cul de votre coude pendant un certain temps, et, surtout lorsque vous ne savez pas ce que vous faites, apprendre à programmer peut être empruntant. Ainsi, il est bon d'avoir la structure et les limites qui découlent du travail sur le code de quelqu'un d'autre, et c'est bien d'avoir la motivation et l'enthousiasme qui ne peuvent venir que du travail sur un vrai projet.

Néanmoins, quel que soit le langage utilisé par votre laboratoire (surtout s'il s'agit de Matlab), vous devriez probablement apprendre le python, le C et le C ++. En particulier, si vous ne venez pas d'une formation en informatique, vous DEVEZ lire "The C Programming Language" de Kernighan et Ritchie. Il a 35 ans et donne la nette impression que ses auteurs programmaient sur des cartes perforées, mais c'est le plus rare des oiseaux: un livre informatique intemporel. Cela clarifiera beaucoup de choses.

tel
la source