samedi 17 mars 2012

De la puissance des programmeurs à l'Université

Cet article s'adresse principalement à nos lecteurs ayant suivi un cursus d'informatique et ayant des bases en programmation. En effet, pour les autres ça risque d'être un peu abscons.

Les différences entre les étudiants en école d'ingénieur et en université sont déjà très marquées en France lorsqu'il s'agit de domaines scientifiques techniques comme l'informatique. En effet, on peut dire sans aucune méchanceté que la plupart des universitaire reçoivent des formations très riches sur la théorie, mais très pauvre en ce qui concerne la pratique et la mise en application de leur connaissances. Concrètement, lorsqu'il s'agit de programmer quelque chose, beaucoup trop d'universitaires ne valent pas une cacahouète. On pourrait également pousser le raisonnement jusqu'à dire que les chercheurs sont parfois totalement déconnectés de la réalités et font de la recherche pure sur des sujets abscons sans se préoccuper de l'utilité de la chose, de la faisabilité de la chose, ou même de savoir si ça n'a pas déjà été fait dans l'industrie (les deux mondes sont déconnectés).

Ne vous méprenez pas, je ne tape pas spécialement sur les universitées Coréennes, c'est malheureusement vrai pour trop de cursus universitaires en informatique. Beaucoup d'entres eux sont totalement déconnectés de la réalité en terme d'applicabilité, de ce qui est innovant ou pas, et complètement à côté de la plaque quand on parle d'implémentation ou d'ergonomie (avec des implémentations immondes qui ressemblent à une calculette windows 98). J'en ai vu quelques uns en France qui étaient également particulièrement mauvais.
Souvenez-vous de celui qui voulait compiler son site web en .exe ...

Mais revenons aux université Coréennes. Pour mémoire, nous nous sommes actuellement étudiants dans le département "Computer Information and Engineering" d'INHA University.
Ici, la plupart des étudiants codent en Java, ou parfois pour les plus fous en C#, mais rarement en autre chose. En effet, Java et C# sont probablement les deux langages les plus documentés et ayant les IDE les plus efficaces (Eclipse et Visual Studio) et nécessitent donc peu de connaissances réelles pour arriver à en tirer quelque chose. Au mieux on copie/colle tout depuis internet ou un livre, au pire l'IDE va coder le truc tout seul. En observant un peu nos collègues, nous nous sommes vite aperçus que les bases de ses langages n'étaient pas maitrisées, par exemple on en voit essayer de coder de gros programmes sur un écran alors qu'il y a un powerpoint sur le notion d'héritage en Java projeté sur le deuxième écran, ou encore il faut qu'ils se mettent à 3 ou 4 sur un bout de code dès qu'il s'agit de coder quelque chose qu'ils n'ont pas trouvé sur internet, ou qu'aucun d'entre eux n'a fait.


