Philosophie de perl

21/12/04

Perl is a mess and that's good because the problem space is also a mess.
Larry Wall

Comme vous avez pu le remarquer sur les autres pages de ce site, j'utilise perl souvent et pour des tâches assez variées. Perl n'est pas une vraie abréviation même si certains lui découvrent des sens secrets et il fait écrire "Perl" quand on parle du langage et "perl" quand on parle d'un de ses implémentations. Voila donc quelques petites choses que j'ai appris ou compris à propos de la philosphie de Perl.

Perl est un langage de programmation gratuit et libre, rendu Open Source par son créateur initial, Larry Wall. Il est disponible sous d'inombrables platteformes sous la forme de distributions. Il est présent nativement sous toutes les distributions de Linux et maintenant aussi MacOS X. Windows n'est pas laissé de côté grâce notament à ActiveState qui en a fait un produit gratuit, simple à installer, et à maintenir.

Scripter, programmer, hacker et coder

Donc si perl est un langage, que peut-on faire avec ? Comment l'utiliser ? Est-ce vraiment un langage de programmation à proprement parler ? Je vais répondre par l'affiermative même si de nombreuses personnes voient perl comme une forme de scripting, un moyen de bidouiller de petites tâches. En fait, perl peut pratiquement tout faire, des applications CGI aux interfaces graphiques complexes, des scripts en une ligne jusqu'à de véritables systèmes d'exploitation. Nous allons parler de codage car c'est plus neutre et que cela véhicule bien le message que l'on peut traduire une pensée en perl. Les meilleurs en perl se qualifient eux-mêmes de hackers au bon sens du terme.

Je rêve d'être un jour un perl hacker mais pour le moment, je n'en suis qu'au stade du tourisme.

