Connexion Abonnez-vous

Faut-il se débarrasser des systèmes COBOL ?

Entre dédain et transmission des savoirs

Faut-il se débarrasser des systèmes COBOL ?

On parle souvent du langage COBOL comme d’un dinosaure dont il faudrait se débarrasser. Omniprésent dans le domaine bancaire et les assurances notamment, il serait en décalage complet avec les standards modernes de la programmation. Qu'en est-il vraiment ? D'après les gardiens du temple interrogés par Next, c’est loin d’être aussi simple.

Le 18 juillet à 10h30

Pour comprendre la situation, il faut d’abord revenir aux origines. Le COBOL, pour COmmon Business Oriented Language, est un langage créé en 1959. Il a été développé par le Short Range Committee, qui incluait des représentants de l'industrie et du gouvernement américain. Son objectif était de créer un langage de programmation portable, orienté vers la gestion et facile à lire, s'inspirant de l'anglais courant.

Comme on peut le lire sur Wikipedia entre autres, cette création a largement teinté le COBOL. Le comité qui lui a donné naissance avait été rassemblé au Pentagone et réunissait trois agences du gouvernement américain : l’US Air Force, le David Taylor Basin et le National Institute of Standards (alors NBS, l’ancêtre du NIST actuel). L’informaticienne Grace Hopper, à qui l’on doit notamment le premier compilateur (A-0 System), est l’un de ses principaux architectes. Son langage FLOW-MATIC est la principale source d’inspiration du COBOL, avec le COMTRAN d’IBM.

Ce qu’est le COBOL

« Verbeux » est probablement l’adjectif qui revient le plus souvent pour décrire le COBOL. Voyons donc comment il s’articule.

Un programme COBOL est structuré en quatre divisions. La première, nommée Identification, contient des informations générales sur le programme : nom, auteur et date de compilation. La deuxième, Environment, décrit les environnements matériel et logiciel dans lesquels le programme va s’exécuter, dont la configuration des ordinateurs et les fichiers utilisés. Cette division est devenue moins utilisée avec le temps, grâce à l’évolution des compilateurs devenus capables de s’adapter à ces environnements.

La troisième division, Data, a pour mission de définir les données que le programme va utiliser. Il faut y indiquer si ce sont des variables, des structures de données et les paramètres. La définition des variables n’a rien de commun avec les langages d’aujourd’hui, car le COBOL utilise une structure en arborescence, l’imbrication étant pointée par des numéros de niveaux. La dernière division, Procedure, contient les instructions exécutables proprement dites. Elle est capitale, car elle code littéralement la logique métier du secteur dans lequel le programme va se retrouver.

Chacune de ces quatre divisions peut être découpée en sections, elles-mêmes composées de paragraphes. Et si l’on parle de paragraphes, c’est parce qu’ils contiennent… des phrases. Celles-ci peuvent être des instructions ou des clauses, terminées par un point. Si l’on ajoute que la syntaxe du COBOL est très proche de l’anglais, avec des instructions comme ADD, MOVE ou PERFORM, on obtient pratiquement un texte. « Verbeux » est donc le bon mot, car tout y fonctionne par mots-clés, mais c’est ainsi que le COBOL a été conçu : pour être lisible.

Un lien fort avec le matériel

Il faut tenir compte également du contexte matériel dans lequel le COBOL a été créé, notamment les écrans. On parle bien des moniteurs à tube cathodique avec les fameuses écritures vertes, avec un affichage sur 80 colonnes. Le COBOL est calqué sur cette organisation, héritée des cartes perforées.

Initialement, les six premières colonnes étaient ainsi dévolues au numéro de séquence. La colonne 7 correspondait à l’indicateur, les colonnes 8 à 11 aux en-têtes de divisions, sections, paragraphes et définitions de données de haut niveau, puis les colonnes 12 à 72 aux instructions. Les dernières colonnes étaient dévolues à l’identification du programme. Là encore, avec le temps et l’évolution des compilateurs, les programmes ont pu adopter petit à petit une structure plus libre.

Le COBOL est également indissociable des mainframes. Ils reposent sur le modèle d’une unité centrale particulièrement puissante desservant des terminaux légers. Dans ce domaine, IBM a joué un rôle majeur, étant aujourd’hui le seul grand pourvoyeur de mainframes, via ses produits zSeries. Si vous lisez entre les lignes, cela signifie que l’on peut aujourd’hui s’équiper avec du matériel neuf pour mettre en place… une solution COBOL. Les mainframes peuvent bien sûr être utilisés dans d’autres cas.

Toujours présent ? En 2025 ?!

Le COBOL serait largement présent dans le secteur bancaire, les assurances, les grandes administrations publiques, et même dans d’autres domaines comme la santé, l’automobile, les transports et la distribution. Il serait partout, mais on n’en entendrait jamais parler. Partout à quel point ?

Il reste 78% de l'article à découvrir.

Déjà abonné ? Se connecter

Cadenas en colère - Contenu premium

Soutenez un journalisme indépendant,
libre de ton, sans pub et sans reproche.

Accédez en illimité aux articles

Profitez d'un média expert et unique

Intégrez la communauté et prenez part aux débats

Partagez des articles premium à vos contacts

Commentaires (61)

votre avatar
Je plussoie ! :-D
(Même si je suis passé côté BA/Métier depuis quelques temps)

Il y a eu quelques SS2I qui ont abusé un temps avec des salaires très bas après formation. J'ai connu des cas à peine au dessus du smic, tu m'étonne que les gens ne restent pas...
votre avatar
Personnelement, c'est pour ca que j'ai migré mon précédent ERP, IBM + COBOL. Compétences rares ou hors de prix, et manque de support et documentation sur nos systèmes.
Du coup, bienvenue les problèmes ! Car c'était vraiment stable.
votre avatar
Movex ?
votre avatar
Merci beaucoup pour ce passionnant article
votre avatar
Je propose une idée à la con : créer un langage un peu moins verbeux / plus « moderne » mais compatible avec l’ABI COBOL (en supposant que l’ABI COBOL est aussi bien définie que l’ABI C).
Sans être totalement sûr que la comparaison est pertinente vu que je ne fais pas de développement Android, ce nouveau langage serait à COBOL ce que Kotlin est à Java sur Android.

