flow-matic

FLOW-MATIC

FLOW-MATIC est un langage de programmation développé dans les années 1950 par l’équipe de Grace Hopper chez Remington Rand, puis Sperry Rand UNIVAC. Conçu pour le traitement des données commerciales, il poursuit une idée alors audacieuse : permettre au programmeur de décrire les opérations à effectuer avec des mots proches de l’anglais courant plutôt qu’avec des codes numériques ou des notations réservées aux spécialistes.
Initialement appelé B-0, FLOW-MATIC naît des travaux de Grace Hopper sur la programmation automatique et les premiers compilateurs. Ses spécifications commencent à prendre forme vers 1955. Une version opérationnelle est achevée en 1957, puis le système commence à être distribué aux utilisateurs d’UNIVAC au début de 1958. FLOW-MATIC n’est pas un langage généraliste comparable aux langages modernes. Il vise avant tout les entreprises qui utilisent l’ordinateur pour gérer des fichiers, des stocks, des factures ou des données administratives. Son influence dépasse pourtant largement sa diffusion commerciale : plusieurs de ses principes seront repris lors de la création de COBOL à partir de 1959.

Fiche rapide

  • Nom : FLOW-MATIC
  • Nom initial : B-0
  • Développement : à partir de 1955
  • Version opérationnelle : 1957
  • Première diffusion aux utilisateurs : début 1958
  • Responsable principale : Grace Hopper
  • Entreprise : Remington Rand UNIVAC, puis Sperry Rand
  • Machines : principalement UNIVAC I et UNIVAC II
  • Domaine : traitement de données commerciales
  • Particularité : instructions utilisant des mots anglais
  • Héritage majeur : influence directe sur COBOL

Pourquoi inventer un langage pour les entreprises ?

Au début des années 1950, programmer un ordinateur exige encore de connaître précisément son fonctionnement. Les programmeurs manipulent des adresses, des codes numériques et des instructions étroitement liées à la machine utilisée.

Cette situation peut convenir à des mathématiciens ou à des ingénieurs habitués aux notations symboliques. Elle devient cependant problématique lorsque les ordinateurs commencent à entrer dans les banques, les assurances, les administrations et les grandes entreprises.

Ces organisations ne veulent pas principalement résoudre des équations scientifiques. Elles doivent lire des fichiers, comparer des références, mettre à jour des comptes, calculer des prix, produire des factures et préparer des états.

Grace Hopper observe alors une différence entre deux catégories d’utilisateurs. Les scientifiques et les mathématiciens acceptent volontiers les symboles. En revanche, les spécialistes du traitement administratif travaillent surtout avec des mots et des procédures écrites.

Pourquoi leur imposer un langage conçu selon les habitudes des mathématiciens ?

Hopper défend donc une autre approche : le programme devrait utiliser le vocabulaire du problème à résoudre, tandis qu’un compilateur se chargerait de traduire ces instructions vers le langage interne de l’ordinateur.

Des premiers compilateurs à B-0

FLOW-MATIC ne naît pas isolément. Il prolonge plusieurs années de travaux menés par Grace Hopper sur la programmation automatique.

Au début des années 1950, Hopper développe le système A-0. Celui-ci permet de sélectionner des routines déjà enregistrées et de les assembler automatiquement pour construire un programme.

A-0 est souvent présenté comme le premier compilateur. Avec le vocabulaire actuel, son fonctionnement ressemble cependant davantage à celui d’un chargeur et d’un éditeur de liens évolué. L’idée essentielle est néanmoins déjà présente : faire accomplir par l’ordinateur une partie du travail jusque-là effectué manuellement par le programmeur.

D’autres systèmes suivent, notamment A-1, A-2 et MATH-MATIC. Ce dernier vise principalement le calcul scientifique et mathématique.

Hopper constate toutefois que les utilisateurs commerciaux ont d’autres besoins. Ils ne veulent pas nécessairement écrire des formules. Ils souhaitent décrire des opérations portant sur des fichiers et des enregistrements.

