Samuel Clemens, dit « Mark Twain », écrivit en 1897 à un journaliste qui l’avait contacté pour s’enquérir de son éventuel décès : « La nouvelle de ma mort était exagérée ». Il en va de même du langage C++. Mais si ce langage de programmation est toujours bien présent, pourquoi sa mort prochaine au profit de Java, Python, JavaScript ou plus récemment Rust, fait-elle partie de la rumeur depuis le début du XXIème siècle ? La raison principale est que le nombre de développeurs C++ s’est clairement réduit autour de la plupart d’entre nous. Alors que son nom est connu même d’un grand nombre des gens de la rue, les programmeurs que nous connaissons ne l’utilisent plus. Mais alors, si C++ n’a pas disparu, où sont partis les développeurs ?
Des chiffres
Jetons un coup d’œil à des sources objectives plutôt que de prêter une oreille complaisante à la rumeur. Le TIOBE index (voir tiobe.com) classe les langages de programmation par popularité. Il est mis à jour tous les mois, et repose sur une agrégation du nombre de développeurs expérimentés utilisant un langage, les cours disponibles et les vendeurs de solutions basées sur ces langage. Il est important de noter que le classement ne se soucie pas de savoir si tel ou tel langage de programmation est le meilleur ni s’il accumule le plus grand nombre de lignes de code écrites. Ce classement devrait donc plutôt défavoriser C++. Le langage qui arrive en tête du classement TIOBE d’octobre 2022 est Python, avec une popularité de 17 %, puis C avec 15 %, Java avec 13 % et enfin… C++ avec 10 %. C++ arrive quatrième de ce classement ?!? Surprenant, non ? Ajoutons que le cinquième est C# avec seulement 4 %, loin derrière les quatre leaders.
Prenons une autre source, le Stack Overflow Survey de 2022. Il rapporte une chute de presque deux points de pourcentage pour C++ entre le rapport de 2021 et celui de 2022 (de 24,3 % à 22,5 %). Ah, voilà notre confirmation. C++ est en train de mourir. Mais, à y regarder de plus près, le nombre de développeurs C++ entre ces deux rapports a… augmenté. Comme le montre la courbe présentée par Bjarne Stroustrup au CppCon 2021 :
Elle court... la rumeur...
Quelles sont les raisons de la rumeur persistante de la mort de C++ ? Elles sont multiples :
Outil pour les professionnels : C++ est un langage de programmation pour les professionnels. Les développeurs C++ se sont du coup concentrés dans les coins les plus exigeants de l’industrie du logiciel, loin des regards.
Difficulté : le langage C++ est très difficile à apprendre et a une syntaxe qui n’en simplifie pas l’accès aux débutants. C’est l’un des plus complexes. Si quelqu’un essaie de vous convaincre du contraire, il vous ment. C’est la rançon de son professionnalisme. Il ne pardonne pas.
Absence de soutien marketing : C++ n’appartient à personne, il ne bénéficie pas des efforts de marketing de la plupart de ses concurrents, qui sont soutenus par des sociétés commerciales (Java par Oracle, C# par Microsoft, par exemple).
C++ ne serait pas l’avenir : parmi les techniques utilisées pour promouvoir des langages de programmation plus faciles, propager la rumeur que ses praticiens sont l’« avenir » et que C++ est « du passé » fonctionne très bien. Évidemment cela séduit, et la rumeur enfle. Rumeur amplifiée par l’absence d’évolution dans la norme entre 99 et 2010.
C++ n’a pas beaucoup de librairies publiques : du coup, seuls les grands du logiciel ont les moyens de compenser et de construire leurs propres outils.
C++ serait un langage de bas niveau : dans la communauté C++ elle-même, en dehors des Big Tech, C++ est souvent perçu, à tort, comme un langage réservé à la programmation de bas niveau du fait de son héritage avec le langage C.
Moins de formations : peu d’écoles d’ingénieurs proposent aujourd’hui une formation à ce langage.
Coût de la maintenance : nombre de programmes C++ fonctionnent depuis 20 ans ou plus, et ont été modifiés par une armada de développeurs au turn-over important. Ceci a amplifié la croyance que le coût de maintenance était trop élevé et qu’il était préférable de tout réécrire dans un langage plus “simple”...
C++ vs. les autres
Eric Schmidt, ex-PDG de Google, avait essayé d’imposer Java comme remplacement de C++ chez Google, et s’était vu opposer un veto de la part de ses deux fondateurs, Larry Page et Sergei Brin. Le souvenir de cet échec, qui aurait coûté à Google son existence, est encore raconté par Schmidt qui semble avoir été traumatisé par celui-ci. Il se défend en disant qu’il y a des développeurs Java chez Google. C’est vrai, mais on peut estimer que pour chaque ligne de logiciel écrite par Google en Java, dix lignes de C++ sont écrites aujourd’hui. À l’exception d’un seul artefact dans YouTube, Python n’est pas autorisé en production car trop lent (~30 fois plus que C++). Et cela ne se limite pas à Google. Tous les browsers, toutes les solutions Office, presque toutes les bases de données, ainsi que l’OS Microsoft Windows sont écrits presque entièrement en C++. Selon son PDG, Elon Musk, Tesla utilise C++ pour presque tout. Ils disent convertir à ce moment une partie de leur code Python en C++, et affirment engranger des gains énormes grâce à cela. Presque tous les outils de data science et d’intelligence artificielle sont écrits en C++, mais le scripting autour, fait en Python, laisse penser que Python a capturé tout ce marché. Où sont les développeurs C++ ? Ils sont chez ceux qui n’arrivent jamais à en avoir assez, Google, Microsoft, Amazon, Tesla, le monde de la Finance, Amadeus (avec des centaines de postes ouverts actuellement), etc.
Les développeurs ?
Au sujet de la difficulté de C++, il faut réaliser que beaucoup de développeurs ont des souvenirs cuisants de l’utilisation de C++, et ont jeté l’éponge. Selon la vieille fable d’Ésope, quand le renard n’arrive pas à attraper les raisins qu’il convoite, il se convainc qu’« ils sont trop verts, et bons pour des goujats ». Les renards sont parmi les animaux ceux qui glapissent le plus fort. On n’entend qu’eux.
Marketing
On pourrait dire que Linux n’a pas plus de soutien commercial que C++. C’est oublier RedHat (maintenant IBM). On ne peut pas dire que l’existence de Visual C++ vendu par Microsoft ou la suite VTune d’Intel sont les équivalents de ce que RedHat a fait pour la propagation de Linux.
Complexité
Les remplaçants de C++ vendent la plupart du temps une simplicité accrue. Moins de concepts, moins de mots-clés, moins à maîtriser pour travailler. Cet argument flatte les tenants de C++ « pour des goujats ». Personne n’a jamais empêché les développeurs C++ de n’utiliser qu’une partie du langage. Ce langage a d’ailleurs été conçu comme une extension multi-paradigmes de C. Cela signifie que si on préfère la programmation fonctionnelle, la programmation générique ou la programmation système, on peut l’utiliser et ignorer le reste. Un problème, petit ou grand, de bas ou de haut niveau peut être résolu de multiples manières en C++. Et depuis quand moins est plus ? L’œuvre de Shakespeare (un écrivain professionnel) contient un vocabulaire de 20.000 mots, beaucoup plus que celui d’un anglo-saxon moyen. Faut-il réécrire Shakespeare avec le vocabulaire des romans de gare ? Faut-il interdire aux écrivains d’utiliser un large vocabulaire pour décrire la finesse de ce qu’ils veulent véhiculer dans leurs écrits, parce que certains ne maîtrisent pas la langue avec la même étendue ?
Perception vs. réalité
Le nombre de développeurs double tous les 3-4 ans depuis le milieu des années 30 (Alan Turing), avec la régularité d’une horloge. Il était inévitable qu’on épuise la capacité de la planète à produire suffisamment de développeurs C++ supplémentaires chaque année. Ce point a été dépassé depuis au moins deux décennies. L’émergence d’alternatives plus faciles d’accès est nécessaire. Elle le restera jusqu’à ce que le progrès des abstractions logicielles, comme c’est son rôle, permette d’automatiser plus loin au lieu d’avoir recours à une vague humaine impossible à satisfaire.
Si on demande par exemple à un développeur Java quel est son estimation du ratio de praticiens Java vs. le nombre de développeurs C++ on entend parfois 10 pour 1, souvent 100 pour 1. Faites l’expérience. Regardons les statistiques annuelles du rapport Slashdata « State of the Developer Nation » qui donne les chiffres exacts (voir slashdata.co). En 2021 le langage de programmation le plus pratiqué était JavaScript avec 13.8 millions de développeurs, Python était second avec 10.1, Java troisième avec 9.4 et C/C++ avec 7.3. C#, PHP, Go, Ruby, etc. sont derrière. Pour atteindre un ratio de 10 pour 1 il faudrait que dans la catégorie C/C++, il n’y ait presque que des développeurs C. En fait, en 2021, il y avait 6 millions de développeurs C++. Le ratio Java/C++ était de 1.5 seulement. Et cela s’explique, Java n’est pas beaucoup plus simple que C++. Le langage est fortement typé, il repose sur la programmation orientée-objet, et il a un modèle de programmation générique. La présence d’un ramasse-miettes ne simplifie pas la tâche des développeurs au point d’amener à un ratio de 10 pour 1. Encore plus intéressant, regardons le même rapport pour 2022. Le classement est inchangé, mais JavaScript a gagné 3.6 millions de développeurs, Python 5.6, Java 4.6 et C/C++… 3.7. 3.7 millions. Et… le ratio Java/C++ a… baissé !
C++, réservé à la programmation de bas niveau est un mythe persistant. Des produits énormes sont réalisés en C++. Microsoft Office par exemple « pèse » à lui tout seul 100 millions de lignes de C++. Il n’y a aucune publicité à ce sujet, et sans verser dans la théorie du complot, le mythe sert bien les intérêts des compagnies qui attrapent tous les développeurs C++ qu’elles peuvent recruter. C++, au contraire, a été conçu pour réaliser des abstractions de « coût zéro », ce qui permet, en particulier, de les empiler, pour construire des édifices immenses et efficaces. Dans ce sens, C++ constitue son propre avenir. C’est le seul langage qui nous permettra de réaliser plus de logiciels, plus sophistiqués, plus vite, avec moins de dépendance vis-à-vis d’une vague humaine de développeurs.
Conclusion
Et donc ? La nouvelle de la mort prochaine de C++ est fortement exagérée. Le groupe qui fait évoluer le langage à l’ISO n’a jamais été aussi grand, sa vitesse d’évolution n’a jamais été aussi élevée. Le futur C++ est… C++ lui-même. Pour un mort, C++ court vite et vous entoure partout. Même si vous alliez sur Mars.
Article co-écrit avec Philippe Boulanger.