Les langages de programmation

Bon­jour à tous et toutes, j'ai l'honneur d'écrire l'un des tout pre­miers articles du blog Bioin­fo-fr. Étant (presque) plus pas­sion­né par l'informatique que par la bio­lo­gie, je vais vous expli­quer l'un des outils les plus impor­tants pour un bio­in­for­ma­ti­cien : la pro­gram­ma­tion. En effet, il n'existerait pas de bio­in­for­ma­tique sans infor­ma­tique et donc sans pro­gram­ma­tion. Pour ceux qui ne le savent pas, la pro­gram­ma­tion c'est ce qui per­met de créer un pro­gramme.

Jusque là, rien de par­ti­cu­liè­re­ment exo­tique. Ce qui l'est davan­tage, c'est qu'il existe plu­sieurs lan­gages de pro­gram­ma­tion, cha­cun ayant ses qua­li­tés et ses défauts. Comme un lan­gage natu­rel, ils ont été étu­diés pour avoir une gram­maire et une syn­taxe par­ti­cu­lières. Et comme chaque lan­gage, il est pos­sible de dire la même chose, mais pas for­cé­ment de la même manière. Ain­si chaque lan­gage a été étu­dié pour une uti­li­té. Je vais vous détailler les prin­ci­paux lan­gages de pro­gram­ma­tion ain­si que l'utilité, les avan­tages et les défauts de cha­cun.

C

c/c++Le C est l'un des lan­gages les plus uti­li­sés par les pro­gram­meurs de part le monde. Et ce pour une rai­son par­ti­cu­lière : c'est l'un des lan­gages les plus rapides en exé­cu­tion. Pour ceux qui ne le savent pas, la plu­part des inter­pré­teurs d'autres lan­gages (logi­ciels qui lisent direc­te­ment les pro­grammes pour les exé­cu­ter) sont fait en C, du moins à la base. Mais cette rapi­di­té impose un avan­tage et un incon­vé­nient qui sont en fait la même chose : vous devez TOUT gérer.

Et là se pose un pro­blème : c'est très contrai­gnant de tout gérer. C'est comme pour un outil tel un cou­teau par exemple, tout gérer signi­fie que vous devriez extraire les matières pre­mières pour la fabri­ca­tion, le fabri­quer, l'utiliser puis ensuite le recy­cler de manière « propre ». Bref, c'est très astrei­gnant, mais vous savez com­ment tout fonc­tionne et vous pou­vez tout cali­brer pour que ça aille le plus vite pos­sible. Mais atten­tion, un seul grain de pous­sière et votre cou­teau cas­se­rait sur une simple motte de beurre. C'est pour­quoi beau­coup de monde trouve que c'est un lan­gage lourd, com­pli­qué et pas for­cé­ment utile. Mais c'est tout de même l'un des lan­gages les plus puis­sants.

Il est donc uti­li­sé quand de gros cal­culs sont à effec­tuer (de grosses banques de don­nées à com­pa­rer, comme avec BLAST, ou bien des dyna­miques molé­cu­laires à faire avec GROMACS par exemple). C'est aus­si le lan­gage qui se cache dans vos dif­fé­rents sys­tèmes d'exploitation.

Java

logo-javaLe Java est cer­tai­ne­ment le lan­gage le plus uti­li­sé dans les entre­prises pri­vées tout sim­ple­ment parce qu'il per­met, à par­tir du même code, d'être uti­li­sé sur n'importe quel ordi­na­teur ayant au préa­lable Java d'installé. Il existe en effet de nom­breuses dif­fé­rences entre les ordi­na­teurs sui­vant leurs sys­tèmes d'exploitation (GNU/​Linux, Win­dows, iOS …). Java a la par­ti­cu­la­ri­té d'avoir ce que l'on appelle une machine vir­tuelle qui lui per­met d'avoir une couche inter­mé­diaire entre les lignes de codes et le lan­gage ordi­na­teur.

Autre avan­tage par rap­port au C c'est qu'il gère lui même la créa­tion et la des­truc­tion des objets. Pas besoin de lui dire de détruire le cou­teau, il sait qu'il doit le faire. Mais il le fait… quand il le veut. Il ne s'amuse pas à recy­cler ses cou­teaux un par un, mais régu­liè­re­ment il fait des véri­fi­ca­tions pour savoir si cer­tains 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 aus­si rapide que le C.

