Interview de Christophe Porteneuve, qui est formateur JavaScript, conférencier (à trolls) hors pair, organisateur notamment du Paris Web.

Je le remercie chaleureusement pour cet échange fort instructif.

Déjà, reciblons le contexte : je parle spécifiquement du numérique, en particulier du développement informatique moderne, type web, mobile, cloud/PaaS/SaaS et IoT. Pour ce qui est de faire de l’électronique, de la thermique, de la chimie, construire des ponts, etc. nos écoles sont très performantes. Mais l’immense majorité des emplois qui vont émerger d’ici 10 à 20 ans seront dans le numérique, et des types d’emploi qui n’existent même pas aujourd’hui.

Il est devenue indispensable de faire montre d’une véritable maîtrise opérationnelle et d’une compréhension de l’écosystème tel qu’il existe pendant les études et à la sortie, lorsqu’on intègre pleinement le marché de l’emploi. Il ne suffit plus d’avoir des bases solides en algorithmique et dans un langage type C/C++, ou même Java. Avoir une véritable maîtrise des piliers du web et surtout de JavaScript, par exemple, est devenu incontournable. Même chose pour les bases de données et l’architecture applicative : si on reste encore en MERISE ou UML et en bases relationnelles, plutôt que d’aller aussi explorer réellement les bases NoSQL (type MongoDB) et tout ce qui touche à la programmation fonctionnelle, aux archis réactives, etc.

Regarde Berkeley : ils viennent de purement et simplement virer Java de leur cursus initial informatique. JavaScript est devenu le langage fondamental de la majorité des MOOC et étend son influence jusque dans les gros campus traditionnels. Idéalement, il serait rejoint par Haskell ou Ocaml, et pourquoi pas Rust, histoire d’avoir une vraie belle vision d’ensemble des concepts utiles.

Dernier point : en France, la formation initiale reste la norme, le mode ultra-majoritaire, alors que dans des domaines aussi mouvants et pratiques que l’informatique, seule l’alternance a du sens.

  • Trouve-t-on quand même du positif par rapport aux autres formations ?

Objectivement, oui. Nos écoles d’ingénieurs, en tout cas pour les bonnes, sont très efficaces pour (1) acquérir une grosse capacité de travail et (2) apprendre à apprendre. Ce deuxième point est particulièrement important dans le contexte des nouveaux métiers et nouveaux besoins, où la technologie évolue trop vite pour espérer capitaliser longtemps sur la dernière tendance, le dernier outil, le dernier framework. Savoir exprimer son besoin, chercher, trouver, auditer la solution et se l’approprier, sont des compétences indispensables de tout bon ingé numérique.

On y trouve aussi généralement, quand on est dans une filière ou spécialisation informatique, ces solides bases algorithmiques dont je parlais tout à l’heure, qui font trop souvent défaut à de nombreux “purs techs” du web, et assez souvent aussi des cours de management ou de gestion de projet ; ces derniers ne sont pas forcément très efficaces ou à jour, mais au moins on n’a pas mis en valeur que le code, mais aussi tout ce qui tourne autour.

D’une façon générale, on y trouve normalement un véritable enseignement de la rigueur ; ce qui est triste, c’est que celle-ci est souvent sacralisée dans les matières théoriques, et mise de côté pour les travaux pratiques, surtout en informatique :-/

  • Que penses-tu des classes prépa ?

Distinguons les prépas classiques et les prépas intégrées.

Je suis convaincu qu’il faut bien 3 ans pour “pondre” un ingénieur informatique haut de gamme. Pour être précis, au moins 3 ans en alternance. Idéalement des rythmes type 1 semaine / 1 semaine ou 3 jours / 2 jours, plutôt que de la “fausse alternance” à 6 mois / 6 mois.

Du coup, le côté “2 ans de ticket d’entrée” n’a du sens pour moi que dans le cadre de prépas intégrées, dont le programme verse déjà largement vers celui du cycle ingénieur qui les suit ; tu acquières une solide avance sur ceux issus de formations plus généralistes ou théoriques.

Les prépas classiques (Maths, Physique, Chimie, MPSI, PCSI…) ont toute leur légitimité pour devenir ingénieur matériel aérospatial, chimiste, etc. mais serait un gâchis intégral pour aller vers le numérique. Par conséquent, leur pertinence se réduit chaque année.

  • A quoi ressemblerait l’école utopique/idéale pour un jeune de 18 ans ?

