Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: usage of ESM imports (WIP) #6

Closed
wants to merge 2 commits into from
Closed

chore: usage of ESM imports (WIP) #6

wants to merge 2 commits into from

Conversation

theoludwig
Copy link
Contributor

@theoludwig theoludwig commented Apr 22, 2021

Salut @javascriptdezero 👋,

Cette PR permet l'utilisation des imports ESM contrairement aux imports CommonJS, ça a de nombreux avantages pour tes étudiants car ça permets "d'unifier" la façon d'importer du code, car ça fonctionne de la même manière dans les navigateurs et le nouveau runtime Deno. Quand je débutais sur Node.js, j'ai toujours trouvé bizzare, que les imports soient différents selon le runtime alors que ça reste le même langage, et je pense ça permettrais d'éviter ce genre de confusions.
Et entre nous même si c'est subjectif, la syntaxe est quand même mieux, c'est plus "agréable" à écrire.

Aussi la version 10 de Node.js sera bientôt "EOL (End Of Life")", normalement à la fin de ce mois-çi, et Node.js supporte les imports ESM depuis la version 12, qui est la prochaine après la v10 car la v11 est déjà plus maintenu car Node.js supporte seulement les versions paires dans le long terme, les versions LTS.
Aussi je pense qu'avec cette nouveauté de plus en plus de packets npm vont migrer vers cette syntaxe, et on peut imaginer un futur où seule la syntaxe ESM est utilisé pour l'import/export de modules JavaScript, ça va être long car tout l'écosystème dépend de CommonJS encore, mais ça se fera au fur et à mesure. 👍

Notamment jest supporte déjà les imports ESM, et ils prévoient de les supporter encore mieux comme tu peux le voir sur cette issue : jestjs/jest#11167

Je n'ai pas finis la PR, j'ai seulement mis à jour le premier exercice du niveau facile et j'ai déjà mis à jour le script pour crée un exercice, d'ailleurs remarque: Tu ne fais pas de tests automatisés pour ce script là, faudrait en faire, ça serait plus sécurisé par la suite. 😄
J'aimerais d'abord savoir si c'est quelque chose qui effectivement te tenterais ou pas du tout avant de continuer cette PR et de mettre à jour les imports/exports dans tout les exercices.

PS: Git affiche énorméments de changements car j'ai mis à jour jest à la dernière version et npm génére automatiquement package-lock.json c'est pour ça, donc rien d'inquiétant. 😄

@theoludwig theoludwig marked this pull request as draft April 22, 2021 20:34
@javascriptdezero
Copy link
Owner

Salut @divlo, merci pour ta PR et tes explications ! J'ai vraiment apprécié ta démarche et tu as bien fait de me contacter rapidement avant de travailler plus longtemps sur cette mise à jour.

En effet, je ne préfère pas modifier les imports pour la simple et bonne raison que toute modification va demander de la maintenance de mon côté : je vais devoir répondre à des questions de la part des étudiants. Par exemple pour ceux qui ont installés NodeJS v10 au début ça ne fonctionnera plus, ils vont m'envoyer un email et ça va me prendre du temps pour répondre.

Ceux qui se demanderont c'est quoi cette syntaxe bizarre que je ne retrouve pas dans les tutoriels en ligne (qui sont vieux pour la plupart mais qui rankent le plus dans Google) etc.

Les avantages que ça apportent sont subjectifs et surtout quasi-invisibles pour les utilisateurs, ça n'apportera rien de plus pour eux mais par contre ça va me demander de faire de la maintenance et de répondre aux emails. Bref le rapport entre le bénéfice et le coût n'est pas du tout favorable selon moi donc je ne ferai pas cette mise à jour, désolé !

C'est mon XP qui parle, chaque modification d'un logiciel, même mineure, peut entraîner un coût caché (tu le verras avec le temps) et là clairement, ce n'est pas quelque chose de suffisamment utile pour les étudiants pour que j'en paye le coût.

En espérant que tu comprennes ma réflexion. A nouveau merci pour ton travail !

@theoludwig
Copy link
Contributor Author

D'accord, je comprends ta réfléxion. 😄
Tes étudiants ne doivent plus avoir Node.js v10 normalement, et si ils l'ont, ça fait partie de ton rôle de formateur de leur expliquer de mettre à jour car ils seront victime de vulnérabilité de sécurité.

En effet, je ne préfère pas modifier les imports pour la simple et bonne raison que toute modification va demander de la maintenance de mon côté : je vais devoir répondre à des questions de la part des étudiants. Par exemple pour ceux qui ont installés NodeJS v10 au début ça ne fonctionnera plus, ils vont m'envoyer un email et ça va me prendre du temps pour répondre.

