Interview Stroustrup (le créateur du C++), les vrais raisons du C++

Interviewer : Cela fait quelques années maintenant que vous avez changé le
monde de la conception logicielle, qu'est-ce cela vous fait en regardant en
arrière ?

Stroustrup : En fait, je repensais à cette époque juste avant que vous n'arriviez.
Vous vous souvenez ? Tout le monde écrivait en C et le problème était qu'ils était vachement bons.
Les universités dispensaient également un bon enseignement du C.
Elles produisaient des diplômés compétents - et j'insiste sur le mot compétent.
Et c'est ce qui a posé problème.

Interviewer : Problème ?

Stroustrup : Oui, problème. Vous vous souvenez du temps où tout
le monde écrivait en COBOL ?

Interviewer : Bien sûr, j'ai moi-même écrit en COBOL.

Stroustrup : Et bien au début ces gars étaient des demi-dieu.
Leurs salaires étaient élevés et ils étaient traités comme des princes.

Interviewer : C'était l'bon temps, hein ?

Stroustrup : Hé oui. Et qu'est-ce qu'il s'est passé ? IBM en
a eu marre, et a investi des millions dans la formation de programmeurs COBOL,
jusqu'à ce qu'ils ne valent qu'une bouchée de pain pour une douzaine.

Interviewer : C'est là que j'ai quitté ce métier. Les salaires
ont chuté en moins d'un an, au point que cela payait plus d'être journaliste.

Stroustrup : Exactement. Et la même chose est arrivé aux programmeurs en 'C'.

Interviewer : Je vois, mais où voulez-vous en venir ?

Stroustrup : Et bien, un jour j'étais à mon bureau et j'ai conçu
un petit stratagème qui pourrait retourner un peu la situation. Je pensais:
- 'Je me demande ce qu'il se passerait s'il existait un langage si compliqué, si difficile
à apprendre que personne ne pourrait jamais inonder la marché de programmeurs ?'
En fait, une partie de ces idées viennent de X10, vous savez, XWindows.
C'était un système graphique si compliqué que cela ne tournait
que sur ces choses Sun3/60. Tous les ingrédients que je voulais étaient présents : une syntaxe
ridiculement complexe, des fonctions obscures, et une structure pseudo orientée-objet.
Même maintenant, personne n'écrit du code X-Windows.
Motif est le seul moyen de coder sans perdre sa raison.

Interviewer : Vous n'êtes pas sérieux ?

Stroustrup : Bien au contraire. En fait, il y avait un autre
problème. Unix était écrit en 'C', ce qui signifie que tout programmeur 'C' pouvait
facilement devenir programmeur système. Vous vous souvenez de ce qu'un programmeur
de mainframe avait pour habitude de gagner ?

Interviewer : Bien sûr, c'était aussi mon type de salaire.

Stroustrup : OK, donc ce nouveau langage devait se séparer d'Unix,
en masquant tous les appels qui liaient les deux si élégamment.
Cela permettrait aux gars qui ne connaissent que le DOS de gagner
de nouveau correctement leur vie.

Interviewer : Je ne peux pas croire que vous ayez dit cela.

Stroustrup : Bah, cela fait longtemps maintenant, et je suppose
que la plupart des gens se sont rendus compte par eux-même que le C++
est une perte de temps, mais je dois dire que cela a pris plus de temps
que je ne l'aurais cru.

Interviewer : Alors, comment exactement vous vous y-êtes pris ?

Stroustrup : C'était supposé être une blague, jamais je n'aurais
cru que les gens prendrait le bouquin au sérieux.
N'importe qui avec 2 grammes de bon sens peut voir que la programmation
orientée-objet est contre-intuitive, illogique et inefficace.

Interviewer : Quoi ?!

Stroustrup : Et concernant le 'code réutilisable'!... Vous avez
déjà entendu d'une compagnie qui a jamais réutilisé du code ???

Interviewer : En fait,... jamais, mais...

Stroustrup : Hé ben voilà. Je ne dis pas que quelques uns n'aient
pas essayé au début. Il y avait cette compagnie d'Oregon - je crois
qu'elle s'appelait Mentor Graphics - qui s'est vraiment fait une belle
frayeur en essayant de tout réécrire en C++ dans les années 1990 ou 1991.
J'en suis désolé pour eux, vraiment, mais je pensais que les gens en auraient
tiré des leçons.

Interviewer : Manifestement, ils ne l'ont pas fait ?

Stroustrup : Pas le moins du monde. Le problème, c'est que la
plupart des compagnies ont du étouffer leurs échecs majeurs, et que expliquer
des pertes de 30millions de $ à leurs actionnaires aurait été difficile.
Cependant, rendons leur crédit, c'est eux qui ont permis que
cela marche en fin de compte.

Interviewer : Ha oui ? Et bien vous voyez, l'orienté-objet, cela marche !

