Ce que j'aurais voulu apprendre à l'école

Salle de classe en ruine avec
    au tableau un graphiti 'School's out Forever'
Detroit Abandoned School par Freaktography sous licence CC by-nc-nd 2.0

J'ai envie d'écrire ce billet depuis un bon moment, et même si j'ai l'impression d'avoir eu une formation de bonne qualité (à l'ENSSAT en 2004 ça commence à dater 😀), je me rends compte qu'avec pas grand chose de plus, mon démarrage aurait pu être bien meilleur. Au fil des années, j'ai également côtoyé voire encadré pas mal de développeur·ses plus ou moins expérimenté·es et avec le temps quelques tendances se sont dégagées. Et puis dernièrement, Éric D. a publié Il parait qu'on nous apprend à apprendre, un billet que je trouve intéressant même si je ne suis pas forcément d'accord sur tout. Je rejoins Éric à 100% sur une certaine attente à ce que la formation initiale soit également finale alors qu'en vérité on passe (ou on devrait passer) beaucoup de temps à apprendre pour résoudre de nouveaux problèmes ou en résoudre d'anciens avec de nouvelles contraintes. Mais pour cela, quelques bases sont nécessaires et j'ai l'impression que certaines de ces bases sont sous-enseignées.

Attention, je parle plutôt ici de bases, de théories, de concepts, de pratiques et même de communication mais pas du tout de la dernière techno à la mode, qui, certes, fait joli sur un CV en sortant de l'école mais qui sera de toute manière dépassée à plus ou moins court terme. En écrivant cette phrase, je repense avec un peu de nostalgie à ces loooongs cours où on nous a expliqué en long, en large et en travers CORBA, Java RMI et RPC 😴. Et puis, il y a d'autres savoirs qui ne sont pas directement liés au métier qu'ils seraient utiles d'acquérir à un moment ou un autre.

Bref, voici ce que j'aurais voulu apprendre à l'école mais aussi ce que, à mon avis, un·e néo-diplômé·e en informatique aurait tout intérêt à avoir appris :

  • plus d'anglais ! Il est impensable de pas être à l'aise en anglais technique au moins en lecture. J'étais relativement à l'aise à l'écrit mais j'ai tellement souvent entendu ah mais la doc est en anglais ?!? Pour la petite anecdote, en écrivant cet article, je regardais le résultat de quelques travaux pratiques et même les variables dans le code source des corrigés étaient en français, ça pique un peu les yeux je dois dire 😀
  • métiers : je crois pas avoir entendu une seule fois le mot SSII durant toute ma scolarité et encore moins la différence qu'il y a à travailler dans ce type d'organisation par rapport à une startup, un éditeur de logiciel, dans un laboratoire de recherche d'Orange ou ailleurs… En lien avec ce point, je me souviens de cours où on a travaillé notre CV et où on a simulé des entretiens d'embauche c'était plutôt pas mal mais apparemment, ça ne se fait pas partout !?! Et en complément, de nos jours, on pourrait ajouter l'utilité (et les potentiels problèmes) des réseaux sociaux dans ce cadre.
  • droit du travail : ça va bien au delà de la formation des informaticiens mais je ne comprends pas pourquoi on apprend pas quelques rudiments dans ce domaine quelque part durant sa scolarité…
  • programmation : j'ai évidemment appris différents langages de programmation, des algorithmes, différents modes de programmation avec des trucs plutôt originaux comme Prolog et d'autres qui se sont révélés très utiles comme XSLT. Mais finalement, on nous a très peu voire pas du tout parlé de bonnes pratiques, de maintenabilité, de gestion de versions, de tests unitaires/d'intégration/fonctionnels… automatisés, d'intégration continue, de revue de code, d'injection de dépendances, de travail en équipe et j'en passe…
  • Unix : de ce côté, je crois avoir été bien formé, même si je râlais beaucoup sur Tru64 à l'époque, ce vieil Unix tout moisi, cette expérience a fini par me servir à quelque chose et même plusieurs fois. Mais au delà des anecdotes, comprendre la philosophie Unix (parce qu'elle a fait ses preuves) et les mécanismes sous-jacents apportent beaucoup d'informations et une méthodologie qu'on peut appliquer quasiment partout. Et en plus au passage, un terminal et un shell sont des outils fantastiques que chaque développeur·se devrait maîtriser un minimum.

Bon c'est déjà pas mal je crois, il y a de quoi animer quelques cours magistraux et travaux pratiques avec tout ça 😀