Du C++ et des violonistes

Un des grand débat parmi les informaticiens est sur les préférences pour tel ou tel langage. Comme pour beaucoup d’autres choses, les préférences sont dictées par des considération techniques, esthétique, mais aussi culturelle et sociales. Les considération techniques sont de prime abord les plus simples à exprimer: certains langages permettent certaines choses que d’autres ne permettent pas. Il est impossible d’écrire un driver pour un système d’exploitation en Java par exemple.
Néanmoins ces contraintes techniques n’affectent en réalité qu’une minorité de programmeurs et les choix sont somme toute rarement dictés par des raisons techniques.

Les raisons esthétiques sont difficiles à définir, si la plupart des gens qui programment s’accordent à dire que certains codes sont abominables (en général celui des autres), la définition de ce qui est beau est plus complexe. Certains trouvent des codes compacts et efficaces sont la base de la beauté, alors que d’autres trouveront plutôt des langages aux structures minimalistes élégants. Souvent la définition de ce qui est beau est surtout conditionnée par la manière dont on a appris à programmer.

Car en fin de compte, l’aspect social est la partie dominante. Chaque communauté à ses us et coutumes, et sa manière de voir le problème. Par exemple, le CERN ou je travaille, est une communauté de physiciens, la culture informatique est de ce fait imprégnée par Fortran. En dehors de cette communauté, ce langage est considéré comme un archaïsme et personne ne voudrait plus l’utiliser, ici il est bien vivant et considéré comme adapté. Et même si la programmation ne se fait pas en Fortran, les gens programme toujours à la manière de Fortran, et les facilités de langages plus récents ont tendance à être ignorées.

Une autre composante sociale est l’élitisme. Il y a fondamentalement deux types de programmation, l’un consiste à écrire des algorithmes qui font de véritables calculs, le second consiste à écrire du glue code, c’est à dire ne fait pas réellement de calcul, mais qui traduit des données, les prépare pour l’utilisateur. Le premier type de programmation est passionnant et requiert d’être réellement malin, d’avoir des idées originales. Le second demande surtout d’être soigneux et productif. L’art et la besogne. Naturellement, toute la mythologie informatique tourne autours de la première catégorie.

Le violon est, paraît-il un instrument de musique difficile, ce qui fait aussi que les virtuoses du violon sont adulé. Il y a une raison pour laquelle on ne parle pas souvent des virtuoses du triangle. Le C++ est un peu comme le violon. C’est un langage très complexe, et rares sont les gens qui arrivent à le maîtriser. Par contre, il permet des abominations sans nom. Néanmoins ce langage reste très dominant simplement car il permettrait de faire du code très avancé, dans les faits, les génies du C++ sont rares. L’avantage du C++ c’est qu’il permet de nombeux styles de programmation, on peut le prendre comme un (mauvais) langage orienté objet, ou comme une vague copie de Fortran, voire même des choses plus exotiques.

Un collègue m’a prêté un livre sur le C++ Modern C++ Design: Generic Programming and Design Patterns Applied d’Andrei Alexandrescu qui illustre parfaitement ce problème. Ce livre est brillant et contient des perles d’ingéniosités qui sont autant d’abominations. En gros, l’auteur utilise les mécanisme des templates pour faire de la programmation qui s’exécute au moment de la compilation. Une sorte de programmation dans la programmation. Le fantasme de la programmation C++ est de détecter toutes les erreurs au moment de la compilation, et ce livre essaye d’aller dans cette direction. Le drame c’est que dans la bagare, l’auteur réinvente un autre langage (le Lisp), à force de templates sans jamais nommer ce langage donne une idée de l’étendue du drame.

Comme dans le monde de la musique classique, il ne faut pas sous-estimer le niveau de snobisme ambiant. Personne ne va réellement poser la question de pourquoi on doit bricoler un autre langage en martyrisant les structures du premier au lieu de faire un système de vérification plus intelligent, comme personne ne va réellement demander pourquoi on ne change pas les violons pour qu’il soit plus facile d’en jouer.

L’avantage du violon, c’est que si quelqu’un joue réellement mal, cela s’entend. Le mauvais code C++ est malheureusement beaucoup plus discret – bien qu’en fin de compte, il soit probablement responsable de votre prochain écran bleu.

