Node.js : passer le niveau au-dessus en maîtrisant EventEmitters et Streams

Vous utilisez Node depuis des années pour développer des applications web, mais dès que vous sortez de l'utilisation de vos packages habituels (tels que Express ou Mongoose), vous ne vous sentez pas à l'aise ? EventEmitters et Streams sont des concepts très vagues dans votre esprit ? Si c'est le cas, peu importe que vous ayez 5 ou 10 ans d'expérience en développement, vous êtes resté au niveau junior en Node. Ce n'est pas grave car je vais vous montrer comment franchir ce cap.

Etre très expérimenté en développement et rester junior sur une techno particulière ?

Comment peut-on rester junior pendant des années ? Cela semble contradictoire. Et bien, cela tient souvent au fait qu'en poste, on nous demande de faire et refaire le même genre d'applications, souvent dans l'urgence, qui consistent à : faire du CRUD , créer un système d'authentification, persister en base etc ... . En deux mots : la routine. Mais quand on regarde le code source des packages que l'on utilise au quotidien ou que l'on assiste à un meet-up (en direct ou sur YouTube), on se rend compte qu'il y a un fossé entre ce que l'on sait faire et ce que le développeur sur scène présente. Et là, on réalise (avec un mélange d'admiration et une pointe de jalousie) qu'au lieu de progresser sur 3 ou 5 ans, nous avons développé pendant ces 3 ou 5 années de suite les mêmes fonctionalités de base, tandis que le développeur sur scène a visiblement progressé régulièrement.

Comment passer au niveau supérieur ?

Etre junior n'a rien de honteux. Les meilleurs développeurs qui débutent sur une techno qu'ils ne connaissent pas le font avec humilité, savent qu'il redeviennent junior sur la nouvelle techno en question, mais progressent à une vitesse impressionnante à tel point qu'en 6 mois, ils développent des applications plus complexes que les nôtres malgré nos 2, 3 ou 5 années d'expérience sur cette même techno. Bon, c'est certain, nous ne sommes pas tous égaux. Certains développeurs sont "très bien câblés". Mais ce que vous remarquerez à leur contact, c'est que ces développeurs s'attachent en priorité à bien comprendre ce qui fait la spécificité d'une technologie qu'ils abordent pour la première fois, là où nous essayons de rapidement faire quelque chose qui marche, parce que le commercial a vendu trop court (lui-même pressurisé par le service achat de son client).
Pour revenir à ces développeurs que l'on envie, ils savent que la technologie sur laquelle ils se penchent a probablement fait des choix radicaux sur certains aspects pour être plus efficace dans un contexte ou sur un type précis de problèmes à résoudre. Et ce sont les spécificités de cette technologie qu'ils s'attachent à comprendre en premier lieu, ce qui leur permet ensuite d'utiliser les points forts de ladite technologie, afin de pouvoir créer des applications ou des packages plus performants car allant dans le sens de ce qu'ont voulu les créateurs de cette technologie. Dans le même temps, le développeur lambda, livré à lui-même et dans l'urgence, essaie de trouver des points communs avec ce qu'il connait déjà, passant malheureusement à côté de ce qui fait tout l'intérêt de la technologie sur laquelle il monte en compétences sur le tas.

Et Node dans tout ça ?

Et bien Node justement a au moins deux points forts : EventEmitters et Streams. Si vous vous penchez sur vos packages préférés et que vous vous aventurez dans leur code source, vous ne tarderez pas à croiser la route de classes qui héritent justement de EventEmitter ou d'une forme de stream (qu'il s'agisse de Writable, de Readable, de Duplex, Transform ou Passthrough stream). Cela tient de nouveau au fait que les développeurs de packages Node à succès (ces fameux packages installés des centaines de milliers de fois par semaine) n'ont pas consacré des années à faire et refaire ce sur quoi ils étaient à l'aise, mais sont allés dès le 1er jour à l'essentiel : en investissant temps et efforts sur ces pilliers de Node que sont, de nouveau, EventEmitters et Streams (le pré-requis constitué par callbacks et promises étant déjà connu), ce qu'il leur permet de créer un pipeline de streams en chaînant tout ce beau monde, pour une maintenabilité accrue et des performances optimisées - grâce aux données disponibles plus rapidement et à une moindre occupation mémoire du serveur. Avec les streams, dans certains scénarios, vous aurez le beurre et l'argent du beurre.
Bref, quand vous aurez réalisé que les packages installés en même temps que Node mettent eux aussi à disposition des classes qui héritent souvent d'EventEmitter ou d'un des streams cités plus haut, vous aurez compris qu'aussi longtemps que vous n'ajouterez pas les streams à vos classes préférées, vous resterez sur le seuil de la plateforme Node.

Vous savez ce qu'il vous reste à faire

Consacrez, vous aussi, du temps à sortir de votre zone de confort, pour plonger au coeur de Node. J'ai créé une formation en trois courts volumes pour vous y aider, en vidéo et en français : http://bit.ly/aucoeurdenode

Pour à peine plus que le prix d'un livre qui risque de prendre la poussière sur votre étagère, cette formation vidéo en 3 volumes :

  • pose les bases de Node dans le volume 1 (callbacks, promises, call stack ...)

  • vous fera comprendre en profondeur les EventEmitters dans le volume 2

  • vous montrera comment utiliser les Streams dans le volume 3

Rendez-vous ce service : consacrez donc vous aussi un peu plus de temps à la plateforme Node elle-même, et un peu moins au package X ou Y avec lequel vous êtes déjà à l'aise, et Node vous le rendra bien !

Si vous pensez que cette formation peut intéresser un(e) développeur(se) de votre entourage, partagez ce post ! Cela fera deux heureux : votre ami(e) et votre fidèle serviteur :)

Au coeur de Node (volumes 1, 2 et 3) : http://bit.ly/aucoeurdenode