Il y a tellement de gens qui ont associé le langage perl avec le protocole CGI qu'ils semblent intimement liés historiquement. Le fait est que le CGI n'est qu'une interface, que l'on peut exploiter avec très grande facilité avec perl (d'où sa grande popularité pour cette tâche) mais en théorie, n'importe quel autre langage pourait faire l'affaire.

De nos jours, le langage le plus populaire pour générer des pages dynamiques du côté serveur semble être le PHP comme si la solution CGI/Perl était passée de mode. Je ne suis pas un expert en PHP mais quand je lis des livres ou des scripts dans ce langage, je trouve cela tellement étroit d'esprit que je reviens toujours vers perl. Je trouve la sémantique de PHP si pauvre, si dédiée à une seule tâche, une seule façon de penser, tellement liée à certains protocoles et composants, ... et au fond, je trouve que c'est assez idiot, intellectuellement. Plus j'en apprends sur PHP, plus je me demande s'il peut exister des magiciens du code PHP, voir des PHP hackers.

Perl relève peut être de la vieille école mais il perdure dans de forts nombreux cercles. C'est un langage d'une telle richesse liée à la communauté qui le fait vivre que j'ai du mal à imaginer qu'il puisse un jour disparaître.

Il y a plus d'un moyen de le faire
There's more than one way to do it

Alors que la plupart des langages de programmation prônent toujours une certaine forme d'orthodoxie de codage d'un algorithme, il est largement admis en perl que d'innombrables solutions sont possibles et tout à fait acceptables. Si ce n'est pas la liberté totale, car le code doit rester aussi compréhensible par la machine, l'intention est bien de se rapprocher le plus possible d'une certaine psyché humaine et dieu sait la place accordée à la liberté dans ce domaine.

L'approche pragmatique du codage en perl est que l'on s'oriente vers plus d'orthodoxie quand on se trouve confronté à un problème, une voie sans issue, une situation où perl ne fait pas ce que vous attendez de lui. Vous êtes libres de coder comme bon vous semble, mais si vous atteignez vos propres limites, le meilleur endroit pour demander de l'aide est dans perl. Demander de l'aide à perl est un pré requis à toute demande sur une mailling list ou un newsgroup.

Le premier pas dans cette direction est d'activer les warnings (perl -w ou use warnings). Ainsi, perl va vous donner des conseils et formuler des observations et points d'étonnement à propos de votre code. Il acceptera peut-être ce que vous avez écrit mais il essayera de vous aider et mettra par exemple tout de suite en évidence les fautes de frappe ou des choses plus subtiles ou tout aussi évidentes. Si vous avez besoin de plus d'aide de la part de perl, celui-ci va demander en retour une certaine coopération de votre part en exigant un certain formalisme pour avoir une idée plus préçise de ce que vous voulez faire. Le mode stricte (use strict) est plus lourd car il vous impose des déclarations explicites et refusera de fonctionner si vous ne vous pliez pas à un certain formalisme mais cette auto-discipline conduit à un puissant mode de débogage.

Ne demandez jamais de l'aide à des humains sans avoir auparavant demandé à perl des conseils et utilisé le mode stricte. Ce ne doit pas être interprété comme le culte d'une orthodoxie mais une approche productiviste des principes de développement personnel (auto-gestion ?). L'idée n'est pas de vouloir contraindre la pensée dans un moule mais de trouver des standards communs pour la lecture explicite à tous niveaux.

La boîte de Pandore

La première chose qui m'a plu chez perl est le fait que c'est d'une grande simplicité au premier abord. Très vite, on peut commencer et avoir des résultats effectifs. Quand, avec le temps, on s'attaque à des projets plus ambitieux, on n'a jamais besoin de réinventer la roue car il y a certainement quelqu'un qui a déjà rencontré votre problème. Il existe sur internet cet endroit mythique appelé le CPAN, Comprehensive Perl Archive Network. C'est l'endroit où l'on trouve toutes les distributions, toute la documentation, des exemples, etc. comme pour d'autres langages, mais aussi, c'est le dépositoire centralisé de milliers de modules. Les modules sont des bouts de code qui permettent d'étandre le covabulaire et les possibilités de perl. Il existe déjà tellement de modules qu'il y a de très fortes chances que vous en trouviez un pour vous aider.

Il y a un vrai sens de la communauté entre les utilisateurs de perl qui les conduit à partager leur connaissance d'un problème informatique et de rendre au monde la solution qu'ils ont trouvé. Une sorte de sagesse par le recyclage intellectuel. Le CPAN liste près de 8000 modules et chaque jour, de nouveau apparaîssent. Cela conduit à une approche modulaire et flexible de l'espace cognitif. C'est de l'information libre et centralisée d'une manière harmonieuse.

Les créateurs de perl ont essayé de rendre le plus simple possible le fait d'étendre les possibilités d'une copie individuelle de Perl, avec la légère modération que ce n'est pas forcément un but toujours atteint, notament en raison du fait que peu à peu, les modules se mettent à dépendre eux mêmes d'autres modules d'où des chaînes de dépendances qui sont parfois complexes à résoudre. L'autre raison est que certains modules ne sont pas eux même écrits en perl. Perl lui même n'est pas écrit en perl. Cependant, avec ActivePerl sous Windows, les modules sont vraiment très faciles à installer, le processus étant rendu presque automatique et transparent, mais ce n'est pas le cas de toutes les distributions.

Socialisme des connaissances

Rendre tous ces modules disponibles dans cet endroit commun centralisé n'est pas la seule forme de mutualisation des connaissances que l'on trouve dans l'univers de perl. Il y a cette stimulation globale à partager son code, même s'il n'est pas formalisé dans un module et même si l'on n'est pas assez fier ou content de son code pour l'estimer digne d'être présent sur le CPAN. Je suis un piètre codeur en perl mais j'essaye de montrer ce que j'ai fait et les solutions que j'ai mis en place, juste au cas où cela puisse aider quelqu'un d'autre. C'est un comportement très fréquent et typique dans la communauté perl.

L'autre aspect à bien considérer dans ce rapport spécial à l'information (socialisme ?), connaissance avancée distribuée aux masses, est liée au fait que perl n'est pas compilé mais interprété. Quand vous travaillez pour quelqu'un d'autre, à la fin, vous donnez (parfois contre de l'argent) le code et non le programme binaire. Dans le cas des langages compilés, vous pouvez vous contenter de distribuer un programme éxécutable sous forme d'un fichier binnaire (incompréhenssible faute d'une décompilation hazardeuse) et garder votre précieux code pour vous. On pourait dire que perl est socialise par conception, on pourait aussi dire qu'il est distribué par nécessité technique, mais à la fin, ce qui compte, c'est que le travail est fait et que le résultat peut toujours être amélioré par quelqu'un d'autre.

