Le langage COBOL fête ses 60 ans. Né en septembre 1959, il popularisa l’idée que les ordinateurs devraient être programmés autrement qu’en assembleur… 60 ans plus tard, la finance mondiale repose toujours sur lui…

En 1959, les ordinateurs se répandent dans les grandes organisations et leur programmation en assembleur commence à être perçue comme un frein à leur évolution. L’idée de langages de programmation – plus proches de l’anglais et qui puissent être utilisés pour développer sur des machines différentes – germe à plusieurs endroits (chez IBM qui travaille sur un Commercial Translator et chez UNIVAC qui vient de formaliser son Flow-Matic) et notamment chez Burroughs Corporation. L’une de ses programmeuses, Mary Hawes, appelle à la création d’un langage plus universel qui simplifierait la création de tâches comme le contrôle d’inventaires, la comptabilité ou le calcul des fiches de paye.

Un peu d’histoire

Sous l’impulsion de Mary Hawes et de Grace Hopper, le département de la défense américain organise une conférence en mai 1959 et finance la création du langage COBOL qu’il compte bien adopter pour ses propres besoins et dont la syntaxe sera définie en septembre 1959 avant d’être finalisée quelques semaines plus tard. Il faudra cependant attendre près d’une année avant que les premiers compilateurs COBOL ne soient opérationnels et qu’un même programme COBOL s’exécute à la fois sur un UNIVAC II et sur un RCA 501. Les débuts sont cependant chaotiques, certains donnant même le langage comme « mort-né ». Il faudra attendre les années 70 et le succès des mainframes d’IBM pour que le COBOL s’impose comme incontournable. Il continuera d’évoluer notamment en introduisant des dates avec des années à 4 chiffres en 1974 (pourtant une grande partie de la lubie du grand bug de l’an 2000 provenait de l’existant COBOL), l’imbrication des sous-programmes en 1985, la récursivité et une tentative d’objectisation en 2002. Toutefois aucun compilateur ne supportera jamais l’intégralité de cette dernière spécification ce qui n’empêchera pas la publication en 2014 d’une nouvelle évolution.

Toujours vivant

Facile à lire (et dès lors à maintenir), apprécié pour la stabilité et la rapidité de ses exécutables, le langage survit toujours, aidé par son excellente portabilité. Aujourd’hui encore, les mêmes lignes de COBOL se compilent et s’exécutent indifféremment sur des mainframes, du Unix mais aussi du Linux et du Windows. Le langage n’a jamais quitté le TOP 30 de l’indice TIOBE depuis que ce dernier existe. Seuls le C et le C++ ont fait aussi bien. Même si son côté ultra déclaratif et fortement typé est aux antipodes des langages en vogue en 2019, le COBOL fait de la résistance.

En 2007, Gartner estimait que près de 5 milliards de nouvelles lignes de codes COBOL voyaient encore le jour chaque année. Et selon IBM, 200 milliards de lignes de COBOL seraient toujours en activité en 2019. Selon Micro Focus, plusieurs dizaines de milliers d’entreprises conserveraient actives des applications écrites en COBOL dont 90% des entreprises du Fortune 500.
Plus étonnant encore, 70% des systèmes de traitements de transactions continuent d’exécuter des codes COBOL.

COBOL ou l’art de s’adapter…

Pour les banques et certaines grandes entreprises qui ont conservé des mainframes, cet héritage COBOL/CICS devient chaque année un peu plus problématique. Non pas parce qu’il n’est pas fiable. Mais parce que les compétences disparaissent. Plus aucun jeune n’est formé à ces environnements depuis déjà bien longtemps. Et les derniers maîtres du COBOL se préparent à partir à la retraite. Même lorsqu’il n’est pas nécessaire d’assurer une maintenance ou une évolution des codes, l’absence de jeunes formés à ces environnements complexifie la modernisation de cette dette technique et limite les options envisageables.

Pour rappel, il existe sept façons d’aborder la modernisation d’un parc applicatif. Charge aux DSI de choisir la plus appropriée en termes de ROI mais aussi en fonction des compétences restant à disposition :

  1. L’encapsulation : exposition des données et fonctions pour les rendre accessibles sous forme de services via une API.
  2. Le redéploiement : transposition sur une infrastructure cloud sans altérer, recompiler ou modifier les fonctionnalités mais en trouvant une infrastructure hôte moins coûteuse.
  3. Le replatforming : minimum de modifications au code pour lui permettre de s’adapter à une nouvelle plateforme d’exécution plus moderne et plus rentable.
  4. Le refactoring : restructuration et optimisation du code sans en changer son comportement visible afin de réduire la dette technique et permettre une amélioration ultérieure des fonctionnalités.
  5. La réarchitecture : nouvelle architecture applicative (restructuration en microservices par exemple). Celle-ci peut être minimaliste et viser simplement la séparation de l’interface utilisateur de la logique métier afin de faire évoluer plus librement l’expérience utilisateur.
  6. La réécriture : repartir de zéro, sur des bases saines et modernes tout en préservant les fonctionnalités d’origine.
  7. Le remplacement : par une solution existante, probablement en mode SaaS mais pas nécessairement, à même de satisfaire aux nouveaux besoins exprimés par les métiers.

Et contrairement à ce que l’on pourrait croire, plusieurs de ces options de modernisation sont envisageables et vont maintenir en vie le langage. Micro Focus, à qui l’on doit Visual Cobol (disponible sous Eclipse et sous Visual Studio), offre toute une panoplie de solutions pour « APIser » des programmes COBOL, mixer du COBOL à vos applications Java ou .NET, déployer des codes COBOL dans des containers, intégrer la programmation COBOL dans les pipelines DevOps et même déployer du code COBOL dans le Cloud voire même en Serverless dans Azure !

Bref, 60 ans plus tard, le langage n’a peut-être plus tout l’avenir devant lui mais il n’est certainement pas mort ! Joyeux anniversaire, Monsieur COBOL…