Pourquoi l’apprentissage d’Angular 2 est-il si douloureux ?

Il y a quelques mois, j’ai décidé d’essayer le développement web. Angular 2 était tout neuf à l’époque, alors j’ai décidé de le télécharger et j’ai commencé à construire un site web. Pour quelqu’un qui est à l’origine un développeur Java, c’était une expérience à la fois nouvelle et intéressante. J’ai suivi le fameux “5 Minute Quick Start Guide” et après une heure et demi de bataille avec Angular 2 et ses pléthores de dépendances, j’avais un truc qui tournait.
Ensuite, j’ai commencé à construire une vrai app. J’ai décidé de construire une plateforme de blog de A à Z, principalement pour apprendre,et aussi, parce que ça fait une éternité que je voulais commencer un blog. Le désir d’avoir un blog serait la carotte qui me motiverait à apprendre de nouvelles technologies et me permettrait de construire mon projet.
Mois après mois, j’ai suivi les releases d’Angular 2 et chaque weekend, j’avançais péniblement sur le blog. J’ai dit péniblement ? En fait je voulais dire « me fracasser la tête la tete contre les murs » encore et encore, à essayer de comprendre et maitriser le très flippant écosystème Javascript.
Peut-être suis-je juste habitué aux librairies Java dont la robustesse a été lentement éprouvée sur le champ de bataille… Peut-être qu’apprendre le développement web en commençant par Angular 2, c’est comme essayer d’apprendre un jeu vidéo en commençant tout de suite par le mode hardcore… je ne sais pas.
Tout ce que je sais c’est que la release d’Angular 2 était, de mon point de vue d’ingénieur Java, un désastre super flippant. Chaque minor release a fait de nombreux changements cassants. Chaque fois que je regardais à nouveau le maudit “5 Minute Quick Start”, ça n’avait plus rien à voir. Sans parler du router Angular 2. Ce fut un vrai fiasco, une agonie pour les utilisateurs, en particulier, ceux qui ne sont pas habitués au monde Javascript.
Je me retrouve à écrire ce post dans un moment de passion, fulminant contre la dernière release d’Angular qui a été annoncée il y a quelques jours. Angular 2 a été publié pour de bon cette fois, et vous pouvez upgrader sans avoir à anticiper des changements radicaux pendant au moins 6 mois ! C’est ainsi que j’ai naivement pensé que je devrais upgrader mon blog de @angular 2.0.0-rc.4 vers @angular 2.0.0.
Voici l’épopée que j’ai vécue :

  1. Upgrader vers @angular 2.0.0
  2. Supprimer toutes les fields ‘directives’ de mes composants. Apparament, Angular2 a décidé que les modules sont la meilleure façon de faire
  3. Supprimer tous les imports qui finissent par _DIRECTIVES.
  4. Upgrader @angular/forms de 0.3.0 vers 2.0.0. Pour une raison qui m’échappe, @angular/forms était très en retard par rapport au reste d’Angular en terme de version. Jusqu’à cette release.
  5. Upgrader angular-material vers 2.0.0-alpha.8–2 (est ce que vous vous rendez compte à quel point c’est ridicule d’avoir une version appelée 2.0.0-alpha.8–2??).
  6. Upgrader vers typescript 2.o, qui, et c’était pour moi une mauvaise surprise, est actuellement en beta. Après avoir enfin atteint une version d’une stabilité relative dans Angular, c’est consternant de réaliser que angular-material, un outil clé dans ma stack, s’appuie sur des dépendances instables qui sont en avance par rapport aux dépendances d’Angular 2.

A ce stade, ‘npm start’ fonctionnait. C’est maintenant que ça se complique car j’ai du traiter des messages d’erreur extraordinairement obscures qui m’ont tourmenté depuis que j’ai commencé à apprendre Angular 2. Comme par exemple celui ci :
01
02
 
Après quelques dépannages, (depuis, je suis devenu pas trop mauvais à décrypter les messages d’erreurs inutiles de System JS), le problème venait de cette ligne errante dans mon systemjs.config.js file:
// No umd for router yet
packages['@angular/router'] = { main: 'index.js', defaultExtension: 'js' };
Je suppose que @anguler/router a maintenant UMD. Quoi que soit cet UMD………
Le problème suivant que j’ai ensuite rencontré était celui ci :
03
04
 
