maciek905 - Fotolia

Choisir le(s) meilleur(s) langage(s) de programmation pour la pratique DevOps

La méthodologie DevOps regroupe un ensemble de technologies et de pratiques en évolution rapide ; le choix du ou des bons langages de programmation fait une grande différence en termes de fonctionnalité, d'efficacité et de rapidité.

Les équipes DevOps peuvent choisir parmi de nombreux langages de programmation. Tous ont à la fois des forces et des faiblesses, certaines étant inhérentes au langage lui-même, et d'autres dépendent d'une application ou d'un contexte donné dans lequel il est utilisé.

Pour évaluer les langages de programmation adaptés à la pratique DevOps, il faut tenir compte de facteurs tels que l'expérience et la familiarité du développeur avec ces derniers, la vitesse de développement possible et la flexibilité souhaitée.

Les bases des langages de programmation DevOps

La pratique DevOps est à l'intersection entre le développement de logiciels et les opérations IT traditionnelles. Alors que les développeurs d’applications utilisent généralement un langage principal, les administrateurs des opérations informatiques et les ingénieurs DevOps doivent encore avoir un certain niveau de connaissance des langages utilisés au sein leur organisation pour, par exemple, gérer les intégrations et développer des scripts.

Il y a certains compromis à prendre en compte lors du choix d’un tel langage. Par exemple, de nombreux responsables des opérations utilisent des langages de script ou d'interprétation, car ils permettent un développement rapide par rapport aux langages compilés. Cependant, les langages interprétés ont une vitesse d'exécution plus lente.

En outre, certains langages de programmation sont à typage statique, tandis que d’autres dépendent d’un typage dynamique. Ceux à typage statique vérifient les types de données pour détecter les erreurs au moment de la compilation, ce qui se traduit par moins d'erreurs à l'exécution ; les langages à typage dynamique ne le font pas. Les langages à typage statique nécessitent tout de même que les équipes DevOps définissent des variables avant de les utiliser, ce qui n'est pas nécessaire pour les langages à typage dynamique.

Dans cet article, nous examinerons certains des langages de programmation les plus courants -- à la fois compilés et interprétés, ainsi que typés statiquement et typés dynamiquement -- et leurs avantages et inconvénients dans le cadre d’un environnement DevOps. Nous évaluons ici rapidement Go, Python, Scala, Ruby, C et C++.

Go

Relativement récent, le langage Go, pensé par Google – parfois appelé Golang- a rapidement gagné en popularité pour diverses raisons. Au sein d’un workflow DevOps, Go a deux particularités attrayantes : la vitesse d’exécution et son exécutable multiplateforme. Les équipes peuvent insérer un seul exécutable correctement livré dans n'importe quel processus du workflow DevOps, sans se soucier de la gestion des dépendances, car elles sont toutes intégrées au moment de la compilation.

L’inconvénient de Go, c’est qu’il permet de développer des programmes compilés et qu’il faut nécessairement les déployer comme des exécutables, contrairement au langage interprété, où le code lui-même s’exécute directement pour des itérations rapides. Pour certains, sa simplicité est un frein parce qu’ils ont l’habitude des classes génériques offertes par Java. La communauté Go s’est dernièrement concentré sur cet aspect et expérimente des moyens pour représenter des fonctions et des structures de données de manière générique.

Python

Contrairement à Go, Python existe depuis près de trente ans. Il s’agit d’un langage interprété, ce qui signifie qu'il est évalué à l'exécution, mais il supporte des vitesses de développement rapides : un avantage notable dans un environnement DevOps en évolution permanente. De plus, Python est très flexible, car c'est un langage à typage dynamique ; cela lui permet de s'interfacer avec une variété d'autres outils dans un workflow.

Cependant, comme il s'agit d'un langage interprété, Python a une configuration préalable plus compliquée et une vitesse d'exécution plus lente. La nature du typage dynamique peut également introduire des erreurs d'exécution plus facilement.

Scala

En raison de ses similitudes avec Java, Scala offre une courbe d'apprentissage rapide pour de nombreux développeurs Java. Pour les systèmes hautement évolutifs qui ont des besoins de simultanéité élevés, Scala offre également un support et une efficacité intégrés.

L'inconvénient de Scala : la taille réduite de sa communauté. Les développeurs sont finalement peu familiarisés avec ce langage. L'une des explications à ce phénomène tient dans le fait que Scala fonctionne dans des machines virtuelle Java (JVM). Cela introduit plus de complexité et de maintenance que les autres langages. À moins que la simultanéité et l'extensibilité ne soient les principales exigences, Scala pourrait ne pas être le bon candidat pour les tâches DevOps.

Ruby

Le plus grand avantage de Ruby -- un autre langage interprété -- est sa simplicité, ainsi que le support diversifié de l'industrie pour les modules ou les Gems de Ruby. Sa simplicité permet le développement et la mise en œuvre rapides des scripts nécessaires aux processus DevOps.

Cependant, Ruby a souvent une vitesse d'exécution plus lente, non seulement en termes de performances générales, mais aussi pour la vitesse de démarrage dans certaines circonstances. Enfin, si une DSI utilise Ruby pour l'accès aux bases de données, son couplage étroit Active Record signifie que les administrateurs peuvent perdre la flexibilité nécessaire, selon les besoins.

C et C++

Les langages C et C++ ont tous deux une longue et riche histoire. Puissants et largement éprouvés, ils offrent des possibilités inégalées sur une grande variété de systèmes d'exploitation. La vitesse d'exécution et l'accès de bas niveau sont parmi les caractéristiques les plus appréciées. Le C est un langage procédural classique de bas niveau, tandis que le C++ est un sur-ensemble par-dessus C qui offre des fonctionnalités orientées objet.

Leurs inconvénients ? Leurs complexités, la nécessité de gérer manuellement la mémoire, les temps de construction plus longs et la difficulté de configurer correctement les compilateurs en fonction des besoins de l'organisation.

Une réalité plus complexe

Cet article ne fait qu'effleurer la surface des langages de programmation adaptés à la pratique DevOps. Certains utilisent les scripts BASH, PowerShell, PHP, Perl ou JavaScript. Et les équipes ne sont pas limitées à un seul langage. Souvent, elles doivent travaillent avec une multitude de langages et de scripts suivant si elles développent ou si elles intègrent des composants d’un système.

Certains outils IAC très utilisés par les DevOps comme Ansible ou Puppet utilisent Python associé à YAML pour le premier, et Ruby DSL pour le second. Les containers Docker, eux sont construits avec Go. Autre exemple : Terraform. L’outil écrit en Go dispose de sa propre syntaxe nommée HCL pour les fichiers de configuration qui peut être remplacé optionnellement par JSON.

Pour le développement, beaucoup de développeurs utilisent Java et ses variantes. Le praticien de la méthodologie DevOps doit donc adopter l’attitude de certains musiciens : devenir multi-instrumentiste.

Cependant, l'inconvénient de cette multiplication de langages tient dans le fait qu'il faut des développeurs en capacité de tous les maîtriser. Pour utiliser efficacement plusieurs langages, il faut en limiter le nombre et réfléchir à la manière dont ils interagissent afin d'éviter les conflits potentiels et les problèmes de développement ou d'exécution.

Pour approfondir sur DevOps et Agilité