Question sur les languages informatiques nécessaires au physicien

Répondre
Partager Rechercher
J'ai jamais vraiment aimé l'informatique, et j'ai souvent eu de gros sourires devant des amis en lutte avec leurs énormes bouquins de Java, C++ et autres.

Mais je me suis rendu compte maintenant à quel point les langages sont présents dans tout projet, que ce soit pour les calculs, la modélisation, la programmation. Moi j'aime ke la phyyysique

Je demande donc conseil à vous, les physiciens sur des projets, les thésards, les étudiants (pour de la physique fonda)

Quels sont les langages vraiment importants et utiles EN VRAI ?

Au Magistère on m'a appris un peu de C/C++ , mais ça doit être qu'une partie des vraies possibilités de ces langages
Que dois faire ? Apprendre à programmer en shell, en SQL ? Le Java ? Le C et C++? et les 10-20-30 autres ?
Je n'y connais vraiment rien en info, certains de ces langages doivent être dépassé. Je tiens à avoir à ma disposition de gros outils informatiques que je comprend et dont je ne suis plus dépendant..mais j'ai déjà beaucoup d'autres choses à apprendre, alors j'ai peur de me perdre là dedans.

En gros disons ;

- Quels sont les indispensables ?
- Quels sont les optionnels ?
- Quels sont ceux dont l'utilisation restera basique et où apprendre le langage en entier serait simplement une perte de temps ?

Je pense surtout à dans 5-10 ans, d'où mon souci de ne pas apprendre des trucs voués à être remplacer

Merci Merci
Tu as besoin de savoir utiliser Fortran, et les extentions LaPACK et ScaLaPACK.

Tu peux eventuellement t'interesser a MPI (parmis lesquels je te conseil Open MPI) ou Open MP, suivant le type de calculateur auquel tu as acces. De facon generale, si tu vises des stations cluster ou des desktop rassembles en clusters ca sera MPI.

De facon la plus generale; le plus important c'est pas vraiment le langage, c'est le calcul numerique. Tu as besoin de savoir comment faire une preconditionnement de matrice, calculer un LU, un CG, un QR... Heureusement LaPACK vient a ton secours sur tout ces trucs, donc tu devras juste savoir ce que sont ces methodes et pas savoir les implementer (heureusement que moi et mes copains on est la quand meme non ? ). Tu devras aussi savoir ce qu'implique un calcul qui n'est pas stable numeriquement, et comment le rendre plus stable (avec le preconditionnement) pour eviter de mauvaises surprises sur tes resultats.
Je dirais que plus qu'un langage bien précis, ce que tu dois apprendre avant tout ce sont les bases de la programmation, mais apparemment tu as déjà fait du C donc tu dois savoir tout ça : qu'est ce qu'une variable, qu'est ce qu'une fonction, un argument etc, ce sont les trucs que tu retrouveras dans à peu près tous les langages que tu pourras toucher, si tu es à l'aise avec ça tu pourras apprendre un nouveau langage sans trop de problème.
Sans savoir dans quoi tu vas travailler, il est inutile pour toi d'apprendre à fond un langage précis, ce serait plus une perte de temps à mon sens. Si vraiment tu veux être plus à l'aise, je pense que te mettre un peu plus sérieusement au C peut t'être profitable.

Et sinon comme déjà dit, Matlab est vraiment primordial, je ne sais pas si tu as des cours dans ton école ? Moi je suis en stage actuellement, niveau bac+4, et la majeure partie de mes camarades de classe ainsi que moi utilisons Matlab pour faire les calculs et les simulations. C'est plus vers ça que tu devrais te tourner je pense, les logiciels de simulation et de modélisation. Par exemple Matlab/Simulink est vraiment très puissant, avec un langage de programmation assez basique et dont la syntaxe est proche du C. Autre logiciel pour les calculs numériques : Femlab (ou comsol) mais là ce n'est pas de la programmation, enfin pas à ma connaissance.

