"Avec Go, on est rapidement très productif sans pour autant négliger les performances"

 

Interview de Benjamin Coenen, développeur fullstack chez OVH.
[15/12/2018]

 

 

 


Benjamin Coenen en train de donner un talkBonjour Benjamin, pourriez-vous vous présenter en quelques mots ?

Bonjour, je suis Benjamin Coenen, 26 ans, d'origine belge. J'ai réalisé la première partie de mes études plus orientée vers l'informatique industrielle et l’électronique numérique. J'ai continué ensuite mon cursus en alternance à l'université de Lille en master Informatique spécialisation génie logiciel. J'ai fait mon alternance au sein de la société OVH, qui est un des plus importants cloud provider en Europe. Aujourd'hui j'ai terminé mon alternance depuis un moment et je suis toujours chez OVH, où j'ai l'immense chance de travailler sur un projet CI/CD totalement open-source.

J'ai commencé à faire de l'informatique en faisant principalement du C et de l'assembleur, j'ai ensuite migré vers du NodeJS et maintenant depuis plus d'un an je fais principalement du Go. Selon moi, il est essentiel de savoir ce qu'il y a sous le capot quand on utilise des technologies et langages. C'est pour cela que j'ai beaucoup d'affinités avec les problématiques de performances, ça permet de plonger un peu plus dans les détails et de comprendre comment optimiser nos systèmes. C'est pour cela aussi que régulièrement je donne des talks dans diverses conférences, ça me permet de partager mes recherches et de rencontrer des personnes passionnées.


Dans quel contexte utilisez-vous Go chez OVH ?

Le Go est un langage qui a été largement et rapidement adopté chez OVH. Je travaille au sein de l'équipe Continuous Delivery qui est en charge de la gestion et mise en place du Continuous Delivery/Integration pour les équipes d'OVH. Cela ne veut pas dire que ce sera nous qui coderons les plans de build, tests et déploiements des différentes équipes. Nous sommes plutôt chargés de fournir des outils pour leur faciliter la tâche et faire en sorte que le Continuous Delivery ne soit pas un frein pour eux dans leurs projets respectifs. Après plusieurs itérations et plusieurs tests avec différents outils de CI/CD, nous avons décidé il y a 2 ans et demi déjà de développer notre propre outil qui s'appelle CDS et qui est disponible sur GitHub. Et justement cet outil est en grande partie développé en Go. C'est ce qui nous occupe la plupart du temps au quotidien.


Variante du gopher de Renée French avec des ballonsPourquoi Go a-t-il été choisi ? Quelles étaient les alternatives ?

Nous étions assez libres concernant les technologies à utiliser. Historiquement une bonne partie de l'équipe faisait du Java. Pour ma part je n'ai pas particulièrement d'affinités avec ce langage. Go a été choisi pour ses performances et sa simplicité principalement. Le langage malgré son jeune âge était très production ready. Le fait que des gros projets comme Docker ait misé dessus a aidé dans la décision. Avec Go, on est rapidement très productif sans pour autant négliger les performances. Les outils de Go pour mesurer ce qu'on code, pour l'améliorer, et le fait que l'on puisse faire de la cross-compilation a énormément joué en faveur de son adoption. Pour déployer nos binaires et les compiler, grâce à la cross-compilation, nous pouvons compiler pour chaque système d'exploitation et architecture depuis une seule machine.


Go répond-il aux attentes ? Quelles difficultés rencontrez-vous ?

Go a très bien répondu à nos attentes. Pour les cas où nous avons eu des soucis de performances, nous avons pu rapidement mesurer et trouver où était le souci grâce aux outils directement fournis par Go. Le fait que maintenant dans les technologies cloud récentes le Go soit bien adopté nous a confortés dans notre choix. Par exemple, nous utilisons aussi des projets comme Docker ou Kubernetes ; l'avantage d'utiliser du Go c'est que nous bénéficions directement du SDK développé par leurs équipes puisque la plupart de leurs codebases est en Go.

Les difficultés qu'on a rencontrées avec ce langage sont surtout liées à la gestion des dépendances en Go. Mais la team Go a conscience du problème et travaille dans ce sens.

 

"Je me sens très productif avec go,
tout en restant confiant sur la qualité de mon code"


Développiez-vous déjà en Go avant ce projet chez OVH ? Si oui, sur quels types de projets ?

Oui bien sûr, j'ai développé sur mon temps libre un projet qui s'appelle Talk to my car qui permet de rendre sa voiture intelligente et de pouvoir lui parler. Dis comme ça cela peut sembler bizarre mais concrètement c'est grâce à un boîtier que l'on connecte sur la prise diagnostique du véhicule pour récupérer ses données. Et moi j'ai développé le système par dessus, en Go. Il s'agit en fait d'un chatbot sur Facebook Messenger, Slack ou alors vocal qui va rechercher les informations du véhicule, fait un traitement du langage pour comprendre la phrase de l'utilisateur et lui répond de façon humaine. On peut lui demander par exemple si on a assez d'essence pour aller à Paris, ou bien elle nous prévient elle-même lorsqu'on oublie d'éteindre nos phares ou de fermer nos portières. J'ai plus de 500 utilisateurs sur le système.