Un nouveau projet est alors lancé sous le nom de B-0, le « B » faisant référence au domaine commercial, ou business.

Le service commercial d’UNIVAC lui donnera ensuite un nom plus évocateur : FLOW-MATIC.

Programmer avec des mots

La principale originalité de FLOW-MATIC apparaît immédiatement lorsqu’on lit un programme.

Au lieu d’utiliser uniquement des codes numériques, le langage propose des opérations portant des noms explicites :

COMPARE
TRANSFER
MOVE
WRITE-ITEM
READ-ITEM
JUMP
REWIND
STOP

Ces mots correspondent directement aux actions effectuées lors d’un traitement administratif.

Un programme peut, par exemple, demander de comparer le numéro d’un produit provenant d’un fichier d’inventaire avec celui d’un fichier contenant les prix.

Une instruction authentique du manuel de 1958 ressemble à ceci :

COMPARE PRODUCT-NO (A) WITH PRODUCT-NO (B).

Puis le programme peut déplacer un enregistrement :

TRANSFER A TO C.

et demander son écriture :

WRITE-ITEM C.

Même sans connaître FLOW-MATIC, le rôle général de ces opérations reste compréhensible.

Cette lisibilité constitue précisément l’objectif recherché.

Ce n’est pourtant pas de l’anglais libre

Présenter FLOW-MATIC comme un langage permettant de « programmer directement en anglais » serait néanmoins trompeur.

Le programmeur ne peut pas écrire n’importe quelle phrase.

FLOW-MATIC possède un vocabulaire limité, une syntaxe et des règles précises. Le compilateur reconnaît certaines constructions seulement lorsqu’elles respectent les formes prévues par le langage.

Le système ne comprend donc pas la signification de l’anglais comme le ferait un être humain. Il associe simplement certaines structures linguistiques à des opérations informatiques déterminées.

La différence reste fondamentale.

FLOW-MATIC ne cherche pas à donner une intelligence linguistique à l’ordinateur. Il cherche à rapprocher le langage utilisé pour décrire un traitement du vocabulaire employé par les personnes qui conçoivent ce traitement.

Des noms enfin compréhensibles

FLOW-MATIC apporte également une évolution moins spectaculaire mais très importante : l’utilisation de noms relativement longs et significatifs.

Au lieu de désigner les informations par de simples adresses ou par quelques caractères difficiles à retenir, le programme peut employer des noms comme :

PRODUCT-NO
UNIT-PRICE
INVENTORY

Le programme commence alors à documenter lui-même ce qu’il manipule.

L’informaticienne Jean Sammet, qui participera quelques années plus tard à la création de COBOL, considère cette utilisation de noms lisibles associée à des verbes anglais comme l’une des contributions majeures de FLOW-MATIC.

Pour les applications commerciales, cette évolution est particulièrement importante. Un programme devient plus facile à relire plusieurs mois après sa création et peut être discuté avec des analystes qui ne connaissent pas nécessairement le code machine de l’ordinateur.

Les fichiers au centre du langage

FLOW-MATIC est conçu pour une informatique très différente de celle d’aujourd’hui.

Les entreprises stockent alors leurs données principalement sur des bandes magnétiques. Un traitement consiste souvent à lire successivement plusieurs fichiers, comparer leurs enregistrements puis écrire de nouvelles bandes contenant les résultats.

Le manuel de FLOW-MATIC propose ainsi comme exemple un traitement d’inventaire utilisant plusieurs fichiers.

Un fichier contient les produits présents dans le stock. Un autre contient leurs prix. Le programme compare les numéros des produits puis produit différents fichiers de sortie selon qu’un prix a été retrouvé ou non.

Cette organisation explique le vocabulaire du langage :

INPUT
OUTPUT
READ-ITEM
WRITE-ITEM
REWIND

FLOW-MATIC est donc profondément lié à l’informatique de gestion des années 1950 : lire des enregistrements sur bande, les transformer puis produire de nouveaux fichiers.

