vendredi 8 février 2013

Doit-on montrer le code informatique des scientifiques même s'il est moche ?

[caption id="attachment_631" align="aligncenter" width="103"] cliquez sur l'image (puis laissez la souris au-dessus de l'image pour voir le texte alternatif) (et si vous riez, vous êtes un affreux geek)[/caption]

En science on écrit beaucoup de code informatique. On écrit de gros programmes pour traiter plein de données (génomique, résultats du CERN), d'autres gros programmes pour simuler de gros modèles pour quand la réalité est complexe (le climat, les populations humaines), encore des gros programmes pour traiter des données compliquées (des structures cristallographiques). Et on écrit des petits programmes tout le temps : pour lier les gros entre eux, pour mettre les données au bon format, pour faire un petit calcul pas standard dans le logiciel, pour répéter une opération simple plein de fois, etc. (Je précise qu'il existe aussi des scientifiques qui ne programment pas. Il n'est pas question d'eux aujourd'hui.)

Au bilan, la qualité et la fiabilité de nos résultats scientifiques dépendent pas mal de tout ce code.

Et qu'est qu'on en fait, le plus souvent ? On l'écrit vite et mal, on le teste à peine, on ne le commente pas, et on le paume quelque part dans un sous-dossier de notre disque dur. La honte.

Une excellente analogie que j'ai trouvée récemment (document PDF) : peut-on imaginer que les mathématiciens publient leurs théorèmes sans montrer les preuves, parce que c'est du boulot de les mettre en forme, parce que chaque preuve est particulière à un problème et pas très utile ailleurs, c'est plus rentable de travailler sur un nouveau problème que de polir cette preuve pour publication, en fait ma preuve ne marche pas dans tous les cas mais dans le cas qui m'intéresse ça marchait, en fait c'est mon étudiant qui a fait la preuve et je ne l'ai plus, la preuve va me re-servir pour d'autres théorèmes alors je ne vais pas la donner à mes compétiteurs, les papiers avec des preuves seraient trop longs et les experts ne vont pas s'embéter à lire tout ça, ma preuve s'appuie sur un logiciel commercial (genre MatLab), vous pourrez pas vous en servir, etc.

Pour de vrai, les mathématicens publient leurs preuves, mais les scientifiques ne publient pas leur (notre) code, et nos arguments sont à-peu-près ceux ci-dessus.

Le point qui fait le plus débat est le compromis entre le travail nécessaire à rendre son code informatique présentable, et la pertinence de publier du code "sale". Ca fait longtemps que j'ai ce billet en brouillon et je veux le publier et je ne vais pas réussir à écrire tout ce que je voudrais, alors je vais mettre quelques liens intéressants avec des résumés :

  • Iddo Friedberg a fait un excellent bilan sur son blog Byte Size Biology, avec une analogie très drôle au film "Piranha 3D", et conclut qu'en l'état il n'a pas les moyens de faire du code propre, et ne veut pas partager du code pas propre, mais propose une nouvelle initiative, le Bioinformatic Testing Consortium,

  • Dans Nature, un article Publish your computer code: it is good enough argue que même si le code n'est pas beau ni propre ni aux règles, il faut le publier, ça fait partie de la démarche scientifique.

  • Un autre article dans Nature, Computational science: ...Error, prends plus ou moins l'angle inverse, et dit qu'il faut former tous les scientifiques au génie logiciel propre.

  • Un blog anonyme réagit à Iddo en disant que le but de la science n'est pas des logiciels, et donc des tests systématiques ne sont pas justifiés.

  • Un autre bloguer, Titus Brown, donne de bonnes raisons pour écrire du code proprement en respectant les règles, et donne de bons conseils pour le faire efficacement. Super citation de Darwin :
    "Ignorance more frequently begets confidence than does knowledge"


  • Sur le forum Biostar, un bioinformaticien anonyme dit que de documenter et publier son code est du même ordre de grandeur que de noter ses procédures expérimentales : indispensable. (LOLcat si vous suivez le lien)

  • John Graham-Cumming note que le problème se pose avec encore plus de force dans l'étude du climat, où l'obscurité des méthodes devient un argument politique.