Ce socialisme a aussi des conséquences sur la religion de perl. Les grands utilisateurs de perl essayent de rendre leur code aussi agnostique aue possible en ce qui concerne l'environnement dans lequel il sera utilisé. Comme perl a été porté sous tellement de systèmes d'exploitation, le bon code doit faire en sorte de capitaliser sur cette fantastique portabilité. Il faut qu'il y ait toujours un maximum de flexibilité, ce même si on peut, par facilité d'écriture ou d'usage, lier une portion de code à un certain système ou logiciel tiers.

On parle ici de socialisme des connaissance et non de communisme car il faut bien qu'il reste une possibilité de gagner un minimum d'argent avec perl. Le langage a son éthique et sa licence artistique. Il y a plus d'une voie pour le faire et plus d'une voie pour l'utiliser. Certains préfèrent la programmation orientée objet, d'autres resteront en mode classique ou n'importe quel moyen terme. Il y a beaucoup de liberté mais le but est le même, que le travail sous fait pragmatiquement.

We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris.
Larry Wall, Programming Perl, 1st Edition

La magie

Je trouve que l'on fait l'experience d'une certaine part de magie quand on écrit en perl. Plus on connaît le langage, plus on fait du code littéraire ou audacieux. Le code perl peut être très simple a expliquer à quelqu'un qui ne pratique pas ce lanage mais cela peut aussi devenir un véritable cauchemard avec l'obfuscated perl, cauchemard qui peut à son tour devenir un art dans le cas du perl golf (exercice consistant à réaliser une tâche donnée avec le code le plus minimal et zen possible). Les expressions régulières sont la partie la plus difficile à traduire en langage courant mais elles ouvrent la perspective d'un tel paysage de puissance géniale que cela vaut la peine de creuser.

Il y a tellement de moyens d'écrire une même action que les codeurs peuvent vraiment exprimer un style qui reflète leur personnalité ou esprit. Le code eput être amusant, stricte, tolérant, laxiste, baratineur, intense, ...

Le processus d'apprentissage est vraiment simple et grâce à O'Reilly il y a beaucoup de très bons livres pour ceux qui ont un problème avec la lecture à l'écran ou aiment le papier.

Avec quelques expressions, je peux automatiser des tâches d'une manière si facile que je resent toujours cette magie. Les possibilités sont infinies et l'experience est toujours agréable. Je ne suis pas un programmer (j'ai fait des études de droit et de documentation) mais de tous les langages que j'ai eu à utiliser, perl sort vraiment du lot. Je code pour le plaisir, comme loisir, mais l'idée que l'on puisse payer quelqu'un pour le faire semble trop belle pour être vraie.

J'ai encore tellement à apprendre que je suis en paix. Je voulais juste profiter de cet espace pour propager mon amour pour ce langage et essayer de le communiquer. J'ai envie de remercier et j'ai l'espoir que certains lecteurs trouveront ici une motivation de plus pour se plonger dans perl pour faire de ce monde un endroit meilleur, ou au moins plus sain voir saint.

A camel is a horse designed by a committee.
Larry Wall