Découverte :
Les langages de programmation

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

c/c++Le C est l'un des langages les plus utilisés par les programmeurs de part 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

logo-javaLe 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

logo pythonLe 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 au 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-in facilement.

Perl

Je vais passer assez rapidement sur le Perl non pas car il ne présent 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-logoR 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 aux 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.

Catégorie: Découverte | Tags: , , , , , , ,

9 commentaires sur “Les langages de programmation

  1. Très bon début pour bioinfo-fr avec un article très intéressant. Je pense que tu as bien résumé tous les languages de programmation principalement utilisés en bioinformatique.
    Personnellement, j'utilise beaucoup Python et R pour analyser des données de RNA-sequencing et j'en suis plus que ravi 🙂
    Longue vie à bioinfo-fr...

  2. Je te trouve un peu dur avec le C. La métaphore du couteau est bien trouvée mais pas tout à fait juste.

    Je pense qu'en C tu peux choisir le bois du couteau, le métal du couteau et comment tu l'assemble. Mais surtout tu dois prévoir quand tu en as besoin, pourquoi tu en as besoin et quand tu n'en as plus besoin. Il te faut donc réfléchir à ce que tu veux réellement faire de ton couteau.

    Ainsi, effectivement, si tu fais les mauvais choix, ça casse 😉

  3. Il s'agit d'un très bon article résumant parfaitement les langages utilisés en bioinformatique.
    Je tiens quand même à préciser qu'avec R, l'erreur à ne surtout pas faire, c'est d'utiliser des boucles for pour parcourir un tableau (et encore moins des boucles imbriquées). Préférez plutôt la vectorisation, comme la fonction which ;). C'est principalement ça qui fait que R est très lent quand on sort un peu de ses fonctions habituelles.
    Voilà, longue vie à la communauté bioinformatique!

    • La manipulation de R est très simple par contre c'est très long !Il faut on évidence implémenter des fonctions écrites avec d'autres langage tel que cpp. Il existe un package pour le faire le Rccp.
      La vitesse de calcul sera manifique.

  4. Bonjour.

    Cette discussion revient souvent, et il est vrai que le "meilleur" langage, ca n'a pas de sens, et ca depend de l'application.
    Concernant le C, la "necessite de tout gerer" n'est plus un probleme une fois que l'on a une bonne bibliotheque de fonctions. De toutes facons, le C est aux langages de programmation ce que l'anglais est aux langages parles: incontournable. Une raison a ca est qu'il permet de tout faire, hors contexte pages web.
    Le java est interessant pour l'enseignement (objets, classes, etc.), mais dans le prive il est a egalite avec le C et le C++ (ensemble, ces deux derniers sont loin devant), et il est inadapte a bon nombre d'applications (calcul numerique, programmation systeme).
    Le python est lui aussi inadapte a beaucoup d'applications, et je conteste son avantage pour les lectures/ecritures de fichiers, y compris dans le cas classique des lignes de texte lorsqu'on compare a fortran. Je ne suis pas d'accord avec l'argument "avantageux pour faire des choses simples comme 1+1": je comprendrais mieux l'argument inverse "avantageux pour faire des choses complexes".
    Ainsi, pour le calcul numerique, le fortran est incomparablement plus pratique, et tout comme le C, il permet de tout faire hors contexte pages web (ouf, les indices des tableaux fortran commencent a 1, mais on a le choix). La portabilite est excellente a condition de programmer proprement. Bien que le fortran ait perdu depuis longtemps sa place de leader, c'est le langage qui a survecu le plus longtemps (et il survit encore): plus d'un demi-siecle. Voir aussi, par comparaison avec le C: http://www.ibiblio.org/pub/languages/fortran/ch1-2.html .
    R ne permet pas de tout faire, mais est tres bon pour les graphiques.
    Je ne detaille pas tous les langages: on verra ceux qui existeront encore dans 20 ans, et si les codes ecrits aujourd'hui fonctionneront encore a ce moment la.
    Remarque: pas d'accents ni de cedilles dans mon texte; c'est sans doute une mauvaise habitude de ma part, mais elle a parfois des avantages.

    Michel Petitjean
    http://petitjeanmichel.free.fr/itoweb.petitjean.freeware.html

  5. A mon sens l'idée qui manque ici est celle de maintenabilité du code source. Je suis absolument horrifié de voir le nombre de logiciel qui sont recodé par chaque génération de postdoc, thésard, stagiaire ...
    Chaque laboratoire devrait développer une expertise forte sur une ou deux technologies en interne et les utiliser le plus systématiquement possible de manière à assurer la pérennité des outils développés.
    Idéalement on sélectionnerait une techno bas niveau pour coder les tâches demandant de grosse perf (genre C, C++ ou Go) qu'on interfacerait PROPREMENT (le premier qui fait un appel system je le bouffe) avec un langage de plus haut niveau (Java a ma préférence, mais pourquoi pas ruby ou python qui, par ailleurs, ont l'avantage de proposer de bons frameworks web - ROR et Django- ).

    Prétendre que le C est utilisé à part égale avec le Java dans l'industrie tient amha de la mauvaise comparaison, tant leurs usages (par l'industrie) divergent.

    C : écriture de driver, code haute performance, embarqué avec des problématiques de perf/sécu/ sur des projets de taille relativement faible, maintenance de code ancien ...

    Java : SOA (la bioinfo gagnerait à s'y intéresser), web, embarqué pour des projets suffisamment grands avec des ressources suffisantes ...

    ... Et puis en 2014 je pense que comparer des langage sans considérer les frameworks qui les utilisent c'est un peu une impasse : )

  6. Un élément qui n'est pas assez mis en avant pour le python : l'incroyable richesse de ses librairies (en particulier scientifiques). Utilisant les outils adaptés (Numpy par exemple), on retrouve des performance similaire au C en gardant une syntaxe claire et lisible. De plus, de nouveau outils (ou moins nouveaux) tels que numpyexpr, Cython, Numba, permettent de gagner en performance sans difficultés particulières.

    Ainsi, il est possible de retrouver les avantages du R en utilisant la bibliothèque Pandas (qui est très bien documentée en plus de cela), les expression régulières n'ont plus à envier le Perl depuis longtemps.

  7. Hello 🙂

    a choisir je prendrais plutot python ou ruby que R qui est très axé stats alors que les autres sont des langages de scripting plus tout terrain :p

Laisser un commentaire