vendredi 23 novembre 2007
Factor: un exemple d'impact du langage sur le programmeur
Par Sébastien Pierre, vendredi 23 novembre 2007 à 09:56 :: Langages
Pour ceux qui ne connaissent pas (encore) Factor, il s'agit d'un langage "a pile" (dans la tradition de Forth) écrit par Slava Pestov (connu pour jEdit et une des stars de Reddit). Je viens juste de lire un petit billet d'une personne qui "essaie" Factor depuis quelques temps, et voici une citation qui a attiré mon attention:
Factor on the other hand scales horribly both with respect to lines of code per word (function) and the amount of local state (number of variables). This is because local state is manipulated on a stack which you have to keep track of in your head. Anything exceeding 3 variables and a single line of code and the cognitive load starts to ramp up exponentually. Four variables and the mind is constantly distracted trying to keep track of the stack order. Five and you’re spinning wheels, going nowhere fast.
Partant de ce constat, l'auteur conclue:
So instead you’re constantly having to come up with neat composable abstractions to fold up the state. This is the sort of thing that makes code elegant, loosely coupled and small in any language.
Il est donc assez intéressant de remarquer qu'un des effets de Factor, en tant que langage, serait de pousser les développeurs à créer des abstractions qui sont compactes de manière à diminuer la charge cognitive qui résulterait de l'absence de ces abstractions. Si je prend mon expérience en Python, j'ai remarqué plusieurs fois que la "fluidité" du langage (le fait qu'il soit tellement facile de s'exprimer avec) me faisait parfois négliger l'architecture de mes applications (et je me retrouvais une fois l'application un peu plus grosse a faire du refactoring important) - donc il est tout à fait possible que l'inverse se produise.
On dit souvent que c'est de la contrainte que naissent les choses les plus élégantes, et c'est peut-être ce qui se passe avec Factor. Pour le moment, je ne l'ai pas essayé, et je ne suis pas vraiment convaincu par ce que j'ai vu -- mais je pense que je vais jouer avec pendant les vacances de Noël 
En tout cas, je me demande bien ce qui se passerait si on prenait un caractéristique opposée : plutôt que de contraindre, on pourrait montrer des choses que l'on ne voit pas d'habitude. En particulier, nous sommes relativement incapables de voir l'architecture d'un programme, de par l'absence d'outils de visualisation (a moins de faire de l'UML2/MDA)... si nous avions une manière de voir l'architecture, est-ce que cela nous inciterait à mieux concevoir l'architecture de nos programmes ?
Addendum: D'après certains commentaires sur Reddit, Factor appartientdrait à la catégorie de BondageAndDisciplineLanguage... en tout cas l'appelation a m'a fait sourire 