12 thoughts on “Du C++ et des violonistes

  1. Perso je suis partisant du “si je n’ai pas à me concentrer pour savoir si c’est juste, c’est beau”.

  2. Voilà.

    Mais dis comme ça ça sonne un peu comme si tu mélangeais l’art et l’instrument. Le violon n’est ni la musique ni le violoniste, le C++ n’est ni le programme écrit ni la personne qui l’écrit. Donc bon, ok pour le terme “approche bontempi”, mais ça signifie, si c’est sarcastique, que la seule approche restante est l’aproche violon comme tu la définis ci-dessus. Paradoxe paradoxe…

    D’un autre coté, le français c’est sympa.

  3. Je pense que tu ne peux pas complètement dissocier l’art et l’instrument ni même l’utilisateur. L’instrument conditionne ce que tu peux faire avec, le langage (qu’il soit informatique ou humain) conditionne ce que tu peux exprimer et comment. En fin de compte, cela conditionne la manière dont tu penses, donc la langage affecte aussi la manière de penser.

    Cela ne veut pas dire que simple est mauvais, souvent l’approche Bontempi est meilleure que l’approche du premier violon, ne serait-ce que pour des raisons de stabilité et de pérennité.

  4. “Small is beautiful”, “Keep it simple, stupide!”, il y en a probablement d’autres.

    Ok, d’accord, l’instrument conditionne la manière de l’utiliser ( Python is not Java : http://dirtsimple.org/2004/12/python-is-not-java.html ) et 1984 contient un bon exemple de langage qui influence la pensée. D’ailleurs ta manière d’écrire influence certainement ta façon de penser ;)

  5. Ben non, les phrases sont structurées différemment. En général tu as plus de phrase courte au lieu d’avoir de longues phrases. Tu as aussi moins de locution compliquées. Un signe typique d’un francophone qui écrit en anglais est qu’il ajoute des trucs comme “in the context of” qui en anglais peut-être remplacé par quelque chose comme “for”.

  6. Bon, 60 points pour moi, je fais l’idiot et on me répond :P Bêêêh.

    Bon ça revient à ce qu’on disait.

    Malgré tout, je réitère ma remarque : l’instrument s’il conditionne la façon de l’utiliser (ce qui est logique, après-tout on n’utilise pas d’archet avec un piano à queue. Enfin pas normalement, parce que là j’ai un “Concerto for bowed piano” qui contredit mon exemple) n’influence pas forcément la façon de penser. Je m’explique : si je préfère programmer en Python, ce n’est pas parce que Python m’a influencé et modifié mes circuits de pensée, mais bien parce que ma façon de penser trouve un écho satisfaisant dans l’utilisation de Python. Culturellement je suis donc plus sensible aux sirènes de Python qu’aux alarmes incendie de C++. Ca, c’est mon passé, mon éducation et mes goûts qui me dictent mes choix.

    Maintenant, si par hasard je me trouve dans une situation où l’apprentissage d’un nouveau langage est obligatoire, (Java, Fortran ou INTERCAL) je suis d’accord que techniquement et socialement la pression force l’usage de nouveaux concepts. Mais dans le fond je continuerai de penser avec mes habitudes et mes façons qui m’ont conduit à l’usage de Python.

    Ceci, pour les langages informatiques.

    Du coté des langages humains, c’est différent. On ne peut pas parler clairement une langue sans avoir une notion de son contexte et de l’esprit dans lequel elle fonctionne. On doit en quelque sorte “devenir” la langue. Mais ça, c’est lié à la nature même de la langue, elle s’adresse à des cerveaux humains et pas à des processeurs, et un cerveau, même de canidé, c’est autrement plus compliqué qu’un Pentium.

    Voilà, ai-je été clair ?

  7. Oui, tu es clair. En fin de compte on se retrouve devant une question qui ressemble beaucoup à la sempiternelle inné vs. acquis. D’un côté tu peux penser que tu connais un certain nombre de techniques de programmation et tu préfères les langages qui favorisent celles-ci. De l’autre tu as des langages qui encouragent ou découragent certaines approches et ainsi conditionnent la manière de programmer.

    Par exemple, ici les gens sont fortement influencé par le FORTRAN. C’est un langage procédural pur et dur. En conséquence les gens ici ne grokent par réellement les objets ou la récursivité. Par contre, ils sont hyper-sensibles à la performance en virgule flottante et à la présence de librairies mathématiques et en général la performance numérique. Cela se ressent dans les programmes C++ les objets sont rares, les méthodes statiques, la récursivité inexistante – même si le C++ permet ces concepts. Si on pouvait leur faire faire du SmallTalk (oui je rêve), ils apprendraient les deux. Pour prendre un autre exemple, quand tu maîtrise le C++ tu as l’habitude d’avoir un maximum d’erreurs au moment de la compilation alors qu’en script, tu as surtout des erreurs de runtime.

  8. Ce qui me fait marrer avec cette histoire de FORTRAN, c’est que le doyen de la division info de l’école où j’ai fait mon diplôme ne jurait que par FORTRAN. Mon meilleur souvenir, alors que je venais de présenter un programme de dérivation symbolique écrit en Lisp (en VAXLIsp pour être précis), c’est son commentaire “oui mais on peut aussi le faire en fortran”.

    J’en suis resté assis.

    Maintenant ce que ça montre, c’est que mon ancien doyen et ta meute de physiciens partagent un même acquis et sont résolument réfractaires à toutes choses qui perturbent leur conception du monde informatique :) Ils ont appris à programmer comme ça et, comme moi, préfèrent les outils qui leur permettent de prolonger cette façon de faire. En somme, c’est une bijection :P Il y a les techniques qu’on préfère, et les techniques qui sont autorisées… Les deux ensembles ne coincidant pas forcément, il y a des déceptions.

  9. Ouahhh. Chapeau bas messieurs. Votre conversation est un vrai régal :)

Leave a Reply