Principes de conception du langage
Un langage spécifique à un domaine bien conçu, ou un langage en général, permet aux gens d’exprimer leurs pensées de manière rapide et concise et de comprendre facilement la réponse des commentaires. Il est particulièrement important de faire des recherches car cela affecte directement la vitesse à laquelle vous pouvez itérer — tester de nouvelles idées et comprendre les résultats intermédiaires. Les itérations rapides permettent de tester un plus large éventail de paramètres, y compris ceux qui ne devraient pas fonctionner à première vue, vous permettant de bien mieux comprendre le domaine que vous étudiez. Ainsi, la conception du langage affecte directement non seulement le temps total nécessaire pour résoudre un problème de manière non linéaire, mais c’est souvent la clé pour trouver la solution.
Une question importante se pose — qu’est-ce qu’une bonne langue ? Existe-t-il des directives que chaque langue spécifique à un domaine devrait suivre ? Nous croyons qu’il y a deux principes de base:
- Les gens ont besoin d’un lien immédiat avec ce qu’ils font
Ce principe a été introduit publiquement pour la première fois par Brett Victor, un visionnaire de l’interaction homme-machine, lors de son exposé Inventing on Principle. Toute violation de ce principe éloigne l’utilisateur des problèmes réels qu’il essaie de résoudre, ce qui diminue par conséquent la compréhension et augmente le nombre d’erreurs. - Les gens ne peuvent pas être limités par l’outil qu’ils utilisent
Les gens ont tendance à rejeter tout outil qui limite évidemment leur expressivité. C’est la raison exacte pour laquelle tant de solutions WYSIWYG, comme les créateurs de sites Web, les créateurs de jeux ou les langages de programmation visuelle, ne rattrapent jamais leur retard. Tout DSL plus complexe qu’un éditeur de texte WYSIWYG peut facilement violer ce principe en fournissant à ses utilisateurs un ensemble trop limité de composants prédéfinis de haut niveau. Même si ces composants peuvent être étendus en écrivant du code, la nécessité de recourir à un langage de programmation sous-jacent gâche la conception et la rend inutilisable pour un public moins technique.
Violation du principe
La violation de l’un de ces principes conduit toujours à une solution sous-optimale. Considérons à nouveau la conception graphique. L’utilisation de Photoshop est-elle toujours meilleure que l’écriture de code HTML, Sass et JavaScript? Sans doute. Ces solutions violent respectivement le premier et le deuxième principe. Photoshop fournit un canevas numérique WYSIWYG avec un ensemble limité d’outils prédéfinis et difficilement extensibles. HTML, Sass et JavaScript, quant à eux, fournissent une interface texte, et ainsi, éloignent l’utilisateur de sa création réelle mais ne restreignent pas l’expressivité. Considérons deux cas d’utilisation :
- Un design de site web. Il y a cinq éléments disposés uniformément dans la barre de menu. Si vous souhaitez ajouter un nouvel élément et changer la palette de couleurs du site Web, il vous suffit de modifier une seule ligne en HTML et une variable de couleur en Sass. Peu importe la complexité du site Web, chaque élément se mettra à jour automatiquement. Faire de même dans Photoshop nécessite plusieurs ordres de grandeur plus de temps — créer un nouvel élément de menu, utiliser un outil d’alignement pour organiser les éléments, modifier manuellement les couleurs et probablement appliquer à nouveau des transformations et des filtres dans des zones de site Web plus complexes.
- Une peinture artistique. Utiliser HTML, SVG et Sass dans un éditeur de texte pour exprimer une vision artistique serait difficilement possible. Plus le processus est créatif et découvrable, plus l’ensemble d’outils WYSIWYG et la boucle de rétroaction instantanée deviennent importants.
Serait-il possible de fusionner les deux approches ? Ce n’est pas seulement possible, il y a déjà des solutions qui vont dans la bonne direction. Pensez à Sketch, qui est devenu la boîte à outils de conception ultime pour Mac OS. Pourquoi tant de gens le préfèrent à Photoshop? La réponse est étonnamment simple: Sketch limite moins l’expressivité de l’utilisateur que Photoshop. Il vous permet de créer des éléments de conception réutilisables, puis de mettre à jour en masse leurs paramètres, tout comme Sass, mais dans un environnement WYSIWYG interactif. Il existe de nombreuses autres façons d’améliorer encore l’expérience du concepteur. Regardez une autre conférence de Brett Victor, Dessiner des visualisations dynamiques, pour plus d’inspiration.
La malédiction des DSL
Si nous connaissons les principes de base d’un langage spécifique au domaine parfait, pourquoi les outils spécifiques au domaine disponibles ne sont-ils pas encore là ? Pourquoi ne vivons-nous pas dans un monde WYSIWYG illimité ?
Alors que les langages spécifiques à un domaine offrent un moyen inégalé de manipuler et de comprendre les données, ils introduisent également discrètement des modèles de conception de logiciels gâtés. L’existence de nombreuses petites DSL qui ne peuvent pas se parler conduit dans une longue perspective à un monde logiciel dysfonctionnel et fragmenté.
Dans le monde réel, il existe une coopération constante entre les domaines. La manipulation d’images est souvent utilisée pour les besoins de l’apprentissage automatique et de la bioinformatique, qui à leur tour deviennent de plus en plus un outil important pour l’architecture et la conception de véhicules. Le développement rapide de l’IoT se traduit par des appareils plus petits et plus autonomes, ce qui ouvre un nouveau monde pour la détection précoce des maladies, les systèmes de surveillance de la santé ou les villes intelligentes.
Cependant, il n’y a pratiquement aucune coopération dans le monde du logiciel. Les développeurs de logiciels écrivent le même code encore et encore, ce qui entraîne des coûts de développement élevés et une stagnation de l’innovation. Vous ne pouvez pas simplement prendre un éditeur de forme à partir de votre logiciel graphique préféré, l’ajuster à vos besoins, le coller avec des outils d’apprentissage automatique et créer un outil de modélisation 3D assisté par l’IA pour les besoins de l’impression 3D. Au lieu d’heures, vous avez actuellement besoin de jours ou de mois pour accomplir une telle tâche. Même si vous trouvez des bibliothèques qui implémentent des fonctionnalités similaires, une énorme quantité de travail doit être effectuée avant de suivre le principe « sans limites » et de fournir un environnement vraiment flexible, afin que vos utilisateurs puissent affiner la façon dont le modèle est construit. En conséquence, au lieu d’améliorer les composants existants ou d’inventer de nouvelles façons de manipuler les données, les développeurs ré-implémentent des solutions connues à partir de zéro dans chaque nouvelle application.
Luna, le langage
Les directives pour que les langages spécifiques à un domaine suivent le premier principe sont claires. Afin de créer une connexion immédiate entre les personnes et leur création, les langages spécifiques à un domaine doivent combiner une visualisation de données riche et une manipulation intuitive des données dans une expérience unique et fluide. Il n’y a cependant aucune règle empirique sur la façon de le faire correctement. Cela dépend fortement du domaine particulier et des préférences de l’utilisateur, ce qui rend le deuxième paradigme, la possibilité de personnaliser les composants, encore plus important.
Suivre le deuxième principe, cependant, est plus délicat. Comment concevoir un langage et être sûr qu’il ne limite pas l’expressivité des gens ? Comment pouvons-nous permettre aux utilisateurs de créer des composants réutilisables personnalisés et de modifier en profondeur ceux qui existent tout en gardant l’interface simple et en n’exigeant pas qu’ils soient programmeurs? L’idée est de permettre à l’utilisateur de changer progressivement la perspective. Au lieu de recourir à un langage de programmation sous-jacent, nous pouvons permettre de plonger littéralement dans chaque composant et d’utiliser le même langage (ou très similaire) pour décrire la façon dont les sous-composants communiquent. Approfondir les composants imbriqués permet aux utilisateurs de passer progressivement de niveaux élevés à bas d’abstraction à la demande.
C’est exactement ce que fait Luna. Il a été construit sur trois concepts principaux:
- Environnement de visualisation et de manipulation des données
Du point de vue le plus élevé, Luna vous permet de visualiser et de manipuler des données à l’aide de composants WYSIWYG interactifs et extensibles. De plus, Luna offre un moyen de définir facilement de nouveaux composants, de modifier ceux qui existent déjà et de les partager avec la communauté. - Graphique de flux de données
Vous pouvez littéralement effectuer un zoom arrière pour voir comment les composants de haut niveau sont câblés ensemble pour former un graphique de flux de données. Vous pouvez les recâbler ou insérer de nouveaux composants pour redéfinir le fonctionnement du graphique. Luna fournit des composants qui s’étendent sur tous les niveaux d’abstraction, du haut au bas. De la peinture d’un canevas sur des fonctions statistiques aux opérateurs bit à bit - Graphiques de flux de données imbriqués et représentation de code
Chaque composant de Luna est construit à partir d’autres composants, sans exception. Vous pouvez toujours plonger jusqu’au niveau d’abstraction souhaité et l’ajuster à vos besoins. Vous pouvez également réduire plusieurs composants connectés en un nouveau, plus puissant, et le partager avec d’autres. De plus, Luna offre à ses utilisateurs une capacité tout à fait unique de basculer entre les représentations — du graphique de flux de données au code et vice versa. Cela implique une vérité très importante — le graphique est aussi puissant que le code.
Luna a été conçu comme un environnement unifié pour la création et l’hébergement de langages spécifiques à un domaine visuellement riches. Il brouille les frontières entre les domaines, permettant aux outils de différents domaines de communiquer et de coexister de manière transparente.