Ça ne résoudrait pas le problème de la maintenance de l’existant (ou du déverminage niveau assembleur) mais ça pourrait améliorer l’attrait pour les nouveaux développements en conservant les performances du COBOL pour les parties qui en ont besoin (puisqu’ils ont déjà la solution pour les interfaces clientes avec des langages plus classiques).
votre avatar
J'irai même plus loin: si les autres langages disponibles (java...) ne permettent pas de gérer les décimales selon le besoin, pourquoi ne pas intervenir dans les organisations qui normalisent les différents langages pour ajouter cette option.
Voir même pourquoi ne pas créer un nouveau langage "moderne" qui soit parfaitement adapté aux besoins des banques, assurances et autres, et qui prennent en compte une évolution progressive au fil des années pour s'adapter aux besoins futures.

Là c'est un peu comme pour le dérèglement climatique: on a une dette énorme, mais des acteurs qui préfèrent fermer les yeux en disant "tant que ça marche on touche à rien". Plus on attend plus la dette sera insurmontable. Ce n'est absolument pas résilient !

Quoiqu'il en soit merci pour cet article et merci aux intervenants, c'est un sujet très intéressant.
votre avatar
Encore un problème de dette...

Ceci dit, j'ai travaillé sur un système genre scratch pro (CoolGen) qui générait soit du C, soit du COBOL pour cibler le système. Cela, en 2002/2003. Donc ça a déjà été traité.
votre avatar
Le souci n'est pas qu'un langage gère ou pas ce genre de chose. C'est plus que le résultat doit être identique. Et cela ne dépend pas que du langage mais aussi de la machine.

Et c'est là qua ça attaque. Les comptables (donc banque et assurance) sont intransigeant avec ça. Il leur faut le dispositif qui fait l'arrondi comme il le veulent (par ex). Et reproduire à l'identique l'existant des systèmes qu'ils ont déjà et avec la performance / résilience qui va avec. Y'en a pas 36 dans le monde qui font ça. Et ça coute un bras et une jambe.

