Accueil > professional > Enseignants en informatique… enseignez l’informatique !

Enseignants en informatique… enseignez l’informatique !

Billet d’humeur qui dormait depuis longtemps sur mon disque, écrit avec passion et qui m’a bien apaisé… Puisse t il en faire autant pour vous !
 
Récemment encore, une soutenance. Projet de l’étudiant ? Faire du développement. Réaction des professeurs ? Allons, tu es bon, tu devrais viser chef de projet.
 
Ca a à tout l’air d’une boutade ? Que nenni, école après école, même rengaine.
 
Attention, scoop : il existe des formations pour être chef. Si si. On appelle cela des formations en management. Ceux qui désirent être chefs y vont en général. Et voici un autre scoop : la plupart des étudiants en informatique ne veulent pas être chefs. Si si. Je ne sais pas bien pourquoi chaque école d’ingénieur, ou presque, reprend le mantra du « tu seras chef, jeune ingénieur », mais il se trouve que certains étudiants sont plutôt attirés par les connotations scientifiques et techniques du mot ingénieur. Genre résoudre des problèmes, progresser, apporter des solutions innovantes, plutôt qu’encadrer.
 
Pas d’inquiétude, j’entends déjà les arguments habituels : nous leur apprenons à apprendre. Ils sont intelligents et s’adaptent : ils ont les bases, la suite est aisée. 
 
Les enfants de 10 ans aussi ont les bases du langage. Ils savent lire, écrire, compter même. Ils peuvent reproduire des choses déjà vues. Pourraient ils pour autant rédiger un acte notarié ? Comprendre une notice technique ? Ecrire un roman qui présente un intérêt pour le lecteur ? Bien qu’il y ait des exceptions, dans l’immense majorité des cas la réponse est non.
 
Figurez vous qu’en informatique c’est pareil. Connaître et avoir vaguement pratiqué les bases d’un langage ne suffit pas. Connaître les bases d’un langage ne permet pas de développer correctement en utilisant ce langage, ni même de se qualifier d’informaticien. En toute franchise, apprendre un langage est devenu trivial de nos jours. Plein de personnes, de tous horizons, le font de leur propre initiative, sur le temps libre, aisément, sans encadrement scolaire. C’est facile à faire, après tout, on a tous déjà appris un langage… Ces personnes sont elles pour autant des informaticiens ? Des personnes hautement qualifiées ? J’en doute. 
 
En fait, en pratique, c’est même quasiment l’inverse : les premiers jets dans un langage sont généralement primitifs et guère attrayant. Pire encore, passé le cap initial requiert de l’approfondissement, de la réflexion, de la pratique. Combien font cette démarche ? Combien d’entreprises ont elles les moyens ou l’envie de les y accompagner ? D’ailleurs, figurez vous, les entreprises en général ont une perception proche de celle des écoles d’ingénieur : faut devenir chef. Pour ça, pas besoin d’être bon informaticien, mais plutôt de suivre les ordres et reproduire l’existant. Rien ne permettant ou favorisant l’apprentissage nécessaire et, pire, la mise en pratique résultante.
 
J’en fais trop me direz vous, qu’y a t il de bien compliqué à l’informatique, à la programmation ? Quelques pistes, en vrac, à titre d’illustrations…
 
Etre informaticien, c’est connaître les différentes façons de résoudre un même problème, avec à chaque fois les forces et faiblesses respectives. Vous voulez accéder à des données en base ? Plusieurs possibilités. Utilisation d’une classe pour chaque table, représentant simplement les données, puis avoir des utilitaires pour peupler ces classes. Utiliser des classes encapsulant une bonne partie de la logique d’accès, voir exposant des types évolués. Avoir un modèle objet riche, avec héritage, composition, au plus proche des besoins, que l’on adaptera ensuite à la représentation en base. Avoir un stockage des données sans représentation commune avec l’usage qui en est fait, avec un mécanisme de récupération et construction des structures utilisées. Combien d’élèves connaissent ces approches ? Combien en connaissent les forces et faiblesses ? Combien d’enseignants ? Attention, cela n’a rien d’un secret jalousement gardé. Là encore, internet donne tout ça. Des livres existent sur le sujet (« Patterns of Enterprise Architecture » de Martin Fowler par exemple).
 
