, MAP5, Univ. Paris-Descartes et CNRS UMR 8145
Vendredi 13 mai 2016
Excel
!), ainsi que leurs codes.En 1992, Jon Claerbout et Martin Karrenbach dans une communication au congrès de la Society of Exploration Geophysics écrivent :
A revolution in education and technology transfer follows from the marriage of word processing and software command scripts. In this marriage an author attaches to every figure caption a pushbutton or a name tag usable to recalculate the figure from all its data, parameters, and programs. This provides a concrete definition of reproducibility in computationally oriented research. Experience at the Stanford Exploration Project shows that preparing such electronic documents is little effort beyond our customary report writing; mainly, we need to file everything in a systematic way.
Communication dont la « substantifique mœlle » sera extraite par Buckheit et Donoho (1995) qui écriront :
An article about computational science in a scientific publication is not the scholarship itself, it is merely advertising of the scholarship. The actual scholarship is the complete software development environment and the complete set of instructions which generated the figures.
Les géophysiciens du SEP effectuent l'analyse de gros jeux de données ainsi que des simulations de modèles géophysiques « compliqués » (basés sur des EDPs) ; ainsi :
ratfor
(une variante du fortran
) et le C
;Cake
, une variante de Make
;.tex
.Le SEP a depuis développé Madagascar, un outil puissant et « flexible », orienté vers la géophysique et dont le moteur de production est SCons -- lui même basé sur Python
.
.tex
) dans la boucle n'est alors pas un gros problème ;Python
ou la JVM
(avec Clojure
) vous satisfont, courez découvrir le concept d'ActivePapers vous n'aurez plus à vous « embêter » avec un moteur de production, ni avec une arborisation de fichiers !Lorsqu'en 1976, Donald Knuth reçoit les épreuves de la seconde édition du second volume de son opus magnum (The Art of Computer Programming), il est horrifié par leur (très) basse qualité typographique ; il décide donc :
WEB
, un logiciel qui permet de la mettre en œuvre.Avec la programmation lettrée, le code et sa documentation sont « mélangés » -- afin de rendre le code facilement compréhensible par un humain, par opposition à un compilateur -- dans un même fichier ASCII
(ou maintenant UTF8
). Deux sorties peuvent être produite :
.tex
qui donnera la documentation imprimable Weave
;.c
(à l'origine, c'était du Pascal
) qui sera compilé Tangle
.« Je crois que le temps est venu pour une amélioration significative de la documentation des programmes, et que le meilleur moyen d'y arriver est de considérer les programmes comme des œuvres littéraires. D'où mon titre, " programmation lettrée ".
Nous devons changer notre attitude traditionnelle envers la construction des programmes : au lieu de considérer que notre tâche principale est de dire à un ordinateur ce qu'il doit faire, appliquons-nous plutôt à expliquer à des êtres humains ce que nous voulons que l'ordinateur fasse.
Le praticien de programmation lettrée peut être vu comme un essayiste, qui s'attache principalement à l'exposition du sujet et à l'excellence du style. Un tel auteur, le dictionnaire à la main, choisit avec soin les noms de ses variables et explique la signification de chacune. Il cherche à obtenir un programme qui est compréhensible parce que les concepts ont été présentés dans le meilleur ordre pour la compréhension humaine, en utilisant un mélange de méthodes formelles et informelles qui se complètent l'une l'autre. »
— Donald Knuth, Literate Programming (source traduction Wikipédia)
R
et sa fonction Sweave
R
est un langage distribué sous licence GPL, décrit de la façon suivante sur la page des FAQ :
R is a system for statistical computation and graphics. It consists of a language plus a run-time environment with graphics, a debugger, access to certain system functions, and the ability to run programs stored in script files.
Pour les programmeurs, R
s'inspire du scheme mais à une syntaxe type C
:
2+2
;(+ 2 2)
.Sweave
Sweave
est une fonction de R
;Sweave
traite des fichiers « text » qui mélangent du texte écrit en ou HTML
et du code R
;Sweave
copie la partie textuelle telle quelle dans un nouveau fichier, exécute le code R
et place le résultat (tableau, figure) dans le nouveau fichier ;Sweave
est proche de celle d'un fichier noweb.Avec Sweave, on remplace les figures et les tableaux d'un article par le code qui les génère.
Un morceau de fichier Sweave
ressemble à :
\subsection{Résumé des données}
Le \textit{résumé à 5 nombres} du jeu de données
$\alpha$ est :
<<resume-jeu-alpha>>=
summary(α)
@
On voit qu'\textbf{aucune saturation ne semble
présente}...
Le vrai lien entre Sweave
est la programmation lettrée est la syntaxe commune délimitant les blocs de codes dans le fichier source :
<<nom-du-bloc>>=
;@
.R
et (ou HTML
) ;PDF
) à un autre (HTML
) doit se faire avec des outils externes comme TeX4ht ;Un point « faible » des approches précédentes, la nécessité d'écrire en ou HTML
, a maintenant disparu avec le développement de langages de balisage léger comme :
Markdown
(utilisé pour préparer cette présentation) ;reStructuredText
;Org mode
;Avec le logiciel pandoc, développé par le philosophe John MacFarlane, il est possible de passer quasi instantanément de l'un à l'autre et, grâce à l'extension pandoc de Markdown, un débutant avec une heure de pratique peut générer un fichier qui ferait envie à un expert.
Pour les utilisateurs de R
, la syntaxe Markdown
est utilisable grâce au paquet R Markdown
, alors que les utilisateurs de Python
peuvent employer Pweave
ou le « carnet de notes » (notebook) IPython.
R Markdown
)L'exemple précédent avec R Markdown
devient :
## Résumé des données
Le _résumé à 5 nombres_ du jeu de données α est :
```{r}
summary(α)
```
On voit qu'__aucune saturation ne semble présente__...
Pour comparaison, la version précédente :
\subsection{Résumé des données}
Le \textit{résumé à 5 nombres} du jeu de données
$\alpha$ est :
<<resume-jeu-alpha>>=
summary(α)
@
On voit qu'\textbf{aucune saturation ne semble
présente}...
Les solutions suivantes permettent toutes à quiconque maîtrise déjà R
, Python
, Julia
, d'être productif rapidement dans le cadre d'un travail « exploratoire » ou interactif :
R
et (un peu) avec Python
(avec un bon support d'édition) ;Python
2 mais avec R
, Maxima
et une centaine de bibliothèques scientifiques « sous le capot » est certainement la solution la plus complète à ce jour.Un inconvénient : ces approches sont « orientées script » et pas vraiment destinées à développer du code (même sans aller jusqu'à la programmation lettrée).
Le mode Org
de l'éditeur GNU emacs
combine les avantages de SageMath
et la possibilité de faire de la programmation lettrée ; son seul inconvénient : il faut apprendre emacs
...
Le chercheur qui travaille sur des données expérimentales (par opposition à des simulations) risque tôt ou tard d'avoir un problème lié à la recherche reproductible : comment rendre de gros jeux de données accessibles / téléchargeables par quiconque ? Heureusement, de nombreux dépôts publiques (et gratuits) sont apparus ces 5 dernières années :
Madagascar
.CNRS
, qui me permet de m'embêter à rendre mon travail reproductible même si personne ne me le demande ;