Des opérations numérotées

Malgré son vocabulaire proche de l’anglais, FLOW-MATIC conserve une organisation qui paraît aujourd’hui très primitive.

Les opérations du programme portent des numéros.

Le manuel impose une séquence commençant par l’opération 0. Cette première opération définit les fichiers d’entrée et de sortie. Les opérations suivantes s’exécutent normalement dans l’ordre numérique.

Pour modifier cette séquence, le programme utilise des instructions de saut.

Par exemple :

IF EQUAL GO TO OPERATION 5.

ou :

JUMP TO OPERATION 8.

Cette organisation rappelle les branchements que l’on retrouvera ensuite avec l’instruction GO TO de nombreux langages.

FLOW-MATIC reste donc encore assez proche du déroulement matériel d’un programme. L’abstraction progresse, mais elle est loin d’avoir atteint le niveau des langages structurés qui apparaîtront plus tard.

Séparer les données des opérations

L’une des innovations les plus durables de FLOW-MATIC ne se trouve pourtant pas dans ses phrases anglaises.

Le système distingue la description des données des instructions qui les manipulent.

Avant de compiler un programme, l’utilisateur doit fournir des informations décrivant les fichiers utilisés : leur organisation, la taille des enregistrements, les champs qu’ils contiennent et la position de ces champs.

Le manuel de 1958 distingue notamment trois niveaux :

  • File : le fichier dans son ensemble ;
  • Item : un enregistrement du fichier ;
  • Field : un champ contenu dans cet enregistrement.

Ainsi, le programme peut manipuler un champ appelé UNIT-PRICE sans devoir répéter à chaque instruction sa position physique exacte dans l’enregistrement.

Cette séparation entre la structure des données et les opérations effectuées sur elles deviendra l’une des caractéristiques majeures de COBOL.

Jean Sammet identifiera d’ailleurs cette séparation, associée à la souplesse de description des formats, comme l’une des principales innovations apportées par FLOW-MATIC.

Du problème au programme

Le manuel FLOW-MATIC de 1958 montre que la programmation ne commence pas directement par l’écriture du code.

La méthode proposée suit plusieurs étapes.

L’analyste commence par définir le système de traitement et les opérations à réaliser. Il prépare ensuite des organigrammes décrivant le cheminement des données.

Ces diagrammes sont progressivement transformés en un FLOW-MATIC Chart, dans lequel les opérations disponibles dans le langage remplacent les descriptions générales.

Enfin, l’analyste transforme ce diagramme en instructions FLOW-MATIC.

Cette méthode révèle un objectif important du système : créer un langage commun entre les analystes qui connaissent le fonctionnement de l’entreprise et les programmeurs qui connaissent l’ordinateur.

Le code constitue ainsi la dernière étape d’une description progressive du problème.

Comment fonctionne le compilateur ?

Une fois le programme et les descriptions de données préparés, ils doivent être enregistrés sur bande magnétique.

Le manuel décrit notamment l’utilisation du Unityper, un appareil ressemblant à une machine à écrire qui permet de transcrire les informations sur bande magnétique.

Cette bande devient l’entrée du compilateur FLOW-MATIC.

Le compilateur utilise alors le programme, les descriptions des données et une bibliothèque de routines pour produire un programme UNIVAC en code machine.

Le résultat est lui-même enregistré sur bande.

L’opérateur peut ensuite monter cette bande dans l’ordinateur avec les bandes contenant les données et effectuer un essai.

La chaîne complète peut donc être résumée ainsi :

description du problème → organigramme → code FLOW-MATIC → compilation → programme UNIVAC → traitement des données

L’utilisateur écrit la partie exprimée dans un vocabulaire proche de l’anglais. L’ordinateur prend en charge la traduction vers son propre langage.

Cette séparation constitue précisément l’une des idées que Grace Hopper défend depuis ses premiers travaux sur les compilateurs.

Le compilateur peut aussi détecter certaines erreurs

