Le langage qui produit l’interaction entre l’homme et l’ordinateur

À la source de toute interaction entre un humain et un ordinateur, il y a l’utilisation d’un langage qui fait le pont entre les deux. Nous l’oublions de temps en temps, mais derrière nos objets numériques hautement techniques, il existe des lignes de codes écrites par des humains. Comprendre les caractéristiques de ses langages peut devenir très intéressant pour mieux utiliser ces machines.

Un langage commun pour communiquer

Ce langage encore jeune par rapport à l’histoire de l’humanité et de ses signes, semble être en tout point différent et inédit. Nous pourrions nous demander même s’il est vraiment un langage. C’est en quelques sortes le point de départ de N. Katherine Hayles de son étude linguistique et sémiotique du langage programmatique. Enseignante à la Duke University, elle y dirige un programme d’études doctorales en littérature. Elle travaille depuis plusieurs années sur l’étude des relations entre la littérature, les sciences, et la technologie aux XXe et XXIe siècles.

Au cours du chapitre Speech, Writing, Code – Three World Views de son livre My Mother Was a Computer, Hayles met en relation les théories de Ferdinand de Saussure et Jacques Derrida, tout deux spécialistes dans la sémiotique, afin de donner à voir les points communs et les différences entre les signes du langage écrit ou oral et le code informatique.

Hayles fait un parallèle entre les concepts de signifiants et signifiés et les contraintes techniques de l’ordinateur afin d’analyser le code. Les technologies numériques se basent sur un système de circuits logiques TTL (transistor-transistor logic) où le chiffre binaire 0 correspond à un signal de 0 volt et le chiffre binaire 1 correspond à signal de 5 vols. Tout dans la machine peut se résumer à des changements de tension électrique. Les interprétations de ces variations de tension peuvent être donc vu comme des signifiés. Au final, les langages de programmation sont les traducteurs des commandes de l’ordinateur en chiffre binaire et vice-versa. En effet la machine ne comprend que ces chaînes de données binaires et les tensions électriques qui en découlent. On peut donc résumer le système d’un ordinateur par différents niveaux de codes qui s’apparenteraient à des chaînes de signifiants et signifiés imbriqués, les signifiés d’un niveau devenant les signifiants d’un autre. 

Les théories de Derrida ont évoqué l’idée selon laquelle le sens d’un signe est toujours indéterminé et sans cesse en mouvement. Pour Derrida, il y a absence de ce qu’il perçoit chez Saussure comme un signifié transcendantal. Le schéma qui veut qu’un signifiant renvoie à un signifié ne lui semble pas exacte. Il voit plutôt une chaîne de signifiant à signifiant pouvant être infini et qui ouvre le texte et rend sa signification mouvante. Or « dans la vision du monde propre au code, il n’y a aucun sens à parler de signifiants sans signifiés » explique Hayles, puisque chaque modification de la tension électrique doit être clairement interprétée, sinon le code serait inutile et des erreurs pourraient apparaître. Le système ne tolère donc quasiment aucune ambiguïté. Du bruit introduit dans les supports physiques peut exister, néanmoins il est corrigé en chaînes de 0 et 1 comme vue précédemment. 

Hayles parle du code comme un langage performatif. En linguistique, quand on parle de performativité, on désigne un signe qui réalise lui-même ce qu’il annonce. Par exemple, quand on dit « je déclare la séance levée »,la parole engendre des changements de comportement. Le code exécuté par une machine numérique engendre aussi des modifications de comportement, mais ici dans la machine. Alors qu’originellement, le code est lu et écrit par des humains, c’est bien principalement la machine qui a la tâche de le lire. En définitive, c’est elle qui valide son intelligibilité : si la machine est incapable de déchiffrer le code, le programmeur doit revoir ses lignes afin de les corriger. Il est obligé de s’adapter à elle. Cette relation à sens unique entre la machine et l’homme est radicalement différente d’un acte de parole entre un ensemble de personnes.

D’ailleurs Saussure observe que « la langue existe dans la collectivité sous la forme d’une somme d’empreintes déposées dans chaque cerveau […]. C’est donc quelque chose qui est à chacun, tout en étant commun à tous et placé en dehors de la volonté des dépositaires ».

Saussure, Cours de linguistiques générales, op. cit., p. 38 

De ce fait, il faut que les ajustements de la langue soient adoptées par de nombreux individus pour qu’ils aient un effet. Dans la grammatologie derridienne, cette notion étant bien présente, elle est cependant nuancée.

« La communauté plus ou moins cohérente de locuteurs postulée par Saussure se scinde en fonction de contextes historiques et géographiquement variés donnant naissance à diverses pratiques écrites (et orales), à différentes communautés de lecteurs » chez Derrida.

Hayles N. Katherine, Parole, écriture, code, Traduit de l’anglais (américain) par Stéphane Vanderhaeghe, juin 2015, La presse du réel, p.42 

Ceci engendre une multitude de critère de lisibilité et de recevalibilité. Au contraire, il existe seulement une petite communauté, spécialiste de la programmation, parmi l’ensemble des humains, qui soient capables de comprendre du code informatique. De plus, seule une partie d’entre eux est réellement en position de modifier la syntaxe du code. Ces modifications sont souvent organisées sous forme de mise à jour ou de création d’un nouveau système d’exploitation.

Ce sont des changements radicaux dans la forme mais qui prennent parfois du temps à être totalement diffusé à l’ensemble des ordinateurs. Néanmoins Hayles confirme que « les ruptures sont souvent plus franches et complètes dans le cas du code que pour la parole et l’écrit. ».

Hayles N. Katherine, Parole, écriture, code, Traduit de l’anglais (américain) par Stéphane Vanderhaeghe, juin 2015, La presse du réel, p.43 

Alors qu’un élève de lycée est capable de comprendre, non sans mal, un texte écrit au XVIe siècle comme Gargantua de Rabelais, un utilisateur qui reste bloqué sur un logiciel obsolètes a tendance à s’enfermer dans une bulle et suspendre toute communication avec un programme ultérieur.

Les programmeurs sont donc contraints de s’adapter aux modifications historiques du code sous peine de voir leurs algorithmes obsolètes ou incompatibles avec certaines nouvelles options. Ces diverses strates historiques du code témoignent d’une épaisseur des couches de code d’assemblage. Cette hiérarchie du code se retrouve dans les ordinateurs sous forme de plusieurs couches qui se superposent. Ainsi lors de chaque commande informatique, une multitude de traduction s’opèrent entre chaque couche. La première couche de signaux se constitue au niveau de la matérialité, c’est-à-dire la captation des tensions électriques. Puis elle est traduite par un langage alpha-numérique pour passer ensuite au troisième niveau représentant le système d’exploitation de l’ordinateur. Enfin il y a la dernière couche à la superficie, celle du traitement de texte sur laquelle ces lignes de ce mémoire sont rédigées.

C’est ce qu’on appelle en informatique, la compilation, « c’est-à-dire la transformation d’un programme écrit dans un langage lisible par un humain en un programme exécutable par une machine, et réciproquement ».

Hayles N. Katherine, Parole, écriture, code, Traduit de l’anglais (américain) par Stéphane Vanderhaeghe, juin 2015, La presse du réel, p.47 

Une autre manière d’observer la hiérarchie du code est sous l’angle de deux vecteurs de fonctionnement avancé par Saussure : le vecteur syntagmatique et le vecteur paradigmatique. « Le vecteur syntagmatique est orienté de façon horizontale, en suivant par exemple le déroulement syntaxique d’une phrase.

À l’inverse, le vecteur paradigmatique opère de façon verticale, notamment en passant en revue les synonymes susceptibles d’être employés au sein d’un énoncé au lieu et place d’un mot donné ».

Hayles N. Katherine, Parole, écriture, code, Traduit de l’anglais (américain) par Stéphane Vanderhaeghe, juin 2015, La presse du réel, p.45 

Lorsque je lis une phrase, je perçois les différents signes présents sur la page puis je traduis ces signes dans mon esprit en choisissant le mot idéal parmi une liste de synonymes. Cette liste comme le rappelle Lev Manochiv dans Le langage des nouveaux médias demeure virtuelle. Il est possible de voir ce système dans le code toutefois son fonctionnement est inversé. Alors que les alternatives paradigmatiques de l’écriture ou la parole sont virtuelles, elles sont encodées dans la base de données du langage informatique et en ce sens, elles sont actuelles. Puis à mesure que des choix sont déterminés entre les éléments de la base de données, la syntagmatique est produite de manière dynamique. Ces éléments sont donc prêts d’être réagencés ou abandonnés.

Hayles souligne le fait que « de façon quelque peu paradoxale, donc, plus la mémoire de la machine contient des données enregistrées, […] plus le risque d’ambiguïté est élevé ».

