Speedcoding
Pourquoi IBM développe Speedcoding en 1953
Au début des années 1950, programmer un ordinateur scientifique demande un travail considérable. Le programmeur doit connaître les instructions de la machine, gérer les adresses mémoire et décomposer chaque calcul en opérations élémentaires.
Cette méthode permet d’exploiter efficacement le matériel, mais elle ralentit fortement le développement des programmes. Les scientifiques passent beaucoup de temps à préparer, vérifier et corriger leur code.
IBM cherche donc un moyen de faciliter cette étape. Le manuel de Speedcoding précise clairement son objectif : réduire le temps consacré à la préparation des problèmes destinés à l’IBM 701.
Speedcoding : un système plutôt qu’un langage moderne
Speedcoding est souvent présenté comme l’un des premiers langages de programmation scientifique. Le terme demande toutefois une précision.
IBM le décrit comme un système de programmation. Il combine une méthode d’écriture des instructions et un ensemble de routines conservées dans la mémoire de l’IBM 701.
Le programmeur peut utiliser des codes symboliques comme ADD, MPY, SQRT ou SINE. La machine ne comprend cependant pas directement ces mots. Les cartes perforées doivent d’abord recevoir les codes numériques correspondants.
Pendant l’exécution, les routines de Speedcoding prennent ensuite en charge les opérations qui ne font pas directement partie du jeu d’instructions matériel de l’IBM 701.
Cette organisation rapproche Speedcoding d’un système interprété : une couche logicielle s’interpose entre le programme écrit par l’utilisateur et le matériel.
La virgule flottante devient beaucoup plus simple
Le calcul scientifique manipule souvent des nombres très grands, très petits ou comportant de nombreuses décimales. Sur les premiers ordinateurs, cette gestion représente une difficulté importante.
Speedcoding apporte une solution : il travaille avec des nombres en virgule flottante et prend automatiquement en charge une grande partie des opérations nécessaires.
Le programmeur saisit ses données sous forme décimale. L’IBM 701 travaille pourtant en binaire. Speedcoding effectue donc automatiquement les conversions entre les deux représentations.
Cette abstraction évite au scientifique de gérer lui-même une partie des contraintes numériques de la machine.
Des fonctions mathématiques directement disponibles
Speedcoding ne se limite pas à l’addition, la soustraction, la multiplication ou la division.
Le système propose directement plusieurs fonctions importantes pour le calcul scientifique :
- SQRT : racine carrée ;
- SINE : sinus ;
- ARTAN : arc tangente ;
- EXP : exponentielle ;
- LN : logarithme naturel.
Le programmeur indique la fonction et les adresses des données concernées. Speedcoding exécute ensuite la routine mathématique correspondante.
Ces fonctions préfigurent les bibliothèques de routines mathématiques qui accompagneront plus tard les langages scientifiques.
Boucles, branchements et modification des adresses
Speedcoding permet également de contrôler le déroulement d’un programme. Il possède plusieurs opérations de transfert qui permettent de réaliser des branchements selon le résultat d’un calcul.
Le système fournit aussi des mécanismes pour modifier automatiquement les adresses utilisées par une instruction.
Cette possibilité est particulièrement utile pour traiter des séries de valeurs, des tableaux ou des matrices. Une même séquence d’instructions peut travailler successivement sur plusieurs zones de mémoire sans que le programmeur réécrive chaque opération.
Ces mécanismes restent proches du fonctionnement interne de la machine, mais ils réduisent déjà une partie du travail répétitif.
Des programmes chargés avec des cartes perforées
Speedcoding reste profondément lié aux équipements des années 1950.
Le programmeur prépare ses instructions et ses données sur des cartes perforées. IBM fournit également un jeu de cartes contenant les routines nécessaires au fonctionnement de Speedcoding.
Les cartes du programme sont insérées dans cet ensemble, puis le paquet complet est chargé dans l’IBM 701. Une fois les informations placées en mémoire, l’exécution peut commencer automatiquement.
Cette méthode appartient à l’époque où les ordinateurs fonctionnent principalement sans interaction directe avec leur utilisateur. Elle annonce le fonctionnement que l’on retrouvera avec le traitement par lots.
La simplicité a un coût
Speedcoding facilite la programmation, mais cette abstraction n’est pas gratuite.
Une partie de la mémoire de l’IBM 701 doit contenir en permanence les routines nécessaires au système. Les opérations exécutées par ces routines prennent également davantage de temps qu’un programme directement optimisé en langage machine.
Pour certains calculs intensifs, un programme écrit à la main peut donc rester plus performant.
Mais Speedcoding répond à une autre priorité : réduire le temps nécessaire pour produire un programme correct.
Cette idée devient progressivement fondamentale. Le temps du programmeur possède lui aussi une valeur, même lorsque le temps machine reste extrêmement coûteux.
De Speedcoding à FORTRAN
L’expérience acquise avec Speedcoding influence directement la suite du travail de John Backus chez IBM.
À partir de 1953, Backus dirige une équipe qui cherche une solution encore plus ambitieuse : permettre aux scientifiques d’écrire leurs calculs sous une forme proche des mathématiques tout en produisant un programme rapide.
Cette recherche conduit au FORTRAN. Le premier système devient disponible en 1957 pour l’IBM 704.
La différence est essentielle. Speedcoding s’appuie largement sur des routines exécutées pendant le fonctionnement du programme. FORTRAN utilise au contraire un compilateur qui traduit le programme avant son exécution.
L’équipe de Backus cherche ainsi à conserver la facilité d’écriture tout en produisant un code machine suffisamment performant pour convaincre les scientifiques.
Pourquoi Speedcoding est important dans l’histoire de la programmation
Speedcoding n’est ni le premier langage de programmation ni un langage de haut niveau au sens moderne. Son importance se situe ailleurs.
Il montre dès 1953 qu’une couche logicielle peut rendre un ordinateur beaucoup plus facile à programmer. Le programmeur commence à se concentrer davantage sur le problème scientifique et moins sur chaque détail de la machine.
La virgule flottante automatique, les fonctions mathématiques, les opérations symboliques et les mécanismes de contrôle illustrent cette évolution.
Speedcoding constitue ainsi une étape importante dans l’histoire des langages de programmation. Quelques années plus tard, FORTRAN poussera beaucoup plus loin cette séparation entre le langage utilisé par l’être humain et les instructions réellement exécutées par l’ordinateur.
Photo de couverture : couverture du manuel IBM 701 Speedcoding System, IBM Scientific Computing Service, 1953.
Source documentaire : Computer History Museum.
Conçu sous la direction de John W. Backus, ce système ne cherche pas d’abord à rendre les machines plus rapides, mais à résoudre un problème devenu critique dès les premières années du calcul électronique : programmer un ordinateur prend plus de temps que faire les calculs eux-mêmes.À cette époque, écrire un programme signifie manipuler directement les instructions matérielles de la machine. Chaque opération arithmétique, chaque transfert de donnée et même la gestion de la position de la virgule décimale doivent être contrôlés manuellement. Les ingénieurs passent souvent davantage de temps à corriger leurs programmes qu’à résoudre le problème scientifique initial.
Speedcoding apparaît comme une réponse radicale à cette difficulté. Plutôt que d’obliger le programmeur à penser comme la machine, le système propose de transformer l’ordinateur en une sorte de calculateur scientifique abstrait. Le programmeur décrit alors les opérations mathématiques qu’il souhaite effectuer, tandis qu’un programme résident interprète ces instructions et appelle automatiquement les routines nécessaires.
Un langage interprété avant l’heure
Speedcoding est explicitement défini par ses concepteurs comme un système interprété. Chaque instruction écrite par l’utilisateur n’est pas exécutée directement par le matériel : elle est analysée puis traduite dynamiquement en opérations machine. Cette approche rend les programmes beaucoup plus simples à écrire, au prix d’une exécution généralement dix à vingt fois plus lente que le code machine pur.
Ce compromis peut sembler surprenant aujourd’hui, mais les centres de calcul de l’époque constatent rapidement que le coût principal d’un projet informatique n’est pas le temps machine, mais le travail humain nécessaire pour programmer et tester les applications. Speedcoding assume pleinement ce choix : réduire l’effort intellectuel du programmeur devient prioritaire.
Un langage pensé pour le calcul scientifique
Le cœur du langage repose sur le calcul en virgule flottante. Speedcoding permet de manipuler directement des nombres en notation scientifique, tandis que la conversion entre représentation décimale et binaire est réalisée automatiquement par le système. Cette abstraction élimine une source majeure d’erreurs dans les programmes scientifiques des années 1950.
Le langage fournit également un ensemble remarquable d’opérations mathématiques intégrées. Des fonctions comme la racine carrée, le sinus, l’arc tangente, l’exponentielle ou le logarithme peuvent être appelées directement par une simple instruction symbolique. Pour la première fois, un programmeur peut utiliser des fonctions avancées sans avoir à implémenter lui-même les algorithmes numériques correspondants.
Cette idée — aujourd’hui évidente — constitue l’une des premières formes de bibliothèque standard dans l’histoire des langages de programmation.
Une écriture de programme plus proche des mathématiques
Les programmes Speedcoding sont organisés sous forme d’instructions contenant à la fois une opération de calcul et une opération logique. Une même ligne peut donc effectuer un calcul numérique tout en modifiant le déroulement du programme.
Le langage propose déjà des mécanismes permettant les branchements conditionnels, les répétitions et la construction de boucles, éléments fondamentaux de la programmation moderne.
Un aspect particulièrement innovant réside dans la modification automatique d’adresses mémoire pendant l’exécution. Grâce à des registres spécialisés, certaines instructions peuvent évoluer dynamiquement, réduisant fortement la taille des programmes nécessaires pour traiter des tableaux ou effectuer des calculs matriciels.
Des problèmes qui demandaient auparavant des dizaines d’instructions en langage machine pouvaient parfois être exprimés en quelques lignes seulement.
Un langage conçu pour être utilisé réellement
Contrairement à plusieurs systèmes expérimentaux antérieurs, Speedcoding n’est pas resté théorique. Il est rapidement adopté par plusieurs installations utilisant les premiers ordinateurs scientifiques IBM. Les programmes sont écrits sur feuilles de codage puis transférés sur cartes perforées avant d’être chargés et exécutés automatiquement par le système.
Le langage inclut même des mécanismes de vérification permettant de répéter automatiquement certaines parties d’un programme afin de détecter d’éventuelles erreurs de calcul ou de transmission des données. Cette attention portée à la fiabilité annonce déjà les préoccupations futures du génie logiciel.
Un chaînon essentiel vers les langages modernes
Speedcoding reste étroitement lié à la machine pour laquelle il a été conçu, mais son importance historique dépasse largement ce cadre technique. Il introduit une idée décisive : un ordinateur peut être rendu plus utile non pas seulement par son matériel, mais par une couche logicielle qui simplifie la programmation.
Quelques années plus tard, John Backus appliquera cette même philosophie pour créer FORTRAN. La différence majeure sera l’utilisation d’un compilateur capable de produire du code aussi rapide que le langage machine tout en conservant la facilité d’expression inaugurée par Speedcoding.
Ainsi, même s’il est aujourd’hui peu connu, Speedcoding marque un moment fondamental dans l’histoire de l’informatique : le passage d’une époque où l’on programmait les machines à une époque où l’on commence enfin à programmer des langages.
Photo de couverture : Couverture du manuel IBM Speedcoding System for the Type 701, IBM, 1953.
Document historique issu des archives informatiques (probablement domaine public).