Mais en fait, l’informatique, c’est bien plus que cela. Etre informaticien, c’est savoir comment écrire son code pour qu’il soit lisible, juste et aisément modifiable. C’est éviter de faire une usine de gaz quand on veut simplement moudre le grain. Faire simple est l’ultime sophistication disait Léonard de Vinci (un ingénieur avant l’heure pour la peine, plutôt reconnu comme bonhomme). Faire simple est nécessaire en informatique : le code va vivre, sera maintenu par différentes personnes, devra répondre à des besoins non anticipés. Et faire simple s’apprend. Non des commentaires toutes les lignes n’aident pas. Non mille lignes de code à la suite n’aident pas. Oui on évite la double négation. Oui on fait du « fail fast »…
 
Mais en fait, l’informatique, c’est bien plus que cela. Pour limiter les risques, le code doit être testé. Et pas de façon artisanale sauce pré histoire, avec ses doigts et un gourdin, mais avec des outils automatisant la chose, exécutant les tests à chaque changement, de façon transparente. Ca parait fou, mais aujourd’hui c’est la norme pour les informaticiens soucieux de leur travail. Pourtant je n’ai pas encore vu un seul étudiant ayant appris la chose pendant ses cours. Je ne suis même pas certain que 20% des enseignants connaissent les notions de tests unitaires et intégration continue. 
 
Mais en fait, l’informatique, c’est bien plus que cela. Parce qu’en fait, généralement, on écrit pas du code. On reprend l’existant, on le modifie. C’est d’un coup bien plus compliqué. Il faut rentrer dedans, comprendre son fonctionnement. Il faut connaitre les outils disponibles : debugger (des élèves ingénieurs ne connaissaient pas), outils d’inspection du code (hiérarchie des classes, références vers une classe, appelant d’une méthode). Il faut connaitre les subtilités des langages, qui ont sans doute été utilisées de ci de là, souvent pour des pièces critiques de l’architecture (réflection, invocation dynamique, mixins, proxy…). Il faut connaitre les patterns classiques (factory, decorator). Et après il faut aller modifier tout cela. Faire plus propre que cela ne l’était (cas général) ou rester au même niveau que l’existant (l’exception). Cela a même un nom : le refactoring. Là encore, le nom est inconnu pour bien des étudiants et enseignants… Quand aux méthodes et outils associés, n’en parlons pas.
 
Mais en fait, l’informatique, c’est bien plus que cela. Le code n’est qu’une partie du tout. Il y a la construction du livrable. Le processus de déploiement. L’environnement de recette. Il y a les différentes versions au cours du temps. De son propre logiciel ou de ses dépendances. Ou même, en production, différentes versions au même instant afin de faire du canary release. Il y a la mise à jour sans interruption de service. Il y a le besoin d’avoir des informations de contexte en cas de bug, les informations permettant d’identifier le problème. Il y a la possibilité de savoir qui a fait quoi quand pour comprendre l’historique du problème, ses raisons, pour ensuite le corriger ainsi que tout le mal fait entre temps. 
 
Mais, en fait, l’informatique c’est bien plus que cela. Il y a les milles spécificités de l’environnement retenu. Du système d’exploitation, des serveurs, du réseau, des systèmes embarqués. Du web. Des sockets. Ces détails de l’environnement technique utilisé qui nécessitent toutes les connaissances ci dessus pour en tirer le meilleur. Mais cet environnement technique qui est un monde à lui tout seul, à nouveau. Avec ces bonnes pratiques, ces rouages essentiels, son histoire.
 
Mais en fait, l’informatique, c’est bien plus que cela. C’est déterminer ce que veut l’utilisateur, quand, pourquoi. C’est se mettre d’accord sur la solution, sa mise en oeuvre, en proposant le meilleur de ce qui a été énuméré jusqu’ici. Savoir que son environnement peut proposer telle fonctionnalité aisément ou que telle autre sera très longue et couteuse à atteindre. C’est trouver ce qui est déjà existant pour ne pas réinventer la roue. C’est livrer tout cela à l’utilisateur, s’assurer que ça lui convient, que ça fonctionne, que ça répond aux attentes. C’est s’assurer que la solution s’intègre bien avec son environnement, avec l’existant, les évolutions dans les habitudes et outils. Avec toujours un donneur d’ordre, des utilisateurs et des informaticiens. Dans les délais, le moins cher possible, correctement, le tout sur fond de communication permanente.
 