Tu as des tas de valeurs et d’approches qui doivent être mises en place avec cohérence et équilibre. Pour en citer quelques-unes :

  • L’attachement à une pédagogie de qualité, quel qu’en soit le mode de transmission
  • La lutte active contre toute forme de biais au recrutement ; ça passe aussi par un financement de la structure qui ne se repose pas ou peu sur les frais de scolarité
  • Le mix théorique/pratique ; pas seulement des TPs, mais des projets “real world”, et de l’alternance à fréquence forte (pas plus d’une semaine hors de la boîte, sauf vacances)
  • Des programmes en phase avec l’état de l’art (ex. JavaScript (ES2015+), Ruby/Rails, Postgres, MongoDB, Redis, Git, GitHub, écosystème de tests (ex. Jest, Chai, Sinon), CI/CD, React / React Native…) sans pour autant faire les impasses habituelles sur l’algorithmique et la sécurité.
  • De façon générale, des liens étroits avec des acteurs représentatifs du marché, que ce soient des “start-ups” ou des gros acteurs ; c’est utile pour l’alternance, pour le mentoring, etc.

Sur le papier, on aurait dû l’avoir avec des initiatives comme 42 ; malheureusement, celle-ci a raté un paquet de points importants à mon sens ; ce qui s’approche le plus de cet idéal, sans forcément l’atteindre encore, est probablement à ce jour la Holberton School, à San Fransisco, d’ailleurs fondée par deux français dont les études ne laissaient pas forcément présager ça (Supinfo pour l’un, qui est plutôt un centre de certifs MS à ce stade, et ESCP pour l’autre, plus classique).

Bon, j’y retrouve encore un trop gros fétichisme sur le C, les pointeurs et d’une manière générale le bas-niveau système, mais tout le reste, et je ne parle pas du tout que de la technique et du programme ici mais de tout l’environnement, du processus de recrutement, des valeurs, du mentorat, des “cours”, du peer learning, etc. tout ça a été fait intelligemment, sans tomber dans les pièges habituels comme le mépris affiché de la pédagogie par exemple.

  • Une fois terminé la formation initiale, on se forme en permanence dans le métier. Parfois trop : on compte un nombre impressionnant d’articles de blog sur la “JS fatigue”, qui pointent le fait qu’il y ait trop de nouveautés dans le monde JS. Qu’en penses-tu ? Quelle dose raisonnable de nouveautés peut ou doit encaisser un dév web, ingénieur ou pas, une fois diplômé ?

D’un métier à l’autre, la densité de veille requise change pas mal. Dans l’IT spécifiquement, qu’on soit dans l’écosystème Java, C#/.NET, PHP ou JS/Node/web, ça bouge beaucoup, y’a du neuf tout le temps. Certes, JS/Node/web change encore beaucoup plus—et plus vite—que les autres, mais si tu veux avoir une bonne vision à jour de ton écosystème, ça reste un boulot significatif dans tous les cas.

À mon sens, la clé pour éviter la “fatigue” face à ça, c’est de garder un peu de recul : c’est pas parce qu’une nouvelle techno vient de sortir et qu’elle fait une tonne de buzz qu’il faut obligatoirement l’utiliser tout de suite dans un projet, que ce soit pour jouer ou pour de la production. On a parfaitement le droit de passer juste 10-15’ à se renseigner dessus, jeter un œil à son site, à la p’tite vidéo de présentation, lire le Getting Started en diagonale, et mettre ça sur le côté de son radar une fois qu’on a saisi l’essence du truc, jusqu’à ce que la techno (1) ait suffisamment de REX dans la vraie vie pour être considérée apte à la production et (2) présente une réelle valeur ajoutée pour un de nos projets, en cours ou sur le point de démarrer.

Personnellement, je fais une énorme quantité de veille (10 à 15h par semaine), car vu mon métier je me dois d’avoir au moins un vernis de connaissance/compréhension sur quasiment tout ce qui touche à mon écosystème, et celui-ci est justement le plus vaste et le plus vivant.

Ça ne m’empêche pas de dormir la nuit en sachant que je ne me fade pas les 500+ nouveaux modules par jour sur npm, et en laissant de côté la grande majorité des dernières sorties parce qu’elles ne correspondent pas à mes centres d’intérêt, ou qu’un examen de 2 minutes sur leur doc/site/démos m’a amené à décider qu’elles ne m’intéresseraient pas ; sur ce dernier point, évidemment, avoir plus de 21 ans de métier dans le dev et le web à titre pro facilite considérablement l’instinct pour le tri…

Il faut trouver un juste équilibre entre veille, sortie de nos zones de confort, productivité opérationnelle, stabilité et maintenabilité sur la durée. D’un côté, tu as le jeune dev tout frais sorti qui se jette sur chaque shiny new toy sans réfléchir, et passe sa vie à refactoriser / redévelopper / etc. du code qui n’est finalement jamais livré, ou ne tient pas la prod ; à l’autre extrême tu as le dev enfoncé dans les tranchées des compétences acquises il y a 20 ans, qui estime qu’il “sait” et n’a rien appris de nouveau depuis, ou si peu, faisant toujours les mêmes choses de la même façon, en sous-productivité voire sous-performance de production radicale par rapport à l’état de l’art. Ici comme ailleurs, la vérité n’est jamais toute noire ou toute blanche, et c’est une affaire de pragmatisme et de curiosité.