La maturité d’un projet ne se juge pas seulement par le code source lui-même, il se mesure aussi à tout l’écosystème et à la communauté.
Un jour je me suis retrouvé à devoir choisir, sans m’y connaitre vraiment, entre apprendre Python ou Ruby. La raison pour laquelle j’ai choisi Python n’a rien de profondément philosophique: ça marchait.
A l’époque, et c’est encore dans une moindre mesure le cas aujourd’hui, l’écosystème Ruby était bancale:
- installation de gem qui foire une fois sur deux;
- projets sans tests (oui, on est mal placé…) ni documentation;
- environnement isolé très compliqué à mettre en oeuvre.
C’est éxactement ce que je ressens aujourd’hui à propos de NodeJS. Un de mes amis prosélyte quand il s’agit de ce projet m’assurait que c’était le repo le plus suivit sur github, qu’il y avait maintenant moulte ORM, frameworks, et tout ce qu’il fallait pour développer.
Et c’est vrai, Node avance très vite. Trop vite.
Emporté par l’élan de l’enthousiasme, les amateurs de la techno ventent les (réels) mérites de la bête:
- performances époustouflantes;
- websocket ou fallback les doigts dans le nez;
- un seul langage côté serveur et client;
- une communauté de passionés hyper compétents et productifs;
- et pleins de vrais projets en prod pour le prouver.
Sur le papier c’est cool, mais en pratique, voici ce qu’on a oublié de vous dire:
- les packages ont un goût de pas fini: doc fébrile, -h qui fait planter le programme, erreurs de locale impossible à résoudre, etc.
- il y a 100 initiatives pour tacler le même problème. Pour l’instant pas de clair gagnant pour les libs les plus importantes. La pérénité de vos dépendances se joue à pile ou face.
- toutes les libs sont en travaux. C’est la seule chose qu’on trouve toujours dans la doc: version beta, l’API va changer, tout va pêter, vous êtes prévenus.
- un seul langage, mais c’est du JS. Syntaxe de merde, gestion de scope tout pourri, passage des arguments à la walou et nested callbacks en pagaille. Si bien que les projets JS les plus connus (hors jQuery et cie) sont coffeescript et les libs qui inlinent les appels asynchrones. Ça me fait penser à Microsoft qui vente les qualités de son défragmenteur alors que la concurrence ont des FS qui ne fragmentent pas.
- les debug toolbars, les ORM, les générateurs de formulaires, les libs d’i18n, bref, tous ces trucs qui vous rendent 10 fois plus productifs sont loin d’offrir l’équivalence en terme de features ou de facilité de mise en oeuvre.
- la seule bonne source d’infos à jour sur NodeJS c’est stackoverflow… Hum… Oh certes, vous avez des docs de références au poil sur plein de sites, mais en 5 minutes, vous allez tomber sur le cas de programmation réel qui n’est décrit nul part.
- vous avez du mal à trouver un dev Python ou Ruby ? Essayer de trouver un dev NodeJS. Et pour la formation, bonne chance. Ca ne demande pas du tout le même niveau de compétences. La bonne nouvelle : si un mec sait s’en servir, vous êtes à peu prêt sur qu’il est bon.
Ça me rappelle le buzz qu’il y avait eu autour de Python Twisted. Travailler en asynchrone est tellement difficile pour le programmeur lambda que quand j’ai passé un entretien d’embauche chez Jamendo, le mec voulait me recruter rien que parceque je savais à quoi ça servait. Du coup, les alternatives sont encensées, mais vous trouvez vraiment les greenlets si simple ?
Je crois fermement que NodeJS va s’imposer dans le développement Web (merde, encore un truc à apprendre) car, avouons le, ça déchire sa génitrice. Mais ne vous faites pas avoir par les barbus betaddict qui prêchent la dernière update de la bonne parole, si vous mettez les mains dedans, vous allez en chier.
Suis un pythonistas … Mais je garde un oeuil sur nodejs, car j’aime bien le JS ;-)
Coffeescript n’a pas grand chose à voir avec nodejs (et dans mes souvenirs, c’est même antérieur à nodejs). Certes, il est dispo maintenant en tant que module nodejs, mais c’est tout, non ?.
Il faut voir nodejs comme une “plateforme”, pas un framework. C’est vrai que c’est du twisted en plus simple, logique.
Si vous voulez halluciner, et voir un framework nodejs, qui a de la gueule, et apporte réellement qqchose de nouveau : aller matter meteorjs ;-) http://meteor.com/main
Là, c’est certain qu’en python/twisted on ne peut pas y arriver ;-(
Ouai meteorjs c’est un truc de fou. Mais c’est pareil, essayez de faire un projet avec: les trucs marchent à moitié, la documentation est lacunaire, et quand on veut regarder dans les sources…
Pour coffescript, vous noterez que je le mention dans le point abordant le JS en particulier. La logique c’est ‘argument du langage unique client-server’ mais ‘c’est du js’ et ‘le js c’est tout pourri’ la preuve ‘quand on parle de js, c’est pour venter coffeescript’.
Encore une fois je caricature. On peut faire des choses fabuleuses en Javascript. Mais c’est un langage qui pose d’emblée d’énormes contraintes.
MeteorJS est loin d’être prêt pour la prod. Aux dernières nouvelles, il n’y a aucun sécurité, c’est à l’état de vitrine: si vous faîtes ça en prod, vous risquez de donner tout pouvoir au client. Enfin, c’était comme ça la dernière fois que j’ai regardé (il y a moins d’un mois).
Oui particulièrement en ce qui concerne l’accès à la base de données: leur ORM real time semble accessible côté client sans aucune entrave. Si on a envie de créer 20000 entrées, il suffit de lancer firebug.
+1
Merci pour cet avis objectif.
j’ai perdu aussi quelques dents face aux joyeuses portes que nodejs dresse parfois devant vous. Inversement, j’ai rarement vu un language où j’ai pu en percevoir tout le potentiel et les atouts simplement en lisant quelques lignes. Ce qui change fait souvent peur au début.
J’ai déjà 2 sides softs en prod dessus et je suis pour l’instant globalement satisfait… Tant qu’on reste dans les clous, c’est du bonheur… mais honnetement, les dernières évolutions des languages de programmation nous ont peut être aussi un peu trop habitué au code facile, où le programmeur n’avait plus à réfléchir des effets de bord de son code. Avec NodeJS, on peut à nouveau créer, et si on se plante… ben ça plante :).
Je viens de découvrir votre blog, devant cet article très intéressant, je vais de ce pas parcourir le reste.
A bientôt j’espère.
:-)
Je suis tout à fait d’accord avec tous les points de cet article. J’ajouterai que Node.js m’a permis de progresser de manière monumentales: j’avais beaucoup de mal à appréhender le MVC avant en PHP; maintenant, j’utilise matador, un framework reposant sur express et ajoutant une couche MVC, et j’ai une grosse app en prod là dessus. Le seul point que je pourrais à la limite discuter: “Javascript et ses défauts”. Certes, c’est une langage qui a ses défauts (this, scope, syntaxe) mais une fois maîtrisé, ça ne pose plus aucun problème. Je ne pense pas que c’est un point noir. Je suis du genre à créer mon js client tout à la main (ouais, je suis maso) sans librairie (ou une que je suis en train de créer moi-même) et je peux vous assurer qu’une fois l’habitude prise, on ne se fait plus avoir par les pièges. La doc, c’est très drôle. On ne comprend rien au début, on patauge. Et une fois qu’on a passé le déclic, on peut déchiffrer les docs d’un module très rapidement. Mais je me souviens que j’ai beaucoup galéré au début :) En tout cas, très bonne article que je conseillerais. Je suis du genre à adorer node.js et à pas être très objectif, mais ça fait du bien de voir que certains le sont.
Ca me fait penser qu’il faudrait qu’on fasse un article sur MVC. Y a pas une explication du correcte sur ce putain de Web.
Exact :D
Je suis actuellement en plein test de node.js avec le framework Mojito de Yahoo.
Node.js de base est bien, mais créer une appli de taille moyenne en partant de zéro c’est du sucide. ( pour l’évolution, maintenabilité avec d’autres développeurs et surtout une perte de temps ).
Il y a pour le moment un manque de documentation française sur le sujet, mais si vous maitriser un minimum la langue de shakespear, vous devriez trouver votre bonheur sans trop de difficulté.
Bref, node.js + framework suivi par une communauté avec une vrai documentation = techno tout à fait valable pour la production.
Pour ce qui est de trouver des développeurs les fondamentaux de javascript sont normalement connus de tout les developpeurs web, et maitriser les subtilités objet du langage n’est pas insurmontable.
Et sans risque .. pas de plaisir :)
J’ai parcouru la doc de mojito, mais je n’ai pas trouvé la partie expliquant comment mettre un place un ORM gérant des connexions à de multiples base données, comme autogénérer des formulaires en fonction de modèles, comme réutiliser des vues génériques pour manipuler des modèles, comment générer des flux RSS et des sitemaps depuis l’arbo de routing, comment générer une interface d’administration des données automatiquement, comment permettre le reset d’un password d’une personne inscrite sur le site, comment gérer les cookies chiffrés ou comment mettre en place une protection csrf.
Seriez-vous assez aimable pour me pointer dans la bonne direction ?
P.S: tous les liens vers Django peuvent être remplacés par des liens vers Symphony ou Ror.
J’ai éclaté de rire en lisant le title de l’image de Pistorius !
Résultat: j’ai re-parcouru tout le blog en survolant les images :D
Ca me fait penser que toutes les images ont pas de title, il faut que je mette ça à jour !
Voilà c’est fait.
Sam,
Il existe des choses correctes sur MVC, va voir :
http://www.developpement-java.fr/controleur-avec-spring-3-mvc-et-maven2/
Quand je vois au debut de l’article:
mvn archetype:generate -DgroupId=kezen -DartifactId=SpringKezenTuto -DarchetypeArtifactId=maven-archetype-webapp.
J’exclus immédiatement le tout comme étant un tuto correct pour débutant.
Il est possible de faire un simple Hello Word en MVC 3 pauvres fichiers. Sans framework. Sans installation compliquée. Sans surcouche d’aucune sorte.
Définitivement un article à écrire.
un article sur bottle sam, surtout qu’on l’utilise ;)
Juste un post pour faire suite au dernier message de @Sam afin de savoir si un article sur le M.C.V. était paru, j’ai rien trouvé avec la recherche alors qu’on sentait la nécessité de traiter le sujet dans un article.
Pour le moment, rien, nada. C’est toujours dans les carton.
NodeJS vs Django, et python plus généralement, pour 2014, si tu n’avais qu’à n’en choisir un, quel serait ton choix? La question est devenue carrément existentielle!
Avec Javascript, je suis cantonné au Web et 2/3 gadgets, avec Python, je fais des milliers d’autres choses. Ce n’est même pas une vraie question :) Surtout qu’avec la 3.4 on va avoir asyncio et donc les concurrents de nodejs en Python vont devenir super nombreux.
Sam :
Commentaire tout à fait “code-improductif” plutôt orienté orthographe: –>vanter, et non –>venter , même si Node.JS fait souffler un vent de “nouveauté” sur le web-dev… :-)
Et maintenant vous en pensez quoi ?
Y a eu une énorme amélioration au niveau du packaging. Par contre la stabilité des APIs et la mise à jour de la doc est toujours un problèm. Problème qui ne s’arrange pas avec le split de la communauté node sur 2 nouveaux projets : io.js, le fork de node qui est “plus mieux meilleur”, et Convergence, qui doit merger les deux.
On es en 2015 et c est toujours aussi vraix.
Asynchrone c est bien la seul chose qui peut etre un atout.
Le reste c est du flan, on s echappe vers coffeescript et maintenant ecma2015 pour avoir un code qu on arrive a controller.
On m a vendu du loopback pour faire une appli web, j ai bouffé la grenouille tellement que c est la pagaille a s y retrouver mais bon je dirai pas que je deteste mais simplement que je hai.
On rajoute a ca la super mode du nosql et c est le somum, du callback hell a tout va, des contraintes relationnel a coder sois meme ca en devient ridicule.
Pour conclure je dirai que nodejs a foutu un sacré bordel ainsi que ces framework qui vous vendent du reve sans expliquer que c est pas mature…
;)
Et pourtant : Why I’m switching from Python to Node.js (Geek for Brains)
Et pourtant : http://geekforbrains.com/post/after-a-year-of-nodejs-in-production (Geek for Brains, mais 1 an d’usage pro plus tard)