La compilation n’effectue pas seulement une traduction mécanique.

Le système peut également repérer certaines incohérences présentes dans le code FLOW-MATIC.

Le manuel explique cependant clairement les limites de cette protection : le compilateur ne peut pas corriger une erreur dans le raisonnement de l’analyste.

Si les instructions sont valides mais décrivent un mauvais traitement, l’ordinateur exécutera ce mauvais traitement.

Cette distinction reste fondamentale aujourd’hui.

Un compilateur peut vérifier qu’un programme respecte les règles d’un langage. Il peut parfois détecter certaines incohérences. En revanche, il ne peut pas savoir automatiquement si le programme correspond réellement au besoin de l’utilisateur.

Dès les années 1950, la documentation de FLOW-MATIC distingue donc déjà erreur de codage et erreur de logique.

FLOW-MATIC ne supprime pas les programmeurs

L’un des arguments commerciaux du système consiste à réduire le temps nécessaire pour former de nouveaux programmeurs.

Puisque les instructions utilisent un vocabulaire plus familier et masquent une partie du fonctionnement interne de l’UNIVAC, un analyste peut produire des programmes sans devenir expert de chaque instruction machine.

Pour autant, la documentation de 1958 ne prétend pas que les spécialistes deviennent inutiles.

Au contraire, elle insiste sur le rôle des programmeurs expérimentés. Ceux-ci doivent résoudre les problèmes difficiles, identifier les défauts du système, optimiser certaines parties du code et intervenir lorsque les mécanismes automatiques ne suffisent plus.

L’automatisation ne supprime donc pas le programmeur. Elle déplace son travail.

Au lieu de consacrer l’essentiel de son temps à traduire mécaniquement chaque opération en code machine, il peut se concentrer davantage sur la structure du traitement et les difficultés particulières.

Une machine encore très présente derrière le langage

FLOW-MATIC représente une avancée importante dans l’abstraction, mais il reste fortement lié à l’environnement UNIVAC.

Le programme manipule des fichiers enregistrés sur bandes magnétiques. Certaines opérations correspondent directement au déplacement de ces bandes et au traitement séquentiel des enregistrements.

Le langage permet même, lorsque cela devient nécessaire, d’insérer des sections écrites dans un code plus proche de la machine.

Il ne s’agit donc pas encore de l’indépendance complète vis-à-vis du matériel que rechercheront les langages ultérieurs.

Cette limite explique en partie pourquoi FLOW-MATIC constitue surtout une étape historique plutôt qu’un langage destiné à s’imposer durablement sur de nombreuses familles d’ordinateurs.

FLOW-MATIC et FORTRAN : deux réponses à deux mondes

L’année 1957 est particulièrement intéressante dans l’histoire des langages.

Chez IBM, l’équipe de John Backus met au point FORTRAN, destiné principalement au calcul scientifique et technique.

Au même moment, l’équipe de Grace Hopper travaille sur FLOW-MATIC pour le traitement commercial.

Les deux langages répondent à des besoins différents.

FORTRAN facilite l’expression des formules mathématiques et des calculs numériques. FLOW-MATIC privilégie au contraire les fichiers, les enregistrements et les opérations décrites avec des verbes anglais.

Cette différence illustre une réalité qui marquera durablement l’histoire de la programmation : un langage adapté au calcul scientifique n’est pas nécessairement le meilleur outil pour gérer une paie, un stock ou une facturation.

Grace Hopper défendra d’ailleurs régulièrement l’idée qu’il vaut mieux concevoir des langages adaptés à des domaines particuliers plutôt que chercher un langage unique capable de tout faire.

De FLOW-MATIC à COBOL

À la fin des années 1950, les entreprises rencontrent un problème croissant : leurs logiciels sont fortement liés aux machines sur lesquelles ils ont été développés.

Changer de constructeur peut obliger à réécrire une grande partie des programmes.

En 1959, le département de la Défense des États-Unis encourage donc la réunion de constructeurs et d’utilisateurs afin de définir un langage commun pour le traitement des données commerciales.

Ces travaux conduisent à COBOL, pour Common Business-Oriented Language.

FLOW-MATIC constitue l’une de ses influences majeures, mais il n’est pas son seul ancêtre. Les travaux du comité prennent également en compte d’autres langages et projets, notamment COMTRAN chez IBM.

Plusieurs principes déjà présents dans FLOW-MATIC se retrouvent néanmoins clairement dans COBOL :

  • l’emploi de mots anglais pour décrire les opérations ;
  • des noms de données lisibles ;
  • une forte orientation vers le traitement de fichiers ;
  • la séparation entre la description des données et les instructions ;
  • la recherche d’un langage compréhensible par les spécialistes du domaine commercial.

FLOW-MATIC ne devient donc pas COBOL par simple changement de nom. En revanche, l’expérience acquise avec ce langage montre qu’un langage commercial utilisant un vocabulaire proche de l’anglais peut réellement fonctionner.

Grace Hopper a-t-elle créé COBOL grâce à FLOW-MATIC ?

La relation entre Grace Hopper, FLOW-MATIC et COBOL est parfois racontée trop simplement.

Hopper joue un rôle fondamental dans le développement de la programmation automatique et dans la défense de langages proches du vocabulaire humain. Son équipe développe FLOW-MATIC, qui influence directement les travaux conduisant à COBOL.

Cependant, COBOL est une création collective.

Les différents comités réunis en 1959 comptent des représentants de plusieurs entreprises et administrations. Parmi eux figure notamment Jean Sammet, qui jouera un rôle important dans la définition du langage.

Il serait donc incorrect d’écrire que Grace Hopper a « inventé COBOL ».

Son influence est plus profonde : elle a contribué à démontrer, plusieurs années auparavant, que les idées sur lesquelles COBOL allait s’appuyer étaient techniquement réalisables.

Un langage pensé pour ceux qui utilisent les données

Le manuel de 1958 permet de comprendre la philosophie de FLOW-MATIC.

Son point de départ n’est pas le processeur, mais l’utilisateur chargé d’organiser un traitement de données.

Cette inversion est importante.

Dans les premières années de l’informatique, le programmeur adapte presque entièrement son problème aux contraintes de la machine.

Avec FLOW-MATIC, le logiciel commence au contraire à jouer le rôle d’intermédiaire. Il reçoit une description plus proche du domaine de l’utilisateur puis la transforme en instructions adaptées à l’ordinateur.

Ce principe deviendra progressivement la norme.

Aujourd’hui, un développeur qui écrit une requête SQL, une instruction Python ou une règle dans un logiciel de gestion ignore généralement la majorité des instructions machine réellement exécutées par le processeur.

FLOW-MATIC se situe parmi les étapes importantes de cette évolution.

Pourquoi FLOW-MATIC est important

FLOW-MATIC n’a jamais connu la diffusion massive de FORTRAN ou de COBOL. Sa durée de vie reste relativement courte et son utilisation demeure principalement liée aux installations UNIVAC.

Son importance historique se trouve ailleurs.

  • Vocabulaire lisible : il montre qu’un langage de programmation peut utiliser des verbes et des noms proches de ceux employés dans le travail quotidien.
  • Programmation commerciale : il prend directement en compte les fichiers, les enregistrements et les traitements propres aux entreprises.
  • Description des données : il distingue la structure des informations des opérations qui les manipulent.
  • Compilation : il confie à l’ordinateur la traduction du programme vers le code propre à la machine.
  • Communication : il cherche à rapprocher analystes, responsables métiers et programmeurs.
  • COBOL : il fournit plusieurs concepts qui seront repris et développés dans le langage commercial le plus important des décennies suivantes.

FLOW-MATIC marque ainsi une étape essentielle dans l’histoire des langages de programmation.

Le changement ne consiste pas seulement à remplacer quelques nombres par des mots anglais. Il modifie progressivement la question posée au programmeur.