De toutes façons tout le monde va vouloir te vendre le langage qu'il utilise le plus souvent dans son boulot, moi je persiste à dire qu'il ne faut pas, avant que tu saches réellement dans quoi tu vas travailler, te spécialiser dans un langage bien précis, reste sur des trucs généraux pour acquérir plus d'aisance, avec cette aisance tu pourras apprendre rapidement n'importe quel langage le moment venu.
Matlab n'est pas primordial, ca depend énormément du genre de physique que le monsieur veut faire. Si ce n'est pas de l'ingénierie, pas besoin - a ma connaissance. Quand au fortran, je ne suis pas sur que ca soit si utile que ca desormait. Le C++ le remplace dans tous les programmes que j'utilise, en simulation ou en analyse.

La reponse a ete donnee plus haut: apprend les langages de base (C,C++, fortran parce qu'on sait jamais, tu peux tomber sur un vicieux amoureux du passe ). Surtout, gave toi d'algorithmique.
Je fais juste remarquer que Fortran est encore bien present dans le monde du HPC (dont les physiciens sont les plus gros utilisateurs, et que c'est loin d'etre un langage vintage, pas mal de choses sont encore ecrites en Fortran 90 aujourd'hui, et des extensions en sont sorties plutot recement (HPF par exemple).


Par ailleurs, LaPACK ou ScaLaPACK n'ont rien a voir avec Fortran, ces bibliotheques peuvent etre utilisees avec C, C++, voir Java en JNI (et a priori avec n'importe quel langage qui peut etre link avec la lib, avec plus ou moins de facilite).

MatLab c'est tres bien, mais parfois on a besoin de plus de puissance de calcul. Dans ce cas faut plutot se diriger vers le HPC, clusters, MPI, Open MP et tout le toutim.
Je vous remercie de vos réponses.

Mon but est quand même de prendre de l'avance et d'apprendre "en plus" donc je pourrais attendre de savoir mon domaine et quel info y sert mais je suis pas patient, je dois apprendre

Pour le MatLab, oui bien sûr, je l'ai pas cité mais il est très présent.

Je vais partir pour C/C++/Fortran/MatLab et pour la suite, on en reparlera quand je saurai mieux de quoi je parle (), dans quelques mois, quelques piles de gros livres hardcore et quelques déprimes "Mais pourquoi j'apprend ça ?! Où est le rapport avec les oiseaux qui j'entend si gaiement gazouiller"

[Je viens d'y penser..même si certains sont liés et ont des similarités dans leur "fonctionnement" ou "mode d'opération", pour apprendre..quel ordre des 4 parait le plus logique et progressif ? F C C++ M ?]
Pour ma part, à bac+4 aussi je suis en stage où je fais que du matlab, donc c'est forcément très utile.

J'ai appris le Java, apparemment ça serait assez proche du C++, de toute façon j'ai l'impression qu'une fois que tu sais programmer, apprendre un nouveau langage c'est juste s'habituer aux syntaxes.
Citation :
Publié par Alco
Pour ma part, à bac+4 aussi je suis en stage où je fais que du matlab, donc c'est forcément très utile.
Non, ca depend entierement du domaine.

Mothra, pour le fortran, c'est juste que je ne l'ai jamais appris et que ca ne m'a jamais manque. Apres, je ne sais pas a quels programmes (ou plutot, "outil informatique") tu penses.

Citation :
J'ai appris le Java, apparemment ça serait assez proche du C++, de toute façon j'ai l'impression qu'une fois que tu sais programmer, apprendre un nouveau langage c'est juste s'habituer aux syntaxes.
Ca n'est qu'en partie vrai. Essayes le Caml light qu'on rigole
Citation :
Publié par Railgun
Ca n'est qu'en partie vrai. Essayes le Caml light qu'on rigole
C'est pas tout a fait la même famille de langage, les langages fonctionnels sont un cas un peu... "a part" on va dire ( comme les langages objets d'ailleurs, passer du procédural au "bon" objet c'est pas toujours si évident que ça ).
Il faut maitriser MatLab/Simulink qui devient un passage quasi obligé en industrie, et je dirais avoir au moins un minimum de Java et de C

Fortran tu peux l'oublier pour l'instant par contre, si tu veux bosser en industrie, après en recherche je sais pas
Franchement je vois pas ce qu'un physicien (ou n'importe qui d'autre d'ailleurs) pourrait gagner à apprendre java. À moins que tu ne tiennes à mettre des kikoo animations sur ton site qui feront planter la moitié des navigateurs, et être capable de soutenir une conversation avec des gens dans le vent (« ouais java c'est trop cool c'est multi
plateforme !!! ») t'auras toujours une flopée de langages 1000 fois plus propres et plus efficaces pour coder ce dont tu as besoin.

Citation :
Publié par Railgun
Ca n'est qu'en partie vrai. Essayes le Caml light qu'on rigole
Ben en caml tu peux coder de l'impératif pur si ça te chante, certes ça n'a aucun intérêt mais c'est possible.
Citation :
Publié par Cosima von Bülow
Fortran tu peux l'oublier pour l'instant par contre, si tu veux bosser en industrie, après en recherche je sais pas
En R&D Fortran est encore présent, certes quand on a un nouveau modèle à faire on se tournera plutôt vers du C/C++ mais il arrive régulièrement qu'on ait à bidouiller un modèle déjà existant, à l'utiliser, à comprendre comment il marche.. et quand il est en Fortran c'est plus facile si on sait le lire.

Ca veut pas dire pour autant qu'il faut se prendre la tête, comme le dit Mothra il existe des bibliothèques d'outils mathématiques, mais autant savoir les utiliser.
Citation :
Publié par Alco
J'ai appris le Java, apparemment ça serait assez proche du C++, de toute façon j'ai l'impression qu'une fois que tu sais programmer, apprendre un nouveau langage c'est juste s'habituer aux syntaxes.
Avis de développeur :
Y a quand même deux nettes différence entre le java et le C++.
Le C++ c'est du compiler donc si tu change d'environnement ( OS, système...) tu dois recompiler ton code source dans le même environnement pour être sur à 100% de la compatibilité.
Le java c'est du pré compiler interprété. En effet du compile ton code et ensuite c'est le runtime java installé dans l'environnement qui interprète ton code ( vérifier les versions des bibliothèques java tout de même ) donc ton code est multi-platforme. De plus le java c'est du codes managé, en effet tu peux te passer de la gestion mémoire, le java s'en occupe pour toi. De plus le multi-threading y est très facile mettre en place ( du moins de mon point de vue ) contrairement au C/C++.

Enfin savoir programmer cela ne veut pas dire grand chose. Savoir concevoir de bons algorithmes est beaucoup plus important ( surtout si c'est pour faire des calcules complexe ou des analyses de données exhaustive).
je suis en doctorat en ce moment j'utilise que matlab/scilab

certain de mes collegues utilisent labview pour ce qui est du controle de materiel de mesure

sinon le bon vieux papier crayon calculette ca fait encore pas mal de truc ^^

apres pour les grosses simu faut pas croire on a des logiciels spécialisé (electromagnétisme pour ma part)
Citation :
Publié par Railgun
Non, ca depend entierement du domaine.

Mothra, pour le fortran, c'est juste que je ne l'ai jamais appris et que ca ne m'a jamais manque. Apres, je ne sais pas a quels programmes (ou plutot, "outil informatique") tu penses.
Bien sur que tu n'en a jamais eu "besoin". Fortran n'est pas plus expressif que C et si tu es un bon programmeur C tu t'en sors aussi bien. Seulement Fortran c'est sensiblement plus simple que C pour des physiciens, tu n'as pas besoin de t'occuper des allocations, le typage est semi automatique, la structuration des tableaux a n dimension est bien plus facile. Bref ca ne fait rien de plus, ou rien de mieux, c'est juste plus simple a l'usage (et bien moins verbeux que C et par consequent que Java).

A mon avis Fortran fait tout ce qu'un physicien a besoin de facon efficace. Ca n'est pas un langage que je conseillerais a un informaticien par contre. C'est fait pour faire des maths; et pour faire autre chose que des maths c'est pas le top.

Pour l'ordre; de mon cote j'entamerais avec MathLab pour savoir faire un certain nombre de choses directement. Une fois MathLab plus ou moins maitrise, je passerais a Fortran+LaPACK. Il est alors possible de s'arreter la et de ne faire que du Fortran sequentiel, soit apprendre MPI, puis eventuellement C ou encore s'avancer sur l'extension HPF (High Performance Fortran : Parallel).
Citation :
Publié par Mothra
A mon avis Fortran fait tout ce qu'un physicien a besoin de facon efficace. Ca n'est pas un langage que je conseillerais a un informaticien par contre. C'est fait pour faire des maths; et pour faire autre chose que des maths c'est pas le top.
C'est pas vraiment le problème, Mothra ... C'est plus une question de communauté. En physique des particules, Fortran laisse doucement la place à C/C++ (avec le passage de Paw vers ROOT, quand le LHC ouvrira, il y aura de moins en moins de fortran). Le Fortran peut peut-être permettre de faire tout ce dont tu as besoin (et encore, le coté orienté objet du C++ présente un grand nombre d'avantage), si tous tes collègues sont en C++, tu vas te retrouver gros jean comme devant.

En bref, ca dépend du domaine dans lequel tu vas travailler, voire même de l'équipe que tu vas intégrer. Même si avec le fortran et le C, et les quelques logiciels suscités (plus quelques logiciels de calculs formels dont je mettrais les noms s'ils me reviennent), on a fait à peu prêt le tour.
C'est certain Harermuir. SI le programme phare de l'equipe est en C, il va falloir apprendre le C. Seulement je pense que Fortran est plus digeste a apprendre seul dans son coin; et qu'une fois qu'il est maitrise, passer au C c'est l'affaire de quelques semaines. Comme on ne peut pas savoir par avance, apprendre Fortran ou C c'est kif kif, l'un comme l'autre sont des "probables" requis, et il est possible de passer de l'un a l'autre facilement.

J'ai du mal a voir a quoi sert l'oriente object pour faire de la physique et du calcul numerique, mais tu dois surement savoir toi, c'est toi le physicien
Citation :
Publié par Mothra
J'ai du mal a voir a quoi sert l'oriente object pour faire de la physique et du calcul numerique, mais tu dois surement savoir toi, c'est toi le physicien
Bah basiquement, on travaille avec des objets physiques, auquel on attribue des grandeurs et sur lesquels on va vouloir faire certaines opérations ... la logique orientée objet colle beaucoup mieux, en fait, je trouve. Maintenant, c'est plus du confort qu'un progrés fondamentale.
Ca ne tue pas trop les performances de faire des objets de grain aussi fin ? L'overhead de l'utilisation des objets est non negligeable si on veut faire essentiellement du calcul ou de la simulation avec des millions d'entitees. Enfin je suppose que vous y avez reflechi, ou que les choses a simuler sont peu nombreuses De mon cote je vois passer des codes qui alignent plusieurs millions d'heures de calcul sequentiel, donc les gens sont tres attentif a la performance du code. C'est surement moins crucial pour un truc qui se fait en 10 minutes sur un desktop
Citation :
Publié par Mothra

J'ai du mal a voir a quoi sert l'oriente object pour faire de la physique et du calcul numerique, mais tu dois surement savoir toi, c'est toi le physicien
Root est de plus en plus utilise, apparement, il l'est en tout cas dans certains labos majeurs. Geant4 est tres utilise egalement, et effectivement on traite les formes geometriques (milieux, tout ca) et les particules comme des objets. Au niveau de la programmation c'est assez simple et ca fonctionne bien, quand au probleme de performances, c'est toi la specialiste.

Moi je dirais: il faut apprendre les deux. Je ne connais pas un mot de fortran mais je n'en aurais sans doute jamais besoin, mais le C++ n'est pas universel.
Par expérience, tout ce qui calcul numérique pur, c'est en général du fortran (77/90), mais la mode est (était ? ) à l'appel des bibliothèques fortran par des programmes en c++ qui donnent plus de souplesse. En tout cas en physique des particules/cosmologie, qui sont quand même basées sur de l'utilisation intensive de simulation.
C'est un plaisir de lire tout ça, que d'aventures informatiques palpitantes m'attendent !!

Je vais te suivre maraud, ce que je voulais c'était ne pas juste me servir de l'info comme outil mais pouvoir changer les codes et savoir adapter moi-même les programmes en fonction des projets (ou simplement améliorer les codes).

Je l'avais pas trop précisé mais c'était bien pour de la cosmologie/particules
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés