Le grand décalage entre université et réalité

Il y a peu, j’ai eu l’occasion de voir à quoi ressemblait l’examen d’informatique d’étudiants en deuxième année de la Faculté des Sciences appliquées (école polytechnique) de l’ULB.

Le langage qui a été choisi pour enseigner la programmation à ces étudiants est le C++. Quand j’étais moi même à l’université de Mons-Hainaut (désormais UMons), j’ai appris la programmation avec le langage C. Je sais que pour les étudiants de l’UMons aujourd’hui, c’est le langage Java Python qui a été choisi.

Cette disparité n’est pas encore tellement dérangeante. Le langage doit être considéré comme un outil. Au départ, ce sont les principes fondamentaux de la programmation (types, variables, conditions, boucles, fonctions, etc.) qui sont enseignés. Que ce soit en C, C++ ou Java, cela fonctionne (à peu de choses près) de la même façon. Je me rappelle d’ailleurs avoir reçu beaucoup de cours où les algorithmes étaient écrits dans ce que nous appelions un « métalangage », c’est-à-dire dans une notation indépendante de tout langage de programmation.

En deuxième année polytech, j’ai pu apercevoir que les étudiants commencent à découvrir les concepts de la programmation object (jusque là, tout va bien) mais également des trucs un peu plus folkloriques comme la recursivité et les listes chaînées.

Et c’est là que je commence à percevoir un problème.

D’une part, les listes chaînées sont pour moi un concept typiquement scolaire destiné à appliquer de façon concrète une notion faisant désormais partie du passé : les pointeurs. Je ne sais pas vous, mais moi, et c’est peut-être un aveu de faiblesse, je n’ai jamais pu maîtriser les yeux fermés cette notion de pointeurs… J’ai réussi mes examens mais quand je m’y replonge (principalement pour l’expliquer à des étudiants comme ce fut le cas ici), j’ai toujours besoin de relire attentivement un article explicatif pour m’en rappeler le fonctionnement exact. Les principaux langages utilisant les pointeurs sont le C, le C++ et le Pascal. Je ne programme plus dans ces langages. Ceci explique sans doute cela. Les langages dits « modernes » ont laissé tomber les pointeurs et l’allocation manuelle de mémoire au profit de références et de mécanismes automatiques tels que le garbage collector (comme c’est le cas pour Java, pour ne citer que lui). Le développeur ne doit (quasiment) plus se soucier de rien. Pourquoi encore enseigner les pointeurs dans ce cas ?

D’autre part, cela fait maintenant plusieurs années que je programme, développe, scripte, bidouille du code (appeler ça comme vous voulez) dans le monde réel et je ne me rappelle plus avoir eu besoin d’utiliser une fonction récursive pour résoudre un problème. De plus, je sais que les algorithmes récursifs bouffent la mémoire de façon impressionnante. Pour m’assurer ne pas être le seul dans le cas, je vous le demande : utilisez-vous souvent la récursivité dans vos algorithmes ?

Là où je veux en venir avec toutes ces interrogations, c’est que je trouve purement et simplement qu’il y a un trop grand décalage entre ce qu’on apprend à l’université et le monde du business et du travail.

Pour des polytechniciens, je sais qu’un cours d’informatique n’est pas forcément destiné à former de parfaits petits développeurs PHP mais plutôt à leur ouvrir l’esprit et à leur proposer une façon différente de penser et d’aborder un problème. Malheureusement, cet état des lieux s’applique également aux personnes qui étudient l’informatique à l’université, comme ce fut mon cas.

A la décharge des universités, il est vrai que celles-ci doivent garder leur aspect « lieu de recherche scientifique » car c’est ce qui fait leur attrait mais est-ce que cela doit se faire au dépend de l’avenir des étudiants ?

J’y vais sans doute un peu fort mais les deux questions suivantes me taraudent et j’aimerais avoir votre avis à ce propos :

  • Est-ce que les gens qui étudient l’informatique à l’université sont moins bien préparés au marché du travail que les étudiants qui font des graduats en informatique (ou d’autres formations) ?
  • Est-ce que les universités doivent changer leur fusil d’épaule ou continuer de prôner la science pour la science comme c’est le cas actuellement ?

Merci d’avance pour vos réponses !