Au lieu de demander : « quelles instructions cette machine doit-elle exécuter ? », le langage commence à permettre une autre approche : « quel traitement voulons-nous effectuer sur nos données ? »

Cette évolution, amorcée avec les premiers systèmes de programmation automatique de Grace Hopper, conduit directement vers les langages de haut niveau modernes.

Repères chronologiques

  • 1952 : Grace Hopper achève A-0, l’un de ses premiers systèmes de programmation automatique.
  • Vers 1955 : premières spécifications du projet B-0 destiné au traitement commercial.
  • 1957 : B-0, désormais appelé FLOW-MATIC, atteint une première forme opérationnelle complète.
  • Début 1958 : les premières versions implémentées sont distribuées aux utilisateurs.
  • 1958 : publication du manuel FLOW-MATIC Programming System pour l’environnement UNIVAC II.
  • 1959 : lancement des travaux qui conduisent à COBOL ; FLOW-MATIC fait partie des langages étudiés et influence directement sa conception.
  • 1960 : les premières implémentations de COBOL commencent à apparaître sur plusieurs familles d’ordinateurs.

Sources principales

  • Remington Rand UNIVAC / Sperry Rand, FLOW-MATIC Programming System, manuel U-1518, 1958.
  • Jean E. Sammet, travaux historiques consacrés aux premiers langages de programmation et à FLOW-MATIC.
  • Computer History Museum, chronologie des langages de programmation et archives consacrées à Grace Hopper.
  • Computer History Museum, entretien oral avec Grace Hopper, 1980.
  • Computer History Museum, archives et témoignages consacrés aux premières implémentations de COBOL.

Illustration de couverture : à compléter selon l’image retenue.

Publications similaires

  • BASIC

    Le nom BASIC vient de Beginner’s All-purpose Symbolic Instruction Code : un langage pensé pour que des débutants puissent enfin dialoguer avec l’ordinateur. Le langage qui a fait entrer la programmation dans les salles de classe Au début des années 1960, l’ordinateur reste encore une machine distante, coûteuse et intimidante. Dans beaucoup d’universités ou de…

  • Le langage C

    Le nom C n’est pas un sigle. Il succède au langage B, lui-même issu de BCPL. Le langage qui a rendu Unix portable Au début des années 1970, programmer un système d’exploitation signifie encore travailler presque entièrement en assembleur. Cette méthode permet de contrôler précisément la machine, mais elle exige beaucoup de temps et lie…

  • COBOL

    COBOL, acronyme de Common Business-Oriented Language, est un langage de programmation créé à partir de 1959 pour répondre à un problème devenu crucial : comment écrire des programmes de gestion capables de fonctionner sur des ordinateurs provenant de constructeurs différents ? À la fin des années 1950, IBM, UNIVAC, RCA, Honeywell, Burroughs et d’autres fabricants…

  • Fortran

    FORTRAN, contraction de FORmula TRANslation (« traduction de formules »), est l’un des langages les plus importants de l’histoire de l’informatique. Développé chez IBM sous la direction de John Backus, il permet aux scientifiques et aux ingénieurs d’écrire leurs calculs sous une forme beaucoup plus proche des mathématiques que des instructions d’une machine.Lorsque le premier…

  • BCPL

    BCPL signifie Basic Combined Programming Language : une version simplifiée de CPL, conçue pour écrire des compilateurs et des logiciels système plus faciles à transporter d’une machine à l’autre. Au milieu des années 1960, les langages de programmation deviennent plus expressifs, mais leurs compilateurs restent souvent longs et difficiles à adapter. Un langage peut être…

  • ADA

    Ada est un langage de programmation créé à la demande du département de la Défense des États-Unis (DoD) à la fin des années 1970. Son objectif est inhabituel : il ne s’agit pas seulement de faciliter l’écriture des programmes, mais aussi de rendre plus fiables des logiciels complexes destinés à fonctionner pendant de nombreuses années….