Comme exemple de logi­ciel écrit en Java, il existe Arte­mis, un logi­ciel de ges­tion et d'annotation de génome. Les suites Open Office et Libre Office sont aus­si codées en Java, mais avec une couche de C++ (C « amé­lio­ré ») pour les fonc­tions deman­dant beau­coup de temps de cal­cul.

Python

logo pythonLe Python est plus uti­li­sé comme lan­gage de script et non comme lan­gage de pro­gram­ma­tion. Tout sim­ple­ment parce qu'il est bien plus lent que le C ou le Java (entre 10 et 100 fois plus lent). Sur un pro­gramme comme un édi­teur de texte, ça ne se res­sent abso­lu­ment pas, mais pour réa­li­ser des dyna­miques molé­cu­laires, qui durent plu­sieurs jours même en C… Il serait hors de ques­tion d'attendre plu­sieurs cen­taines de jours pour obte­nir le même résul­tat.

Mais alors quel est l'intérêt du Python ? Sa rapi­di­té d'écriture. Là où en C il fau­drait une dizaine de lignes pour affi­cher le résul­tat de 1+1, en Python une seule ligne suf­fit. Bref, c'est très simple à uti­li­ser, aus­si puis­sant que le C ou le Java, ça s'écrit très vite et, même si c'est un peu lent, ça suf­fit ample­ment pour faire des tâches auto­ma­ti­sées.

Autre avan­tage énorme par rap­port aux deux autres, c'est la lecture/​écriture de fichiers. Ces opé­ra­tions extrê­me­ment fas­ti­dieuses en temps nor­mal (lec­ture carac­tère par carac­tère) est sim­pli­fiée. Il devient donc très facile de lire un fichier for­ma­té, comme un fas­ta, ou un PDB. Il existe en plus de nom­breuses biblio­thèques (codes déjà écrits par d'autres et qui évite de réin­ven­ter la roue à chaque fois) pour gérer les don­nées bio­lo­giques, comme les fichiers PDB : Bio­Py­thon, l'une des biblio­thèques les plus au points. C'est pour ça qu'il est uti­li­sé pour faire des pro­grammes géné­ra­le­ment courts qui peuvent faci­le­ment être amé­lio­rés.

