mercredi 5 décembre 2007

At Least Surprised !

Pour ceux que la philosophie du langage Ruby intéresse, je suis tombé sur une vieille interview de Yukihiro Matsumoto (aka "Matz", le créateur du Ruby) par Bill Venners (2003 ; en anglais). Vieille certes, mais pas périmée pour autant. Je vous fais une petite traduction des lignes directrices :

  • Il n'y a pas de langage parfait.
  • La transversalité contre l'harmonie.
  • Liberté et confort.
  • La joie de Ruby.
  • Le facteur humain.
  • Le principe de moindre surprise.
C'est seulement sur ce dernier point que je vais revenir ce soir (mais on reparlera de l'aspect "joie" un de ces 4). Matz explique clairement que l'un des leitmotiv dans le design de Ruby est ce fameux "Principle of Least Surprise". Le Ruby est sensé provoquer le moins de surprise (ou étonnement) au programmeur, lorsqu'il code. C'est à dire que les choses doivent se faire "naturellement", et que par simple test (ou même sans) sur les fonctionnalités de bases du langage, on tombe sur ceux à quoi on s'attendait. Mais aujourd'hui, j'ai été surpris :

a = 10
a +++++++++++++++ 1
#=> 11


~~~~

- Pourquoi !? Pourquoi ce bout de code immonde ne plante-t-il pas ?
- Réponse : parce que.
- Oui mais attends ! J'ai été ultra-surpris que ça m'envoie pas bouler sur Dagoba ce truc ! Comment se fait-ce ?


La réponse est évidente, mais Matz la développe dans l'interview : le POLS ne s'applique qu'à lui au départ. Il a créé le Ruby pour avoir un langage qui ne le surprenne pas à lui "Yukihiro Matsumoto, 5 rue Akira Toriyama, 854 Kyoto" (c'est son ancienne adresse). C'est seulement par voie de conséquence qu'il espère que le principe sera le plus valable possible pour les autres développeurs. Mais ce n'est pas le but premier.

A chacun son avis sur la question de savoir si "ça marche" ou non. Pour ma part, j'aurais tendance à considérer la vitesse à laquelle on apprend les bases du Ruby lorsque l'on pratique déjà d'autres langages (avec de préférence des notions de POO) : elle est extrêmement rapide.

0 commentaires: