Forum Programmation.c++ Quelle formation en C++ pour un physicien ?

Posté par (page perso) . Licence CC by-sa
Tags : aucun
2
11
sept.
2016

Bonjour rum,

Je t’écris pour le compte d’un ami, physicien de formation, qui souhaite travailler dans le calcul scientifique. Il en a déjà fait, en pratique, pendant ses études, mais autant il a largement le niveau nécessaire en physique, autant en programmation, ce n’est pas le cas (en gros, il programmait sans avoir appris, en copiant/collant/adaptant des blocs de code existants). Les offres d’emploi concernent essentiellement C++, avec un peu de Fortran et de Python. Il n’a jamais appris les bases de l’informatique (algorithmique, vocabulaire du métier…), ce qui lui pose problème pour se « vendre ».

Il est donc à la recherche d’un moyen de corriger ça. Je suppose que le mieux serait une formation diplômante, mais je pense aussi lui conseiller de s’autoformer avec des livres ou des vidéos, comme celles de l’EPFL :

Je suis preneur de tous les conseils, sachant qu’il habite près de Paris et qu’il a déjà l’habitude de Linux.

  • # mes conseils

    Posté par (page perso) . Évalué à 3.

    Parmi ma bibliothèque, Je conseillerais la lecture de l'introduction à l'algorithmique et The pagmatic programmers. Concernant le langage, l'essentiel c'est de se consacrer à un seul langage dans un premier temps. L'idéal est bien une formation, une autoformation est très correcte aussi. Rien ne remplace la pratique, donc il doit coder coder et encore coder. (L'idéal étant de partir d'un petit projet que l'on fait grossir progressivement).

    • [^] # Re: mes conseils

      Posté par (page perso) . Évalué à 2.

      Je serais d’accord pour les conseiller s’il voulait devenir développeur, mais ce n’est pas le cas. Ces livres semblent pleins de bons conseils d’algorithmique/programmation, et je te remercie du conseil, mais on ne lui demande pas autre chose que savoir traduire des formules en code. Comme conseil de livre, je chercherais plutôt le meilleur dans la catégorie « C++ pour les débutants ».

  • # MOOC

    Posté par (page perso) . Évalué à 2.

    Il y a aussi de très bon MOOCs pour apprendre le C/C++ ou Python (Fortran je ne sais pas, je n'en ai jamais vus ..)

    Sur la plateforme FUN, par exemple, il y a un MOOC Python qui démarre bientôt

    • [^] # Re: MOOC

      Posté par (page perso) . Évalué à 3.

      Sur la plateforme FUN, par exemple, il y a un MOOC Python qui démarre bientôt

      Voilà qui peut être utile. Je transmets, merci.

  • # Preuve de l'autoformation

    Posté par . Évalué à 3.

    L'autoformation, c'est un concept un peu bidon. Le fait est que certaines personnes peuvent lire des dizaines de bouquins, suivre des centaines d'heures de cours, et ne pas être capables de sortir un programme simple. Coder efficacement demande une gymnastique intellectuelle assez spécifique, et, à mon avis, un intérêt réel pour la programmation.

    J'ai par exemple connu des gens qui avaient à peu près le parcours de ton ami physicien (bricoler à la marge dans un projet existant), et qui s'en sont sortis sans n'avoir rien compris à la programmation, simplement en copiant-collant, bidouillant un truc ou deux jusqu'à ce que le compilateur ne dise plus rien, et croiser les doigts pour que ça fasse à peu près ce qu'on voudrait que ça fasse.

    À mon avis, l'autoformation ne peut pas se valoriser en tant que telle. Par contre, c'est peut-être dans ce type de cas qu'un projet de logiciel libre peut être particulièrement utile : produire une base de code robuste en tant qu'unique contributeur (ou contributeur principal) peut illustrer à la fois des compétences en informatique et de l'expérience en gestion de projet.

    Il n’a jamais appris les bases de l’informatique (algorithmique, vocabulaire du métier…), ce qui lui pose problème pour se « vendre ».

    Il ne faut pas retourner le problème. Il ne s'agit pas d'un problème pour se vendre, il s'agit de sa capacité à faire le job pour lequel il voudrait être payé. Bien sûr, il existe une culture informatique qui n'est pas forcément utile (typiquement, connaitre tous les algos de tri, y compris les moins efficaces), mais savoir communiquer avec ses collègues sur des concepts de base est quand même indispensable. De manière générale, savoir nommer les choses, c'est surtout savoir comprendre les principes qu'il y a derrière. Si on ne connait pas la différence entre passer les arguments par valeur ou par référence, il me semble compliqué de faire les choix adéquats en pratique, parce qu'avec le vocabulaire viennent un tas de concepts (portée, pile/tas, optimisation…).

    De toutes manières, C++ n'est certainement pas le bon choix si on veut prétendre connaitre un langage. Je ne suis pas certain qu'il y ait tant de personnes dans le monde qui comprennent toutes les subtilités de C++…

    • [^] # Re: Preuve de l'autoformation

      Posté par (page perso) . Évalué à 2.

      Note bien que je ne mentionne l’autoformation que comme une possibilité. Comme je le dis, je pense que le mieux serait une formation diplômante.

      produire une base de code robuste en tant qu'unique contributeur (ou contributeur principal) peut illustrer à la fois des compétences en informatique et de l'expérience en gestion de projet.

      Sans doute, mais ça ne correspond pas à ce qu’il cherche. Pour lui, la programmation est un outil, pas plus. Et on ne lui demande pas de compétence en gestion de projet.

      De toutes manières, C++ n'est certainement pas le bon choix si on veut prétendre connaitre un langage.

      Peut-être, mais c’est celui qu’on lui demande de « connaitre ». Personne n’attend de lui une dissertation de 100 pages sur les différences entre C++11 et C++14, de bonnes bases sont suffisantes.

      • [^] # Re: Preuve de l'autoformation

        Posté par . Évalué à 2.

        Bonjour,

        Pour lui, la programmation est un outil, pas plus.

        La programmation est un art et non pas un outil. Les outils du spécialiste, par exemple, c'est l'ordinateur, la tablette, le papier, le langage de programmation, les IDE, etc.
        Ce serait comme dire que le câblage électrique est un outil pour l'électricien: ça n'a pas de sens.

        De là, maitriser un langage comme le C++ pour un physicien et pour rester dans les images, c'est comme faire apprendre la conduite automobile à un enfant en commençant par la prise en main d'une formule 1.
        Je conseillerais plutôt des langages de 4ème génération (4GL) pour commencer comme Scilab, Matlab, Maple afin d'avoir une approche "mathématiques" et ensuite en 3GL comme Python, Perl pour finaliser dans 2/3 ans sur du C et peut-être ensuite C++ sachant que faire du C++ sans maîtriser la programmation objet, de mon avis personnel, je ne vois pas l'intérêt.

        • [^] # Re: Preuve de l'autoformation

          Posté par (page perso) . Évalué à 2.

          Il y a visiblement un malentendu.

          Il ne s’agit absolument pas de former un développeur, mais alors pas du tout. L’objectif est de compléter ses compétences en programmation dans le cadre du calcul scientifique, ce qui est complètement différent. On ne lui demandera jamais d’écrire une application, ça ne l’intéresse pas et ça n’intéresse pas ses employeurs potentiels. Ce qu’on lui demande, c’est de savoir faire des calculs en math/physique (c’est déjà le cas), puis les traduire pour qu’un ordinateur les fasse à sa place (c’est là qu’il a besoin d’une formation). Ce genre de choses se fait dans des frameworks existants auxquels il n’a pas besoin de comprendre quoi que ce soit, mais seulement de savoir les utiliser. Ils sont généralement écrits en C++, d’où la fixation sur ce langage et pas un autre (sauf éventuellement Python ou Fortran, comme indiqué).

          Je sais bien que quand on est spécialiste de quelque chose, il est difficile de se mettre à la place de ceux qui ne le sont pas. Pour prendre une analogie, je suis développeur et je dois parfois me déplacer en voiture dans le cadre de mon travail. Supposons que j’aie zéro compétence en conduite. Je vais chercher comment faire pour obtenir le permis B, point. On peut me dire que la conduite est un art et m’envoyer vers des clubs de course automobile, ça ne m’intéresse pas du tout. Ceux qui me diraient ça n’auraient pas tort ; simplement, ce qu’ils disent ne seraient pas adapté à mon cas.

          • [^] # Re: Preuve de l'autoformation

            Posté par . Évalué à 1.

            Non, non, il n'y a pas de malentendu, c'est juste que j'ai peut-être été trop dans le détail trop rapidement!
            Bien entendu qu'il ne faut pas l'envoyer dans des clubs de course automobile mais on apprend bien les différentes pièces mécaniques de la voiture dans la formation théorique du permis de conduire!

            Pour se rattacher au sujet, je disais que pour du calcul scientifique, afin de "s'entrainer" sur des algorithmes, il valait mieux des langages plus "abstraits"/"haut niveau": c'est pour ça que je conseille du SciLab/Matlab entre autres pour le coté algorithme "appliqué à la mathématique".

            Comme c'est dans le domaine scientifique, la maîtrise des virgules fixes/flottantes et les notions d'optimisations de boucles indispensables; la connaissance des architectures hardware, la manipulation de buffers, l'utilisation de DMA, les calculs distribués, la génération de patterns de référence me semblent être des valeurs ajoutées pour du calcul scientifique plus que la "maîtrise" d'un langage.
            Par contre de dire qu'il doit faire dans un framework existant sans se poser de question est un raccourci: si ton algorithme prend 20 secondes alors qu'il doit récupérer des nouvelles données toutes les 5 secondes et qu'il pourrait faire le même calcul en 3 secondes, ça va pas le faire (pour sa carrière)!

            Pour info, dans tous les postes que j'ai occupé, il était demandé de maîtriser le C++. Je n'ai JAMAIS vu une seule ligne de C++ dans les sociétés où j'ai travaillé, alors les annonces et leur pipeau, hein…

            HS: j'avais un (vieux) prof qui disait que la majorité des calculs qu'il avait vu en entreprise étaient faux! J'ai constaté que la majorité des ingénieurs ne voulaient pas faire de mathématiques (même simple) quand bien même on gagnait en résolution, en précision des mesures physiques et en temps de calcul, c'est dingue!

      • [^] # Re: Preuve de l'autoformation

        Posté par . Évalué à 2.

        Pour lui, la programmation est un outil, pas plus.

        La programmation n'est pas un outil, c'est une discipline. Pour un électricien, une pince est un outil, et l'électricité est sa discipline. Pour un programmeur, les outils sont les IDE, les compilateurs, etc. Mais la programmation, c'est leur discipline, leur domaine dans lequel ils sont spécialistes et professionnels.

        Peut-être, mais c’est celui qu’on lui demande de « connaitre ».

        J'avoue être assez décontenancé par ta question et tes réponses. Tu as l'air de demander des astuces pour que ton ami physicien puisse prétendre connaître C++ sans s'intéresser à la programmation, ça me semble tout proprement impossible. S'il souhaite répondre à une petite annonce qui cherche des gens connaissant C++, alors ce n'est pas avec un MOOC de 7 heures qu'il va atteindre le niveau nécessaire, surtout s'il ne sait pas programmer dans un autre langage, et surtout s'il ne s'intéresse pas vraiment à la programmation.

        À mon avis, si on lui demande de connaitre C++, c'est qu'on attend de lui qu'il soit autonome en C++, qu'il maitrise les concepts du langage (POO, héritage, programmation générique, STL, exceptions), sur les langages compilés (types, pointeurs, gestion de la mémoire), qu'il ait une culture générale sur les design patterns et sur l'algorithmique, et qui se tient au courant de l'évolution du langage (lambdas, auto, etc). Et là, on reste quand même dans le niveau "amateur éclairé", parce qu'à mon avis un vrai dev C++ est recruté sur des trucs beaucoup plus pointus.

        • [^] # Re: Preuve de l'autoformation

          Posté par (page perso) . Évalué à 2.

          un vrai dev C++

          Voir ci-dessus pour le malentendu. On n’attend pas de lui qu’il soit un « développeur C++ », mais qu’il soit capable d’utiliser un framework de calcul scientifique. Il se trouve que cette utilisation passe par l’écriture de code C++, mais ça ne demande que des connaissances qui, par rapport au niveau qu’on rencontre généralement sur DLFP, sont très basiques. Pour reprendre ton exemple, on lui demande simplement de savoir changer une ampoule, pas de passer un brevet d’électricien.

  • # Mon expérience (similaire)

    Posté par (page perso) . Évalué à 2.

    J'ai un profil vaguement semblable à celui de ton ami, je suis mathématicien de formation et même si j'ai beaucoup programmé pour mon plaisir personnel ou de temps en temps pour ma recherche, et même si j'ai fait quelques modules “info” pendant mes études (programmation en Scheme, calcul scientifique, algorithmique) je n'avais pas d'expérience solide en programmation en cherchant des emplois hors du monde académique.

    Les entreprises ne vont en général pas s'attendre à trouver des gens qui soient à la fois des bons physiciens et des bons programmeurs, et puis la plupart des gens sont tout à fait capable d'apprendre à programmer, et les physiciens pas moins que quiconque. Donc pour commencer, je conseillerais de faire fi de toute inhibition et de poser des candidatures pour les offres qui l'intéressent, en étant tout à fait honnête sur le niveau de programmation qu'il peut avoir – qui n'est pas nul, même s'il n'est pas très élevé. S'il choisit de travailler dans une grosse structure, il aura de toutes façons un programme de novice, éventuellement de plusieurs mois, pour se former.

    Ce qui est important pour ton ami, c'est d'une part d'être sûr qu'il est réellement intéressé par le travail auquel il présente son dossier, et en particulier qu'il est réellement intéressé par la programmation. C'est le point qui me semble le plus délicat.

    Pour moi ce qui fait un bon programmeur, ce n'est pas tant sa capacité à écrire des programmes en elle-même, qui bien-sûr doit être là, mais la capacité à écrire du code robuste, maintenable et testable, et très franchement je ne connais pas d'autre école que celle de l'expérience. Quand je programmais chez moi je n'écrivais pas des programmes qui tournent pendant des mois et manipulent des TB de données. :)

    Si ton ami veut étudier la programmation en autodidacte, le mieux pour lui est de dénicher un projet libre teinté de calcul scientifique qui l'intéresse et auquel il pourrait envisager de modifier un peu ou même de contribuer. Quelques exemples:

    Toi tu peux l'aider à tout mettre en place sur sa machine, et à faire ses premières compilations. :)

    • [^] # Re: Mon expérience (similaire)

      Posté par (page perso) . Évalué à 2.

      être sûr qu'il est réellement intéressé par le travail auquel il présente son dossier, et en particulier qu'il est réellement intéressé par la programmation.

      Comme je le disais, il a déjà fait ce genre de travail, donc il n’y a guère de doute sur son intérêt.

      faire fi de toute inhibition et de poser des candidatures pour les offres qui l'intéressent

      C’est déjà ce qu’il fait, mais ça risque de ne pas suffire.

      En tous cas, merci de ton retour, ça ne pourra que l’encourager :-)

      • [^] # Re: Mon expérience (similaire)

        Posté par (page perso) . Évalué à 2.

        C’est déjà ce qu’il fait, mais ça risque de ne pas suffire.

        Si il est prêt à aller à l'étranger il trouvera sans problème du travail, en Allemagne par exemple (là où je vis) on n'a pas du tout la même culture du recrutement qu'en France – ceci dit il paraît que ça s'améliore progressivement en France. Les entreprises qui pourraient s'intéresser à son profil de physicien intéresse par le numérique sont probablement les institutions financières – chercher si elles ont une section “risk management”, “operating desk of derivatives” ou un truc du genre – l'industrie automobile, ou bien tout ce qui utilise beaucoup de simulations – c'est à dire quasiment n'importe quelle industrie suffisamment grosse. En plus des “gros” acteurs les plus évidents il y a plein de petites entreprises qui font du conseil technique sur des points spécialisés et qui ont elles beaucoup plus de mal à recruter que les gros acteurs.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.