Un gros problème est qu'en science on doit souvent écrire du code pour des projets qui se développent au fur et à mesure, sans savoir où on sera demain, et quel bout de code finira inutile et lequel produira le résultat critique pour la suite, voire lequel servira de base à une nouvelle méthode utilisée par ses collègues. Le fait est que dans la plupart des cas le code est vite fait - mal fait.

Il s'ajoute un autre problème : on a beau vous expliquer que si vous programmez proprement vous gagnerez du temps sur le long terme gnagnagna, vous souci premier est toujours d'obtenir le résultat. Alors on revient à #overlyhonestmethods, on fait souvent ce qu'il faut pour avancer, à coups de rubban adhésif. Mais publier son code, c'est pas un peu mettre #overlyhonestmethods dans ses articles officiels ?

A quoi je répondrais qu'il faut qu'on y passe. Trop de nos résultats sont dépendants de notre code pour le cacher. Et l'effort fait aujourd'hui payera demain, avec un code mieux débuggé et plus efficace même pour nous, avec plus de facilité à retrouver ce qu'on a fait dans 5 ans quand on aura tout oublié mais que l'article sera toujours là avec son code à-peu-près propre. Oui à-peu-près parce que je pense que pour que ça marche il faut accepter qu'on ne va généralement pas avoir du code informatique de qualité professionnelle.

Alors en pratique que faire ? Demander aux journaux scientifiques de demander le code, le demander en tant qu'expert ; publier son propre code (un peu tard pour moi, je fous plus rien en programmation) ; demander à ses collègues et étudiants de publier le leur (grosse résistance en vue) ; former les étudiants a minima à la programmation propre ; participer à des initiatives comme celle d'Iddo. Et espérer que les attitudes vont changer.

Mise à jour : @JeanFred nous signale l'existence du Science code manifesto, par le Climate Code Foundation, qui traite de ces mêmes questions.