Deuxièmement les langages sont souvent le fait des entreprises (et des crétins de doctorant dedans). Ce qui ne fait pas autorité et légitimité (dans le sens d'une IETF ou autre). Et c'est donc le marché qui décide. Avec les résultats qu'on connait. Splotch.

Une note : Vu la liste des langages existant dont certains sont plus présent pour dire "j'ai fait un langage dans mon doctorat de math" qu'autre chose, c'est pas forcément un nouveau langage qui va sauver la donne.
votre avatar
Il y a une histoire de performances de java avant tout je dirais.
Pas juste l'absence d'une classe numérique avec des méthodes d'arrondis orientées bancaire sinon ce serai réglé depuis longtemps.
votre avatar
Sur les machines qui font tourner du Cobol (IBM i), il n'y a pas de problèmes de puissance. C'est juste de la brutasserie de CPU hyper optimisé pour faire de la DB (avec plein d'I/Os au fion).

En fait pris à par le CPU (P9, P10 etc.) est comparable à d'autre CPUs grand public. Mais si on prend la machine en entier (HW et son OS qui met tout en cache mémoire), ça arrache.

Bon et puis Java c'est suivant le cas d'usage (EE, pur ou JavaFx). Quand on sait que ça utilise très bien le matériel aujourd'hui. Ça n'a rien à envier à d'autres langages. Je veux dire par là. Android... si c'est pas JavaLand... Je sais pas.
votre avatar
Je pense qu'il y a des limites mémoire et donc de parallélisation des traitements en Java qu'on n'a pas en Cobol.
La heap space c'est 64GO max, de mémoire, le Cobol c'est des call à d'autres sous programmes quasi à l'infini, sans besoin d'attendre le garbage collector pour récupérer de la ressource ou le lancement de la JVM pour en allouer de nouvelles. Et sans le coût en calcul du garbage collector.
Un mainframe on compte en dizaine de TO la mémoire, je lis que le z17 c'est 64TO au max donc le cobol pourra en tirer partie si le code est correctement factorisé et optimisé là où java, structurellement, ne peut pas faire aussi bien, je pense, à cause de sa JVM.

Après je ne suis pas spécialiste des mainframes. Les mainframes font aussi "nativement" du java donc peut être il y a des mécanismes de provisionnement mémoire et de libération mémoire optimisés pour Java... leur plus value étant la perf et la fiabilité, ils ont dû travailler sur la perf java aussi. J'avais lu jadis qu'ils avaient une fonction de garbage collection "à chaud" mais je n'ai jamais creusé et je ne sais pas si ça permet de rattraper Cobol ou si ça limite juste les dégâts.
votre avatar
Je comprends pas bien ce point, il y a les BigDecimal, tu peux choisir le mode d'arrondie et le nombre de chiffres significatifs (c'est vrai que ce n'est pas que 2 ou que 5...), tu peux même rendre binairement compatible tes calculs passés à la FPU (IEEE 754), quelque soit le HW (l'un des éléments de sa réputation de lenteur)...

Java est une plateforme plus qu'un langage. Il maximise le débit des traitements, pas la consommation mémoire ou autres. COBOL est sans doute plus adapté aux mainframes, et dans certains traitement ce doit être le meilleur choix.
votre avatar
Il ne faut justement pas passer en IEEE754 : c'est là que les erreurs d'arrondis arrivent.
Cobol "compile" en interne un entier, et le format de la déclaration de donnée stocke le nombre de décimales : en gros tout est calcul en centimes d'euros en entier, et à l'affichage la déclaration de données est analyse pour afficher le "." décimal au bon endroit.

Le BigDecimal semble faire ça : le problème est la lourdeur de Java : Cobol c'est nativement géré à la compilation le CPU bosse en entier et la FPU n'est jamais utilisé. En Java, il y'a un classe qui est instancié en objet, avec des méthodes de cast ou des opérateurs de calcul sont recodés, tout ça en compilé en javacode (qui ne compile pas grand chose), et ce code est interpreté pas la JVM.

Bref calculer la TVA de 50millions de factures en cobol va faire 50millions de multiplications entières totalement répartissable en plusieurs thread, puis une simple addition du total. Sans aucune autre erreur possible qu'un éventuel overflow.

En Java... j'ose pas trop imaginer le nombre de cycles CPU supplémentaires : pour instancier l'objet, réserver sa mémoire, appeler les méthodes pour faire le calcul voir le cast, marquer la mémoire utilisée comme disponible, + les appels du carbage collector régulièrement...
votre avatar
Quand je mets ces 2 citations côte-à-côte :

"On a créé des systèmes qui ont [...] une pérennité"
"Si on pouvait avoir encore des experts aujourd'hui, des jeunes qui montent en compétences, ce serait top, mais ce n'est pas ce que je remarque"

Je comprends que nous n'avons pas la même définition de ce qu'est la pérennité.
Pour qu'un système soit pérenne, il ne suffit pas qu'il soit bien fait (i.e. dans les règles de l'art), mais que son avenir soit assuré. Ce qui n'est clairement pas le cas ici, et qu'on voit au travers de la 2nde citation

Bon, la définition donnée par le Robert me contredit un peu: "État, caractère de ce qui dure toujours, ou très longtemps"
Dans le cas des systèmes évoqués ici, on est dans le "très longtemps" à l'échelle informatique.
Mais ce qui était pérenne à l'époque ne l'est plus aujourd'hui du fait de manque de main-d'oeuvre qualifiée.
votre avatar
Je ne suis pas d'accord pour dire que le bug de l'an 2000 était lié au COBOL.
Il était lié à l'âge des applications, qui dataient du temps ou gagner un octet sur chaque item était i n d i s p e n s a b l e
Bref, des applications qui avaient le même âge que le COBOL. Mais je ne suis pas coboliste, et j'ai connu des systèmes avec bug de l'an 2000 avec 0 (zéro) COBOL dedans.
votre avatar
Très intéressant :)
Mais bon, c'est plutôt un système qui "a été pérenne" , comme il le souligne, il manque quelque chose de crucial: des personnes qui maitrisent les systèmes... Sans cela, tous les systèmes COBOL actuels vont devenir très rapidement obsolètes :/

Dommage que les jeunes dev ne s'intéressent pas à ce langage, à mon avis, c'est un secteur où l'on doit bien gagner sa vie en tant que consultant :transpi:
votre avatar
Dommage que les jeunes dev ne s'intéressent pas à ce langage, à mon avis, c'est un secteur où l'on doit bien gagner sa vie en tant que consultant :transpi:
Certes, mais c'est un secteur où l'on gagne bien sa vie parce que les jeunes devs ne s'y intéressent pas.
votre avatar
Article et intervenants très intéressants !
Merci
votre avatar
Et le COBOL ne sort jamais sans son pote JCL :

//HELLOJOB JOB (ACCT),'HELLO WORLD JOB',CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD *
Hello, World!
/*
//SYSUT2 DD SYSOUT=*
//SYSIN DD DUMMY
votre avatar
800€ pour 8 lignes, aoutch ! :D
votre avatar
Manque le notify et je fais un sub :D
votre avatar
Ce qui me fait toujours peur avec le COBOL, c'est la partie CICD... de par ses liens avec le matériel, et son environnement dans les entreprises, on est souvent loin du compte question contrôle qualité et du coup on compense avec des cycles de test effroyablement longs (et pas trop efficaces)
votre avatar
Le COBOL est un bel exemple à grand échelle. Mais, d'ordre général, la gestion de la dette et de la compétence pour le maintien dans le temps en entreprise est juste catastrophique (turn over, documentation inexistante, etc.).

Les SI maîtrisés sont plus une exception qu'une norme de mon expérience.
votre avatar
Il y a beaucoup de pragmatisme dans cette interview, et en même temps il y a des passages comme ça :
Quand vous voulez traiter des millions, voire des milliards, de transactions financières dans les banques et qu'il faut le faire entre 20 h le soir et 6 h le lendemain matin. Je n'ai pas encore vu Java le faire, alors que sur des gros systèmes, il n'y a pas de problème avec COBOL
Là on sent vraiment le développeur qui est resté coincé dans les années 90 et qui n'a pas la moindre idée de ce qui se fait aujourd'hui. Les GAFAM traitent des volumes de données qui n'ont rien à envier aux banques, et pourtant aucun n'utilise Cobol.
votre avatar
Oui mais on a de temps en temps des Cloudflare qui tombent, c'est OVH qui perdent de la data, des "régions" cloud qui ne fonctionnent plus, ...
Perso ca m'embêterait que mon Livret A retombe à 0 à cause d'un problème de double commit au moment où Cloudflare est tombé à cause d'AWS qui a perdu une région.

Si j'ai bien compris, le COBOL arrive avec son écosystème réfléchi depuis le transistor, jusqu'à la ligne de code fonctionnelle spécifique "informatique de gestion". A la fin, on a quelque chose d'assez limité, mais très performant.
Dans l’entreprise où je suis, c’est en train d’être réécrit : l’interface applicative est refaite en Java
Java... mais pourquoi...
votre avatar
Java, parce que c'est un écosystème pratique à déployer, maintenu, portable, cadré, qui consomme peu de ressources, et sur lequel on a facile à trouver de la main d'oeuvre.

Tu aurais vu quel langage concurrent?
* Python: un enfer à maintenir - peu portable (les dépendances utilisent des exécutables liés à l'OS, donc certaines bibliothèques fonctionnent sur Windows pas sur linux et vice-versa, ou sont incompatibles ARM)
* Javascript: peut être consommateur de ressources si mal utilisé
* Rust: pas assez de main d'oeuvre, complexe pour les tâches complexes
* C: non
* C++: peut-être, mais: lequel???
votre avatar
ADA... propre, performant, compact, élégant, orienté objet, pas de garbage collector ...

Je ne comprend pas qu'on utilise pas plus ce langage.
votre avatar
+1
J'ai jamais compris l'avantage de Java alors que des langages bien plus stables, élégants et frugaux comme l'ADA existent
votre avatar
pratique à déployer: Gérer la jvm, laquelle choisir? celle d'Oracle pour laquelle ils réclament des millions? une openjdk qui fait ce qu'elle peut? un jdk lite pour executer le code dans du containeur sans devoir sizer les containeurs à 8Go et ne pas que sa prenne 2mn pour charger une pauvre API?
Aussi, dans le pratique à déployer, tu inclus le tomcat ou le jboss à installer, configurer et maintenir? Au mieux, rien de tout ca, mais il faut forcement un bout de code en shell pour lancer le jar avec les what-millards d'option de la jvm...

maintenu: comme quasiment tout les langages que tu cites.

portable: dans le cas présent, osef complet, il faut que ca tourne sur du x86_64 avec un OS bien défini, au pif, un Linux. Rien de bien compliqué à faire avec les autres langages.

cadré: C'est à dire? mettre un Xmx à 8Go pour un hello world pcq on veut être sure que ca plante pas? Et puis le Xms aussi comme ca on va gagner de la perf. Effectivement, c'est bien cadré. Ou bien galérer pour simplement envoyer des logs au format standard de l'OS.

qui consomme peu de ressources: arrivé à ce point là, je me demande si ton message n'était pas sur un ton humoristique que j'aurai raté. Lancer des VM avec de la RAM à gogo ou surdimensionner des pods pcq il faut faire tourner du java dedans. Les latences induites par le GC... Sincèrement, autant les autres points que tu donnes, y a débat. Mais sur celui de la perf, désolé mais c'est vraiment mauvais, ou tellement complexe que personne n'arrive à sortir du code performant.

et sur lequel on a facile à trouver de la main d'oeuvre: de la bonne main d'oeuvre?

Tu l'auras peut-être compris, je suis admin système. Et franchement le java, c'est vraiment la pire invention du 20ème siècle en informatique. Comme tu le dis, l'avantage, pour les sociétés, c'est de pouvoir en recruter à la pelle. Mais ca n'en fait absolument pas, à mon sens, un bon langage pour autant.
Tu aurais vu quel langage concurrent?
Je ne sais pas si tu l'as oublié volontairement ou pas: Golang?
- Accessible
- des lib pour presque tout
- une fois compilé, ca tourne nativement sans dépendance et sans jvm
- adapté aux conteneurs / micro services
- performant
- cross compilation ultra simple pour déployer sur de l'ARM par exemple
- beaucoup de développeurs
- goroutine/channel/marshall
- ...
votre avatar
ADA et golang: autant j'aime bien ces langages autant ils ont très peu de main d'oeuvre dispo, d'outils... Je n'ai pas pensé à golang, car je n'y suis jamais confronté.
Oui, je préfère ces langages, mais ils sont difficilement recommandables ...

La cross compilation, c'est inférieur à la portabilité de l'exécutable Java je trouve.

Et je suis totalement en désaccord sur Java: Java n'est pas la pire invention, loin de là. La base est saine, les JVM m'ont rarement posé de problème (on en choisit une, opensource de pref maintenant), le langage a évolué un peu lentement mais il est pas mal, un peu plus sûr que C#.

Le GC sur un soft correctement écrit, c'est pas un problème, et j'ai fait du Java sur 8Mo de RAM - le problème n'est pas le langage ou la JVM, c'est les libs que certains utilisent (tu es admin, mais est-ce que les devs ont consciences du nombre de copie en RAM des données que leurs bilbiothèques imposent - dont certaines sont depuis longtemps peu utiles face à des concepts intégrés dans la lib ou le langage ?)

Il a fait ses preuves dans l'embarqué comme dans les gros systèmes.

Par maintenu et cadré je parlais surtout de l'évolution des JVM et du langage.
votre avatar
"de la bonne main d'oeuvre" oui, là on touche un gros problème récurrent de l'informatique


La cross compilation, c'est inférieur à la portabilité de l'exécutable Java je trouve (sauf cas très liés aux perfs)

Et je suis totalement en désaccord sur Java: Java n'est pas la pire invention, loin de là. La base est saine, les JVM m'ont rarement posé de problème (on en choisit une, opensource de pref maintenant), le langage a évolué un peu lentement mais il est pas mal, un peu plus sûr que C#.
La question de la licence dépend des choix de l'entreprise: si elle a choisi Oracle, elle est certainement ouverte niveau licence (tous les éditeurs ont leur modèle un peu "openbar")

Le GC sur un soft correctement écrit, c'est pas un problème, et j'ai fait du Java sur 8Mo de RAM - le problème n'est pas le langage ou la JVM, c'est les libs que certains utilisent (tu es admin, tu subis, mais est-ce que les devs ont consciences du nombre de copie en RAM des données que leurs bilbiothèques imposent - dont certaines sont depuis longtemps peu utiles face à des concepts intégrés dans la lib ou le langage ?)

Il a fait ses preuves dans l'embarqué comme dans les gros systèmes.

Par maintenu et cadré je parlais surtout de l'évolution des JVM et du langage.
votre avatar
Je pense que tu as pris un début de "burn out" option "il me saoule ce dev à la manque". Il faut prendre des vacances... :mrgreen:

Bon pour Java ça va un peu loin. Go a aussi des gros défauts. Tous les langages ont leur bons cotés et leurs défauts. Pour le GC, un petit log perso :
2025-07-18 11:14:36.546 [ LOG ] Heap size: 104Mo. Free memory before GC: 27Mo / Free memory after GC: 51Mo. Memory reclaimed : 24Mo. Execution time :35ms

En dessous de 100ms on ne voit rien pour la plupart des applis. Alors ça c'est un cas spécifique. Imaginons un "billing". Même si on le lance toutes les 5 minutes et de perdre 10 secondes, ça va pas tuer la perf. Même pour de plus grosses voilures en termes de RAM.

C'est comme partout : Il y a des bons vélos pour la course, des VTTs et des vélos pourris. Mais aussi des bons coureurs (les bons programmeurs/dev) et des mauvais (les quiches). Donc une quiche sur un bon vélo pro, ça cassera pas des briques.

Faut vivre avec.
votre avatar
Pour le C++, tu commences uniquement à partir du C++20. Si tu souhaites utiliser les ranges ou du sucre syntaxique pour des opérations de logiques booléennes alors le c++23.
votre avatar
La quantité de données est peut-être similaire mais les traitements n'ont rien à voir : les banques ont des contraintes comme la gestion des flux de données depuis d'autres banques, puis à destination d'autres partenaires, sans compter des documents à générer et des opérations planifiées qu'il est plus simple de traiter par lots (batch) lors de "nuits applicatives" après que les clients ont fait leurs opérations dans la journée
votre avatar
Les GAFAM traitent des volumes de données qui n'ont rien à envier aux banques, et pourtant aucun n'utilise Cobol.
Parce que les GAFAM ont la même capacité de calcul que les banques ou des milliers de fois plus ?
votre avatar
Je dirais surtout que les GAFAM font du best effort. Aucune garantie de ne rien perdre. Même si ca arrive rarement. Si des post facebook disparaissent, tout le monde s'en fou.
Alors que si un matin, ton livret A est passé à 0, c'est plus la même histoire :)
votre avatar
Ce que je disais, c'est qu'il est tout à fait possible (voire le plus probable) que les contraintes des banques sur les temps de calcul aient aussi à voir avec les capacités matérielles de leurs serveurs. Les banques n'ont pas vocation à se payer des datacenter à plusieurs milliards de dollars, elles doivent donc faire efficace.
votre avatar
Et, accessoirement, l'activité bancaire est réglementée et auditée.

Ce n'est effectivement pas comparable du tout en terme de criticité.
votre avatar
Il existe des néobanques qui sont sur des technos de gafam (nosql + scala/java) mais elle se contentent d'opérations simples type débit/crédit, un peu comme les gafam font généralement des opérations simples avec plus de lecture que d'écriture.
votre avatar
Et certaines refusent les clients concernés par le fisc américain par exemple. Pas de clients concernés, pas de reporting sauf pour celles qui sont adossées à une banque "traditionnelle"
votre avatar
Je vais apporter ma pierre a l’édifice.
Je précise que je ne connais pas le COBOL mais que j’ai été Scrum Master d’une équipe de COBOListe.

L’explication sur les nombre a virgule flottante n’est pas très claire je trouve.
Dans la plus part des langages utilise une forme «compressé» des nombres (signe × mantisse × base^exposant). Ça permet de couvrir une plus large plage de chiffre, aussi bien dans le négatif que positif. Le soucis avec cette «compression» c’est qu’elle peut entrainer des arrondis, surtout quand on mix des grand et petits chiffres. Genre «0,999 + 0,0008 = 1,000»
Le COBOL ne souffre pas de se soucis vu qu’il est a virgule fixe (entier + décimale) où chaque partie est codé séparément. Les calculs sont donc exact tant que l’on reste dans leur plage de codage. Au delà (division, fraction, … ) les règles d’arrondis sont connus et donc gérable par divers moyen.

Sur la capacité de traitement du COBOL c’est en effet assez impressionnant, mais la machine qui fait tourné ça est tout aussi impressionnant. Le fait que IBM soit quasiment l’unique dealer de ce genre de machine, fait que toute la chaine (logiciel + matériel) est super optimisé. C’est pas pour rien que les contrats d’utilisation de ces machines se fait traditionnellement a l’occupation CPU. Oui :windu:, plus ton programme tourne, plus tu paye … AWS n’a rien inventé de ce coté :non:
Après le service après vente, n’a rien a voir. Tu peux tout a fait voir débarqué un tech IBM pour changer un CPU A CHAUD, la machine ne devant jamais s’arrêter. Les record d’uptime étant souvent trusté par ce genre de machine.:D et tout ça sans que le client ne se soucis ou se soit rendu compte du soucis.

Sur le coté migration par «Scrum», je ne suis pas d’accord avec l’analyse des intervenant. Le but n’est jamais de remplacé «isoBug» un programme COBOL, mais souvent le découper et le remplacer petit a petit, en rénovant ses règles de gestions, souvent perdu et exclusivement dans le code je suis d’accord.

Coté recrutement, avoir une compétence COBOL / Java c’est un ticket en or et s’assurer de bosser à vie. Se mettre en indépendant est la meilleur solution pour en tirer un maximum.
Dans la boite où j’ai officié, tous les dev COBOL de France se voyait proposer un poste, ou au pire une mission. Les grosse ESN qui avait encore ce genre de profil se frottaient les mains et saignait le client sur le TJM.
Sinon ils avaient trouver une solution, peu satisfaisante, mais mieux que rien. Ils ont démarché une école à Rabat en leur proposant de monté une option COBOL en fin de cycle et de recruter tous ceux qui en sortaient. Ça attirait pas les foules, mais pour tout ceux qui voulait s’assurer un job et rembourser leur prêt étudiant rapidement, ça faisait l’affaire. Bon coté «turn over» ils avaient du mal a garder des gens plus de 2 ans. Mais au moins ça leur permettait de palier à leur besoin.
votre avatar
L'explication sur les nombres n'est toujours pas totalement satisfaisante.

Les règles de calcul comptables impliquent des calculs à virgule fixe et parfois des arrondis particuliers.
Car 10.21*18.6 n'est pas égal à 189,906 si on se limite à 2 chiffres: c'est soit 189,91 (arrondi au plus proche) soit 189,90 (arrondi "bancaire" au pair le plus proche)

Dire que IBM est le seul est une méconnaissance du domaine. En fait les x86 sont des CISC parce qu'ils ont notamment des instructions pour le calcul BCD (binaire codé décimal).

Pourquoi le cobol? Parce que c'est l'un des seuls langages de haut niveau qui ont intégré ce type de notion au coeur du système (et pas avec une librairie - même standard comme BigDecimal dans Java)
SQL le prend en compte AUSSI (mais avec moins de subtilité sur les arrondis).

Sans ce support, le nombre d'opérations pour le calcul est décuplé.
C'est le même cas avec Fortan, parfaitement à l'aise avec les nombres à virgule, quand on fait la même chose en C ou pire - en python, le nombre d'opérations est horrible (notamment concernant les comparaisons et la gestion des 0 et epsilons)

En informatique, les langages les plus récents ont tendance à améliorer la productivité globale en complexifiant les tâches pointues.

Et le calcul à virgule est un sujet très mal compris (et de plus en plus mal il semblerait vu les erreurs de conception des langages "modernes" que sont JS et Python - qui lui a été potentiellement corrigé) - presque autant que la gestion de mémoire.

Par contre je ne sais pas si COBOL a suivi sur les 2 autres gros domaines: la gestion des chaînes de caractères et des caractères spéciaux et la gestion des dates...
votre avatar
Il me semble bien que X86_64 a laissé tomber les quelques instructions qui permettaient de faire du BCD. De toute façon, ce n'est pas nécessaire pour faire du virgule fixe: Un nombre virgule fixe, c'est un entier avec un facteur d'échelle, donc on peut travailler en pur complément à comme tout le monde.

Exemple avec un facteur d'échelle 2:
Le CPU voit la valeur 1453, mais elle signifie 14.53
votre avatar
Effectivement, je n'y avait pas prêté attention, elles sont restées en 16 bits.

Et oui, avec des entiers 64 bits on a une bonne façon de stocker des grands nombres.

Mais cela ne résout pas la question du support correct par le langage: il faut se farcir les différentes opérations et les ajustements en conséquence (notamment les arrondis).

Je plaidoyais surtout pour le côté dev.
votre avatar
Il poursuit : « Ensuite, les règles de gestion qui ont été codées à l'intérieur depuis 60 ans ne sont plus maîtrisées par les utilisateurs. Si on prend l'exemple d’un projet XY, on va dire "Bon, alors maintenant, à la place de ce qui tourne, on va vous mettre ce projet. Donnez-nous toutes les règles de gestion pour les recoder dans le projet XY". Les utilisateurs vont dire : "On ne sait plus. On ne sait pas. Oui ça fonctionne, mais on ne sait pas ce qu'il y a derrière". Donc dans ce cas-là, il faut refaire toute une rétro-analyse. Et rien que l'analyse du COBOL pour extraire toutes les règles codées, ça va coûter aussi cher que le projet en lui-même ».
Ce qui revient, en somme, à chercher dans le code le cahier des charges.
Rien de spécifique à aucun langage, mais simplement le sempiternel problème du fait que les gens ne veulent pas faire d'effort ni dans la conception ni dans la documentation à quelque étape que ce soit.
On est tous ravis de disposer d'une bonne documentation, et personne ne veut la produire.
Un problème autant qu’un avantage selon le développeur, car la documentation a souvent tendance à disparaitre, là où le code est toujours là.
La contradiction avec la citation précédente est flagrante.
En ayant cet état d'esprit, on entretient le problème ! C'est fou à quel point cette mentalité est impossible à remettre en question, quand bien même leurs défenseurs ont parfaitement conscience du problème et de ses conséquences ! Le déni. La folie.

Considérer que "la documentation est le code" est un foutu caprice de développeur égoïste, qui n'a en plus généralement pas grand chose à carrer des règles métier qu'il sera à la fois incapable et non-volontaire de produire.
Exigeons du métier la documentation du cahier des charge/des attentes & de l'architecture fonctionnelle.
Exigeons de l'infrastructure la documentation de l'architecture matérielle, des systèmes & du réseau.
Exigeons des développeurs la documentation de l'architecture logicielle ainsi que du code.

---

L'argument du coût de maintien en conditions opérationnelles pour conserver du COBOL me laisse dubitatif. Les sources de matériel, les sources de systèmes, ainsi que les sources de main d’œuvre sont toutes limitées.
À ne regarder que le portefeuille, on ne gère pas le risque. Lorsque les coûts exploseront, il sera trop tard.
À moins que les coûts ne soient bricolés pour cacher l'inéluctable…
« Se demander pourquoi le COBOL est toujours là, c’est un peu pour moi une vision passéiste, qu’on a beaucoup entendue, notamment par les personnes qui pratiquent d’autres langages, principalement le Java »
La volonté de sortir du COBOL ne résulte pas forcément du jeunisme.
D'ailleurs la personne doit se tromper de mot en employant "passéiste", qui est ici un contresens : je renvoie à sa définition.

Les langages plus modernes permettent surtout une architecture modulaire (attention : ce n'est pas automatique, mais doit résulter d'un véritable travail d'architectures !).
La transition si "coûteuse" n'est que la résultante de l'adressage d'un monolithe : effectuant tout ou rien, difficile de basculer progressivement sur des modules réécrits/reconçus… car le découpage en ces modules n'existent pas dans la version d'origine !
COBOL en tant que langage est un générateur de monolithes.
De fait, pour les trois cobolistes, il n’y a aucune raison technique de remplacer les programmes COBOL existants s’ils donnent satisfaction.
Argument classique de personnes technique adressant le problème comme étant technique.
C'est une composante du problème du technologisme.
Le problème de la maintenabilité est stratégique, par gestion des risques et brassage/découpage/assignation des responsabilités.
votre avatar
Rien de spécifique à aucun langage, mais simplement le sempiternel problème du fait que les gens ne veulent pas faire d'effort ni dans la conception ni dans la documentation à quelque étape que ce soit.
Autre problème non évoqué : le manque de moyen. On demande souvent aux devs de "fournir" des fonctionnalités. Certains aspects en prenne donc un coup, comme la documentation. Mais pas que. Sécurisation, maintenabilité, "optimisation" (je ne parle pas d'optimisation hyper poussée, juste de ne pas avoir de programme simple qui nécessite une bête de course pour fonctionner).
Considérer que "la documentation est le code" est un foutu caprice de développeur égoïste, qui n'a en plus généralement pas grand chose à carrer des règles métier qu'il sera à la fois incapable et non-volontaire de produire.
Pas d'accord. Ce n'est pas un foutu caprice de développeur égoïste, c'est une réponse pragmatique à une situation impossible. Avoir une documentation à part à jour, cela signifie que TOUS les développeurs jouent le jeu, et connaisse la documentation sur le bout des doigts pour savoir ce qui doit être modifié et quand. Plus les équipes et les projets grandissent, moins c'est réalisable.

L'avantage de considérer le code comme la doc, c'est que le code c'est effectivement ce qui est exécuté. Quand ton programme ça fait 30 ans qu'il s'exécute et que les utilisateurs n'ont pas relevé d'objection, c'est lui qui fait autorité de facto.

Qui plus est, les bons tests unitaires (unitaire = fonctionnalité, et pas forcément une classe ou une méthode, , on trouve beaucoup de connerie à ce sujet) décrivent avec des mots ce que le code est censé faire et décrire ainsi les règles métiers. Couplé avec une méthodologie comme le TDD (qui permet de décrire ce que l'on veut avant de l'implémenter), et surtout l'automatisation des tests, on s'assure de manière quasi-certaine que les règles métiers sont correctement décrites ET qu'elles sont correctement implémentées.
Le problème de la maintenabilité est stratégique, par gestion des risques et brassage/découpage/assignation des responsabilités.
Remplacer pour le plaisir de remplacer n'a pas de sens non plus. Ce n'est pas qu'une réponse d'ordre technique. Refaire, c'est prendre un risque. Quand le risque n'a pas de conséquence, il est prenable. Quand tu es dans la finance, un bogue, et cela peut coûter des milliards (de dollars, d'euros, ou autre).

La question de la maintenabilité recouvre deux aspects orthogonaux :
- est-ce que le code est dans un état maintenable ? Est-il bien structuré, lisible, ou est-ce un amas de spaghettis indémêlables ?
- est-ce que les outils existent toujours et sont maintenus ?
- est-ce que les compétences pour le maintenir existent ?

Le premier point est assez difficile à évaluer, surtout vue de l'extérieur. Il y a toutefois une métrique qui a tendance à ne pas tromper : celles du nombre de nouvelles fonctionnalités sans introduire de nouveaux bogues. Généralement, dans la finance, je crois qu'on peut considérer qu'ils ne sont pas trop mal vu l'âge des systèmes qui se compte en décennie.

Le 2e est à répondre par l'affirmatif aussi dans le cadre de COBOL.

C'est sur le 3e point généralement que cela pèche avec COBOL. Par "chance", ce n'est qu'un "problème" de formation. La plupart des entreprises externalisent ce genre de compétence. A elles de les interner, voire de fournir les formations nécessaires si besoin. Il y a plein de domaines pointus où la compétence n'existe quasiment pas et il faut le faire via de la formation.

Au delà de l'aspect risque, il y a l'aspect coût de dev (juste pour refaire). Quand tu as un programme qui fait des millions de lignes de code, tu ne le refais pas en 3 mois. Personnellement, j'ai bien envie de voir ce que va donner le programme lancé par Musk aux USA, où il voulait justement se débarrasser de COBOL en 6 mois. Il a pris le problème de la maintenabilité sans se soucier de la gestion des risques.

Au niveau gestion des risques, il y a également le 2e point à prendre en compte. Paradoxalement, c'est, de mon point de vue personnel, le point le plus problématique dans le cadre de COBOL. Il n'y a pas pléthore d'outils et de plateformes supportées et la (sur)vie de COBOL dépend principalement des orientations d'une seule entreprise. Pour moi, c'est ça le risque numéro 1 (surtout dans le contexte actuel, qu'est-ce qui se passe si l'Agent Orange ordonne à IBM d'arrêter de vendre son matos en Europe ?)
votre avatar
surtout dans le contexte actuel, qu'est-ce qui se passe si l'Agent Orange ordonne à IBM d'arrêter de vendre son matos en Europe ?
Sur ce point précis cela a peut de chance d'arriver. 1 parce que c'est une grosse perte sèche pour l'entreprise en question.

Et 2 parce que le monde entier dans le sens de toute la planète qui va se rebiffer. Et plus particulièrement parce que les "marchés" (les bourses) doivent fonctionner et s'interconnecter. Le brushing spatial ne fait pas le poids.

Ce genre de pratique; on a vu ce que cela donne avec les chinois qui se dotent de quoi fabriquer leur propres puces maintenant et peut être aussi avec l'Europe qui emboite dans la même direction mais plus "softement". Hello RISC-V...
votre avatar
Sur le principe, je suis d'accord, c'est peu probable. Cela reste malgré tout beaucoup plus plausible qu'il y a 6 mois. Il est tellement imprévisible... (mais c'est un autre sujet).

Le point était surtout pour dire que cela pouvait changer du jour au lendemain. J'ai parlé de Trump, mais cela pourrait être un changement de stratégie, un rachat, ou que sais-je encore.
votre avatar
C'est pas comme si Trump avait fait plusieurs fois plonger les bourses avec ses droits de douane arbitraire qu'il n'arrête pas de suspendre / repousser.

Perso, je ne parierai pas sur une décision raisonnable d'un personnage aussi aléatoire.
votre avatar
Très honnêtement faire faire du yoyo au bourse tout les états le font.

Pour une action sur IBM; là cela représentent des montants tellement colossaux qu'il n'aurait pas le temps de finir la phrase. Ça concerne toutes les banques et le assurances du monde entier sans parler des "grosse boites" et des salles de trading.

On a tué des président pour bien bien moins que cela.
votre avatar
Je ne demande qu'à voir :D
votre avatar
Oui, et au manque de moyen, j'ajoute que même la documentation a besoin de refactorisation et cela peut etre très chronophage (quand tu as un sujet réglementaire chaque année en plus des évolutions demandées, il y a de quoi s'amuser)
On finit indubitablement avec une carto des éléments de l'appli et des principales fonctionnalités sans entrer dans le détail.

Si seulement il etait possible de sortir du sacro-saint word/excel pour la doc. En bancaire,j'ai bien connu un projet où on l'associait au code mais cela demande de la bonne coordination entre les intervenants techniques et fonctionnels, maisc'etait l'exception.
votre avatar
Word pour la doc ? Toutes mes docs sont directement dans le code, et extraites avec doxygen. Je n’imagine même pas une doc en word...
votre avatar
L'EB et l'US si tu préfères. De mon expérience c'est plutôt compliqué.

Je mets word/confluence sur le même niveau de mauvais outil.
votre avatar
Exigeons du métier la documentation du cahier des charge/des attentes & de l'architecture fonctionnelle.
Exigeons de l'infrastructure la documentation de l'architecture matérielle, des systèmes & du réseau.
Exigeons des développeurs la documentation de l'architecture logicielle ainsi que du code.
+1
Et j'ajouterai même une précision qui manque à 99% des docs sur du legacy que j'ai pu lire : que la documentation doive comporter la justification des choix techniques fait au moement du développement du projet et qu'ils soient explicités (exemple: choix de la techno X car budget restreint/l'équipe de dev n'était familière qu'avec cette techno/contrainte temporelle etc...). Cette justification explicitée permet des décennies plus tard de voir si la contrainte tient toujours et d'ajuster les évolutions si nécessaire.

In fine ce n'est pas le COBOL le problème, mais plutôt le manque de production (ou de conservation parfois) de documentation d'architecture et d'intention sur les projets développés à l'époque dans ce langage.
votre avatar
Je ne comprends pas trop les tenants du "COBOL est trop vieux, faut le remplacer par Java" de certains commentaires (en grossissant le trait, oui).

Particulièrement sous prétexte que les gens ont pas fait de la documentation et qu'on ne fait pas l'effort de former des gens.

C'est quand même nettement moins cher et moins chronophage de se sortir les doigts sur ses deux points que de tout reprendre depuis le début un peu partout.

Qui plus est en poussant l'image pour aller s'embourber dans du Java qui dans 30 ans sera éventuellement passé de mode pour X ou Y raisons. Mode: "Java c'est trop vieux! Et hop! On recommence tout!" (Oui, toujours en grossissant le trait.)

If it ain't broken, don't fix it. COBOL fait très bien ce pour quoi il est conçu, là où il est déployé, Juste foutons-lui la paix.

Pas la peine de vouloir réinventer le balai d'essuie-glaces sous prétexte qu'on sait faire des voitures électriques.
votre avatar
Pas la peine de vouloir réinventer le balai d'essuie-glaces sous prétexte qu'on sait faire des voitures électriques.
Pis de toute façon, un balai d'essuie glace, ça fonctionne aussi avec un moteur électrique.
votre avatar
Après, on peut toujours faire appel aux Golden Tickets d'IBM. Eux, ils ont quand même des experts
Quelqu'un a plus d'info sur ces "golden tickets" ? La seule info que je trouve avec ce mot-clef c'est des techniques pour poutrer un annuaire active directory (of course) ^^
votre avatar
Du coup, devenir développeur Cobol en 2025, c'est une niche intéressante pour un jeune dev ?
votre avatar
Par contre je ne comprends pas pourquoi il compare à Java ?
pour le coup Java risque de mourir largement avant Cobol... (c'est pas déjà mort d'ailleurs ?)
Java me semble le pire choix pour remplacer un mainframe : mauvaise gestion du CPU, de la mémoire...Et problématique de licence avec Oracle qui fait nimp.
Tu paies cher la simplicité relative du langage, et te retrouves avec des impossibilités dés que tu pousses les curseurs plus loin qu'une simple IHM...

Bon on va pouvoir recycler les développeur ABAP de SAP : la syntaxe verbueuse est très similaire, le côté imbrication de tas de m... spaghetti de code est le même. ABAP utilise aussi des PACK pour gérer proprement les arrondis de comptabilité...
Et SAP (l'éditeur) pousse leeeeentement les devs vers la base de données in-memory (la plupart des logiques peuvent être portées directement par des CDS view). Même si 3/4 des projets de migration vers Hana ont une grosse partie "on ne s'est pas comment ça marche : on reprend le code ABAP tel-quel". (tient encore un point commu avec Cobol :-D )

Faut-il se débarrasser des systèmes COBOL ?

  • Ce qu’est le COBOL

  • Un lien fort avec le matériel

  • Toujours présent ? En 2025 ?!

  • « Pourquoi ne serait-il plus là ? »

  • Un langage vivant

  • Le poids du passé

  • La tentation du neuf

  • Une approche hybride

  • Transmission du flambeau :  c’est compliqué !

Fermer