Language Oriented Programming

La programmation actuelle

Constations

Le principal problème de la programmation actuelle est la difficulté que l´on éprouve à réaliser le plus simple des programmes. Cette tâche paraît rebutante et ardue, si ce n´est complètement impossible pour le commun des mortels. La programmation est aux yeux de tous une activité de spécialiste, et il existe quelques raisons très simples à cet état de fait.

La complexité de la programmation tient en très grande partie au fait que celui qui est assez courageux pour se lancer dans la programmation doit faire tout son possible pour penser comme un ordinateur. C´est en effet à lui de se mettre à la portée de la machine en adoptant son mode de pensée, ses termes...

L´autre problème de la programmation actuelle est qu´il est possible de tout faire. Tout peut être fait, mais à quel prix ?! Il est possible de faire tant de choses qu´on se perd vite dans l´immensité des possibilités, et plus vite on s´y perd, plus on s´écarte du besoin initial. Ainsi, avec cette étendue de choix, on a parfois besoin de beaucoup de temps pour faire quelque chose qui conceptuellement devrait être fait rapidement, car correspondant à une idée simple.
A cela s´ajoute le temps d´apprentissage nécessaire pour parvenir à manipuler les langages de programmation. Etant généraux, il faut les manipuler de façon à ce qu´ils épousent le concept que l´on souhaite voir naître.

Enfin, le programmeur souffre d´un environnement de développement rigide. Le langage choisi ou encore la plate-forme ciblée imposent un cadre de développement dont il est difficile de sortir et qu´il n´est pas aisé de modifier. Par exemple, pour bénéficier des apports d´une extension dans un IDE, le programmeur doit attendre la prochaine version du logiciel.
Le seul moyen d´augmenter le degré de liberté du développeur serait de réduire le niveau de dépendance avec un langage de programmation. Pourquoi ne pas alors avoir un cadre de développement franchement ciblé mais dans lequel on pourrait évoluer aisément ? Ce cadre peut être réalisé par le programmeur de façon à correspondre au mieux à ce qu´il souhaite faire.

Les principaux problèmes

Le temps d´implémentation

Implémenter une idée est long... très long. Beaucoup de temps se passe entre l´instant où l´on sait comment faire et l´instant où on est parvenu à se faire comprendre de l´ordinateur. On peut se faire rapidement comprendre d´un autre programmeur car on peut utiliser un langage riche, mais celui des langage de programmation sont très restreints. Il n´est pas possible d´exprimer des idées haut niveau, mais uniquement des suites de petites opérations qui n´ont pas de sens global. Ainsi aujourd´hui on passe beaucoup de temps à faire du design objet (transformer les idées en classes, définir les relations entre ces classes...), ce qui est bien, mais fondamentalement inutile. En effet, ce que cherche le développeur c´est concrétiser une idée sans s´encombrer de concepts qui n´ont rien à voir avec le problème à régler.

La compréhension du code

Lorsque le programmeur traduit ses idées (haut niveau) en opérations compréhensibles par l´ordinateur (bas niveau), le schéma général du programme se perd. Alors, lorsque le programmeur est en charge de la compréhension ou la modification de code, il doit refaire l´opération de translation d´idées (haut niveau vers bas niveau) dans l´autre sens.

Cette tâche de compréhension devrait être simplifiée par la documentation associée au code. Le problème est que cette documentation, qu´elle soit externe ou à un endroit dans le code, n´est que rarement bien située car le concept est utilisé et dispersé partout. Idéalement, le code devrait être sa propre documentation, sans qu´il soit nécessaire d´avoir de la documentation externe par exemple.

L´évolutivité des langages

Afin de permettre aux langages de calquer plus aux besoins d´un problème, il est possible d´utiliser des librairies spécialisées dans des domaines. Cependant, même si on est expert dans le domaine en question, il est compliqué de se servir de tels artifices. Les concepts haut niveau sont exprimés bas niveau, et des complications bas niveau viennent gêner l´utilisation de ce qui devrait faciliter l´accès à un domaine d´idées (ex: programmation d´interface graphique, BD, de jeux...).

De plus, même si de telles librairies parviennent à aider au développement d´applications spécialisées, leur efficacité est limitée par les outils de développement. Ainsi par exemple pour un IDE, un appel à une méthode d´une librairie d´interface graphique est le même que celui d´une méthode de base de données, et il ne pourra pas nous aider dans l´utilisation de cette extension au langage.
Encore une fois, il faudra donc passer beaucoup de temps à lire de la documentation. C´est au programmeur d´apprendre et de se souvenir quelles méthodes doivent être appelées et dans quel ordre.