14 commentaires:

  1. Promouvoir la publication d'un code à peu près propre, c'est aussi promouvoir le "moins mais mieux" en matière de production globale d'articles. Bien entendu, c'est difficile : c

    1) celui qui s'y met en premier craint de se sacrifier pour la bonne cause à venir.
    2) le code est souvent (très souvent) fait par des précaires dont l'intérêt bien légitime est de ramasser des publis pour avoir un poste : le production scientifique est alors un moyen et non une fin - j'exagère un peu mais c'est un problème.

    RépondreSupprimer
  2. En parlant de montrer le code informatique, il y a déjà une étape en amont que les journaux devraient exiger: le numéro de version et les paramètres utilisés pour tel ou tel software. Trop souvent lors de review d'articles scientifiques, j'ai vu des trucs du genre: "Nous avons construit l'arbre phylogénétique avec PhyML" ou "Les sequences furent alignées avec MAFFT" (j'avoue que j'ai probablement du le faire aussi). L'absence de numéro de version et de paramètres rend la reproductibilité de l’étude impossible.
    Pire encore, imaginons que des chercheurs ont utilise MONPROGRAMME v5.1, et que la version v5.2 corrige un bug majeur présent dans la version v5.1. Sans numéros de versions, comment savoir si quelles études ont été erronées ou pas? Il y a des exemples dans la littérature scientifiques ou des études ont du être rétractées a cause d'un simple bug d'un programme annexe.

    RépondreSupprimer
  3. Pour soulager nos consciences et nous motiver à "tenter" des démonstrations au lieu de rester muets comme une carpe face au tableau, une des mes prof de maths nous avait expliqué que les Gauss, les Cauchy, les Liebniz, bref, les cadors dont les bustes ornent le panthéon des mathématiciens, avaient un pourcentage d'énoncés vrais assez faible, de l'ordre de 50%, et que parmi les 50% vrais, ils n'en avaient démontré que 50% rigoureusement.
    Que ces chiffres soient vrais ou pas, peu importe, ils avaient fait leur effet.

    Aujourd'hui, pour soulager la mauvaise conscience des scientifiques qui programment, il semble nécessaire de rappeler que dans l'industrie aussi, la norme est au code sale, pas au code propre.
    Mon expérience personnelle est tout à fait en phase avec cet article (en anglais): http://www.theregister.co.uk/2012/12/21/financial_software_disasters/page2.html

    Morale de l'histoire: continuez de développer du mieux que vous le pouvez, mais ne faites aucun complexe ni, face aux programmeurs de l'industrie, ni face à un supposé Graal du code parfait.

    RépondreSupprimer
  4. Je ne pense pas que ce soit tellement une exagération dans la plupart des cas...

    RépondreSupprimer
  5. C'est gentil sinon d'essayer de ne rassurer, mais on aimerait penser qu'on est plus rigoureux que les traders. On est tout tristes de voir que ça n'est pas toujours le cas. :-(

    (Et peu importe, peu importe, ça serait bien de savoir si c'est correct cette histoire de matheux !)

    RépondreSupprimer
  6. J'étais de l'autre côté de la barrière, celle des créateurs de code qui DOIT être fiable, lisible, j'ai commencé par être développeur sur des systèmes critiques où une erreur peut conduire à la mise en danger d'humains. Donc un monde assez loin de celui qui écrit vite fait du code jetable.
    Cette question de publier ou non un code "moche" me fait sourire. La question n'est-elle pas : "moche ou pas, ce code peut-il être utile ou est-il même indispensable à la validité du résultat ? " Si la réponse est oui, alors peu importe sa forme, il doit être connu.
    Le gag c'est que l'on est moins scrupuleux sur le code des logiciels (notamment commerciaux) que nous utilisons. Quel est la fiabilité réelle de notre tableur, un bug serait-il responsable d'une subtile altération des résultats de cette montagne de données traitées avec ce soft de stats ?
    Si nous doutons de nous, doutons aussi des autres ;)

    RépondreSupprimer
  7. [...] En science on écrit beaucoup de code informatique. On écrit de gros programmes pour traiter plein de données (génomique, résultats du CERN), d'autres gros programmes pour simuler de gros modèles po...  [...]

    RépondreSupprimer
  8. [...] En science on écrit beaucoup de code informatique. On écrit de gros programmes pour traiter plein de données (génomique, résultats du CERN), d'autres gros programmes pour simuler de gros modèles po...  [...]

    RépondreSupprimer
  9. [...] En science on écrit beaucoup de code informatique. On écrit de gros programmes pour traiter plein de données (génomique, résultats du CERN), d'autres gros programmes pour simuler de gros modèles po...  [...]

    RépondreSupprimer
  10. Je suis physicien et je publie toutes les parties réutilisables de mon code sur sourceforge sous licence GPL. Je défini "réutilisable" d'une façon pratique: c'est tout ce que j'ai eu besoin de sauvegarder dans un fichier plutôt que de le taper en live dans ma console python. Ce sont donc des modules python et C++ et des scripts qui les utilise. J'essaye au maximum de tester tout ça (je ne le faisais pas au début, puis j'ai appris) et de le commenter pour que moi même je m'y retrouve.

    A quoi ça me sert ? En plus des raisons évoquées dans cet article, ça constitue une sauvegarde avec historique d'une partie importante de mon boulot. Ca me permet de bosser sur mon code depuis n'importe où et de le transmettre rapidement à mes collaborateurs (qui eux ne font qu'utiliser).

    Mais comme c'est une collection de fichiers plus qu'un package unifié, je doute que quiconque puisse s'y retrouver sans mon aide. Cyniquement, c'est bien pour ma carrière puisque ça évite qu'on me repompe. Mais d'un autre côté je complexe de faire référence à un truc inutilisable dans mes articles. Du coup, j'ai récemment oublié de le citer dans un article pourtant très méthodologique. Ca c'est moche et je m'en veux.

    https://colloids.svn.sourceforge.net/svnroot/colloids/trunc/

    RépondreSupprimer
  11. [...] En science on écrit beaucoup de code informatique. On écrit de gros programmes pour traiter plein de données (génomique, résultats du CERN), d'autres gros programmes pour simuler de gros modèles po...  [...]

    RépondreSupprimer
  12. [...] à coté de Microsoft, il y a Linux, il y a les programmeurs scientifiques, il y a les innovations de centaines de compagnies, de Apple et Google (qui ont aussi leurs [...]

    RépondreSupprimer
  13. Je suis développeur depuis 20 ans dans une grande entreprise parmi les leaders mondiaux du logiciel. Je pense que le code propre, ça n'existe pas. Les concepts de "lisibilité", "maintenabilité" ou "robustesse" du code sont des notions très floues, que tout le monde à l'impression de comprendre, à tort. Je pense que les scientifiques devraient publier un maximum de code, sans se préoccuper de "propreté".

    RépondreSupprimer