Certaines technologies ne meurent jamais, elles se fondent simplement dans le décor. Evoquer Cobol - Common Business Oriented Language - avec le développeur moyen vous vaudra d'être regardé comme si vous parliez du papier carbone, de l’essence au plomb ou du disque 78 tours. Comparé aux langages modernes tels que Go ou Python, ou même Pascal ou C, Cobol semble massif, verbeux, démodé. Mais il a résisté. Loin d’être une technologie obsolète que nous aurions abandonnée, Cobol est devenu une institution. Des bases de code Cobol massives sont toujours utilisées à travers le monde, nombre d’entre elles fonctionnant presque exactement comme elles le faisaient lorsqu’elles ont été créées. Donc, oui, Cobol est toujours pertinent et opportun, il l’est même douloureusement en fait. Ces derniers mois, Cobol a réintégré la conscience publique quand des états comme le New Jersey ont lancé un appel aux programmeurs pour les aider à transférer leurs applications Cobol dans le 21ème siècle. Qu’est-ce qui fait que ce langage se démarque encore aujourd’hui et qu’est-ce qui le rend si tenace ?

Petit historique

Cobol est apparu à la fin des années 1950 et au tout début des années 1960. Son développement était un projet soutenu par le département américain de la Défense (DoD) qui incluait un consortium de fournisseurs informatiques dont IBM, Honeywell, Sperry Rand et Burroughs. L’objectif était de créer un langage de programmation ayant les attributs suivants. Premièrement, une portabilité entre systèmes informatiques afin de faciliter la migration du logiciel à la fois entre les générations de matériels et entre les fabricants de matériels. Deuxièmement, une syntaxe plus proche de l’anglais que les autres langages de l’époque (par exemple le Fortran) pour encourager une plus large audience à y recourir, même si cela devait se faire au détriment d’une certaine vitesse opérationnelle. Troisièmement, il devait pouvoir s’adapter aux changements. 

Les premières spécifications officielles sont sorties en 1960. Durant la décennie suivante, et à la consternation de ses détracteurs, Cobol devint de choix par défaut pour écrire les applications commerciales. Sa rapide propagation a résulté d’un effet de réseau. IBM, l’un des collaborateurs d’origine sur le langage, l’a adopté de façon précoce et vigoureuse et sa présence dominante dans le monde de l’informatique a contribué à l’adoption de Cobol. A cause de ses avantages de conception et de l’énorme soutien industriel dont il bénéficiait, Cobol a survécu, et de loin, aux systèmes pour lesquels il avait été élaboré à l’origine. Selon diverses estimations, en 1970, Cobol était le langage de programmation le plus utilisé dans le monde. En 1997, il devait faire tourner près de 80% des applications d’entreprise.

Le langage lui-même

Les concepteurs de Cobol ont rompu avec la syntaxe lapidaire des autres langages du moment (Fortran, encore lui). L’idée était qu’il puisse être lu et compris par des non-programmeurs, en particuliers des professionnels de la comptabilité, de la finance, de l’assurance et d’autres métiers. Prenons l’exemple d’une simple séquence « Hello World » écrite dans un des premiers dialectes de COBOL :

Pour des développeurs actuels habitués à la concision de langages tels que Python, ce code est verbeux. Mais la verbosité de Cobol vient du fait que le code est lu bien plus souvent qu’il n’est écrit, il doit donc être écrit pour être lisible. Une séquence similaire dans une version plus moderne de Cobol pourrait ressembler à cela :

Alors que cet exemple est plus concis, les mêmes principes de base s’appliquent : le code s’efforce d’être explicite sur ce qui se passe à chaque étape. Cobol a des règles strictes sur la syntaxe et sur l’organisation interne des programmes. Un programme Cobol est explicitement divisé en sections, ou divisions, qui aident à trouver et à comprendre ses composants d’un seul coup d’oeil :

- Identification division : essentiellement une section de métadonnées, contenant des détails sur le programme, son auteur, etc.

- Environnement division : contient des détails sur l’environnement de runtime, par exemple les alias pour les équipements externes, qui peuvent avoir besoin d’être modifiés lorsque le programme est exécuté sur un matériel différent. Cela aide à la portabilité entre systèmes quand, par exemple, les entrées/sorties peuvent être gérées de façon totalement différente.

- Data division : contenant les sections file et working storage, la division Data décrit les fichiers et les variables utilisés dans le programme.

- Procedure division : c’est ici que l’on trouve le véritable code du programme, séparé en unités logiques appelées sections, paragraphes, sentences et statements. Il est tentant de rapprocher, par analogie, aux modules ou fonctions, parce qu’elles remplissent à peu près les mêmes fonctions (elles divisent le code en blocs avec des contraintes sur les entrées et les sorties), mais elles sont beaucoup moins flexibles.

Des règles de formatage très strictes

Cobol a également des règles de formatage extrêmement strictes pour le code, allant jusqu’au nombre d’espaces précédant une commande. (Les utilisateurs de Python ne seront pas dépaysés) Certaines de ces restrictions sont un corollaire du passage à l’âge adulte de Cobol pendant l’ère mainframe des années 60, quand les programmes étaient encodés sur des cartes perforées et qu’il était important de respecter le respect du formatage à 80 colonnes. Mais les autres restrictions de formatage renforce la lisibilité.

