La programmation, tous les programmeurs vous le diront, est un art. Quoi que généralement composée de logique, de stress et d’échéanciers serrés, elle demeure tout de même un art. Un programmeur laissé à lui-même, en dehors d’un budget et d’un environnement de travail le moindrement sérieux, est libre de « jouer » avec le code, de créer des programmes peu utiles, mais beaux et ludiques ou remplissant certaines conditions strictes, mais farfelues. Une communauté s’est formée autour de cet aspect de la programmation, les internautes se lançant des défis et créant des langages de programmation à cet effet, ce sont les langages dits « ésotériques ».

Pour bien comprendre ce qui constitue un langage ésotérique, il faut commencer par comprendre un peu ce qu’est un langage de programmation. À la manière d’un langage parlé, un langage de programmation est une série de mots (opérateurs ou instructions) que l’on peut assembler en phrases (expressions) selon certaines règles de grammaire. Par contre, contrairement à la majorité des langages parlés, les langages de programmation sont construits de toutes pièces en visant certains buts. Ces objectifs sont généralement une balance entre la facilité à écrire le code, la facilité à le lire et sa vitesse d’exécution. Les langages ésotériques respectent la forme générale d’un langage, avec des mots, des phrases et une grammaire, mais ne visent généralement aucun des objectifs courants des langages, cherchant plutôt à amuser, intriguer ou divertir les programmeurs. Ils sont les théâtres d’été du monde de la programmation. À première vue sans utilité, leur existence semble quand même rendre le monde meilleur. En voici quelques-uns des plus réussis.

5. Ook!

Ook! est un langage de programmation qui substitue les opérateurs du langage brainf*** pour essayer de rendre le code lisible par des orang-outans. Le langage de base est concu pour être foncièrement minimaliste et ne possède que sept opérateurs différents, chacun ne constituant qu’un caractère. Le langage Ook! remplace ces opérateurs par des ponctuations différentes de l’onomatopée « ook ook », sensé représenter le langage des singes. Le résultat est un programme dont le code est long et difficile à déchiffrer, en plus d’être très propice à la confusion. Point positif : effectuer la lecture à voix haut du code donne, en effet, l’impression de parler à un singe. Voici un exemple de programme qui prend un chiffre et retourne le carré de ce chiffre :

 Ook. Ook! Ook! Ook? Ook. Ook? Ook. Ook. Ook. Ook?
 Ook. Ook. Ook? Ook. Ook? Ook. Ook! Ook! Ook? Ook!
 Ook. Ook? Ook! Ook? Ook. Ook? Ook! Ook? Ook? Ook.
 Ook? Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook. Ook?
 Ook. Ook. Ook? Ook. Ook! Ook! Ook? Ook! Ook. Ook?
 Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook? Ook! Ook!
 Ook? Ook! Ook? Ook. Ook? Ook. Ook! Ook! Ook? Ook!
 Ook? Ook. Ook! Ook.

Comme on peut le voir, les avantages de ce langage sont qu’il est difficile de voir que c’est bien du code et, comme toutes les opérations ont le même nombre de caractères, les « ook » s’alignent dans un beau bloc bien esthétique. Par contre le peu d’opérateurs disponibles rend l’écriture du code particulièrement longue et complexe, même en utilisant la méthode simple qui consiste à écrire le code en brainf*** pour ensuite le traduire.

4. ArnoldC

Le langage ArnoldC est un langage où tous les mots clés sont des lignes de texte de l’acteur Arnold Schwarzenegger. Ainsi, une multiplication devient « YOU’RE FIRED », une assignation « GET TO THE CHOPPER », vrai devient «NO PROBLEMO », faux devient « I LIED » etc. Le but affirmé du langage est de « trouver un sens nouveau aux films d’Arnold avec les moyens offerts par les technologies de l’information », but louable s’il en est un. Comme tous les opérateurs deviennent des phrases, le code en soit devient rapidement énorme et il est difficile de ne pas avoir en tête le sens des phrases plutôt que leur fonction lorsqu’on lit un programme. En voici un exemple tiré de la documentation à propos du langage :