Mais il peut être uti­li­sé pour faire de beaux et puis­sants pro­grammes : PyMOL par exemple uti­lise de nom­breux scripts Python (d'où le Py) pour lire les fichiers PDB ou pour ajou­ter des plug-in faci­le­ment.

Perl

Je vais pas­ser assez rapi­de­ment 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 uti­li­tés et les mêmes carac­té­ris­tiques que le Python.

Sa syn­taxe est (très) dif­fé­rente et la phi­lo­so­phie un peu plus axée sur les expres­sions régu­lières, ser­vant elles aus­si à lire un fichier ou toute autre infor­ma­tion appor­tée au pro­gramme. Il existe une « guerre » entre les uti­li­sa­teurs de Python et de Perl, cha­cun ayant ses pré­fé­rences. Mais la prin­ci­pale dif­fé­rence est juste une ques­tion d'habitude, Python étant tout de même plus faci­le­ment lisible que Perl pour les non ini­tiés.

Pour un exemple de pro­gram­ma­tion en Perl, Auré­lien C. devrait bien­tôt pré­sen­ter un script écrit en Perl.

R

r-logoR n'est pas vrai­ment un lan­gage de pro­gram­ma­tion, mais est très uti­li­sé en bio­in­for­ma­tique. R est en réa­li­té un pro­gramme écrit en C qui per­met de faire de grosses, très grosses sta­tis­tiques très sim­ple­ment. Il est déjà tout prêt à être uti­li­sé et a des com­mandes simples et intui­tives… pour quelqu'un qui ne pro­gramme pas.

C'est l'un de ses deux incon­vé­nients : quand on est habi­tué à uti­li­ser la pro­gram­ma­tion, cer­tains aspects de R semblent absurdes. Second incon­vé­nient, si on uti­lise R en dehors des boites à outils déjà faites pour nous, il devient très, très lent ! Il per­met par contre de faire de jolies gra­phiques très rapi­de­ment (géné­ra­le­ment ceux pré­sents dans les publi­ca­tions scien­ti­fiques sont créés sous R, par­fois un peu retou­chés à la main par la suite).

Conclusion

Je vous ai pré­sen­té les dif­fé­rents lan­gages dans un ordre pré­cis. Du lan­gage le plus bas niveau vers le plus haut niveau (Perl et Python sont à éga­li­té de ce côté-là). D'une manière géné­rale, plus un lan­gage est « bas niveau » plus il faut se rap­pro­cher du lan­gage de l'ordinateur (le binaire), mais de manière lisible pour un être humain tout de même. Au contraire plus le lan­gage est « haut niveau » plus il se rap­proche du lan­gage humain.

Un lan­gage de bas niveau sera donc plus com­plexe à com­prendre et à réa­li­ser, mais sera plus rapide, car plus proche de la machine. Au contraire, un lan­gage de haut niveau sera plus faci­le­ment com­pré­hen­sible et plus souple, mais aura besoin d'un inter­pré­teur pour que l'ordinateur com­prenne, ce qui prend plus de temps.
Voi­là pour les 5 prin­ci­paux lan­gages de pro­gram­ma­tion uti­li­sés par les infor­ma­ti­ciens et donc les bio­in­for­ma­ti­ciens. Il en existe bien d'autres (For­tran, Ruby, Bash, C++, etc.) mais je ne vais pas tous les détailler, cha­cun ayant ses qua­li­tés et défauts. L'essentiel est de savoir lequel uti­li­ser en fonc­tion de ses besoins, de ses pré­fé­rences et de ses habi­tudes.

Encore un détail : les lan­gages ne sont pas cou­pés les uns des autres. Il est ain­si tout à fait pos­sible d'utiliser du Python pour lire un fichier dont le conte­nu sera envoyé à un pro­gramme en C et dont les résul­tats seront affi­chés sur une page web grâce à du Perl. Une fois plu­sieurs lan­gages maî­tri­sés, il suf­fit de bien savoir les com­bi­ner. Des lan­gages inter­mé­diaires per­met­tant de pro­fi­ter aux maxi­mum des avan­tages de chaque lan­gage existent aus­si tels Jython, Cython ou encore Pyrex.

Pour ceux qui sou­hai­te­raient plus de détails, un com­pa­ra­tif des per­for­mances des lan­gages pré­sen­tés est dis­po­nible. Enfin, vous pou­vez trou­ver d'autres infor­ma­tions (en anglais) dans ce papier expli­quant les dif­fé­rentes figures.



Pour continuer la lecture :


Commentaires

9 réponses à “Les langages de programmation”

  1. Très bon début pour bioin­fo-fr avec un article très inté­res­sant. Je pense que tu as bien résu­mé tous les lan­guages de pro­gram­ma­tion prin­ci­pa­le­ment uti­li­sés en bio­in­for­ma­tique.
    Per­son­nel­le­ment, j'utilise beau­coup Python et R pour ana­ly­ser des don­nées de RNA-sequen­cing et j'en suis plus que ravi 🙂
    Longue vie à bioin­fo-fr…

  2. Avatar de Bilouweb
    Bilouweb

    Je te trouve un peu dur avec le C. La méta­phore du cou­teau est bien trou­vée mais pas tout à fait juste.

    Je pense qu'en C tu peux choi­sir le bois du cou­teau, le métal du cou­teau et com­ment tu l'assemble. Mais sur­tout tu dois pré­voir quand tu en as besoin, pour­quoi tu en as besoin et quand tu n'en as plus besoin. Il te faut donc réflé­chir à ce que tu veux réel­le­ment faire de ton cou­teau.

    Ain­si, effec­ti­ve­ment, si tu fais les mau­vais choix, ça casse 😉

  3. Avatar de Emmanuel C
    Emmanuel C

    Il s'agit d'un très bon article résu­mant par­fai­te­ment les lan­gages uti­li­sés en bio­in­for­ma­tique.
    Je tiens quand même à pré­ci­ser qu'avec R, l'erreur à ne sur­tout pas faire, c'est d'utiliser des boucles for pour par­cou­rir un tableau (et encore moins des boucles imbri­quées). Pré­fé­rez plu­tôt la vec­to­ri­sa­tion, comme la fonc­tion which ;). C'est prin­ci­pa­le­ment ça qui fait que R est très lent quand on sort un peu de ses fonc­tions habi­tuelles.
    Voi­là, longue vie à la com­mu­nau­té bio­in­for­ma­tique !

    1. Avatar de Macherki.m.e
      Macherki.m.e

      La mani­pu­la­tion de R est très simple par contre c'est très long !Il faut on évi­dence implé­men­ter des fonc­tions écrites avec d'autres lan­gage tel que cpp. Il existe un package pour le faire le Rccp.
      La vitesse de cal­cul sera mani­fique.

  4. Bon­jour.

    Cette dis­cus­sion revient sou­vent, et il est vrai que le "meilleur" lan­gage, ca n'a pas de sens, et ca depend de l'application.
    Concer­nant le C, la "neces­site de tout gerer" n'est plus un pro­bleme une fois que l'on a une bonne biblio­theque de fonc­tions. De toutes facons, le C est aux lan­gages de pro­gram­ma­tion ce que l'anglais est aux lan­gages parles : incon­tour­nable. Une rai­son a ca est qu'il per­met de tout faire, hors contexte pages web.
    Le java est inter­es­sant pour l'enseignement (objets, classes, etc.), mais dans le prive il est a ega­lite avec le C et le C++ (ensemble, ces deux der­niers sont loin devant), et il est inadapte a bon nombre d'applications (cal­cul nume­rique, pro­gram­ma­tion sys­teme).
    Le python est lui aus­si inadapte a beau­coup d'applications, et je conteste son avan­tage pour les lectures/​ecritures de fichiers, y com­pris dans le cas clas­sique des lignes de texte lorsqu'on com­pare a for­tran. Je ne suis pas d'accord avec l'argument "avan­ta­geux pour faire des choses simples comme 1+1": je com­pren­drais mieux l'argument inverse "avan­ta­geux pour faire des choses com­plexes".
    Ain­si, pour le cal­cul nume­rique, le for­tran est incom­pa­ra­ble­ment plus pra­tique, et tout comme le C, il per­met de tout faire hors contexte pages web (ouf, les indices des tableaux for­tran com­mencent a 1, mais on a le choix). La por­ta­bi­lite est excel­lente a condi­tion de pro­gram­mer pro­pre­ment. Bien que le for­tran ait per­du depuis long­temps sa place de lea­der, c'est le lan­gage qui a sur­ve­cu le plus long­temps (et il sur­vit encore): plus d'un demi-siecle. Voir aus­si, par com­pa­rai­son avec le C : http://www.ibiblio.org/pub/languages/fortran/ch1‑2.html .
    R ne per­met pas de tout faire, mais est tres bon pour les gra­phiques.
    Je ne detaille pas tous les lan­gages : on ver­ra ceux qui exis­te­ront encore dans 20 ans, et si les codes ecrits aujourd'hui fonc­tion­ne­ront encore a ce moment la.
    Remarque : pas d'accents ni de cedilles dans mon texte ; c'est sans doute une mau­vaise habi­tude de ma part, mais elle a par­fois des avan­tages.

    Michel Petit­jean
    http://​petit​jean​mi​chel​.free​.fr/​i​t​o​w​e​b​.​p​e​t​i​t​j​e​a​n​.​f​r​e​e​w​a​r​e​.​h​tml

  5. Avatar de EVillain
    EVillain

    A mon sens l'idée qui manque ici est celle de main­te­na­bi­li­té du code source. Je suis abso­lu­ment hor­ri­fié de voir le nombre de logi­ciel qui sont reco­dé par chaque géné­ra­tion de post­doc, thé­sard, sta­giaire …
    Chaque labo­ra­toire devrait déve­lop­per une exper­tise forte sur une ou deux tech­no­lo­gies en interne et les uti­li­ser le plus sys­té­ma­ti­que­ment pos­sible de manière à assu­rer la péren­ni­té des outils déve­lop­pés.
    Idéa­le­ment on sélec­tion­ne­rait une tech­no bas niveau pour coder les tâches deman­dant de grosse perf (genre C, C++ ou Go) qu'on inter­fa­ce­rait PROPREMENT (le pre­mier qui fait un appel sys­tem je le bouffe) avec un lan­gage de plus haut niveau (Java a ma pré­fé­rence, mais pour­quoi pas ruby ou python qui, par ailleurs, ont l'avantage de pro­po­ser de bons fra­me­works web — ROR et Djan­go- ).

    Pré­tendre que le C est uti­li­sé à part égale avec le Java dans l'industrie tient amha de la mau­vaise com­pa­rai­son, tant leurs usages (par l'industrie) divergent.

    C : écri­ture de dri­ver, code haute per­for­mance, embar­qué avec des pro­blé­ma­tiques de perf/​sécu/​ sur des pro­jets de taille rela­ti­ve­ment faible, main­te­nance de code ancien …

    Java : SOA (la bioin­fo gagne­rait à s'y inté­res­ser), web, embar­qué pour des pro­jets suf­fi­sam­ment grands avec des res­sources suf­fi­santes …

    … Et puis en 2014 je pense que com­pa­rer des lan­gage sans consi­dé­rer les fra­me­works qui les uti­lisent 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 librai­ries (en par­ti­cu­lier scien­ti­fiques). Uti­li­sant les outils adap­tés (Num­py par exemple), on retrouve des per­for­mance simi­laire au C en gar­dant une syn­taxe claire et lisible. De plus, de nou­veau outils (ou moins nou­veaux) tels que num­pyex­pr, Cython, Num­ba, per­mettent de gagner en per­for­mance sans dif­fi­cul­tés par­ti­cu­lières.

    Ain­si, il est pos­sible de retrou­ver les avan­tages du R en uti­li­sant la biblio­thèque Pan­das (qui est très bien docu­men­tée en plus de cela), les expres­sion régu­lières n'ont plus à envier le Perl depuis long­temps.

    1. Avatar de Yoann M.
      Yoann M.

      Salut Pois­son,

      En effet dans cet article ces notions n'étaient pas abor­dées. Mais depuis de l'eau a cou­lé sous le pont du blog. Je t'invite donc à lire cet article sur Cython (http://​bioin​fo​-fr​.net/​c​y​t​h​o​n​-​v​o​t​r​e​-​p​r​o​g​r​a​m​m​e​-​p​y​t​h​o​n​-​m​a​i​s​-​1​0​0​x​-​p​l​u​s​-​v​ite), cet article sur Julia (http://bioinfo-fr.net/julia-le-successeur-de‑r) et cet article sur Num­ba (http://​bioin​fo​-fr​.net/​p​y​t​h​o​n​-​f​a​i​t​-​l​a​-​n​u​mba).
      Pour les biblio­thèques, nous avons éga­le­ment par­lé de Bio­Py­thon (http://​bioin​fo​-fr​.net/​a​s​t​u​c​e​-​p​r​o​g​r​a​m​m​a​t​i​o​n​-​b​i​o​p​y​t​h​o​n​-​p​a​r​s​e​r​-​l​e​s​-​m​u​l​t​i​-​g​e​n​b​a​n​k​-​e​t​-​l​e​s​-​m​u​l​t​i​-​f​a​s​t​a​-​p​r​o​d​u​i​t​s​-​p​a​r​-​b​a​t​c​h​-​e​n​t​rez et http://​bioin​fo​-fr​.net/​a​u​t​o​m​a​t​i​s​e​r​-​l​e​-​p​a​r​c​o​u​r​s​-​e​t​-​l​a​-​m​a​n​i​p​u​l​a​t​i​o​n​-​d​a​r​b​r​e​s​-​p​h​y​l​o​g​e​n​e​t​i​q​u​e​s​-​a​v​e​c​-​l​e​-​m​o​d​u​l​e​-​b​i​o​-​p​h​y​l​o​-​d​e​-​b​i​o​p​y​t​hon) ou encore Bio­ser­vices (http://​bioin​fo​-fr​.net/​b​i​o​s​e​r​v​i​c​e​s​-​m​o​d​u​l​e​-​p​y​t​hon). Et bien­sur, nous conti­nue­rons à aller dans ce sens. Si tu as d'autres idées, ou même mieux : si tu sou­haites t'impliquer dans la créa­tion de nou­veaux articles, n'hésites pas à nous contac­ter 🙂
      Mer­ci pour ton com­men­taire en tout cas !

  7. Hel­lo 🙂

    a choi­sir je pren­drais plu­tot python ou ruby que R qui est très axé stats alors que les autres sont des lan­gages de scrip­ting plus tout ter­rain :p

Laisser un commentaire