Une bulle de conversation pour illustrer l'appli Talk To My Car Aujourd'hui je n'ai plus trop le temps de m'en occuper mais le système vit très bien tout seul, ne consomme pas beaucoup de ressources et ne connaît pas de gros crashs. Il y a tout un système de workers pour analyser les données de voiture et envoyer des notifications quand il faut. Tout fonctionne parfaitement bien je pense en grande partie grâce aux caractéristiques de Go. Et ça m'arrange bien.


Quels autres langages pratiquez-vous ? Lesquels préférez-vous ?

Actuellement je dois aussi développer le front de notre outil open-source chez OVH donc je fais aussi du TypeScript avec le framework Angular. Du coup en parallèle je fais du HTML et CSS. Ça m'est arrivé également de refaire du NodeJS pour prouver qu'on pouvait utiliser des plugins codés en n'importe quel langage pour étendre notre outil CDS. Là j'essaie aussi de me mettre un peu au Rust, ça me semble être un langage super intéressant et puis pour ma culture ça ne peut être que positif. Donc petit à petit je m'y mets sur des side projects.


Où positionnez-vous Go par rapport à eux ?

Aujourd'hui si je devais avoir une préférence ce serait pour le Go. Car je me sens très productif avec, tout en restant confiant sur la qualité de mon code grâce à sa compilation, ses outils et son typage fort. On a beaucoup moins de surprises avec du Go en production qu'avec du TypeScript par exemple.


Qu'appréciez-vous le plus dans Go ? Et le moins ?

J'ai toujours adoré le langage C et pendant longtemps j'ai voulu retrouver le même genre de langage et syntaxe mais qui me permette de rester productif pour faire du web, avec notamment toutes les librairies qui vont avec. C'est ce que j'ai pu trouver avec le Go. Ce que j'apprécie le plus avec Go c'est tout l'écosystème qu'il y a autour du langage. Les outils fournis pour du débug ou mesurer les performances. Après j'adore aussi leur mantra, de garder ce langage très simple avec peu de keywords, ce qui fait que quand on regarde du code Go d'un autre projet, on est jamais perdu. C'est aussi lié au fait que Go et sa communauté ont tous les mêmes guidelines, avec un outil comme go-format qui formate le code de la même façon pour tout le monde. Pas de guerre de débat sur la syntaxe, tout le monde a la même.


"Pas de guerre de débat sur la syntaxe,
tout le monde a la même"


Un autre atout du Go, qui est aussi selon moi un inconvénient, c'est son système de concurrence qui s'avère assez simple à prendre en main. L'inconvénient de cette facilité c'est qu'on a tendance ensuite à en faire partout alors qu'il n'y en a pas besoin.

Ce que j'apprécie peut être le moins est qu'on ne peut pas toujours gérer la mémoire comme on le veut.


Quel IDE utilisez-vous pour développer en Go ?

Alors historiquement j'utilise Atom développé par une équipe de GitHub. L'intégration de Go y est correcte, on a tout ce qu'il faut. Cependant dernièrement j'ai ressenti pas mal de latence avec Atom, des soucis de performances ou même parfois des bugs introduits dans les extensions qui étaient assez contraignants. Ça commençait à m'agacer, donc j'ai switché il y a peu à VSCode. L'intégration de Go est plus complète que sur Atom. C'est plus fluide, moins de bugs et on a la possibilité d'avoir les mêmes raccourcis clavier que Atom donc le changement n'est pas très coûteux en temps.


Quelles sont vos attentes par rapport aux évolutions à venir de Go ?

Qu'ils continuent sur leur lancée pour la gestion de dépendances. Qu'ils restent bien focus sur l'amélioration de leur garbage collector et les performances du langage. Et pourquoi pas avec Go 2, voir l'arrivée des génériques ainsi qu'une gestion d'erreurs peut être différente. Même si aujourd'hui cette gestion d'erreur ne me gêne pas du tout, j'attends de voir ce qu'ils vont proposer.


Merci pour vos réponses. Souhaitez-vous ajouter quelque chose ?

Selon moi chaque langage a ses caractéristiques et avantages, je ne pense pas qu'il y ait de langage mieux que d'autres. Il faut tester, expérimenter et se faire son propre avis. Mais le point le plus important c'est de prendre du plaisir en l'utilisant, se sentir confiant quand on envoie notre code en production et que cela réponde correctement au besoin.

 

Lire aussi


> Go : la simplicité au service du long terme – brève présentation du langage

> "Go est un langage qui facilite la collaboration et le développement rapide d’applications" – Interview de Sébastien Friess, directeur de l'ingénierie chez SFEIR

> "Il y a une sorte de bon sens qui a présidé à la conception du langage et qui se révèle à l'usage" – Interview de Arnaud Assad, créateur de GoFr

> "Il n’y a aucun langage avec lequel j’ai une relation aussi passionnante et enrichissante qu’avec Go" – interview de Rudy Rigot, mentor pour TechStars Chicago, auteur du livre Programmer en Go : Pourquoi? Comment?