Blog 5 min de lecture

Ne touchez pas à mon code C++

Share this article
Ne touchez pas à mon code C++

Retour en 2005 : je travaillais dans une entreprise où la majeure partie du code était écrite en C++. En 2006, les managers ont décidé de développer les nouveaux projets en C# et de migrer aussi certains projets C++ vers C#. Voici leurs arguments contre le C++ :

  • C++ est trop complexe.
  • Le système de build C++ est trop difficile à gérer et à maintenir.
  • C++ stagne depuis de nombreuses années et il est en train de mourir.
  • Il est devenu très difficile de recruter des développeurs C++.

Et bien sûr, de nombreux autres avis sur le web découragent les managers de poursuivre le développement en C++.

More important than security is the fact that C and C++ are simply too hard to program, compared to any safe language. Not only is it too easy to write a catastrophic bug in C/C++, it is even easier to write more ordinary bugs. And these bugs are very often not caught by the compiler; they are discovered months or years later, in production, often after the programmer who wrote them has moved on.
As a multi-paradigm system programming language, C++ is a complete beast when it comes to its feature-set and its specs, followed up with a steep learning curve and a very long path to mastery. It’s challenging to keep track of all its complex syntactical constructs that more often than not seem confusing and ambiguous.
C++ does not have a proper module system that most modern languages provide. D, Java, C#, Python, Clojure, you name it. All of them got one. In combination with its primitive preprocessor, this usually results in a messy structure of header files and implementation files that rely on include guards to give basic protection against multiple inclusion.

À l'époque, en tant que développeurs C++, nous n'avions pas beaucoup d'arguments solides pour les convaincre de ne pas abandonner le C++, d'autant que Microsoft promouvait .NET au détriment du C++ et qu'il y avait beaucoup d'engouement autour de la technologie .NET.

Nous sommes maintenant en 2018, et de nombreux changements ont été apportés au langage C++. La question est : si votre entreprise décide de délaisser le C++, quels arguments pouvez-vous utiliser pour convaincre vos managers de continuer à l'utiliser ?

Tout d'abord, prétendre que tout va bien maintenant et que le C++ a surmonté toutes ses faiblesses serait une erreur. Il reste encore beaucoup de choses à améliorer si l'on veut changer la perception selon laquelle « le C++ est devenu trop réservé aux experts ».

Heureusement, rendre le C++ plus facile à utiliser est l'un des objectifs du comité C++, comme l'a expliqué Herb Sutter dans une récente interview :

Since mid-2015 in particular, I decided to focus my work on seeing if I could find ways to make C++ programmes simpler. Because C++ has a long-term future, anything we can do to make C++ programs easier to write, read, and maintain will deliver big benefits to the whole industry.

The way I went about it was by systematically looking at C++ code and seeing where all the boilerplate is – that is, find the things that C++ programmers already do all the time, but that they are forced to express indirectly with excessive ceremony or in complex and brittle ways, and see if we can find a very small number of general mechanisms that could let them express those things in a simpler and more direct and robust way. If we can find the places where we regularly have to fight the language (such as the language’s defaults) or work around the language (such as by using macros or proprietary language extensions) or just rely on English advice (Scott Meyers’ books are great, but wouldn’t it be great if we didn’t need to say 75% of what’s in them), and in those places be able to directly state what we want, that would be actively improving those things that we are doing already.

A “small” historical example is the range-based for loop: We could already write for loops that visit each element, but it took more ceremony such as writing the incrementing logic by hand, and it had more ways to go wrong such as inadvertently incrementing the index or iterator in the body of the loop and skipping elements. By having a ranged-based for in the language, we elevated that very common coding pattern into a language feature that lets us now say directly what we want to do, namely visit each element in order, and that is obviously correct by construction just by looking at the first line of the loop without looking inside the body to see if it might skip elements or something. And I think the range-based for loop, though a “small” feature, was one of the major successes of C++11 – an improvement that people now use every day. Adding it to the language made the language (slightly) bigger, but it made C++ programs simpler.
  • Le premier argument en faveur du C++ est que, depuis 2011, de nombreuses fonctionnalités ont été ajoutées pour améliorer le langage, et d'autres sont en route pour le rendre plus facile à utiliser. Pour rendre le discours plus convaincant, il vaut mieux montrer quelques extraits de code issus de bibliothèques et de projets C++ modernes.
  • Le C++ n'est plus en train de mourir ; de nombreux indicateurs de classement des langages de programmation montrent que le C++ progresse.
  • Le C++ est toujours très actif sur les forums de développeurs. Jetez simplement un œil à Stack Overflow, où de nombreuses questions C++ sont postées chaque jour.
  • Le C++ est toujours largement utilisé pour le développement de nouveaux projets, comme le montre le classement GitHub dans cet intéressant article sur les tendances des langages sur GitHub.
  • La communauté C++ grandit. Si vous regardez Google+, LinkedIn, Facebook ou Twitter, vous pouvez voir que de plus en plus d'utilisateurs s'intéressent au C++.

Pour résumer, le fait que le C++ soit de retour et plus puissant qu'avant n'est pas une simple opinion subjective — les statistiques parlent d'elles-mêmes. Aujourd'hui, les arguments en faveur de la conservation de votre code C++ existant ne manquent pas. Dans bien des cas, la décision n'appartient pas aux développeurs, mais ils peuvent identifier les arguments qui correspondent le mieux à leur contexte spécifique et les utiliser pour convaincre les managers de garder le C++ comme langage de programmation principal.

Share this article