Je ne pense pas que ça va demander de la maintenance, et au contraire ça va te simplifier les explications, au lieu d'apprendre 2 fois comment importer un fichier JS, dans 2 runtime différents, tu vas pouvoir leur apprendre une seule façon.
Je ne sais pas si tu leur apprends seulement le JS côté navigateur ou si tu leur apprends aussi Node.js, d'ailleurs si ce n'est pas le cas, je t'invite vivement à leur apprendre Node.js, c'est une compétence obligatoire selon moi pour les développeurs JavaScript.

Aussi ça fait partie de ton rôle de formateur, de ne pas leur apprendre du code legacy et à continuer à mettre à jour tes formations pour leur apprendre les meilleurs pratiques en 2021 et non pas de 2010 (2010, c'est l'année de sortie de Node.js).
L'informatique c'est un domaine qui évolue vite, très vite même, chaque jour il y a des nouveautés, des nouvelles façons de faire, des nouveaux framework etc, et je pense à mon avis que le métier d'un développeur c'est aussi d'être capable de s'adapter et de ne pas s'attacher à une seule technologie en particulier, mais plutôt de pouvoir apprendre de nouvelles choses si il le faut.

Les avantages que ça apportent sont subjectifs et surtout quasi-invisibles pour les utilisateurs, ça n'apportera rien de plus pour eux mais par contre ça va me demander de faire de la maintenance et de répondre aux emails. Bref le rapport entre le bénéfice et le coût n'est pas du tout favorable selon moi donc je ne ferai pas cette mise à jour, désolé !

Le vrai avantage, c'est de pouvoir leur montrer comment l'écosytème évolue, et comment s'apapter à ce genre de nouveautés quand on est un développeur, et surtout de ne pas leur apprendre quelque chose que l'industrie n'utilise plus.
Bien évidemment pour les imports CommonJS c'est tout nouveau encore, et je pense que au minimum encore 2-3 ans, on va encore beaucoup les utiliser, mais au fur et à mesure, on ne va plus beaucoup en parler, les packets npm vont progressivement se mettre à jour et adopter cette nouvelle syntaxe, ça va mettre du temps, mais ça va se faire, c'est sûr!
Donc tu as surement raison, c'est peut-être trop tôt pour en voir vraiment les avantages alors que les 2 syntaxes existent encore, mais faudra y penser, et c'est quelque chose qui va réellement se faire.

Ceux qui se demanderont c'est quoi cette syntaxe bizarre que je ne retrouve pas dans les tutoriels en ligne (qui sont vieux pour la plupart mais qui rankent le plus dans Google) etc.

Oui, ça va mettre du temps, mais comme tout en informatique, au début les posts sur stackoverflow vont continuer à utiliser require pour les plus vieux posts, ça va se faire au fur et à mesure.

En espérant que tu comprennes ma réflexion. A nouveau merci pour ton travail !

Je comprends, mais je ne pense pas que ça soit valide donc je te partage mon avis. 😄
Merci pour ta réponse!

@javascriptdezero
Copy link
Owner

Merci pour ton retour. Voici le mien.

Non ça ne fait pas partie de mon rôle de formateur JavaScript d'expliquer comment utiliser NodeJS, le mettre à jour etc. C'est un outil à part entière. J'explique comment l'installer car on en a un peu besoin dans ma formation mais c'est tout, je ne forme pas à NodeJS.

Si ça va me demander de la maintenance et de répondre aux emails comme je l'ai indiqué précédemment. Et ne pas leur enseigner l'ancienne façon de faire n'est pas bon non plus car ils seront nécessairement confrontés à du code legacy dans leur métier.

Je n'enseigne que le JS côté navigateur dans ma formation. Et je ne considère pas NodeJS comme une compétence obligatoire pour les développeurs JavaScript. Si tu veux faire que du front-end ça ne sert à rien de connaître NodeJS. Si tu veux être full-stack JS, là oui évidemment.

J'ajoute à nouveau que ça fait partie de mon rôle de formateur au contraire de leur apprendre à lire du code legacy car c'est ce que tu trouves en entreprise ! Aucune société ne crée de logiciels sur des technos trop récentes car elles sont instables, sujettes à des changements majeurs etc. C'est pour ça que le code legacy est légion dans les entreprises et qu'il est au contraire indispensable de savoir le lire et le modifier.

Oui l'informatique évolue vite, les meilleures pratiques je les enseigne comme je les connais et dans l'état de l'art d'aujourd'hui. Je leur enseigne aussi comment en apprendre d'autres et se servir de la doc pour apprendre n'importe quel outil ou méthode qu'ils ne connaissent pas encore. Ce sont des core skills indispensables que j'enseigne. NodeJS n'est pas un core skill, c'est un outil de plus tout simplement.