Au risque de me répéter, l’informatique, c’est, en fait, bien plus que cela. En fait, c’est tout cela, et bien plus plus, tout le temps, sans cesse en changement. Avec des gens qui réinventent la roue, des intérêts personnels, commerciaux, des à priori et beaucoup de choses non étayées. Des intervenants par millions. Aussi, aller de l’avant, c’est savoir se concentrer sur ses vrais problèmes. C’est avoir les bases nécessaires pour distinguer le bon grain de l’ivraie. C’est savoir déceler dans ce magma bouillonnant la perle qui résout votre problème. C’est savoir de ne pas suivre la mode du moment, comprendre les implications de ce qu’on lit, tout en sachant se remettre en cause. C’est oser de démarquer, se justifier. C’est se remettre en cause et remettre en cause l’existant, sans cesse, pour avancer, le tout dans un terrible brouillard confus d’intérêts, de bruits et de beuglards contradictoires. C’est se forger sa vérité dans tout ça, pour son contexte et ses besoins.
 
Aussi, je pense qu’enseigner l’informatique c’est comprendre que les bases ne sont pas suffisantes. C’est comprendre que l’informatique est bien plus, un métier à part entière, capable de remplir largement les quarante années à venir d’un étudiant. C’est comprendre que former des gens à même d’être compétents dans un tel métier est une chose difficile. C’est comprendre qu’en France, malheureusement, la plupart du temps, l’informatique c’est bien moins que cela, que ces compétences ne sont pas présentes, pas prisées. Qu’il va falloir changer les habitudes afin de produire réellement de la valeur ajoutée. Quitte à bouleverser quelques hiérarchies et à recentrer l’enseignement informatique sur… l’informatique.
 
J’espère sincèrement que des enseignants ont lu ces lignes. Elles sont pour eux. Pour que leurs discours et leurs enseignements soient plus en accord avec mon quotidien d’informaticien. Pour que l’enseignement évolue enfin. Clairement, c’est un acte isolé, mais néanmoins murement réfléchi, présent depuis mes débuts professionnels. Et j’espère que, petit à petit, l’enseignement de l’informatique en France changera pour le meilleur. Si cette contribution aide à cela, alors cela me va. A vrai dire, pour avoir donné des conférences sur le « code propre » et avoir refusé les offres d’enseigner qui ont suivi, le fond de ma pensée est qu’il serait temps que les enseignants en informatique enseignent vraiment l’informatique. Et je suis plus que volontaire pour aider, mais pas pour faire leur travail à leur place : je n’ai déjà pas assez de temps pour … l’informatique !
Publicités
Étiquettes : , ,
  1. janvier 28, 2014 à 10:37

    Entièrement d’accord avec ce discours, je rajouterais cependant que le monde de l’entreprise dans sa grande majorité demande aux développeurs d’être des chefs de projets.

    Ce n’est pas étonnant que la formation se cale sur modèle, c’est complètement débile mais c’est d’abord en entreprise que le changement doit s’opérer.

  2. janvier 29, 2014 à 9:47

    Hello Mousetic

    Qu’est-ce qui est apparu en premier : l’œuf ou la poule ? 😉

    Je pense qu’in fine le mouvement s’opère dans les deux sens : une certaine sensibilité à la compétence technique va grandissante dans les entreprises, de même que certaines écoles s’y intéressent plus (epitech/CNAM dans mon Alsace profonde).

    Ceci dit, les entreprises ont rarement la prétention de former des informaticiens, surtout celles qui recherchent avant tout des chefs de projet.

    A l’inverse, pour moi, c’est presque un crime une école d’informatique dont un prof dit « On ne regarde pas le code. De toutes façons on ne saurait pas comment le noter. Tant que ça remplit les demandes du projet, c’est bon ». Et pour lever toute ambiguité, il s’agit bien du prof de programmation qui évoque l’ensemble des projets réalisés par les étudiants. « Ah mais ces derniers savent s’adapter et sont appréciés pour leur souplesse »…

    Bref, c’est un tout, assurément, mais ceux dont c’est le job de former ont parfois, je pense, bien de la marge jusqu’à arriver à une formation en informatique digne de ce nom.

  1. janvier 28, 2014 à 1:40

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :