Une histoire de codes

Octobre 2020

Pour proposer une vision complète et équilibrée de l'histoire technologique qui a mené à un environnement numérique généralisé, l'histoire de la naissance de l'informatique doit prendre en compte la création des “ codes ” comme constituant l'un des facteurs de base de ces développements.

Computer Peripherals & Typesetting    Computer Peripherals & Typesetting    The Mathematics of secrets    The Mathematics of secrets    The Unicode Standard    The Unicode Standard   

L'étymologie du mot “code” nous renvoie au latin caudex qui désigne le “tronc” d'un arbre.
Probablement des écorces de bois sur laquelle on écrit et qui sont assemblées en “codex” ou livre ou bien encore deux morceaux de bois qui enserreront les papyrus ou les parchemins pour en faire un “livre” ou ”codex” (par différence d'avec les “rouleaux” précédemment utilisés).
Mais le mot désigne, en français, un “système de symboles permettant d'interpréter, de transmettre un message, de représenter une information, des données” (Larousse, 2004). De là, le mot en est venu à désigner tout type de norme consignée par écrit ou tout type de convention sociale (exemple: dressing code, code de bonne gouvernance, de bonne conduite, etc…). Alors qu'en anglais, le mot “code” est directement et premièrement utilisé dans le sens de la cryptologie: “a system of words, letters, figures or symbols, used to represent others for secrecy or brevity” (The Concise Oxford Dictionary, 1990)!

L'alphabet est déjà une “convention”, un “code”: la limitation à 22 ou 26 dessins, de représentations pictographiques d'une élocution humaine, est un choix aussi arbitraire que celui du code morse pour utiliser le courant électrique ou des codes binaires en vue de traitements informatiques! Le choix est un choix pédagogique (mnémotechnique): par exemple le beith (ב ) du sémitique de l'ouest (qui est à la base de l'écriture hébraïque) est le mot qu'on peut traduire par maison et le dessin du caractère est la simplification du dessin d'une maison: le toit, le côté latéral droit, le sol. Ce “code” est destiné à représenter des sons exprimés phonétiquement avec l'avant des lèvres (labial) comme c'est encore le cas pour le B/b de l'alphabet universel utilisé aujourd'hui!

Dès que l'on a voulu utiliser le courant électrique pour représenter les lettres et/ou les chiffres (et puis, progressivement, d'autres éléments traités jusque là exclusivement de façon graphique), on a du imaginer comment manipuler le courant électrique pour qu'il devienne un signal permettant de distinguer différents signes.

Bien avant les machines à statistiques de Herman Hollerith!

À partir de 1837, Samuel Morse (1791-1872) va développer le télégraphe avec son technicien associé Alfred Lewis Vail (1807-1859) qui imaginera le système des points et des barres en 1838 pour représenter les impulsions longues ou courtes du courant électrique et créer ainsi le “code Morse”!

Mais c'est l'ingénieur français Émile Baudot qui invente, pour le télégraphe, dès 1870, un système de transmission codée qui deviendra l'Alphabet Télégraphique International n°2 dont l'utilisation universelle (ou presque) s'étendra jusqu'à l'avènement du code binaire ASCII. Chaque lettre est représentée par une série de 5 bits (ou impulsions électriques) qui sont envoyés sur une ligne télégraphique ou par un signal radio (hertzien). Le nom BAUD dérivé de Baudot, exprime encore aujourd'hui la vitesse de transmission électrique ou électronique.

Le code Baudot va devenir le code Booth-Wilmot en Angleterre (du fait de certains perfectionnement apportés par William Booth, pasteur méthodiste, fondateur de l'Armée du Salut). La variante américaine continuera de s'appeler le code Baudot. C'est toujours ce code qu'utiliseront les telex. Il est connu sous le label de code CCITT n° 3, codé sur 5 pistes et tel qu'aménagé par Donald Murray en 1901. Le telex comme outil de communication utilise en entrée comme en sortie des bandes-papier perforées à 5 trous parallèles. Le premier réseau national de telex est mis en oeuvre en Allemagne en 1930. Ce type de transmission aura son apogée mondial de développement seulement en 1990 avant de disparaître très rapidement, remplacé par les communications électroniques.

Il faut retenir également que les systèmes de codes de type Baudot et autres seront largement utilisés en typographie même au-delà de l'arrivée de machines électroniques supposant la manipulation d'un code binaire (0 et 1).

Cartes (et bandes) perforées pour la mécanographie et les débuts de l'informatique

Pour ce qui est de l'utilisation des codes sur cartes perforées, il faut souligner que la première utilisation des perforations dans les cartes avec les machines d'Herman Hollerith, est une utilisation analogique: l'emplacement de la perforation correspond à une “réalité” déterminée et provoque, à la lecture, l'avancement d'une unité sur un cadran et dans une mémoire.
Le passage au code binaire Hollerith ne se fera qu'après le passage à des machines qui utilisent le codage binaire pour représenter lettres et chiffres. Notamment le code BCD de Baudot qui code sur 5 unités binaires (00000 ou 11111) les 32 possibilités offertes (lettres majuscules et quelques signes) et qui sera l'ancêtre du code EBCDIC (Extended Binary Coded Decimal Interchange Code) qui, sur 7 bits + 1, pourra offrir 256 possibilités d'adressage (alphabets majuscule et minuscule, chiffres, signes spéciaux, etc).

 L'importance de cette Histoire des codes est bien perceptible dans un ouvrage de référence comme celui de Arthur H. Philllips, Computer Peripherals & Typesetting, HMO, 1968. On y trouvera tous les types de codes qui se sont succédé ou qui ont existé en parallèle et dont il fallait tenir compte dans toute transmission de données. Phillips fait remarquer l'ambiguïté d'usage entre l'anglais classique (Oxford-Cambridge) et l'anglais utilisé aux U.S.A.: l'action de programmer ou de créer un algorithme que doit traiter un calculateur électronique (ordinateur?), se dit “programming” en anglais classique et “coding” en américain. D'où toute une série de confusions possibles dans les littératures touchant à la programmation et aux codes. Par ailleurs, l'utilisation de transformations de codes pour des objectifs de cryptage, est appelée “codage” en anglais (voir plus haut), mais est devenu “ chiffrage ” en français.

Vers un code universel

Le code Hollerith aura une certaine universalité au début de l'informatique dans la mesure où la firme de Hollerith va devenir en 1924 l'International Business Machine (IBM) qui va très vite prendre une position monopolistique dans le domaine des ordinateurs naissants. Le code IBM EBCDIC est directement dérivé du code Hollerith.
Il ne fusionnera avec les codes américains USASCII et ASCII qu'après la proposition universelle de l'UNICODE (1993).
La dernière version de ce code universel (UNICODE 13) date de Mars 2020 et présente la codification de 150.000 caractères ou signes spéciaux. Mais il faut savoir que trois représentations de l'UNICODE sont possibles. Cette réalité demande donc de faire encore très attention lors de transferts massifs de données. En effet l'UNICODE UTF-8 code les caractères sur 8 bits, UTF-16 code les caractères sur 16 bits et UTF-32 code les caractères sur 32 bits.
Mais les possibilités de représentations codifiées directes de l'UNICODE dans sa forme la plus étendue (UTF-32) permettraient d'adresser directement plus de 4 milliards d'éléments (caractères, signes, caractères pictographiques, chinois, nuances de couleurs, d'intensités, répertoires d'identifications divers, etc...).
Mais il faut aussi savoir aussi qu'aujourd'hui quasiment aucune police de caractère ne reprend tous les codes de l'UNICODE mais que les polices de caractères (fonts) reprennent souvent quelques séries de codes seulement  (voir, à titre d'exemple The Unicode Standard 4.0, The Unicode consortium, Addisson-Wesley, 2004, 1.464 pages).

Le “ code secret ”

Mais le code, c'est également, en français, le “chiffrage” ou l'utilisation des codes secrets. On sait que la cryptologie fut un des moteurs de la réflexion et des travaux d'un Alan Turing (et de ses collègues à Bletchley Park, (U.K.), entre 1939 et 1945, dont Tommy Flowers qui construira le Colossus… puis, après la guerre, le “baby” de l'université de Manchester). Les procédures de décryptage furent, en effet, à l'origine de la création d'algorithmes qui feront partie de la conception des premières machines utilisant le codage binaire pour le traitement électronique de l'information. On peut trouver une bonne synthèse de cette histoire de “codage” au sens cryptologique dans le livre savant de Joshua Holden, The Mathematics of Secrets. Cryptography from Caesar Ciphers to Digital Encryption, Princeton University Press, 2019, 393 pp.

Importance du “code” dans l'histoire de l'informatique

Pour les différentes raisons décrites dans la présente note, il me semble difficile de fonder l'histoire des débuts de l'informatique sur la seule adoption du schéma de structure interne d'un calculateur électronique tel qu'attribué à Von Neuman (présence simultanée des données et des programmes dans la mémoire centrale)!

La forme des données à traiter est “déjà” ( ou “aussi”) un élément du traitement que l'on peut qualifier spécifiquement d'“informatique”! L'importance des “compilateurs” (traducteurs d'algorithmes en “codes machines” reconnaissables par les circuits électroniques d'une machine ou “registres”) est liée à cet aspect de l'histoire de l'informatique: traduire l'écriture d'un programme en signaux binaires qui seuls peuvent être reconnus et gérés, s'ils sont corrects, en vue de faire réaliser à la machine la séquence d'actions qu'on attend d'elle (indépendamment ou complémentairement à la présence de ces données dans une mémoire dite “centrale”)!

R.-F. Poswick