L'adoption d'une nouvelle pratique/techno/framework/outil/façon de faire dans l'industrie est très très longue, beaucoup plus longue que ce que tu penses ! Ce n'est pas 2-3 ans mais plutôt 5 à 10 ans dont on parle. Et encore ! A partir du moment où suffisamment de gens s'y intéressent et où les développeurs eux-mêmes adoptent cette techno... et à partir du moment où cette techno ne meurt pas avant son adoption.

Par conséquent entre le moment de la création de la techno et son adoption peuvent s'écouler plusieurs décennies. La programmation évolue très vite mais l'adoption par les entreprises c'est tout l'inverse pour ne pas essuyer les plâtres de l'évolution d'une techno ! On attend toujours la maturité d'une nouvelle techno avant de l'adopter dans l'industrie, c'est pour ça que tu bosses 90% du temps sur du code legacy avec des technos dites "vieilles" etc.

A moins de rentrer dans une startup avec des fondateurs technophiles qui créent un nouveau produit from scratch, tu n'es pas prêt d'utiliser les dernières technos dont on parle dans les news !

Je pense que c'est ce point là où tu te trompes principalement.

Amicalement,
Jérémy.

@theoludwig
Copy link
Contributor Author

Excuse moi pour cette réponse tardive, je vais fermer la PR et effectivement cette migration est encore trop tôt.
Merci pour ton aide, et je te souhaite une bonne continuation. 😄

Non ça ne fait pas partie de mon rôle de formateur JavaScript d'expliquer comment utiliser NodeJS, le mettre à jour etc. C'est un outil à part entière. J'explique comment l'installer car on en a un peu besoin dans ma formation mais c'est tout, je ne forme pas à NodeJS.

Si tu ne formes pas tes étudiants à Node.js, effectivement ce n'est pas la peine.

Je n'enseigne que le JS côté navigateur dans ma formation. Et je ne considère pas NodeJS comme une compétence obligatoire pour les développeurs JavaScript. Si tu veux faire que du front-end ça ne sert à rien de connaître NodeJS. Si tu veux être full-stack JS, là oui évidemment.

D'après moi Node.js reste une compétence bien apprécié pour un développeur Frontend, même si ce développeur ne fait aucun développement Backend, il sera amener à utiliser des outils conçu avec Node.js comme des CLI par example. Dans de grandes applications (même petites d'ailleurs), il est très rare de faire seulement du JavaScript vanilla sans framework/outils, au minimum on a la plupart du temps un linter (eslint), formatter (prettier), un framework de tests (jest) et un bundler comme webpack, parcel, rollup, vite etc.
De nos jours on développe rarement de vrais projets avec un simple fichier HTML et un fichier JavaScript à côté, loin de la de dire qu'il faut forcément ramener 1GB dans node_modules pour tout les types de projets, tout dépend du besoin à chaque fois.
Rien que pour développer des CLI, des outils d'automatisation, configurer les outils tels que jest ou eslint, c'est un bon avantage de connaître Node.js.

Oui l'informatique évolue vite, les meilleures pratiques je les enseigne comme je les connais et dans l'état de l'art d'aujourd'hui. Je leur enseigne aussi comment en apprendre d'autres et se servir de la doc pour apprendre n'importe quel outil ou méthode qu'ils ne connaissent pas encore. Ce sont des core skills indispensables que j'enseigne. NodeJS n'est pas un core skill, c'est un outil de plus tout simplement.

Totalement d'accord, au fond, ce qu'on doit apprendre en tant que développeurs, c'est de résoudre des problèmes concrets de clients, et pour cela peu importe la technologie/outil qu'on utilise tant qu'on l'utilise correctement et ça fait ce qu'on lui demande. 👍
Dans ton cas, tu leur apprends le JavaScript, donc faut quand même rester dans le cas concret, et j'apprécie vraiment tout comme tes étudiants je suppose, de leur apprendre à réfléchir comme un développeur, de chercher dans la documentation etc.

L'adoption d'une nouvelle pratique/techno/framework/outil/façon de faire dans l'industrie est très très longue, beaucoup plus longue que ce que tu penses ! Ce n'est pas 2-3 ans mais plutôt 5 à 10 ans dont on parle. Et encore ! A partir du moment où suffisamment de gens s'y intéressent et où les développeurs eux-mêmes adoptent cette techno... et à partir du moment où cette techno ne meurt pas avant son adoption.

J'ai surement surestimer l'adoption d'une technologie, n'empêche que c'est quand même plus rapide que 10 ans, exemple des frameworks comme React.js ou Vue.js sont encore très jeune, et sont utilisés dans le monde entier dans des grandes entreprises.

@theoludwig theoludwig closed this May 3, 2021
@theoludwig theoludwig deleted the chore/use-esm-imports branch May 3, 2021 14:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants