La question que l’on me pose le plus souvent concernant la bio-informatique est malheureusement celle qui conduit aux discussions les moins productives auxquelles j’ai participé :
Quel langage de programmation devrais-je utiliser en bio-informatique ?
Comprenez-moi bien, dans un pub autour d’une bière, cette discussion entre membres de l’intelligentsia nerd est des plus divertissantes… mais l’illumination survit rarement jusqu’au lendemain.
Ceci dit, j’aimerais partager ici la réponse que j’ai affinée au fil des ans. Elle est basée sur le développement de compétences dans trois langages, remplissant des rôles complémentaires et couvrant le spectre des tâches qu’un bio-informaticien peut s’attendre à rencontrer. Pour chacun des rôles, le langage optimal choisi peut changer avec le contexte spécifique d’application ou avec l’évolution du domaine.
- Un langage de haut niveau.
Il doit offrir un vaste ensemble de librairies spécifiques à votre domaine d’application. Il doit permettre de développer du code facilement, sans beaucoup de contraintes. On ne se concentre pas sur sa vitesse d’exécution ou sur son extensibilité. Ici, Python est généralement le langage le plus fréquemment recommandé. Perl est aussi une autre option! D’autres candidats intéressants seraient JavaScript, Julia, Ruby, Clojure… mais leur communauté restreinte en bio-informatique signifie que leur sélection doit être faite avec plus de précautions. - Un langage (ou plateforme) d’analyse.
Ce langage doit permettre un vaste ensemble d’analyses mathématiques et offrir des fonctionnalités graphiques bien développées. Il doit supporter la documentation, l’automatisation et la reproductibilité des étapes de l’analyse effectuée. Ici, R et matlab sont largement utilisés. Le choix de l’un versus l’autre dépend du champ d’application (R en génomique et en génétique, matlab en analyse d’images et étude de systèmes dynamiques). - Un langage de bas niveau, compilé.
Ici, la vitesse d’exécution et le contrôle précis de l’allocation des ressources sont les facteurs déterminants. Maîtriser un langage de bas niveau est optionnel, plusieurs bio-informaticiens ne rencontreront d’ailleurs jamais de problèmes requérant ce type de développement durant leur carrière. C/C++ serait aujourd’hui le standard de facto, mais Java, C#, swift et même Fortran pourraient être des choix judicieux dépendant du contexte d’application. Notez qu’une stratégie très efficace lorsque l’on développe un système informatique complexe est d’utiliser un langage de bas niveau pour construire des extensions pour un langage de plus haut niveau (role #1). On se concentre ainsi sur du développement de code de bas niveau seulement pour les parties plus exigeantes en mémoire ou en ressources du système.
Certains se plaindront qu’apprendre trois langages représente un investissement démesuré, mais l’alternative est de risquer d’être pris à implémenter un certain type de solution dans un langage inadéquat. J’ai été témoin de ceci à plusieurs reprises : un service web en R, un réseau de neurones en python « vanille » (pré-numpy) ou un parser de fichiers basés sur des expressions régulières en C++… Et ce qui est pire que tout, ce sont les opportunités manquées suite à l’abandon d’un projet ou d’une analyse dû à des limitations inhérentes au langage sélectionné.
Et, pour la minorité d’entre vous pour qui connaître trois langages semble bien peu, et bien… c’est à ça que servent les passe-temps!
Laisser un commentaire