Quel langage pour bidouiller le Web ?
Par Clochix le jeudi 15 octobre 2009, 11:17 - Technoweb - Lien permanent
Une activité dont je souhaite ardemment le développement dans les prochaines
années est le bricolage de données, le fameux slogan Hack The Web
!
. C'est à dire permettre à chacun et chacune de ne plus être
simplement consommateur de données, mais de pouvoir les manipuler aisément à sa
guise pour en faire ce qu'on veut. Et je réfléchis depuis quelque temps aux
meilleurs outils pour bidouiller la toile. Meilleurs pas uniquement d'un point
de vue technique, mais aussi de prise en main, d'accessibilité.
J'évoquais dans mon précédent billet l'intérêt d'utiliser le même langage de programmation sur le client et le serveur. Un autre avantage dont je n'ai pas parlé est que cela diminue les pré-requis, les connaissances nécessaires pour commencer à bidouiller le Web. Il est pour moi essentiel que chacun ait des rudiments de programmation. Heureusement, j'y reviendrai, ces jours-ci de nombreux projets tendent à rendre l'apprentissage de la bidouille de Web de plus en plus accessible. Unifier les environnements entre le client et le serveur va également contribuer à rendre l'apprentissage plus aisé. Mais il reste une barrière difficile à franchir, celle du langage de programmation. Car JavaScript est un langage nettement plus complexe que les BASIC, HTML, ou PHP par lesquels nombre d'entre nous ont commencé à bidouiller. Pas sûr que cela soit à la portée des Michus [1]. Or la démocratisation du Web impose que cette sympathique petite famille puisse acquérir son autonomie, ne pas dépendre de leur turbulent petit neveu geek, qu'ils puissent eux aussi bidouiller le Web. Mais je me pose la question du choix du langage. Si me semble bonne l'idée d'utiliser le même à tous les niveaux, pages, serveur et navigateur, je ne suis pas sûr que JavaScript soit le meilleur candidat pour devenir ce langage universel du Web. Et pour préciser, je me demande si Python ne serait pas un meilleur choix.
L'idée n'est pas totalement stupide : certes JavaScript est hégémonique sur le Web, côté client du moins. Mais il souffre d'un certain nombre de problèmes qui rendent son apprentissage malaisé:
- de grosses différences entre les différentes implémentations. Même si des normes existent, leur implémentation laisse encore parfois à désirer, et un code pourra fonctionner avec un moteur mais pas avec un autre, sans raison particulière. On peut donc difficilement se concentrer sur l'apprentissage du langage en faisant abstraction du contexte;
- il n'existe pas de site de référence. La plupart des autres langages ont des sites Web où on trouve l'essentiel de la documentation et des didacticiels. Quelqu'un qui cherche des informations sur JavaScript n'a souvent d'autre alternative que d'utiliser un moteur de recherche. Et, conséquence du point précédent, les documentations sont souvent liées à une implémentation, comme par exemple dans le MDC;
- son modèle objet n'est pas facile à appréhender : essayez par exemple de trouver sur le Web une explication simple du concept d'héritage par prototype;
- peu de bibliothèques sont disponibles: hormis pour des fonctions nécessaires côté client (manipulation de documents HTML), on dispose de bien peu de bibliothèques : la manipulation de chaînes de caractères, les dates, les expressions régulières... c'est à peu près tout. Rien par exemple pour la communication avec un système de fichier, des bases de données... CommonJS s'est donné pour but de remédier à ce manque, mais le projet n'en est qu'à ses débuts;
De son côté, Python n'est pas totalement absent côté client. Il est notamment un langage de premier choix pour Mozilla: on le retrouve un peu partout sous le capot, et des développeurs comme Atul Varma, qui en sont fan, veillent régulièrement à ce qu'on puisse utiliser Python avec Ubiquity, Jetpack, etc. J'avais déjà évoqué cela il y a quelques mois. Des projets comme jsbridge tissent des ponts entre les deux langages. Et si JavaScript est pour l'instant hégémonique dans les pages Web, Python est lui très populaire dans l'éducation. De nombreuses ressources sont disponibles pour l'utiliser pour apprendre la programmation. Il me semble plus facile d'accès, plus pédagogique.
Bien sûr, il existe des dizaines d'autres environnements pour apprendre à coder. Mais je crois que Python est la seule alternative crédible à JavaScript, car il est très populaire, réellement utilisé aussi bien dans des projets industriels que pédagogiques, et a déjà un pied dans le navigateur.
Je pense qu'on est à un tournant, les mois à venir vont voir la popularisation à la fois d'outils pour bidouiller le Web en utilisant juste son navigateur, et de solutions globales effaçant les barrières entre le client, le serveur et le navigateur. JavaScript semble bien parti pour devenir le langage universel du Web, mais il n'est peut-être pas trop tard pour Python. Je ne connais pas du tout la communauté Python, mais ai peut-être l'honneur de compter un ou deux de ses membres parmi mes lecteurs. Pensez-vous que la communauté pourrait s'investir pour renforcer le support de Python dans le navigateur, dans des outils comme Ubiquity et JetPack ? Afin d'offrir une alternative crédible à JavaScript comme langue universelle du Web. Le choix de cette langue est très important, car il va avoir un impact sur la démocratisation de la bidouillabilité. J'espère de tout cœur que le débat aura lieu et permettra de choisir la meilleure technologie, puissante et accessible à tous et toutes.
Commentaires
Quand j'ai vraiment voulu me mettre à faire des devs perso, j'avais le choix entre PHP (et bénéficier du support de mes (ex) colloègues autour de moi) et Ruby/Python qui commençaient à faire parler d'eux.
Après avoir lu la doc de Rails et de la doc sur Python, j'ai gardé ce dernier car je trouve sa syntaxe plus simple a appréhender, très lisible et sans ";" à la fin de chaque ligne.
En outre, python ne se limite pas au web comme php par ex (oui je sais y a php-gtk mais bon hein). Cela m'a conforté dans mon choix car en choisissant python, je pouvais aussi bien me lancer dans du dev web que du sysadmin et voir un jour dans des applis "desktop" avec des interfaces.
D'ailleurs Python a été retenu pour être enseigné au lycée. D'autres ont du faire le même rapprochement que toi
Globalement, je trouve ça reposant de faire du python en fait (si je compare avec mes expériences en PHP par ex).
Python m'a eclairé sur bcp de points et par ex, je lis nettement mieux le code PHP depuis que je fais du python
Maintenant que je me mets à CouchDB, il me faut regarder JS et c'est vrai qu'on se retrouve vite bloqué face à des bouts de code en général proposé par des gens qui connaissent bien JS et qui considèrent que leur code est trivial. Pas pour moi en tous cas... En outre, les bouquins sur JS portent encore bcp sur les effets js que tu peux mettre sur une page que sur la partie objet / serveur.
Malgré le plaisir que j'ai à coder (en Python), je ne pense pas que ce soit un jour à la portée des Michus, la bidouillabilité restera toujours à l'échelle des geeks si on s'en tient à un langage. Aller vers une approche par composants - type Lego - sera déjà peut-être plus à leur portée mais je me trouve encore optimiste
Pour la partie "Python c'est bien, mangez-en", je partage ton enthousiasme et j'essaye de le propager aussi mais il ne faut pas croire que Python est très utilisé non plus. Il progresse, mais malheureusement très/trop doucement pour en faire un langage de premier choix...
Enfin voilà, c'était ma minute déprimante
@NicoS : ce ne sont pas d'autres qui ont fait le même rapprochement que moi, mais moi qui dis ça après avoir lu à plusieurs reprises que Python était un bon langage pour apprendre la programmation, et découvert en ligne de nombreux cours.
As-tu vu qu'il existe une bibliothèque pour utiliser Python avec CouchDB : couchdb-python ? Tu as déjà essayé jsbridge ?
(détail : PHP ne se limite pas au Web. Il n'est certes pas adapté au développement d'applications desktop, c'est un des rares manques parmi ses bibliothèques, mais on peut tout à fait l'utiliser hors du Web pour par exemple des scripts batchs.)
@David : je me suis effectivement mal exprimé. Je ne pense pas non plus que demain les Michus pourront programmer, et d'autres outils sont encore à inventer pour eux. Par contre je suis persuadé que le navigateur est aujourd'hui une excellente plate-forme pour s'initier à la programmation. L'informatique arrive peu à peu dans l'éducation, et pas seulement pour apprendre les usages, mais aussi le fonctionnement. Demain, Firefox sera un IDE idéal pour débuter: rien à installer, tout se passe directement dans le navigateur, on code et on teste au même endroit. Or Python me semble plus approprié comme langage pour s'initier à la programmation. Quelqu'un de motivé qui a envie de commencer à bidouiller acquerra plus facilement des rudiments de Python que de JS. D'où l'intérêt de pousser Python dans le navigateur. Quant à la communauté Python, elle aurait là une occasion de croître.
En parlant de python dans le navigateur, il existe PyXPCOM chez Mozilla. Je n'ai pas encore essayer mais ça permet de jouer avec du Python dans une appli sous XulRunner.
Peut-être qu'un jour ça sera disponible par défaut sous un Firefox, et là on pourra utiliser indifférement Python côté serveur et client. Avec en plus l'avantage de disposer de toutes les librairies Python.
De plus avec PyDOM, on peut apparement se passer de Javascript pour n'utiliser que du Python.
https://developer.mozilla.org/en/Py...
https://developer.mozilla.org/en/Py...
@Frédéric : oui j'avais déjà évoqué PyXPCOM dans mon billet de février. Une des principales différences est que cette extention embarque son propre moteur Python, alors que jsbridge se repose sur un moteur externe. Chaque solution a ses avantages et ses inconvénients, cf par exemple ce billet d'Atul Varma qui en discute. Mais j'ai l'impression qu'il n'y a plus beaucoup d'activité autour de PyXPCOM.
@Clochix : oui, mais j'ai plutôt joué avec couchdbkit (http://www.couchdbkit.org/) pour le moment.
Mon but n'est pas forcément d'utiliser python - si CouchDB avec sa couche js suffit pour mes besoins, autant s'en contenter sans rentrer dans une architecture n tiers classique...