Stroustrup : Moui presque. L'exécutable était si énorme qu'il
mettait 5 minutes à se charger sur des HP avec 128Mo de RAM. Il tournait
si lentement. En fait, je pensais que cela serait un obstacle rédhibitoire,
et je me suis rendu compte en moins d'une semaine que tout le monde
s'en foutait. SUN et HP n'étaient que trop content de vendre des ordinateurs
d'une puissance énorme, dotées d'immense ressources juste pour
faire tourner des programmes triviaux. Vous savez, lorsque l'on a eu
notre premier compilateur C++ chez AT&T, j'ai compilé le programme
'Hello World', et je ne pouvais pas croire la taille de l'exécutable : 2.1 Mo.

Interviewer : Quoi ? Les compilateurs ont fait du chemin depuis.

Stroustrup : Vraiment ? Essayez donc avec la dernière version
de g++. La différence n'excédera pas 0.5Mo. De plus, j'ai plusieurs exemples
récents pour vous, et ce depuis tout pays. British Telecom s'est retrouvé avec un désastre
entre les mains, mais par chance, ils ont pu tout effacer et repartir de
zéro. Et ils ont eu plus de chance que Australian Telecom. Aujourd'hui, j'apprends
que Siemens construit une usine à gaz, et s'inquiète de la taille
croissante du matériel afin de pouvoir y faire tourner les exécutables. Est-ce
que l'héritage multiple n'est pas merveilleux ?

Interviewer : Oui, mais C++ est à la base un langage solide.

Stroustrup : Vous en êtes vraiment convaincu, n'est-ce pas ?
Avez-vous déjà participé à un projet C++ ? Voilà ce qui se passe : d'abord,
j'y a introduit suffisamment de piège pour être sûr que seuls les projets
les plus simples fonctionneront la première fois. Considérez la surcharge
des opérateurs. A la fin du projet, tous les modules l'ont utilisé,
surtout parce que les gars ont pensé qu'ils devaient le faire, comme
pendant leur formation. Le même opérateur qui signifie complètement autre
chose d'un module à l'autre. Essayez de rassembler tout cela lorsque vous
avez une centaine de module environ. Quant à l'encapsulation de données,
mon Dieu, parfois je ne peux m'empêcher de rigoler lorsque j'entends parler
des problèmes qu'ont des compagnies pour faire communiquer leurs
modules. Je pense que le mot 'synergie' a été inventé pour remuer le couteau
dans la plaie des manager de projet.

Interviewer : Je dois avouez que tout cela commence à me troubler.
Vous dites que vous avez fait tout cela juste pour augmenter le salaire
des programmeurs ? C'est choquant !

Stroustrup : Pas vraiment. Tout le monde a le choix. Je ne m'attendais
pas à ce que cela soit si incontrôlable. De toute façons, j'ai en
gros réussi. C++ est en train de passer de mode, et les programmeurs ont toujours des salaires
élevés, surtout ces pauvres diables qui doivent maintenir toute cette
merde. Vous réalisez bien sûr qu'il est impossible de maintenir un gros programme C++ si vous ne
l'aviez pas vous-même écrit ?

Interviewer : Et pourquoi donc ?

Stroustrup : Vous êtes vraiment hors du coup, pas vrai ? Vous
vous souvenez du 'typedef' ?

Interviewer : Oui, bien sûr.

Stroustrup : Vous souvenez-vous du temps qu'il vous fallait pour
explorer les fichiers de déclaration de fonction avant de vous rendre
compte que 'RoofRaised' était un double ? Alors, imaginez le temps que cela
prend pour traduire tous les typedef implicites de toutes les classes d'un
projet important en C++ !

Interviewer : Alors, en quoi reconnaissez-vous avoir réussi ?

Stroustrup : Rappelez-vous de la durée moyenne d'un projet en 'C' :
environs 6 mois. Pas assez longtemps pour gagner correctement
sa vie pour un gars marié avec enfants. Prenez le même projet, concevez-le
en C++ et qu'est-ce que vous obtenez ? Je vais vous le dire : un à deux
ans. C'est pas super, ça ? Toute cette sécurité de l'emploi à cause d'une
erreur de jugement. Et autre chose : les universités n'ont pas enseigné
le 'C' depuis si longtemps qu'il y a maintenant pénurie de programmeurs valables
en 'C'. Surtout concernant ceux qui y connaisse quelque chose sur la
programmation système Unix. Combien de gars saurait quoi faire avec un 'malloc',
alors qu'ils utilisent 'new' ces dernières années, et ce sans jamais
vérifier le code de retour ? En réalité, la plupart des programmeurs C++
ignorent complètement leur code de retour. Qu'est-ce qui est arrivé au
bon vieux '-1' ? Au moins, vous saviez que vous aviez une erreur, sans tout
emberlificoter dans des 'throw' et 'try'.

Interviewer : Mais à l'évidence, l'héritage fait gagner du temps ?

