mercredi 14 janvier 2009

Déclic?

Ce n'est pas la première fois qu'il me prend l'envie de créer un langage, au contraire; je suis sûr de retrouver en fouillant dans quelque vieux carton plusieurs ébauches de spécification de langage datant d'époques plus ou moins anciennes.

Pour tout dire, 4IM a été le seul qui a aboutit. Peut-être parce que je me suis contenté cette fois d'adapter un langage existant (Forth) à ma guise, plutôt que de partir d'une feuille blanche. Les autres ont rarement dépassé le stade de l'esquisse.

Cette envie me prend suite à des choses lues dans quelque livre ou magazine, encore lue sur interne, concernant les langages, les méthodes logicielles, ou les maths. L'idée de départ est donc purement technique.

Cette fois-ci, le déclic c'est produit alors que j'éditais une page Web relative à 4IM avec mon éditeur favori, et je trouvais particulièrement pénible d'avoir à enregistrer d'un côté, puis de passer au bureau suivant pour recharger la page dans le navigateur pour visualiser le résultat. La réflexion m'est venue que, avec toute l'artillerie logicielle dont ont dispose actuellement, il reste impossible d'obtenir aussi simple que celle-là. Il aurait suffit que mon éditeur favori envoie un simple signal à mon navigateur favori.

Il est possible que mon éditeur ou mon navigateur favori ne soient pas les meilleurs dans le domaine de la coopération entre applications, ou que je n'utilise pas les bons outils (pourquoi ne pas utiliser un éditeur spécialisé pour cela?), ou encore que la possibilité existe bien, et que je n'ai pas assez cherché. Même si la solution est bien dans l'une des ces propositions, sa mise en oeuvre demande des efforts ou a des inconvénients disproportionnés par rapport à l'idée simple et intuitive que peut avoir tout utilisateur lambda: que mon éditeur préféré envoie une commande de rechargement de sa page à mon éditeur préféré.

Le fameux adage "qui peut le plus, peut le moins" est si souvent pris à défaut qu'il faudrait à mon avis se décider un jour à adopter son contraire - ou est-ce une fausse impression due à ce que je suis très souvent aux prises avec des logiciels?

Evidemment, des monstres de puissance et de souplesse comme Firefox et Vi ne peuvent malgré tout pas résoudre chaque micro-problème de chaque utilisateur. Ce n'est pas un problème technique, car les auteurs de chacun des deux logiciels pourraient bricoler une solution en cinq minutes. C'est un problème similaire à celui de la "longue traine". En l'espèce, si ces logiciels satisfont les besoins courant d'un grand nombre d'utilisateurs dans un certain domaine, il existe au moins un aussi grand nombre d'utilisateurs avec des besoins particuliers qui ne sont pas satisfaits. En réalité, nous sommes tous un peu dans les deux catégories; c'est ce qui fait que les listes des doléances des logiciels ("les wishlists") ne se vident jamais et que pour la plupart des logiciels, les numéros de version ne cessent de s'incrémenter.

Cette situation était sans doute une fatalité il y a une vingt/trentaine d'années, quand ni l'internet ni le logiciel libre n'existaient, et que les ordinateurs étaient de bien étranges boîtes dont on ne savait pas encore bien quoi faire. Je pense que ce modèle issue de ce qu'on appelle "l'industrie de l'édition du logiciel", une dénomination qui résume parfaitement son mode de fonctionnement, est en cours d'obsolescence. Aujourd'hui, il est de plus en plus possible de trouver quelqu'un sur un forum ou un proche capable d'apporter une solution logicielle à un problème logiciel.

Pour l'instant, c'est encore loin d'être envisageable par le commun des mortels, et est parfois même difficile pour un programmeur de profession. En pratique de nombreuses difficultés font obstacle: différentes applications utilisent différents langages parfois ésotériques ou abscons; il faut faire avec certains "aléas de fonctionnement"; il faut parfois poser maladroitement des questions en anglais sur des forums faute de documentation suffisante.

Et pourtant, ce monde idéal où un utilisateur pourrait modifier son logiciel soit par ces propres moyens, soit avec l'aide d'un autre, pour obtenir la fonction qu'il désire me paraît dans une certaine mesure possible. Mon expérience avec 4IM m' a donné cette impression. Forth est presque à l'opposé de cela, car c'est un langage ésotérique dont l'utilisation exige une connaissance plutôt pointue du fonctionnement d'un ordinateur et une rigueur des plus rigoureuses. Toutefois, pour qui aurait le courage de s'investir dans l'étude de 4IM, il y aurait la récompense d'accéder à quelques possibilités intéressantes, comme la construction d'une interface graphique, la communication en réseau, ou la construction d'univers animés en 3D (dans un version qui risque de prendre quelque temps à sortir...).

Il n'y a là rien de très extraordinaire; beaucoup de langages savent faire cela et bien plus, car il existe des librairies logicielles toutes faites qui réalisent ces fonctionnalités. Certaines librairies que j'ai utilisé sont si bien faites que, en faisant abstraction des connaissances nécessaires pour programmer en C/C++, n'importe qui pourrait l'utiliser.  

Contrairement aux fois précédentes, ce qui m'a motivé à imaginer un langage n'est pas une théorie mathématique ou logicielle glanée quelque part, mais plutôt des considérations sur les logiciels et leurs utilisateurs: les utilisateurs auront toujours des besoins bien particuliers auxquels les logiciels ne peuvent pas répondre, car trop spécifiques; des personnes sur internet ou autour de soi pourraient les aider à obtenir ce que l'on souhaite, mais ces bonnes volontés sont entravées par des difficultés techniques; des briques logicielles simples d'utilisation existent ou peuvent être créés pour réaliser des logiciels avec des fonctions élaborées.

C'est je pense un point de départ très différent de celui de la majorité des langages de programmation, qui partent du principe que leurs utilisateurs sont des programmeurs. Que les langages de programmation soient destinés aux programmeurs est une fausse évidence. Il existe des langages de programmation pour les non-programmeurs ou aspirants programmeurs (Basic par exemple).

Toutefois, beaucoup de ses langages pour être faciles d'accès sont trop simplistes pour faire des choses "sérieuses". Faire un programme nécessite un minimum de rigueur, de logique, d'aisance en maths, un goût pour la résolution de problèmes, autrement dit un esprit scientifique. Supposer que l'utilisateur du langage a ce profil est raisonnable, permet de ne pas sur-simplifier le langage et d'y introduire quelques concepts élaborés qui permettent de faire de "vrais" programmes.

La démocratisation d'Internet et l'explosion du logiciel libre a permis à plusieurs milliers de programmeurs, de concepteurs d'élaborer et de concrétiser autant d'idées si ce n'est plus. A tel point qu'il est difficile de ne pas trouver sur internet un logiciel réalisant une fonction particulière. Je me suis donc mis à la recherche d'un langage conçu dans le même but ou possédant les caractéristiques que j'estimais nécessaires pour l'atteindre. Je suis assez étonné de ne l'avoir pas trouvé.

Plutôt que d'énumérer de manière plus ou moins aride ces caractéristiques ici, il me paraît plus intéressant de faire la critique des différents langages que j'ai examiné. Ce sera l'objet de mes prochains articles.

Aucun commentaire:

Enregistrer un commentaire