dimanche 17 avril 2011

Langages dynamiques

Je prends quelques minutes pour écrire un truc sur les langages dynamiques.

J'ai dernièrement fait un peu de Python pour développer mon logiciel de gestion d'abonné. J'aime beaucoup ce langage finalement, même si certains éléments de syntaxes sont bordelliques.

En trainant sur le Net, je m'aperçois que Python est assez peu représenté au profit de... Ruby ! La mode pour le développement Agile c'est Ruby on Rails, les craftsmen font beaucoup de promo sur Ruby... Pourtant pourquoi Ruby serait plus Agile que Python ? Tous deux sont des langages dynamiques, multi-paradigme (orientés objet, mais pas que), basés sur un interpréteur C permettant de dialoguer avec du code compilé natif. Tous les deux permettent de faire du Web : RoR pour Ruby mais Django pour Python. Tous les deux disposent de gestionnaires d'extensions : gem pour Ruby, pip ou easy install pour Python... Bref, ils sont proches.

Personnellement, je trouve que Ruby instruit des points qui me gênent avec Python (so far... je ne connais pas encore suffisemment Ruby) :

L'encapsulation
C'est vrai que Python à tendance à détendre le développeur sur le principe d'encapsulation. Cependant j'aime bien faire BEAUCOUP de méthodes que je voudrais privées (export till you drop comme dirait Uncle Bob). Certes, on peut fonctionner par conventions mais qu'un dir(MaClasse) me renvoie dix lignes d'attributs, ça me dérange... Si on veut exposer des méthodes publiques, faut-il systématiquement des façades ? Quant à la convention des préfixes _ et __ pour les membres protégés ou privés, je trouve ça juste attroce. Au moins, avec Ruby, on peut a priori faire de VRAIS membres privés...

Self
Le truc que je déteste en Python : l'accès aux membres avec l'utilisation systématique de self. C'est juste CHIANT. Je veux qu'on considère qu'une classe utilise ses membres A PRIORI. Encore pire : mettre self en tant que premier paramètre des méthodes. Ca sent un peu trop la démarche "Je veux faire de l'objet avec du C" en passant un pointeur de structure comme premier paramètre de fonction. Berk.

Mais il s'agit de détails. Je suis sûr que Ruby possède également ses casseroles syntaxiques (déjà le #{foobar} pour l'interprétation des variables en string c'est un peu chiant).


Le vrai plus de Ruby je pense, c'est le côté bling bling, je m'explique :

Le nom
OK cet argument est nul, mais il appuie bien le côté bling bling de Ruby.

La promo sur les sites Webs
Dans les réponses de Tarek sur LinuxFr, il décrit qu'une grosse faiblesse de Python réside dans son site officiel www.python.org très peu sexy. Quand on voit le site officiel de Ruby www.ruby-lang.org, traduit en plusieurs langues, coloré,... Avec un gros plus : le lien Apprenez Ruby en vingt minutes ! De même, le site de Ruby On Rails, rubyonrails.org est plutôt direct, genre "chope le, code et mets en prod ce soir". Ruby est cool et sexy, Python est austère et destiné aux matheux.

Communauté
Le développeur Ruby a l'air riche. Il fait des screencasts dans lesquels il développe sont site sous Rails en 30 minutes avec son macbook pro en utilisant TextMate. Il fait quoi le développeur Python ? Il utilise gVim sous Debian tournant sur un vieil Athlon des familles ? Snif.

Alors voilà, je vais me mettre à Ruby parce qu'il a une image sexy et parce que je pense que ça gonflera mon CV. Mais je ne vais pas laisser Python parce que je trouve ce langage super cool !

PS : je n'ai pas parlé de Perl. Qui parle encore de Perl en 2011 (^-^) ?