Carte perforée provenant d'un réel programme Cobol mis au point pour un système Univac 90/30. (Photo sous licence Creative Commons CC0 de l'architecte logiciel Rainer Gerhards qui rappelle qu'en l'absence de numéros de lignes sur les cartes, il pouvait être assez problématique de les remettre dans l'ordre lorsqu'on en laissait tomber accidentellement un jeu). Agrandir l'image.

L’objectif de cette discipline stricte est de rendre les programmes Cobol aussi auto-documentés que possible. Après tout, ils allaient probablement rester en place pendant des années ou des décennies. L’intention (même si le résultat final ne l’atteignait pas toujours) était de faire de chaque programme Cobol un artefact que tout développeur Cobol pourrait comprendre, même des années plus tard, sans l’aide de celui qui l’avait créé.

Les challenges de Cobol

La permanence - et l’inertie - de Cobol vient en grande partie du fait que les applications qu’il a permis de générer, ont tendance, une fois écrite, à rester en place indéfiniment, avec juste quelques modifications mineures. Plus l’application est grosse et critique pour l’activité d’une entreprise, moins on cherche à la perturber. Les mainframes, centrés aujourd’hui sur l’offre d’IBM, jouent un rôle clé. Ils ont été construits pour être hautement rétrocompatibles et pour exécuter les logiciels existants tels que les applications Cobol sur plusieurs générations de machines avec des modifications minimales. Il en résulte que des milliards de lignes de code Cobol fonctionnent depuis des décennies, pratiquement sans aucun changement.

Au fil des années, Cobol a néanmoins évolué, même si ce fut lentement. Il existe même une variante orientée objet, OO-Cobol, qui inclut le support de fonctionnalités modernes telles que Unicode, des paramètres régionaux, et des types de données plus avancées au-delà des strings (chaînes de caractères) et integers (entiers). Mais il a farouchement conservé sa rétrocompatibilité. Donc, même ces améliorations et extensions collent à cette mission visant à continuer à faire fonctionner les applications Cobol existantes. Les choix de conception retenus n’ont pas tous été populaires auprès des programmeurs Cobol. Certains ont conduit à des programmes trop complexes qui se sont révélés difficiles à comprendre ou à déboguer, et ont découragé les réécritures ou les améliorations. La commande Go To, comme son équivalent en C, a permis aux programmeurs de se déplacer librement au sein un programme et ainsi d’écrire des applications plus puissantes. Mais l’utilisation indisciplinée de Go To peut transformer un programme Cobol en noeud de références croisées difficiles à suivre.

Programmer en Cobol aujourd'hui

Cobol survit aujourd’hui dans quelques incarnations. IBM maintient activement ses propres mises en oeuvre Cobol et gère de nombreuses applications qui les exploitent. Micro Focus Cobol est une édition commerciale qui s’exécute sur Windows de Microsoft, compile les applications Cobol vers Java et .Net et se déploie même dans des environnements clouds comme Azure. On trouve aussi des mises en oeuvre open source de Cobol, telles que GnuCobol, qui est disponible gratuitement et compile vers le code machine source. Toutefois, elles peuvent ne pas disposer des fonctionnalités de déploiement ou de débogage les plus avancées des Cobol commerciaux. Bien que Cobol reste largement utilisé, les expertises approfondies sur le langage deviennent de plus en plus difficiles à trouver au fil des années.

Il en résulte que de nombreux programmeurs Cobol à la retraite sont sollicités pour faire basculer les anciennes applications dans le 21ème siècle. Souvent, ce ne sont pas les connaissances dans le langage proprement dit qui sont les plus importantes, mais la compréhension intime des environnements mainframe dans lesquels Cobol s’exécute. De nombreuses applications fonctionnent étroitement avec des technologies telles que la base de données hiérarchique IMS et le gestionnaire de transactions CICS d’IBM, qui requièrent une expertise de plus en plus rare. Ainsi, aussi vieux jeu que Cobol peut apparaître, le besoin d’expertise pour ce langage et son environnement de développement s’est accru d’année en année. Les offres d’emploi qui recherchent ce type d’expertises abondent. En mars 2020, l’état américain du New Jersey a lancé un appel d’urgence aux programmeurs Cobol pour l’aider à améliorer les systèmes de prestations chômage en pleine crise de Covid-19. 

Apprendre Cobol

Compte-tenu de la demande croissante dont bénéficie Cobol, les développeurs modernes qui veulent se familiariser avec ce langage inoxydable ont plusieurs options. En Irlande, l’Université de Limerick propose un cours complet de programmation Cobol en ligne, avec l’aimable autorisation de son département des sciences informatiques et systèmes d’informations. Ce cours n’est pas aussi à jour que d’autres ressources, mais étant donné le peu de changement intervenu sur Cobol avec le temps, ce n’est pas nécessairement un défaut.

L’Open Mainframe Project propose également des ressources Cobol dont un cours de programmation complet, co-sponsorisé par IBM. Celui-ci est bien sûr plus actuel que le cours de l’Université de Limerick et il est adapté à la mise en oeuvre de Cobol sur zOS ( système d’exploitation des mainframes du constructeur) qui constitue une version largement déployée du langage. Cobol est un incontournable de l’informatique d’entreprise depuis des décennies et la demande de profils le connaissant ne cesse de croître. Si le maintien ou la modernisation des programmes Cobol vous intéresse, c’est plus que jamais le bon moment pour vous y mettre.