IT'S SHOWTIME
HEY CHRISTMAS TREE limit
YOU SET US UP 10
HEY CHRISTMAS TREE index
YOU SET US UP 1
HEY CHRISTMAS TREE squared
YOU SET US UP 1
HEY CHRISTMAS TREE loop
YOU SET US UP @NO PROBLEMO
STICK AROUND loop
GET TO THE CHOPPER squared
HERE IS MY INVITATION index
YOU'RE FIRED index
ENOUGH TALK
TALK TO THE HAND squared
GET TO THE CHOPPER loop
HERE IS MY INVITATION limit
LET OFF SOME STEAM BENNET index
ENOUGH TALK
GET TO THE CHOPPER index
HERE IS MY INVITATION index
GET UP 1
ENOUGH TALK
CHILL
YOU HAVE BEEN TERMINATED

Cet exemple affiche à l’écran tous les carrés des chiffres 1 à 10 et permet de bien voir le mélange amusant entre les lignes de textes et les noms de variables logiques. Le point fort du langage est d’être facile à écrire et de bien recréer l’ambiance d’un film d’Arnold puisque tout est toujours en majuscule donnant presque l’impression d’entendre les lignes crier leurs ordres à tue-tête.

3. GolfScript

Comme je l’ai mentionné dans mon introduction, certains programmeurs aiment se lancer des défis complexes, mais dont l’utilité peut être marginale. Une sorte de jeu a été inventée autour de certains défis, dont les buts étaient similaires et que l’on a nommé le « code golfing ». Le but du code golfing est d’écrire un programme qui effectue une tâche précise avec le plus petit code possible. Généralement, ces défis laissent le programmeur utiliser un langage de son choix et c’est ici qu’intervient GolfScript. Comme son nom l’indique, GolfScript est créé dans le but spécifique de « golfer du code ». L’explication de son fonctionnement va au-delà de cet article, mais il suffit de dire que tous les trucs sont utilisés pour permettre d’effectuer, en peu de lettres, des opérations courantes. Un programmeur le moindrement patient pourra l’utiliser et faire des merveilles de golf; voici mon exemple d’un script qui imprime les 10 premiers chiffres de la suite de Fibonacci en 15 caractères (sans le premier 0).

0 1 {[email protected]+.p} 10*

Il est facile de voir comment un programmeur peut s’amuser avec ce langage et pourquoi il est effectivement un des langages les plus populaires pour golfer du code. Plusieurs exemples beaucoup plus impressionnants que celui-ci peuvent être consultés sur Internet et permettent, entre autres, de trouver les 1000 premières décimales de Pi en 29 caractères.

2. Chef

Chef, à ne pas confondre avec Chef qui porte le même nom mais qui est un cadre d’infrastructure utile dans le monde réel, est un langage conçu pour que le code ressemble à des recettes de cuisine. Le code est divisé en plusieurs sections : la description de la recette, les ingrédients (variables), la température de cuisson et les étapes de la recette (et du programme). Les opérations sont des actions plus ou moins courantes en cuisine et les variables sont séparées en deux catégories : solide (chiffres) ou liquide (lettres). Les différents ingrédients d’un programme sont ajoutés dans des bols à mélanger et le contenu de ces bols est manipulé pour effectuer des opérations logiques sur les variables qui s’y trouvent. La difficulté du langage vient du fait qu’il est complexe de faire un programme qui soit fonctionnel et une recette réussie, en même temps. Heureusement, un autre blogueur nous propose un gâteau Hello world avec de la sauce au chocolat, dont la recette a été testée en cuisine.

Hello World Cake with Chocolate sauce.

