Bonjour à tous et toutes, j'ai l'honneur d'écrire l'un des tout premiers articles du blog Bioinfo-fr. Étant (presque) plus passionné par l'informatique que par la biologie, je vais vous expliquer l'un des outils les plus importants pour un bioinformaticien : la programmation. En effet, il n'existerait pas de bioinformatique sans informatique et donc sans programmation. Pour ceux qui ne le savent pas, la programmation, c'est ce qui permet de créer un programme.
Jusque-là, rien de particulièrement exotique. Ce qui l'est davantage, c'est qu'il existe plusieurs langages de programmation, chacun ayant ses qualités et ses défauts. Comme un langage naturel, ils ont été étudiés pour avoir une grammaire et une syntaxe particulières. Et comme chaque langage, il est possible de dire la même chose, mais pas forcément de la même manière. Ainsi, chaque langage a été étudié pour une utilité. Je vais vous détailler les principaux langages de programmation ainsi que l'utilité, les avantages et les défauts de chacun.
C
Le C est l'un des langages les plus utilisés par les programmeurs de par le monde. Et ce pour une raison particulière : c'est l'un des langages les plus rapides en exécution. Pour ceux qui ne le savent pas, la plupart des interpréteurs d'autres langages (logiciels qui lisent directement les programmes pour les exécuter) sont fait en C, du moins à la base. Mais cette rapidité impose un avantage et un inconvénient qui sont en fait la même chose : vous devez TOUT gérer.
Et là se pose un problème : c'est très contraignant de tout gérer. C'est comme pour un outil tel un couteau par exemple, tout gérer signifie que vous devriez extraire les matières premières pour la fabrication, le fabriquer, l'utiliser puis ensuite le recycler de manière « propre ». Bref, c'est très astreignant, mais vous savez comment tout fonctionne et vous pouvez tout calibrer pour que ça aille le plus vite possible. Mais attention, un seul grain de poussière et votre couteau casserait sur une simple motte de beurre. C'est pourquoi beaucoup de monde trouve que c'est un langage lourd, compliqué et pas forcément utile. Mais c'est tout de même l'un des langages les plus puissants.
Il est donc utilisé quand de gros calculs sont à effectuer (de grosses banques de données à comparer, comme avec BLAST, ou bien des dynamiques moléculaires à faire avec GROMACS par exemple). C'est aussi le langage qui se cache dans vos différents systèmes d'exploitation.
Java
Le Java est certainement le langage le plus utilisé dans les entreprises privées tout simplement parce qu'il permet, à partir du même code, d'être utilisé sur n'importe quel ordinateur ayant au préalable Java d'installé. Il existe en effet de nombreuses différences entre les ordinateurs suivant leurs systèmes d'exploitation (GNU/Linux, Windows, iOS …). Java a la particularité d'avoir ce que l'on appelle une machine virtuelle qui lui permet d'avoir une couche intermédiaire entre les lignes de codes et le langage ordinateur.
Autre avantage par rapport au C, c'est qu'il gère lui-même la création et la destruction des objets. Pas besoin de lui dire de détruire le couteau, il sait qu'il doit le faire. Mais il le fait… quand il le veut. Il ne s'amuse pas à recycler ses couteaux un par un, mais régulièrement il fait des vérifications pour savoir si certains ne sont pas inutiles, et au besoin les recycle tous d'un coup. Ceci peut prendre un peu de temps. En dehors de ces légers temps de latences, le Java est presque aussi rapide que le C.
Comme exemple de logiciel écrit en Java, il existe Artemis, un logiciel de gestion et d'annotation de génome. Les suites Open Office et Libre Office sont aussi codées en Java, mais avec une couche de C++ (C « amélioré ») pour les fonctions demandant beaucoup de temps de calcul.
Python
Le Python est plus utilisé comme langage de script et non comme langage de programmation. Tout simplement parce qu'il est bien plus lent que le C ou le Java (entre 10 et 100 fois plus lent). Sur un programme comme un éditeur de texte, ça ne se ressent absolument pas, mais pour réaliser des dynamiques moléculaires, qui durent plusieurs jours, même en C… Il serait hors de question d'attendre plusieurs centaines de jours pour obtenir le même résultat.
Mais alors quel est l'intérêt du Python ? Sa rapidité d'écriture. Là où en C il faudrait une dizaine de lignes pour afficher le résultat de 1+1, en Python une seule ligne suffit. Bref, c'est très simple à utiliser, aussi puissant que le C ou le Java, ça s'écrit très vite et, même si c'est un peu lent, ça suffit amplement pour faire des tâches automatisées.
Autre avantage énorme par rapport aux deux autres, c'est la lecture/écriture de fichiers. Ces opérations extrêmement fastidieuses en temps normal (lecture caractère par caractère) est simplifiée. Il devient donc très facile de lire un fichier formaté, comme un fasta, ou un PDB. Il existe en plus de nombreuses bibliothèques (codes déjà écrits par d'autres et qui évite de réinventer la roue à chaque fois) pour gérer les données biologiques, comme les fichiers PDB : BioPython, l'une des bibliothèques les plus aux points. C'est pour ça qu'il est utilisé pour faire des programmes généralement courts qui peuvent facilement être améliorés.
Mais il peut être utilisé pour faire de beaux et puissants programmes : PyMOL par exemple utilise de nombreux scripts Python (d'où le Py) pour lire les fichiers PDB ou pour ajouter des plug-ins facilement.
Perl
Je vais passer assez rapidement sur le Perl non pas car il ne présente aucun intérêt, mais parce qu'il a à peu près les mêmes utilités et les mêmes caractéristiques que le Python.
Sa syntaxe est (très) différente et la philosophie un peu plus axée sur les expressions régulières, servant, elles aussi, à lire un fichier ou toute autre information apportée au programme. Il existe une « guerre » entre les utilisateurs de Python et de Perl, chacun ayant ses préférences. Mais la principale différence est juste une question d'habitude, Python étant tout de même plus facilement lisible que Perl pour les non-initiés.
Pour un exemple de programmation en Perl, Aurélien C. devrait bientôt présenter un script écrit en Perl.
R
R n'est pas vraiment un langage de programmation, mais est très utilisé en bioinformatique. R est en réalité un programme écrit en C qui permet de faire de grosses, très grosses statistiques très simplement. Il est déjà tout prêt à être utilisé et a des commandes simples et intuitives… pour quelqu'un qui ne programme pas.
C'est l'un de ses deux inconvénients : quand on est habitué à utiliser la programmation, certains aspects de R semblent absurdes. Second inconvénient, si on utilise R en dehors des boites à outils déjà faites pour nous, il devient très, très lent ! Il permet par contre de faire de jolies graphiques très rapidement (généralement ceux présents dans les publications scientifiques sont créés sous R, parfois un peu retouchés à la main par la suite).
Conclusion
Je vous ai présenté les différents langages dans un ordre précis. Du langage le plus bas niveau vers le plus haut niveau (Perl et Python sont à égalité de ce côté-là). D'une manière générale, plus un langage est « bas niveau » plus il faut se rapprocher du langage de l'ordinateur (le binaire), mais de manière lisible pour un être humain tout de même. Au contraire, plus le langage est « haut niveau » plus il se rapproche du langage humain.
Un langage de bas niveau sera donc plus complexe à comprendre et à réaliser, mais sera plus rapide, car plus proche de la machine. Au contraire, un langage de haut niveau sera plus facilement compréhensible et plus souple, mais aura besoin d'un interpréteur pour que l'ordinateur comprenne, ce qui prend plus de temps.
Voilà pour les 5 principaux langages de programmation utilisés par les informaticiens et donc les bioinformaticiens. Il en existe bien d'autres (Fortran, Ruby, Bash, C++, etc.) mais je ne vais pas tous les détailler, chacun ayant ses qualités et défauts. L'essentiel est de savoir lequel utiliser en fonction de ses besoins, de ses préférences et de ses habitudes.
Encore un détail : les langages ne sont pas coupés les uns des autres. Il est ainsi tout à fait possible d'utiliser du Python pour lire un fichier dont le contenu sera envoyé à un programme en C et dont les résultats seront affichés sur une page web grâce à du Perl. Une fois plusieurs langages maîtrisés, il suffit de bien savoir les combiner. Des langages intermédiaires permettant de profiter au maximum des avantages de chaque langage existent aussi tels Jython, Cython ou encore Pyrex.
Pour ceux qui souhaiteraient plus de détails, un comparatif des performances des langages présentés est disponible. Enfin, vous pouvez trouver d'autres informations (en anglais) dans ce papier expliquant les différentes figures.
Laisser un commentaire