Stroustrup : Vraiment ? Avez-vous remarqué la différence entre
un planning de projet 'C' et 'C++' ? La phase de planning d'un projet C++
est trois fois plus longue. Et justement pour s'assurer que tout ce doit
être dérivé l'est, et ce qui ne doit pas l'être ne l'est pas. Et en plus,
ils se gourent. Qui a entendu parler de 'fuites
mémoire' en 'C' ? Maintenant, on les trouve dans les plus grandes
industries. La plupart des compagnies abandonnent et commercialisent
leurs produits en sachant qu'ils fuient comme des passoires, simplement
pour éviter le coût de débuguer toutes ces fuites.

Interviewer : Il y a des outils...

Stroustrup : La plupart d'entre eux ont été écrit en C++ !

Interviewer : Si on publie cela, vous serez probablement lynché, vous le savez, non ?

Stroustrup : Ca m'étonnerait. Comme je vous l'ai dit, C++ est
maintenant sur son déclin, et aucune compagnie sensée ne commencerait un
projet sans un prototype. Cela devrait suffire à les convaincre de la nature
désastreuse de cette voie. Sinon, ils mériteront ce qu'il leur
arrivera.
Vous savez, j'ai essayé de convaincre Dennis Ritchie de réécrire Unix en C++.

Interviewer : Oh mon Dieu, et qu'est-ce qu'il a dit ?

Stroustrup : Ben heureusement, il a un bon sens de l'humour.
Je pense que lui et Brian se sont aperçu très tôt de ce que je faisais, mais
ne l'ont jamais fait savoir. Il m'a dit qu'il m'aiderait à écrire une version C++ de DOS, si
j'étais intéressé.

Interviewer : Et vous l'étiez ?

Stroustrup : En fait, j'ai écrit DOS en C++. Je vous donnerai
une démo après. Je le fais tourner sur un Sparc20 dans la salle des ordinateurs.
Ca tourne comme une flèche sur 4 CPU, et cela ne prends que 70Mo
sur le disque.

Interviewer : Et-ce que cela tourne comme sur un PC ?

Stroustrup : Là vous blaguez. Avez-vous déjà vu Windows95 ? Je
le considère comme un de mes plus gros succès. Ca a même failli tout arrêter
avant que je ne sois prêt.

Interviewer : Vous savez, cette idée de Unix++ m'avait vraiment
fait réfléchir. Il y a des gars quelque part qui sont en train d'essayer
de le faire. [en fait, le µ-kernel
L4 en est un bon exemple...]

Stroustrup : Non, pas après cette interview !

Interviewer : Je suis désolé, mais je ne nous vois pas capable
de publier quoique ce soit de cela.

Stroustrup : Mais c'est l'histoire du siècle ! Je veux juste
être considéré par mes collègues programmeurs pour ce que je leur ai apporté.
Savez-vous combien peut toucher un programmeur C++ ces jours-ci ?

Interviewer : D'après ce que j'ai entendu, un vrai pro peut valoir 70 à 80$ de l'heure.

Stroustrup : Vous voyez ? Et je parie qu'il les mérite. Tenir
compte de tous les pièges à con que j'ai introduit dans le C++ n'est pas
un job facile. Et comme je vous l'ai
dit, tous les programmeurs C++ sont comme lié par un serment
mystique pour employer toutes les fonctionnalités du langage dans tous les
projets. En fait, cela finit même par m'ennuyer parfois, même si cela sert
mon but original. J'en finis presque par aimer ce langage.

Interviewer : Vous voulez dire que ne l'aimiez pas avant ?

Stroustrup : Je le détestais. Il n'est même pas élégant, vous
ne trouvez pas ? Mais quand les royalties du bouquins ont commencé à arriver...
vous voyez l'idée.

Interviewer : Attendez une minute... et les références ? Vous
devez reconnaître que cela représente une amélioration sur le pointeurs 'C'.

Stroustrup : Hmmm, je me suis toujours posé des questions à ce
sujet. Au début, je pensais que s'en était une. Et puis un jour, j'ai discuté
avec un gars qui avait programmé depuis ses débuts en C++. Il me disait
qu'il ne pouvait jamais se souvenir si ses variables étaient référencées
ou déréférencées, alors il utilisait toujours les pointeurs. Il
disait que le petit '*' astérix l'aidait à se souvenir.

Interviewer : Et bien, à ce stade je dis généralement 'Merci
beaucoup', mais cela ne semble pas très approprié.

Stroustrup : Promettez-moi que vous allez publier cela. Ma conscience
prend le dessus ces derniers temps.

Interviewer : Je vous le ferai savoir, mais je pense deviner
ce que mes éditeurs vont dire.

Stroustrup : Qui le croirait de toutes façon ? Toutefois, pourriez-vous m'envoyer
une copie de cette bande ?

Interviewer : Je peux faire ça.