Super! Une erreur de syntaxe bien flippante dans un fichier d’angular-material. Il n’y a pas de message d’erreur utile, ni numéro de ligne. Aucune aide pour me guider. Je ne sais pas si je dois upgrader ou downgrader les dependances, en installer de nouvelles, changer la syntaxe de mon fichier tsconfig.js (qui a sans doute changé quand j’ai upgradé vers typescript 2.0). Je suis perdu dans un océan de confusion et de frustration.
Maintenant, c’est sans doute facile à réparer pour ceux qui d’entre vous sont des web developers aguerris. Ce n’est pas là ou je veux en venir. C’est pas ce cas précis. C’est le fait que l’écosystème Javascript est un chaos absolu.
Chaque nouvelle version de chaque nouvelle librairie vient avec un lot de changement radicaux. Les nouvelles librairies sont releasées avant que leur APIs soient stabilisées. Les librairies en Beta sont dépassées et seules les librairies en alpha sont nouvelles et intéressantes.

Sur Stackoverflow, les posts vieux de 6 semaines sont vieux et plus d’actualité car il parlent de problèmes liés à une ancienne version que je n’utilise plus.

L’ingénieur Java que je suis est fou de rage contre cet écosystème. Dans quelle folie a sombré le développement web ? What the f**cking f**ck is going on with Javascript these days???
Okay, je crois qu’il est temps que je prenne un peu de recul pour dire que en fait, j’adore Angular 2. Une fois que toutes les dépendances ont été upgradées, et que tout fonctionne, quand Intellij souligne ce doit l’être, et que mon compilateur typescript fonctionne correctement, Angular 2 est génial.
Pour être honnête, j’ai utilisé des version des librairies qui n’ont pas encore été officiellement publiées. Peut-être diriez vous que c’est ma faute si j’essaie de télécharger et utiliser une version de la librairie qui est encore en alpha/beta/release candidate et que je m’attends à ce qu’elle fonctionne et qu’elle soit facile à utiliser. vous auriez sans doute raison. Mais si l’on considère que des centaines de milliers de développeurs utilisent déjà Angular 2, on devrait se poser la question : est ce bien responsable de publier des librairies qui sont toujours work in progress ? Est ce que ça parait logique d’annoncer une release candidate et faire ensuite des tonnes et des tonnes de changements radicaux au cours de l’évolution entre rc.1 to rc.6?
Combien de centaines de milliers d’heures de travail humain ont été gaspillées dans la souffrance à essayer d’upgrader une version d’Angular 2 et toutes ses dépendances ? Et comme en attesteront la plupart des ingénieurs, les heures de développeurs sont un bien précieux sur le marché de l’emploi aujourd’hui. Combien de développeur ont été totalement ravagés par l’expérience d’essayer d’utiliser Angular 2 et ont juré d’abandonner Angular à la faveur de React ? Combien d’autres librairies Javascript qui trainent par-ci par-là ont causé à leur utilisateurs des maux de têtes et des angoisses ?
Peut-être que l’écosystème Javascript vit ses premières douleurs de croissance. Peut-être que les développeurs sont en train de comprendre les erreurs de leur conception initiale et s’acharnent à les corriger au travers de chaque itération pour produire des versions à chaque fois meilleures.
Peut-être que le monde Javascript est là ou la grande majorité des développeurs vivront bientôt, puisque les outils outils auront évolué rapidement et efficacement. Peut-être que les gens accompliront plus avec Javascript et que les outils écrits en Javascript seront plus faciles à utiliser que ceux qui sont écrit dans d’autres langages…
Ou peut-être, peut-être que le monde Javascript sera une sorte de canular, un endroit ou les ingénieurs hipsters iront perdre du temps et se sentir à la pointe de l’innovation, alors qu’en réalité, ils sont dans un univers chaotique et fou, à jeter par la fenêtre des heures et des heures de productivité afin de pouvoir utiliser les derniers et les plus cools des outils existants.
Mais je ne suis qu’un humble développeur Java.
Ce qui m’intéresse le plus c’est qu’en pensez vous ?
Article original de Liz Bennet
Traduit par JS Staff
[separator type=”” size=”” icon=”star”] [actionbox color=”default” title=”” description=”JS-REPUBLIC est une société de services spécialisée dans le développement JavaScript. Nous sommes centre de formation agréé. Retrouvez toutes nos formations techniques sur notre site partenaire dédié au Training” btn_label=”Nos formations” btn_link=”http://training.ux-republic.com” btn_color=”primary” btn_size=”big” btn_icon=”star” btn_external=”1″]