32 Comments

  1. Tibius's avatar Tibius says:

    Je suis d’accord sur le décalage, quand je vois ce que je dois faire de part mon boulot par rapport aux formations que j’ai suivi, le décalage est énorme.
    Ou je te rejoins un peu moins, c’est en parlant de langage moderne. Cela dépends pour quoi tu programme. Dans pas mal de cas, c’est vraie, les garbage collector sont mieux et plus pratique. Mais il faut pour ça avoir les ressources nécessaires (je parle mémoire et puissance de calcul). Hors, avec l’augmentation des petites machines et surtout du temps réel, on repart à la chasse de la moindre ressource que l’on peut gagner, l’objet, l’utilisation mémoire sans destruction etc… ça en bouffe à la pèle.
    Maintenant, trouvé un juste milieu serait peut être mieux 😉

    Like

  2. aurels's avatar aurels says:

    Je suis d’accord pour les pointeurs. Notons qu’à partir de cette année les étudiants de l’UMONS auront droit au Python en début d’année pour apprendre l’algorithmique, et le java débarquera au deuxième semestre pour tout ce qui est POO.

    Là où je ne suis pas d’accord, c’est à propos de la récursivité. Super utile, pas toujours ineffiace (récursion terminale). Dans beaucoup de problématiques, les données sont représentées conceptuellement par un arbre (le meilleur exemple est un système de fichiers ou de catégories). Plein d’algorithmes récursifs découlent de cela… Donc moi oui je m’en sert souvent 😉

    Mais je suis d’accord, il y a un décalage technologique entre les deux mondes…

    Like

  3. Je suis un peu surpris en lisant ta note.
    Il y a certainement des choses à changer dans les cours des unifs mais les points que tu soulèves me paraissent mineurs… tant les notions couvertes sont les versions très basiques de concepts qui sont toujours d’actualité.
    La notion de pointeurs est incroyablement proche de la notion de références. La gestion de la mémoire est différente mais, sur bien des plans, c’est un détail. Les listes chaînées sont une forme très brute d’une structure de données qu’on utilise toujours aujourd’hui. Il y a les listes en Java, par exemple. Il est exact qu’aujourd’hui ces concepts sont abstraits dans un hiérarchie de classe mais l’intérêt d’étudier la notion brute est d’acquérir une compréhension des propriétés de chacun des algorithmes de stockage. Je vois parfois des gens opter pour le mauvais algo et puis s’étonner de problèmes de perf.
    Dans l’idéal il faudrait évidement faire la relation avec les structures abstraites, ce que C++ permet très bien puisque le concept a été inventé dans sa librairie standard.
    Quand à la récursivité… je ne développe plus très souvent mais je m’en sers dans presque chaque séance parce que je manipule beaucoup de données en arbre (XML). Là aussi je constate qu’une mauvaise compréhension de la récursivité amène souvent les développeurs a adopté des algorithmes très peu efficaces… j’ai encore vécu un exemple marquant cette semaine.

    Like

  4. Mateusz's avatar Mateusz says:

    Perso, je veux bien parler du Pari de Pascal… 😉

    En étant un peu plus sérieux, tu soulèves un problème qui est récurrent : l’inadéquation entre les études et les métiers auquels elles préparent.

    Dans ton domaine, ne peut-on pas le comprendre ? La matière est encore jeune. Et elle est en perpétuelle mutation. Quant à ceux qui seraient les plus à même d’enseigner, ne préfèrent-ils pas bosser dans des boîtes web ?

    D’autres, qui possèdent les compétences et qui voudraient enseigner, n’ont ils pas le problème d’avoir appris beaucoup de manière autodidacte et donc ne sont pas autorisés à donner cours à l’unif ?

    Sinon, il semble que les formations spécifiques ont pas mal de succès et donnent pas mal de résultats. N’y retrouve-t-on pas ceux dont je parle au précédént paragraphe ?

    Like

  5. Les pointeurs font partie du passé??? C’est une bonne nouvelle pour les développeurs d’OS, de drivers, de jeux vidéo, … et des langages “modernes” dont tu parles (t’as déjà regardé le code source de PHP?).

    Tu vois où je veux en venir? 😉

    Like

  6. vinch's avatar Vinch says:

    Benoît, j’ai du mal me faire comprendre. Les deux points que je soulève sont peut-être mineurs mais ce sont deux points parmi la masse. J’aurais pu en présenter plein d’autres. On pourrait en écrire un bouquin à vrai dire. La recursivité est peut-être un exemple mal choisi. En fait, j’utilise la récursivité, ou plutôt, j’utilise des modules ou fonctions qui utilisent la récursivité. Je pense à SimpleXML ou tous les parseurs XML en général vu que tu parles d’arbres et de fichiers XML. Mais honnêtement, ce n’est pas le truc que j’utilise le plus dans mes tâches quotidiennes. Et quand je vois le genre d’exercice qu’on donne à ces étudiants en polytechnique, ça me laisse sans voix : http://www.pastie.org/614625

    Par contre, concernant les listes chaînées et les pointeurs, je suis moins d’accord. C’est peut-être important de connaître le bas niveau du langage pour faire les bons choix, mais dans ce cas, devrions nous apprendre l’assembleur voire le langage machine ? Un minimum doit être connu mais ne pouvons nous laisser tomber des notions qui sont de trop bas niveau ?

    Like

  7. Hugues's avatar Hugues says:

    Salut,

    Sur le principe je suis assez d’accord qu’il y a un décalage entre la formation universitaire (ou haute école… y a pas que l’unif qui forme des informaticiens) et le monde de l’entreprise mais pas pour les raisons citées.

    Même si on utilise pas régulièrement un langage bas niveau (et franchement qui le voudrait) c’est important de savoir comment, a très bas niveau, les choses s’organisent (p-e plutôt avec un cours “d’architecture” qu’avec un cours de C++ qui est a l’orienté objet ce qu’Aima est aux voitures). Les pointeurs, ok on risque pas d’en voir passer souvent dans la vraie vie. Encore que, tous les développeurs sur iPhone/Mac doivent manipuler des objets via des pointeurs (ceci dit l’Objective-C encapsule ça tellement bien qu’il est rare de devoir se poser des questions sur le type de référence manipulée).

    Pour la récursivité je moins d’accord… la mémoire utilisée n’est pas forcément plus importante (selon la façon dont on construit son code) par contre, il faut connaitre le concept du stack d’appel pour l’appliquer correctement. Le gain en clarté et en logique par contre est important. Beaucoup d’algorithmes de tri sont récursifs et c’est le moyen le plus simple de parcourir un arbre (faut pas aller très loin pour en trouver, le système de fichiers en est un). Tous les algorithmes récursifs peuvent être écrits de manière itérative mais souvent a grand renfort de vérifications supplémentaires. Donc oui j’utilise des algo récursifs régulièrement quand ça s’y prête (en PHP, même pas dans un vrai langage d’homme comme le C/C++).

    L’unif a probablement tendance a un peu trop former des “chercheurs” avec une notion très théorique de la programmation (c’est un peu moins vrai dans les hautes écoles, en tout cas quand j’y étais) mais ce n’est pas pour ça qu’il faut laisser tomber les fondations (oublions le C++ mais pas les cours d’algo).

    Like

  8. vinch's avatar Vinch says:

    Nicolas, je vois où tu veux en venir même si j’aimerais qu’on arrête de se focaliser sur des détails de mon article (c’est volontairement exagéré) et qu’on réponde à l’interrogation principale de celui-ci.

    Mais réfléchit quand même à ceci : les pantalons à patte d’éléphants à fleurs, je trouve que ça fait partie du passé mais certains en portent encore. Ce que je veux dire par là, c’est qu’on peut toujours trouver des contre-exemples en prenant des cas un peu isolés. Je sais que PHP est écrit en C, mais comme 99,9999% des développeurs PHP, je n’aurai jamais à aller voir à quoi ressemble le langage ni à le modifier…

    Ceci dit, mes exemples sont peut-être (sans doute) mauvais mais arrêtons d’être de mauvaise fois, n’est tu pas heureux d’être libéré de toutes ces contraintes grâce à Ruby on Rails ? N’est ce pas pour sa simplicité et sa concision que tu aimes ce langage ?

    Like

  9. Hugues's avatar Hugues says:

    Faudra quand même bien quelques développeurs pour implémenter tous ces langages/concepts/compilateurs/… non?

    Like

  10. vinch's avatar Vinch says:

    Hugues, je m’avoue vaincu, je pense que tu as complètement raison dans tout ce que tu as dit.

    Néanmoins, comme tu le dis, il ne faut pas aller chercher bien loin pour trouver un bon exemple sur lequel la recursivité se prête parfaitement : le file system.

    Pourquoi alors, quand je vois les exemples classiques qu’on donne à l’université, c’est si éloigné de la réalité ? Je me dis que c’est quand même bizarre qu’on applique ça à des concepts mathématiques comme la factorielle, Fibonacci, MacCarthy : http://www.fil.univ-lille1.fr/~sedoglav/C/main019.html

    Pourquoi ne pas donner des exemples qui s’appliquent au monde réel comme celui que tu cites ? (car on est bien d’accord, Fibonacci, on ne l’utilise pas tous les jours, je me trompe ?)

    Like

  11. vinch's avatar Vinch says:

    “Faudra quand même bien quelques développeurs pour implémenter tous ces langages/concepts/compilateurs/… non?”

    @Hugues : De la même manière qu’il faut des gens pour fabriquer les briques qui permettent à d’autres gens de construire les maisons. Mais ces gens sont minoritaires non ? Est-ce que tous les maçons du monde doivent connaître le procédé de fabrication d’une brique ?

    Like

  12. fstephany's avatar fstephany says:

    Et alors?
    Je suis plutot de l’avis de Joel Spolsky: http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

    Maintenant c’est clair que tu vas pas faire des applications web en C. Mais ne pas comprendre (ou avoir au moins une idée de) ce qui se passe en dessous d’un framework/langags, c’est aller droit dans le mur et préparer une génération de codeurs à la con.

    L’industrie a besoin d’équations différentielles, de réseaux bayésiens et de gurus qui maitrisent LLVM. Faut arrêter les conneries 2 secondes, ce ne sont pas des cas isolés.

    Like

  13. Hugues's avatar Hugues says:

    Alors la complètement d’accord… en fait c’est pour ça que j’ai arrêté l’unif après un an et que je me suis dirigé vers une haute école (l’HERS, ex Inpres). Franchement, 24h de math diverses (analyse, algèbre linéraire, …), 2 heures d’algo (très chouette cours), un peu d’anglais, d’eco-pol et de physique j’ai pas bien vu ce que j’allais faire de tout ça (on avait les mêmes cours que les licences Math et les ingé…). Encore maintenant, il faut attendre la dernière année de bacalauréat pour voir les cours d’infos supplanter les cours généraux et mathématiques (http://progcours.ulg.ac.be/cocoon/en/programmes/ABINFO01.html). Le ratio est pratiquement inversé en haute école (même si c’est très loin d’être parfait)

    Clairement, pour reprendre l’exemple de la récursion, si on a un peu de mal a appréhender le concept, il n’y a aucune change qu’on pense a l’appliquer en l’ayant appris comme ça. Et c’est pareil pour beaucoup la plupart des concepts enseignés qui sont quasi inapplicables “tels quels”.

    Like

  14. Je ne saisis pas bien ce que tu appelles le marché du travail ? Mon incompréhension vient peut-être du potentiel décalage entre l’université et la réalité 😉 . Mais le sous titre de ton blog spécifie “programmation”, c’est donc déjà restrictif par rapport à l’informatique en général.

    Il me semble que le marché du travail est extrêmement diversifié en informatique. Le but de l’université est de former un esprit. Si c’est en faculté des sciences, l’esprit sera scientifique c’est clair. Vu la diversification, l’université n’est pas apte à couvrir toutes les notions pour toutes les carrières. Donc l’université ne choisit que quelques notions, ou quelques principes…

    Les gradués (bacheliers professionnalisants) sont sans doute mieux préparés à démarrer tout de suite une carrière spécialisée (par exemple en programmation). Les diplômés qui sortent de là ont d’intenses formations dans des domaines très pointus. Ce n’est pas le cas des universitaires. Mais les universitaires touchent à beaucoup plus de choses pendant leurs études.

    Les universités tentent, via leur “formation de l’esprit” à former à plus de carrières différentes en faisant toucher à plus de choses. Elles tentent également à former aux technologies du web (c’est un exemple), mais comme pour le reste, assez superficiellement. Par contre, les jeunes diplômés qui ont reçu la formation ont un panel de carrières plus étendu car ils ont touché à plus de choses. Bien entendu, l’universitaire qui s’engage dans une carrière doit apprendre encore… Parce que maintenant il a choisi sa carrière – parmi un panel large – il peut approfondir les notions dont il a besoin.

    Une mission de l’université est aussi de former à la recherche scientifique. Les étudiants qui ont terminé leur master peuvent démarrer un doctorat. Pour démarrer cela il vaut mieux avoir poussé assez loin l’aspect scientifique. Nous comptons actuellement à la faculté des sciences de l’UMONS une dizaine de doctorants.

    Quant aux pointeurs, ils existent toujours. Si on a bien compris le principe, on jongle avec les “références” dans d’autres langages (Java…). Ce qui est moins d’actualité, c’est la notion d’allocation dynamique de mémoire. Disons que cette notion reste surtout intéressante dans un domaine de “programmation système”. Ce dernier domaine est enseigné à l’université mais aussi dans certaines filières de bachelier professionnalisant. Il existe deux types de bacheliers professionnalisants : “informatique de gestion” et “informatique et systèmes”.

    En ce qui concerne la récursivité, elle reste très utilisée et très enseignée. Je rejoins pleinement l’avis de Benoît M. ci-dessus. La structuration XML est une structuration en arbre et la bonne maîtrise des structures d’arbres et de récursivité est indispensable pour une bonne manipulation du XML, par exemple pour écrire des scripts de transformation XSLT.

    Les universités tentent de couvrir tous les paradigmes de programmation. Ainsi, la programmation impérative, la programmation objet, la programmation fonctionnelle, la programmation logique, la programmation par aspect, la programmation événementielle… sont des choses abordées.

    Je ne suis pas d’avis que les universités doivent changer leur fusil d’épaule. Elles peuvent se rapprocher du monde du travail en collaborant avec les entreprises. C’est ce qui se fait particulièrement dans le cadre des stages en entreprise; les étudiants choisissent le domaine dans lequel ils veulent se spécialiser par ce biais.

    Pour information, à l’UMons le premier langage enseigné n’est plus Java mais Python.

    Pour terminer il faut aussi un peu comprendre quel est le profil des enseignants à l’université. Tous les enseignants combinent enseignement et recherche scientifique. C’est la caractéristique même des universités, toutes disciplines confondues : les statuts du personnel enseignant le stipulent précisément. Il est obligatoire de plus d’avoir effectué un doctorat pour être enseignant. Donc ceux qui enseignent sont beaucoup plus proches du monde scientifique que du monde de l’entreprise, c’est leur statuts qui veulent cela… Est-ce la faute aux unifs ? Quel pouvoir ont-elles par rapport à cela ?

    Like

  15. vinch's avatar Vinch says:

    François,

    Tu te contredis toi-même dans ce que tu dis. Tu parles de gourou et deux secondes après, tu dis que ce ne sont pas des cas isolés. Si y a bien quelque chose qui est un cas isolé, c’est un gourou ! Les gourous sont quand même des gens à part et rares (tout le monde ne peut pas se considérer gourou) mais je suis d’accord avec toi, on en aura toujours besoin !

    Par contre, je ne pense pas qu’on ait besoin de tout connaître pour utiliser une technologie. Un exemple sur lequel je me sens à l’aise : je trouve qu’il est impératif de connaître les bases de JavaScript et les contraintes de compatibilité des navigateurs avant d’utiliser un framework JS comme jQuery. Par contre, je ne trouve pas utile de tout savoir à propos de l’ECMA-262 avant d’utiliser jQuery.

    Je sais que tu étais à l’université de Mons comme moi. Sais tu que j’ai échappé de peu aux cours d’assembleur ? Connais-tu l’assembleur ? C’est pourtant un truc de base qu’on devrait connaître, si je suis ton raisonnement. Et pourquoi pas le langage machine tant qu’on y est ?

    Mais dans l’ensemble, je suis plutôt d’accord avec toi hein. Il faut au minimum avoir une vague idée de ce qui se trouve sous le capot avant d’attaquer une technologie de front 😉

    Like

  16. vinch's avatar Vinch says:

    Merci Olivier,

    Je suis sans doute à côté de la plaque quand je parle de récursivité et de pointeurs. Par contre, j’ai l’impression d’avoir touché un point sensible quand je parle de décalage. Les profs d’unif n’ont pour la plupart jamais travaillé dans le privé et sont donc un peu en décalage avec ce qui se passe dans les entreprises. D’un autre côté, je pense que je suis un bon exemple, ainsi qu’Aurélien et François, qu’on peut très bien s’en sortir avec cette formation pour ensuite, faire ce qu’on appelle, de façon un peu vulgaire, du business.

    Ne devrais t-on pas plus souvent accueillir d’anciens étudiants à l’université pour qu’ils expliquent ce qu’ils font dans leur boulot ? Je sais que c’est plus ou moins le but des séminaires à la différence que les orateurs de ces séminaires ne sont pas forcément des anciens étudiants. Je trouve que la dimension “ancien étudiant” est importante pour permettre aux étudiants actuels de se projeter de façon plus concrète dans le futur.

    Merci encore pour cet avis éclairé !

    Like

  17. aurels's avatar aurels says:

    Tout à fait d’accord avec Olivier également. Le but de l’unif est pour moi de donner une vision large du domaine, et surtout forger la manière de penser, de résoudre un problème (certains cours de math servent à cela d’ailleurs).

    Il est certain que les technologies qui seront utilisées sur le terrain ne sont pas spécialemen couvertes mais je ne suis pas certain qu’il soit possible de les enseigner étant donné que le domaine est extrêment large. La plupart des technologies que j’utilise pour travailler, je ne les ai pas apprises à l’unif, je les ai apprises par moi même durant mes études/petits boulots passés. Mais ma manière de raisonner et sructurer mes programmes est clairement influencée par ce que j’ai appris à l’unif (et heureusement :p).

    Ce qui est dommage, c’est que les stages ne se déroulent qu’en fin de cursus. La plupart des étudiants n’ont jamais goûté au monde de l’entreprise (sauf quelques exceptions bien sûr) et n’ont aucune idée de ses réalités.

    C’est vrai que la “dimension anciens étudiants” dont parle Vinch est peu présente à l’ex-UMH et cela pourrait être amélioré. Je suis certain que pas mal d’anciens seraient ravis de partager leur expérience avec les jeunes recrues 🙂

    Like

  18. Oui, je suis tout à fait d’accord avec le fait d’intégrer plus les expériences d’anciens étudiants dans la formation. J’en ferai part à l’Institut et à sa Présidente 😉 . Vous n’êtes pas les premiers à le dire, il faudrait vraiment qu’on le fasse.

    Ce sujet de discussion est assez intéressant, parce qu’il met en avant le besoin de témoignages concret du monde de l’entreprise dans la formation des étudiants. Les séminaires ont été prévus pour cela, mais je ne suis pas certain qu’ils ne s’en sont pas un peu éloignés ces dernières années.

    Concernant le fait que le stage vienne un peu tard, c’est assez difficile à résoudre comme problème. D’une part au point de vue emploi du temps, d’autre part au point de vue de la compétence minimale que les entreprises souhaitent des stagiaires. On peut de se point de vue, pour les années qui précèdent la master 2, classer les étudiants en 3 catégories :
    – les étudiants très compétents qui s’en sortiraient très bien dans un stage
    – les étudiants qui ont encore besoin de progresser, qui ne sont pas encore capables de “produire”
    – les étudiants qui rament et qui pourraient ne jamais arriver en master 2 (ça existe malheureusement).

    Pour les 2 dernières catégories, il y a un risque certain, à la fois pour l’étudiant, pour l’unif, et pour l’entreprise d’organiser ce genre de stage.

    Like

  19. @vinch tu as raison de parler des anciens étudiants, cette dimension est peu présente à l’unif. Aurélien, François et moi avons déjà touché un mot à Mme Poiret au sujet des séminaires, n’hésite pas à la contacter si tu souhaites donner une présentation aux étudiants! Elle a parfois beaucoup de mal à trouver des orateurs avec un sujet intéressant. De plus tu es plus “ancien” que nous 3 😉

    Like

  20. tlg's avatar tlg says:

    Vinch,

    Je pense que la bonne question à ce poser est : faut-il faire polytech pour devenir un développeur _web_ ?

    Je connais un bon groupe de personne qui après leurs études d’ingénieur programment des trucs de malades genre émetteur/récepteur radio digitaux programmable (je te dis pas les maths derrière tout ca), terminaux banksys, systèmes temps-réel embarqué, kernel/drivers OS, etc …

    Je pense que maitrisier une notion aussi simple qu’une liste chainée est hyper importante même pour les “simple” web dev que nous sommes. Combien de fois je vois du code utiliser la mauvaise structure de donnée pour manipuler des quantité non négligeable d’information (ce qui est de plus en plus fréquents avec des outils comme twitter et autre). Ou encore pire, utiliser les facilités d’un langage sans comprendre l’impact mémoire/calcul qui sont derrière et ce rendre compte que le code, qui fonctionne bien en test, tombe sous ces genoux en production!

    On dit souvent que pour bien comprendre notre langue française il faut étudier le latin et/ou le grec. Je pense que dans notre monde de programmeur on peut dire +- la même chose, pour bien utiliser le python, le java, le php, le ruby et autres langages de haut niveau il faut passer par la case assembleur, c (surtout pas c++ 🙂 ), lisp, etc.

    On pourrait aussi dire que finalement qu’avec les frameworks, les IDE super avancés et les langages ultra simple nous n’avons plus besoin de “connaitre” la couche inférieure, mais alors ma question est : qu’apportons nous? Ok il reste la créativité mais ou est l’ingénieur!

    Like

  21. Sakana's avatar Sakana says:

    Sujet intéressant merci Vinch.

    Alors oui +1 pour le décalage, mais est-ce vraiment un mal… ?
    Lorsqu’on me demande quelles études il faut suivre pour faire mon métier (flash/ria developer) je reste toujours un peu dubitatif sur la réponse à donner. J’ai fait un graduat en multimédia à l’IAD. ça m’a pas mal aidé et permis de cibler mes points d’intérêts, cependant si je n’avais pas été passionné par ce que je faisais, je n’aurais jamais pris la peine d’apprendre en autodidacte. Et c’est ce dernier point qui pousse certaines personnes à vouloir comprendre le “comment du pourquoi”. Certains construisent une maison sans savoir comment on fait une brique… et ils la construisent tout aussi bien que les autres qui eux savant comment on fait cette même brique.

    De là ma question, est-ce vraiment un mal, qu’a l’unif on garde un recul par rapport à la réalité pour apprendre aux élèves un genre de base qui leur permettra d’évoluer d’eux même par la suite ? Et pour avoir cette base il faut comprendre d’où on vient. Même si on ne va pas utiliser au quotidien tout ce qu’on a appris… le fait d’avoir une base permet à mon sens de voir plus clair dans certains problèmes.

    Je pense que ça marque bien la différence entre l’informaticien qui se limite à ce qu’il a appris… et celui qui va plus loin de lui même et qui évolue. Le rôle de l’unif c’est de nous donner les moyens de pouvoir continuer par nous même après et non pas de nous préparer juste comme il faut pour aller travailler. Car le travail évolue… et on ne va pas retourner à l’unif tous les 3 ans 😉

    S.

    Like

  22. Je comprends un peu mieux ton propos. Mais si j’osais je t’invite à réfléchir comme suit : ce n’est pas qu’on étudie des choses inutiles à l’Univ, c’est qu’on ignore des choses très importantes.
    L’essentiel des projets et les études à l’univ’ partent d’une page blanche. Or c’est rarissime dans la réalité. Même un nouveau développement s’inscrit dans un contexte technique souvent fort… directif.
    Je crois qu’il manque des cours sur la maintenance, la reprise de projets, l’intégration dans un contexte existant, l’apprentissage des outils en place, la rétro-ingénieurerie, etc. Ce qui représente Or (presque) tous les projets réels et pour lesquels les étudiants sont très peu préparés.

    Ca impliquerait sans doute des choix. On ne peut pas tout voir donc il faudrait peut-être laisser tomber quelques matières… j’espère qu’ils garderont la récursivité mais je placerai la discussion plutôt dans ce contexte, celui des manques, que de pinailler sur l’une ou l’autre matière inutile.

    Like

  23. L’ingénieur doit être capable d’appliquer la bonne technique pour en faire une application, d’ou le terme “Sciences Appliquées”.

    Si ne nous connaissons pas toutes les possibilités techniques, comment faire un choix ?

    D’autre part, l’informatique se développe a une grande vitesse et forcément on devrait voir apparaître des spécialisations (temps réel, intelligence articficielle, web, systèmes transactionnels…)

    Bien malin celui qui peut faire une bonne sélection dans les technologies pour les enseigner. Cependant il me semble qu’il faut avoir touché à toutes les couches : Assembleur, Operating System, Middelware, Languages 3GL, 4GL…. L’algorithmique est peut être un peu théorique mais elle permet de structurer l’esprit. Tout comme les design patterns en OO.

    Quand j’étais étudiant j’adorais Prolog, il n’y a avait pas beaucoup d’application mais 10 ans plus tard je me suis mis à faire des “Business Rules” dans un engine d’inférence et cela ne m’a pas posé de problème grâce à mon background. Ces techniques vont ré-émerger d’ici 10 ans via le semantic web. Parfois il faut un peu se replonger dans le bain, c’est tout.

    Like

  24. Benja's avatar Benja says:

    Quel débat!

    J’ai suivi exactement le même cursus que Vinch la même année et je suis assez d’accord avec Olivier.

    Je pense que la question du décalage entre université et entreprise n’est que la suite logique de:
    “Les élèves de primaires ne sont pas prêts au secondaire” et puis “les élèves du secondaires ne sont pas prêts à l’université” . C’est vrai qu’il y a un fossé et je pense aussi qu’il y a un certain nivellement par le bas dans notre système d’enseignement qui s’amplifie d’année en année dans le cursus.
    Toutefois, une entreprise qui engage un jeune universitaire diplômé se trouve face à une personne ayant un potentiel et une formation générale (dans son domaine), c’est spécialement vrai en informatique. C’est d’ailleurs pour cela qu’ il est engagé comme “junior” et qu’il est moins bien payé que ses collègues plus agés: à l’entreprise d’assurer la formation spécifique. Je suis d’accord que ce n’est pas toujours le cas et que les entreprises préfèrent engager un profil de 3-5 ans d’expérience déjà spécialisé.
    Concernant les liste chaînées et autres, je trouve que c’est quand même bien utile de connaître cela. Combien de fois j’ai pu voir des collègues choisir une structure de donnée au hasard sans mesurer l’implication sur les performances des opérations.
    La difficulté de l’université est d’offrir une vision générale et de trouver des matières dans la tendance actuelle pour appliquer, puisqu’il est impossible de parler de tout. Par exemple, je trouverais abérant d’apprendre de l’assembleur ou le cobol: l’entreprise qui a besoin de ces techno n’a qu’à former son personnel.
    Peut être que la solution serait d’avoir des masters beaucoup plus spécialisés du genre: “informatique d’entreprise”, “web et marketing”, “gestion de projet”, “algo avancée”… Il ne reste plus qu’à trouver des ressources bien sûr!

    Benja

    Like

  25. Bartdude's avatar Bartdude says:

    Sur le détail de l’article, je dirais qu’effectivement la notion de pointeur n’est pas forcément la plus utile à apprendre, par contre celle de récursivité me paraît importante, d’autant que ca n’est pas une notion si compliquée finalement. Je suis régulièrement, même si pas super souvent, amené à l’utiliser, ne serait-ce que pour construire un sitemap par exemple…

    Quant au décalage études/travail, c’est un fait, mais c’est valable aussi pour le graduat selon moi. Certes celui-ci est un poil plus proche de la réalité avec ses stages ou simplement son programme, mais cela reste anecdotique dans un cursus complet. Bossant dans le web depuis le début, j’ai de toute facon du apprendre par moi-même les différents languages car c’est pas en 40 heures de PhP qu’on maitrise le web 😉 Le décalage vient de plusieurs facteurs selon moi :

    – les languages évoluent : de nouveaux se créent, certains tombent en désuétudes, les dinosaures continuent parfois à évoluer. Les écoles doivent bien faire un choix… ou le choix s’impose parfois à eux !

    – Même en suivant attentivement l’évolution du marché, il est très difficile d’être hyper réactif : on ne trouve pas du jour au lendemain un prof capable et surtout compétent pour donner un cours de php, java, c# ou tout bêtement javascript, et il est difficile d’exiger des profs qu’ils se remettent constemment à niveau. De plus les décisions doivent s’inscrire dans une certaine continuité malgré tout histoire de ne pas changer la grille horaire tous les ans.

    – Les gens compétents pour donner cours et ayant une bonne connaissance du marché, s’ils sont éttirés par un passage de connaissance, ne choisirons pas selon moi les écoles mais plutôt dans des formations privées largement plus rémunérées et leur laissant une plus grande flexibilité d’horaire

    – le prix … les serveurs, personnes pour administrer ces serveurs, ou bêtement les licences diverses des logiciels clients ou serveur, c’est parfois déjà chaud à suivre pour une entreprise, alors une école…

    – je vais parler pour le graduat, mais je pense que ca vaut pour l’unif : 1 an de travail dans un domaine/language précis apportera plus que des études de plusieurs années, même ciblées sur ce domaine/language. A priori on pourrait penser que c’est plus le cas à l’unif qu’en graduat, mais sérieusement j’en doute… à raison de +- 150 heures par mois pour un horaire “normal” en entreprise, dur pour n’importe quelle école de rivaliser en terme d’heures.

    D’une manière générale, je pense qu’un décalage est inévitable, mais on pourrait peut-être aténuer celui-ci avec des cours plus “modulaires” en ce qui concerne les languages, tout en gardant des cours généraux pour les “concepts” : POO, Montée en charge et performance, Gestion de projet, méthodes de testing, développement multi-environnement et déploiement, etc,….

    Et quoi qu’il en soit, dans notre domaine comme sans doute dans plein d’autres, si l’on s’arrête à ce que l’on a appris à l’école et qu’on n’évolue pas par la suite, on ne va pas bien loin, aussi pointue soit la formation.

    Like

  26. Bartdude's avatar Bartdude says:

    Encore 2 trucs :

    tlg : “Je pense que la bonne question à ce poser est : faut-il faire polytech pour devenir un développeur _web_ ?”

    Non, mais à priori y’a rien à faire pour devenir développeur web, enfin je veux dire y’a pas d’étude type, en sortant de graduat (en 2001) j’avais eu en tout et pour tout 40 heures de PhP données par un nul qui n’y connaissait rien. Rien d’autre qui touchait au web, à part un bref passage sur le protocole http en cours de réseaux… Je sais pas pour vous à l’unif ? Je sais en tout cas qu’à l’heure actuelle pour continuer à bosser dans le web mon diplôme n’est pas une nécessité, mais m’offre juste, au cas où, une certaine “légitimité officielle”

    Vinch : “Ne devrais t-on pas plus souvent accueillir d’anciens étudiants à l’université pour qu’ils expliquent ce qu’ils font dans leur boulot ? Je sais que c’est plus ou moins le but des séminaires à la différence que les orateurs de ces séminaires ne sont pas forcément des anciens étudiants. Je trouve que la dimension « ancien étudiant » est importante pour permettre aux étudiants actuels de se projeter de façon plus concrète dans le futur.”

    Pourquoi institutionnaliser cela ? Premièrement pour tout ce que j’ai expliqué plus haut les écoles ne savent pas forcément suivre le marché, dès lors à part mettre l’accent sur le décalage et risquer de frustrer encore plus les étudiants qui se demandent déjà certainement à quoi va bien pouvoir leur servir le diplôme, ce genre de séminaire apporte-t-il quelquechose à l’école ? Ce genre de séminaires serait plus utiles aux responsables des programmes ou aux professeurs par exemple.
    A côté de ca les professionnels ne sont pas si difficiles à trouver, et généralement il ne faut pas aller bien loin dans ses connaissances au premier ou second degré pour trouver quelqu’un disposé à discutter de cela.

    Like

  27. Lo.J's avatar Lo.J says:

    Ca me surprend qu’un développeur web dise ne jamais utiliser de fonctions récursives, vu la nature des languages descriptifs (xml, html…) du web
    Bien sûr, implémenter un menu déroulant à plusieurs niveaux se résume souvent à initialiser un plugin adapté à son framework javascript préféré. Et les belles listes html qu’on anime dans ce même menu, comment ont elles été crées? …par une fonction récursive de ton CMS qui explore les catégories dans une Db.
    Donc, à moins de se reposer systématiquement sur des solutions de type CMS et Frameworks, je ne vois pas comment un développeur web peut éviter de programmer occasionellement des fonctions récursives. Et quand bien même il y arriverait, cela ne veut pas dire qu’il n’en exploite aucune, cela veut juste dire qu’il ne s’en rend même pas compte.
    Et puis zut quoi, la récursivité c’est beau comme une fractale!

    Like

  28. vinch's avatar Vinch says:

    @Lo.J Oui j’étais à côté de la plaque concernant la recursivité comme je l’ai déjà dit dans les précédents commentaires. Mais ce n’était pas le sujet principal du billet.

    Like

  29. ph@Zer's avatar ph@Zer says:

    Pour la récursivité, pas très souvent mais dans une application web que j’ai développée au boulot, j’ai dû l’utiliser dans un système de hiérarchie de services de mon employeur.

    Like

  30. twice's avatar twice says:

    J’arrive un peu tard sur ce post, mais je voulais juste témoigner…

    Sorti il y a deux ans de l’ULg en ingénieur électronicien, j’ai vu un énorme décalage entre la formation (métalangage, pascal (hum…), C, et c’est tout) et la réalité des entreprises.
    MAIS il y a entreprises web et entreprises industrielles. Etant dans la deuxième catégorie, je m’y retrouve quand même: C à longueur de journée, pointeurs à gogo,… Et je ne pourrais pas m’en passer, puisque je développe du logiciel embarqué temps réel.
    Je pense que c’est à ce genre de boulot que l’université prépare: à PROGRAMMER (entre autres) et non à CODER. Contrairement aux graduats qui forment des développeurs web ou bases de données (sans vouloir faire de généralité), et qui maîtrisent les langages.

    (Et pour ce qui est du C, il n’est peut-être pas de haut niveau mais on ne saurait pas s’en passer , mais ok, là c’est le convaincu qui parle…)

    Like

  31. Matthieu's avatar Matthieu says:

    Personnellement j’ai un graduat en e-business qui comporte une formation en VB.net, PHP et un peu de AS.
    Certes la formation est basique, mais nous sommes encouragé à nous renseigner, à recherche, à expérimenté nous même. Lorsque j’avais une idée, les profs me dirigeaient toujours.
    Tout cela pour dire, je pense que les études doivent apprendre à apprendre et pas nous endoctriner des codes à retranscrire sans réfléchir.
    La programmation, on aime ou on aime pas. Si on aime, on s’intéresse et donc on apprend.

    Like

  32. Bonjour,

    vous avez tout à fait raison de soulever cet écart entre université et réalité au niveau universitaire.
    Pour avoir fait un master “spécialisé web” à l’université de Caen, je peux vous assurer que le niveau de la fac est ridicule – particulièrement en web car dépassé et limite faux ! – et que les gradués belges n’ont rien à envier aux universitaires français et/ou belges.

    Je pense que sur ce point, les écoles Belges sont mêmes meilleures que les formations françaises: je me rappelle encore de l’écart de niveau immense qu’il y avait entre un étudiant Belge spé Java et moi, sur un projet PHP: j’étais pourtant major de ma classe sur ce langage en France 😀

    La seule formation efficace pour maîtriser les langages, mais surtout les principaux concepts liés à l’informatique c’est la case ‘entreprise’.

    Et un bon coup de pied dans la motte, car je me rappelle que beaucoup d’enseignants me regardaient de haut tout en me proposant un code dégueulasse en guise de correction.

    Cdt

    Like

Leave a reply to Jean-Francois Declercq Cancel reply