Article de 2006.Björn Straustrup, inventeur du langage de programmation C ++, protège son héritage et indique ce qui ne va pas avec la plupart du code du programme.
Dans les années 80 et 90, Björn Straustrup a développé et implémenté le langage de programmation C ++, qui a popularisé la programmation orientée objet et influencé de nombreux autres langages de programmation, dont Java.
Le C ++ reste un langage informatique archétypique de «haut niveau» (c'est-à-dire un langage qui préserve les caractéristiques d'un langage naturel et humain), et il est toujours utilisé par des millions de programmeurs. De nombreux systèmes et applications de l'ère PC et Internet ont été écrits en C ++. Malgré cela, le langage reste controversé, en grande partie parce qu'il est connu pour être difficile à apprendre et à utiliser, et aussi parce que la conception Straustrup permet aux développeurs de faire de graves erreurs de programmation dans le but de préserver leur liberté.
Straustrup, qui a travaillé pendant de nombreuses années chez AT&T Bell Labs, est maintenant professeur d'informatique au département d'ingénierie de la Texas A&M University, près de Houston.
Revue technologique: pourquoi tant de logiciels sont-ils si mauvais?Björn Straustrup: Certains programmes sont en fait assez bons selon toutes les normes. Pensez à Mars Rovers, Google et au Human Genome Project. C'est un logiciel de qualité! Il y a quinze ans, la plupart des gens, et en particulier la plupart des experts, diraient que chacun de ces exemples est impossible. Notre civilisation technologique dépend du logiciel, donc si le logiciel était vraiment aussi mauvais que sa pire réputation, la plupart d'entre nous seraient déjà morts.
D'un autre côté, regarder des extraits de code «typiques» peut me faire pleurer. La structure est terrifiante et les programmeurs n'ont clairement pas pensé à l'exactitude, aux algorithmes, aux structures de données ou à la maintenabilité. La plupart des gens ne lisent pas réellement le code; ils voient simplement Internet Explorer ralentir.
Je pense que le vrai problème est que «nous» (c'est-à-dire les développeurs de logiciels) sont dans un état d'urgence constant, serrant la paille pour faire notre travail. Nous effectuons de nombreux petits miracles par essais et erreurs, utilisation excessive de la force brute et de nombreux essais, mais souvent cela ne suffit pas.
Les développeurs de logiciels sont devenus des maîtres dans l'art complexe de créer des systèmes suffisamment fiables à partir de pièces non fiables. Le problème est que, souvent, nous ne savons pas exactement comment nous l'avons fait: le système s'est simplement «transformé» en quelque chose de peu acceptable. Personnellement, je préfère savoir quand le système fonctionnera et pourquoi il le fera.
Revue de la technologie: Comment pouvons-nous réparer le désordre dans lequel nous nous trouvons?Björn Straustrup: Théoriquement, la réponse est simple: mieux éduquer nos développeurs de logiciels, utiliser des méthodes de conception plus adaptées et utiliser une conception flexible, en pensant à long terme. Récompensez des systèmes corrects, fiables et sécurisés. Punissez pour négligence.
C'est en fait impossible. Les gens récompensent les développeurs dont le logiciel est bon marché, les bogues et la première version. C'est parce que les gens ont besoin de nouveaux gadgets. Ils n'ont besoin d'aucun inconvénient, ils ne veulent pas apprendre de nouvelles façons d'interagir avec leurs ordinateurs, ils ne veulent pas de retards de livraison et ils ne veulent pas payer pour la qualité (sauf si cela est évident, mais le plus souvent même alors). Et sans changements réels dans le comportement des utilisateurs, il est peu probable que les fournisseurs de logiciels changent.
Nous ne pouvons pas simplement arrêter le monde pendant une décennie pendant que nous reprogrammons tout, de nos machines à café à nos systèmes financiers. En revanche, continuer à fonctionner au hasard est coûteux, dangereux et déprimant. Des améliorations significatives sont nécessaires, et elles ne peuvent apparaître que progressivement. Ils doivent arriver sur un front large; un seul changement ne suffit pas.
L'un des problèmes est que les «cheminées académiques» interfèrent: trop de gens font la promotion d'un domaine comme la panacée. Des méthodes de conception plus efficaces peuvent aider, de meilleures méthodes de spécification peuvent aider, de meilleurs langages de programmation peuvent aider, de meilleures technologies de test peuvent aider, une meilleure infrastructure de niveau intermédiaire, une meilleure compréhension des domaines d'application peut aider, une meilleure compréhension des structures de données et des algorithmes peuvent aider aide - et ainsi de suite. Par exemple, la théorie des types, le développement de modèles et les méthodes formelles peuvent sans aucun doute apporter une aide importante dans certains domaines, mais ils ne sont promus que comme solution pour exclure d'autres approches, chacune garantissant le rejet de projets à grande échelle. Les gens font la promotion de ce qu'ils savent et de ce qu'ils ont vu; sinon Mais seules quelques personnes ont la maturité technique pour équilibrer les besoins et les ressources.
Présentation de la technologie: L'idée derrière C ++ était que les programmeurs travailleraient plus activement en échange d'un code plus efficace. Les Bell Labs voulaient utiliser un langage que certaines personnes vraiment intelligentes utiliseraient pour écrire du code qui fonctionnait sur des ordinateurs comme les systèmes de commutation électronique (ESS) qui n'étaient pas très rapides. Aujourd'hui, il y a beaucoup d'ordinateurs rapides et de nombreux développeurs de logiciels. Est-ce à dire qu'il nie toute l'essence du C ++?Björn Straustrup: C ++ n'a pas été conçu spécifiquement pour les grands appareils de commutation, il a été développé pour une large gamme d'applications. Les Bell Labs abritaient une gamme incroyable de projets intéressants couvrant toutes les échelles et utilisant presque tous les types d'ordinateurs et de systèmes d'exploitation. Mais oui, le programmeur moyen des Bell Labs était beaucoup plus capable que la plupart des gens ne le pensent d'un «programmeur moyen», et la fiabilité et les performances (dans cet ordre) étaient considérées comme beaucoup plus importantes que dans la plupart des autres endroits.
Les performances restent un problème dans de nombreuses applications qui m'intéressent: réactivité des interfaces, temps de démarrage et d'arrêt des applications. Les développeurs de logiciels neutralisent les performances incroyables du matériel informatique moderne en ajoutant des abstractions couche par couche (logicielles) redondantes. Il semble que nous soyons confrontés aux limites de l'accélération linéaire pour le matériel, mais dans de nombreux cas, nous pourrions gagner quelques ordres de grandeur dans le logiciel.
Cependant, le C ++ est vraiment devenu trop «convivial pour les experts» tandis que le niveau d'éducation formelle efficace du développeur de logiciel moyen a diminué. Cependant, la solution n'est pas de simplifier les langages de programmation au point d'absurdité, mais d'utiliser différents langages de programmation et de former plus d'experts. Ces experts doivent utiliser certains langages, et C ++ est l'un de ces langages.
Revue technologique: Rétrospectivement, lors de la conception de C ++, votre décision d'échanger l'efficacité logicielle, sa sécurité et sa fiabilité pour les performances du code d'exécution, était-elle une erreur fondamentale?
Björn Straustrup: Eh bien, je ne pense pas avoir fait un tel échange. Je veux un code élégant et efficace. Parfois je l'obtiens. Ces dichotomies (entre efficacité et justesse, efficacité et temps d'un programmeur, efficacité par rapport à un niveau élevé, etc.) sont fictives.
Ce que j'ai vraiment fait, c'est développer le C ++, principalement un langage de programmation système: je voulais être capable d'écrire des pilotes de périphériques, des systèmes embarqués et d'autres codes que je devais utiliser directement. Ensuite, j'ai voulu que C ++ soit un bon langage pour développer des outils. Cela exigeait de la flexibilité et des performances, ainsi que la capacité d'exprimer des interfaces élégantes. Mon opinion était que pour créer un niveau supérieur, pour créer des applications complètes, il fallait d'abord acheter, construire ou emprunter des bibliothèques qui fournissent les abstractions appropriées. Souvent, lorsque les gens ont des problèmes avec C ++, le vrai problème est qu'ils n'ont pas les bibliothèques appropriées ou qu'ils ne peuvent pas trouver les bibliothèques disponibles.
D'autres langues ont essayé de prendre en charge plus directement les applications de haut niveau.
Cela fonctionne, mais souvent ce soutien se fait au détriment de la spécialisation. Personnellement, je ne développerais pas un outil qui ne pourrait faire que ce que je voulais - j'aspire à la communauté.
Revue technologique: Comment expliquez-vous le fait que le C ++ est largement critiqué par de nombreux programmeurs, mais en même temps très utilisé? Pourquoi cette langue a-t-elle autant de succès?Björn Straustrup: La réponse est simple: il n'y a que deux types de langues: celles dont tout le monde se plaint et celles que personne n'utilise.
Il existe des systèmes plus utiles conçus dans des langues qui sont considérées comme terribles que les langues qui sont louées pour être belles - et bien plus encore. Le but d'un langage de programmation est d'aider à créer de bons systèmes où «bon» peut être défini de plusieurs façons. Ma courte définition est: quelque chose est correct, pris en charge et assez rapide. L'esthétique est importante, mais tout d'abord, le langage devrait être utile; il devrait permettre aux programmeurs de ce monde d'exprimer des idées réalistes de manière concise et peu coûteuse.
La principale raison du succès de C ++ est qu'il répond aux objectifs de conception limités: il peut exprimer efficacement une vaste gamme d'idées directement.
Le C ++ n'était pas destiné à faire une seule chose vraiment bien ou à empêcher les gens de faire des choses qui sont considérées comme «mauvaises». Au lieu de cela, je me suis concentré sur la généralité et la performance.
Je suis sûr que pour tout programmeur qui n'aime pas le C ++, il y a quelqu'un qui aime ce langage. Cependant, mon ami est allé à la conférence, où le conférencier principal a demandé au public de manifester en levant la main: le premier, combien de personnes n'aimaient pas le C ++, et le second, combien de personnes ont écrit le programme en C ++. Le premier groupe comptait deux fois plus de personnes que le second. Une expression d'hostilité envers quelque chose que vous ne connaissez pas est généralement appelée préjugé. De plus, ceux qui se plaignent sont toujours plus forts et plus confiants que les supporters - des gens raisonnables reconnaissent les défauts. Je pense que j'en sais plus sur les problèmes avec C ++ que sur quiconque, mais je sais aussi comment les éviter et comment utiliser les points forts de ce langage.
Et, bien sûr, vous ne vous attendez pas à ce que les partisans des langages qui ont perdu la concurrence avec C ++ soient polis à ce sujet. Le développement de logiciels n'a pas un tel degré de professionnalisme, bien que j'espère que cela finira par se produire. À cet égard, la science est différente: lorsqu'un nouvel outil, une nouvelle technique ou une nouvelle théorie l'emporte, les gens le voient comme un progrès. Dans le domaine des logiciels, les contributions des concurrents et des prédécesseurs n'ont pas été largement reconnues, appréciées ou même comprises.
Revue technologique: Dans «Design and Evolution of C ++», vous soutenez que Kierkegaard a influencé votre concept de langage. C'est une blague?Björn Straustrup: Peut-être une déclaration un peu prétentieuse, mais pas une blague. De nombreuses réflexions sur le développement de logiciels se concentrent sur un groupe, une équipe, une entreprise. Cela se fait souvent à un point tel qu'une personne est complètement immergée dans la «culture» de l'entreprise sans chercher de talents et de compétences uniques. La pratique d'entreprise peut être hostile à des personnes aux compétences exceptionnelles et à l'initiative technique. Je trouve cette gestion technique cruelle et inutile. Kierkegaard était un fervent partisan de l'individu contre la «foule» et a sérieusement soulevé la question de l'importance de l'esthétique et du comportement éthique. Je ne pourrais pas souligner une caractéristique spécifique du langage et dire: «Vous voyez, il y a l'influence d'un philosophe du XIXe siècle», mais c'est l'une des racines de ma réticence à éliminer le «niveau expert», à abolir les «abus» et à limiter la capacité de prendre en charge uniquement les applications qui comme je sais, ils seront utiles. Cependant, je n’aime pas particulièrement la philosophie religieuse de Kierkegaard.
Revue technologique: que regrettez-vous le plus?Björn Straustrup: Je n'ai aucun regret! Eh bien, bien sûr, je rêve de ce que je pourrais faire différemment et mieux, mais sérieusement, qui suis-je pour redécouvrir, disons, le millésime 1984 de Björn? Il était peut-être moins expérimenté que moi, mais il n'était pas moins intelligent, probablement plus intelligent, et il comprenait mieux les mots de 1984 que moi. C ++ est utilisé pour créer de nombreux systèmes qui améliorent nos vies, et cela a eu un impact positif significatif sur les langages et systèmes ultérieurs. C'est quelque chose dont on peut être fier.