Ce phénomène curieux s'explique par le système scolaire coréen, où dès leurs plus jeune âge, les élèves sont forcés à ingurgiter des quantités phénoménales de connaissances pour les recracher par cœur à l'examen. Si cette méthode peut avoir du mérite pour des matières comme l'histoire ou l'apprentissage de la grammaire et de l'orthographe, apprendre des trucs par cœur peut rapidement se révéler catastrophique en langue ou en informatique. De la même façon qu'ils apprennent des phrases en anglais sans en comprendre les mots à l'école primaire, les coréens apprennent par cœur des notions ou des bout de code sans en comprendre le contenu en informatique. Cette méthode nuisible à tout créativité et contre-productive pour leur futur en entreprise est encouragé par le système des examens à la coréennes. En France un examen porte en général à 50% sur les connaissances théoriques (ou on recrache le cours par cœur) et il y a ensuite 50% d'application où il faut un peu de creuser les méninges. Un examen typique en Corée compte 90% de connaissances théoriques à recracher par cœur depuis un livre qu'on vous aura donné à apprendre pour l'examen et 10% sur un exemple d'application archi-simple tirée du même livre et qu'on vous ressortira tel que dans l'examen sans avoir changé aucun chiffre pour que vous ne vous trompiez pas si vous l'avez aussi appris par coeur.
Je vais illustrer mon propos avec l'exemple de notre cours d'"advanced Software Engineering" pour lequel nous avons chaque semaine 1h de cour en coréen, puis 2h de TD applicatif. Le TD consiste à résoudre des petits problèmes de programmations en Java que le professeur aura choisis en fonction du cours. D'aucun pourrait penser qu'il s'agit d'un TD pendant lequel il faut coder des choses. Pas du tout ! Le TD consiste à recopier le code qu'un assistant professeur écrit au tableau pour résoudre les problèmes ! Le niveau de créativité ou de difficulté est donc de 0. Il faut recopier le code du tableau et éventuellement l'apprendre par cœur pour l'examen ! L'exercice se termine généralement avec un devoir pour la semaine suivante du type "Pour la semaine suivante, vous déboguerez votre code si vous l'avez mal recopié et vous imprimerez vos résultats." Ça a l'air ridicule, mais c'est vrai ! Et nos collègues coréens qui recopient tout le code à l'espace près et respectent l'indentation au tableau (des fois que le code merde sinon), arrivent parfois à rater cet exercice. Quelque chose comme rajouter une variable, ou simplement nommer la dite variable, ou légèrement modifier une fonction peut se révéler être une difficulté insurmontable lorsqu'on a été habitué à tout apprendre par cœur et qu'on a une créativité proche de zéro. 

Je vous laisse imaginer notre effarement les premières fois que nous avons vu nos collègues à l’œuvre à essayer de programmer des choses simples et qui éprouvaient des difficultés considérables à coder des éléments très basiques d'un programme. On pourrait également parler de situations ubuesques sur des projets du laboratoires ou on se retrouve avec un bout de projet en J2EE, un bout en C# et des bouts de PHP collés à rien, tout celà parce que les solutions techniques sur internet ont été trouvées séparément dans des langages différents et que par peur de la nouveauté, ou plutôt à défaut de documentation sur comment s'y prendre, personne n'aura eu l'idée de tout traduire dans un seul et unique langage pour faire quelque chose qui marche.
Comme le dit mon collègue : "I know only JSP, and I don't know PHP, so we will do two separate modules !"

En université sont formés des théoriciens. Des gens qui connaissent par cœur des algorithmes, ont des connaissances sur bon nombre de méthodes pour traiter des problèmes souvent complexes et pointus, mais qui ont en pratique beaucoup de mal à appliquer leur savoir. Notons que nous souffrons un peu de l'effet inverse en école d'ingénieur.

Certains m'ont posé la question de ce qu'on pense de Linux en Corée. Réponse : ça peut faire serveur FTP. Oui, pas d'IE, pas d'ActiveX, donc ce n'est même pas bon à aller sur Internet.

3 commentaires:

  1. Intéressant...
    Ça pourrait presque expliquer pourquoi ils sont 100% Microsoft et pourquoi ils vénèrent ActivX. Il y a longtemps on leur a dit que c'était bien et maintenant ils ne changeront plus.

    C'est une culture ultra-conservatrice en fait. Leurs habitudes sont encore plus ancrées que chez nous et ils n'osent/veulent pas prendre d'initiatives.
    Me trompe-je ?

    RépondreSupprimer
    Réponses
    1. Si j'en crois les commentaires sur le blog anglais, c'est plutôt leur mode d'enseignement qui est figé et immuable quelque soit ce qui est enseigné.
      Mais oui, il y a aussi le coté conservateur.

      Pour ActiveX, à mon avis c'est le coté spyware du bordel qui les intéresse.

      Supprimer
  2. Des mecs qui enseignent un langage de programmation qu'ils ne comprennent pas il y en a aussi en France.
    If u know what i mean.

    RépondreSupprimer