This prints hello world, while being tastier than Hello 
WorldSouffle. The main chef makes a " world!" cake,
which he puts in the baking dish. When he gets the sous
chef to make the "Hello" chocolate sauce, it gets put
into the baking dish and then the whole thing is printed
when he refrigerates the sauce. When actually cooking, 
I'm interpreting the chocolate sauce baking dish to be 
separate from the cake one and Liquify to mean either 
melt or blend depending on context.

Ingredients.
33 g chocolate chips
100 g butter
54 ml double cream
2 pinches baking powder
114 g sugar
111 ml beaten eggs
119 g flour
32 g cocoa powder
0 g cake mixture

Cooking time: 25 minutes.

Pre-heat oven to 180 degrees Celsius.

Method.
Put chocolate chips into the mixing bowl.
Put butter into the mixing bowl.
Put sugar into the mixing bowl.
Put beaten eggs into the mixing bowl.
Put flour into the mixing bowl.
Put baking powder into the mixing bowl.
Put cocoa  powder into the mixing bowl.
Stir the mixing bowl for 1 minute.
Combine double cream into the mixing bowl.
Stir the mixing bowl for 4 minutes.
Liquify the contents of the mixing bowl.
Pour contents of the mixing bowl into the baking dish.
bake the cake mixture.
Wait until baked.
Serve with chocolate sauce.

chocolate sauce.

Ingredients.
111 g sugar
108 ml hot water
108 ml heated double cream
101 g dark chocolate
72 g milk chocolate

Method.
Clean the mixing bowl.
Put sugar into the mixing bowl.
Put hot water into the mixing bowl.
Put heated double cream into the mixing bowl.
dissolve the sugar.
agitate the sugar until dissolved.
Liquify the dark chocolate.
Put dark chocolate into the mixing bowl.
Liquify the milk chocolate.
Put milk chocolate into the mixing bowl.
Liquify contents of the mixing bowl.
Pour contents of the mixing bowl into the baking dish.
Refrigerate for 1 hour.

Le résultat

1. Piet

Je vous avais bien dit que la programmation était un art. Le langage Piet prend d’ailleurs cela au pied de la lettre. Les programmes de ce langage, qui tient son nom du peintre Piet Mondrian, sont des images constituées de blocs de couleur, cherchant le plus possible à reproduire les peintures d’abstraction géométrique de l’artiste en question.

Une peinture de Piet Mondrian

Une peinture de Piet Mondrian

Les opération sont effectuées par des changement de couleurs, les chiffres sont déterminés par la taille d’un bloc de couleur et tous les changements de teintes et/ou de tons ont un effet. Bref, le langage permet de laisser aller son esprit de peintre et de jouer avec les couleurs, les blocs et les contrastes. Le code se lit, à partir du haut et de gauche à droite, suit les ligne de couleurs, saute les cases blanches, et tourne lorsqu’il rencontre les bords de l’image et les cases noires.

Mon programme de Piet, le code demande d’entrer un chiffre et affiche autant de chiffres de la suite de Fibonacci, en sautant les deux premiers.

Le langage incorpore plusieurs éléments qui rendent la lecture très ardue. Comme toute l’information pertinente se situe au niveau de la taille des blocs et des changement de couleurs, il est presque impossible de savoir ce qui se passe à première vue. La gestion des blocs de couleur non-carrés et de la direction de la lecture rend la tâche d’un lecteur potentiel encore plus compliquée. À tout cela vient s’ajouter le fait que la majeure partie de l’image est en fait de l’espace perdu, quoique très utile au niveau artistique. Tous ces élément font de Piet un langage à proprement dit magnifique, un vrai bijou de code indéchiffrable, inutile, mais tellement divertissant de par son existence-même.

Nos voici donc à la fin de cette liste de langages qui ne verront jamais le monde du travail et qui ne composeront jamais avec la complexité de devoir faire du code propre ou efficace dans un temps limité. Des langages sans prétention et sans reproche, car ils n’aspirent à aucune autre utilité que de divertir des programmeurs ennuyés, si ce n’est que par la lecture de leurs spécifications ou d’exemples de programmes.