Hayles N. Katherine, Parole, écriture, code, Traduit de l’anglais (américain) par Stéphane Vanderhaeghe, juin 2015, La presse du réel, p.47 

Enfin cette observation de la programmation va s’attarder sur un type de langage spécifique très souvent utilisé en design génératif : le langage de programmation orientée objet. On retrouve entre autres les langages C++, Java, C#, python ou Javascript. Ce paradigme de programmation informatique a été imaginé au début des années 1960 par deux Norvégiens Ole-Johan Dahl et Kristen Nygaard. Il est intéressant de l’étudier puisqu’il est radicalement différent du langage procédural tel que le BASIC, le PHP ou le C. Alors que les langages procéduraux consistent en une succession de procédures modularisées sous forme généralement d’organigramme, les langages de programmation orientés objet empruntent une syntaxe aux langues naturelles : ils utilisent l’équivalant de substantifs (des objets) et de verbes (les processus permettant l’interaction). Ils concentrent donc l’attention des interactions vers un principe d’objet qui représente un concept, une idée ou une entité. Cet objet possède une structure interne et un comportement et est capable d’interagir avec ses pairs. Ils sont réunis dans des classes qui définissent une idée générale commune entre chaque objet. En d’autre termes, l’objet est doté de contraintes qui le définissent en tant qu’unité. À tout moment, de nouveaux objets peuvent être ajoutés à cette classe et de nouvelles classes peuvent être créées. Dans son livre Thinking in C++, Bruce Eckel pointe un avantage non négligeable à ce type de langage : la possibilité de conceptualiser la solution dans les mêmes termes qui visent à décrire le problème. Selon Hayles, les 3 termes clés qui donnent à ce type de langage l’avantage d’être maniable et flexible sont l’abstraction (abstraire, dans le sens d’ignorer un ou des éléments), l’encapsulation (dissimulation des détails à l’intérieur des objets) et héritage (création de nouveaux objets à partir d’anciens). Son principe de fonctionnement semble donc intuitif néanmoins sa mise en oeuvre demande de l’exercice. Une bonne connaissance, de vastes compétences et une solide intuition sont nécessaires pour bien choisir les bonnes classes et les bons objets. Une bonne maîtrise de ces langages consistera à savoir traduire sa volonté sous un niveau d’abstraction approprié. 

Au terme de cette analyse, une chose vient à l’évidence, l’écriture et la parole ont peu en commun avec le code. Son rapport strict entre signifié et signifiant empêchant tout glissement de sens, sa relation impérative avec l’homme qui le rend tributaire d’une rigourosité optimale et sa hiérarchie stratifiée typologiquement et historiquement font du langage de programmation une capacité de communiquer unique. Cette qualité lui tient notamment de son usage, c’est-à-dire la communication avec une machine.

Ellen Ullman, ingénieure logicielle, répond dans un entretien « nous pouvons nous servir de l’anglais pour faire de la poésie, pour tenter d’exprimer des choses qui sont extrêmement difficiles à exprimer. C’est impossible en programmation ».

Ellen Ullman, « Elegance and Etropy. » interview with Scott Rosenberg, Salon 21st, 9 octobre 1997

En effet, c’est sa fonctionnalité qui a donné au code une telle importance dans le monde contemporain. Nous le retrouvons dans toute sorte de technologie du quotidien. Principalement, le code est une forme de langage logique. C’est pourquoi aujourd’hui il est rare de le voir adopter un autre usage. On peut néanmoins supposer qu’à l’avenir, quand il sera adopté par une plus grande partie de la population, il sera à l’origine de détournement. Alors peut-on dire du code qu’il est une forme de langage alors qu’il n’est voué qu’à un sens, sa fonction.

À ce sujet, Hayles partage l’avis d’Alexander R. Galloway « le code est un langage, mais un langage très spécial ».

Hayles N. Katherine, Parole, écriture, code, Traduit de l’anglais (américain) par Stéphane Vanderhaeghe, juin 2015, La presse du réel, p.50 

Un langage spécial qui ne peut ignorer sa dépendance à la matérialité. Et c’est en cela qu’il se distingue de la parole et de l’écriture puisqu’il est obligé de se baser sur un système très basique que l’ordinateur peut comprendre, le courant électrique passe ou ne passe pas. « Parole », « écriture » et « code » constituent donc des visions du monde distinctes. Comme l’explique Hayles, le designer qui souhaite programmer un algorithme pour générer des formes est obligé de passer par un exercice d’adaptation de son esprit.

par Julien Roussel

MENU