Article écrit par Martin Catty
Aussi surprenant que cela puisse paraitre le développement web et même plus généralement le développement logiciel est un domaine assez récent et peu industrialisé.
Là où on imagine bien que la fabrication d’une voiture suivra sensiblement le même processus d’une marque à une autre ce n’est pas exact lorsqu’il s’agit de développer une application web.
L’une des composantes indispensable de la mise en place de votre application est le choix de la ou les technologies utilisées.
Quels critères pour choisir les technologies de votre application web ?
Comme je le mentionnais en préambule l’industrie du développement logiciel est suffisamment jeune pour ne pas avoir de consensus formel autour d’une ou plusieurs technologies de prédilection.
Voyons donc dans un premier temps les critères sur lesquels s’appuyer pour choisir.
Les critères principaux pour choisir les technologies de votre application web
- Adaptation au web
- Performance
- Vitesse de développement
- Ecosystème : outils et communauté
- Nombre de développeurs
- Courbe d’apprentissage
- Consistance du langage
- Maturité
- Tendance
Adaptation au web
Même si fondamentalement aucun langage n’est incompatible avec le web certains sont plus adaptés que d’autre notamment car leur écosystème est orienté web.
Performance
La performance est un critère important mais qui ne doit devenir discriminant que dans des cas précis. L’important est de pouvoir offrir à vos visiteurs des temps de réponse de l’ordre de 500ms. N’importe lequel des langages proposés dans la liste ci-dessous vous permettra d’atteindre cet objectif.
Vitesse de développement
La vitesse de développement recherchée varie selon les ambitions du projet. Lorsque vous cherchez à valider un concept vous voudrez réaliser un MVP (Minimum Viable Product) avec une technologie permettant d’aller vite. C’est par exemple ce qu’a fait Twitter.
La première version de Twitter a été développée avec Ruby et Ruby on Rails. Quand les problèmes de performance ont commencé à se poser d’autres technologies ont progressivement été intégrées comme Java & Scala.
C’est une approche cohérente et pragmatique votre application web n’a pas nécessairement à utiliser la même technologie pendant toute sa durée de vie.
Écosystème : outils et communauté
L’écosystème est tout aussi important que le langage. Avoir des outils stables et une communauté active sans être forcément large est une priorité.
C’est grâce à l’écosystème qu’un langage va être adapté au web ou non. Le choix du langage doit donc se faire par rapport aux outils disponibles comme les frameworks web les outils de déploiement ou encore les librairies d’envoi d’emails.
Les interactions avec la communauté du langage choisie vont être fréquentes et il faut donc se sentir bien avec elle. Certaines communautés seront plus accueillantes aux développeurs débutants que d’autres par exemple.
Nombre de développeurs
Le volet recrutement est une composante très importante à prendre en compte.
Si vous avez besoin d’un très grand nombre de développeurs sur un projet ambitieux vous veillerez à ce que la technologie adoptée soit répandue de sorte à limiter vos difficultés de constitution de vos équipes.
Toutefois il faut garder en tête que les développeurs passionnés aiment pouvoir utiliser des outils récents et confortables. Comme on n’attire pas des mouches avec du vinaigre il est important de garder un bon équilibre dans le choix de vos technologies.
Il faut aussi avoir en tête que les développeurs qui sont positionnés sur des marchés de niche ont plutôt tendance à se mettre à leurs comptes et sont plus difficiles à recruter.
Courbe d’apprentissage
Le temps d’apprentissage d’une technologie doit rentrer dans vos critères de choix.
Est-ce que vous voulez vraiment d’une technologie qui nécessitera 6 mois de montée en compétence pour vos équipes alors que vous ne l’utiliserez que sur un seul projet ? Probablement pas. Encore une fois c’est le bon sens qui doit l’emporter.
Consistance du langage
La consistance d’un langage consiste à avoir une similitude une conformité et une uniformité.
Si les divergences au sein de la communauté sont importantes sur les bonnes pratiques et l’architecture cela fragmentera l’écosystème et il sera difficile de contribuer à corriger les bugs sur les outils utilisés. Chaque outil sera programmé d’une manière différente et ne sera pas facilement compréhensible par tous les développeurs.
Maturité
Un langage mature et stable permettra d’avoir des réponses claires quand on est devant un problème.
Par exemple Swift est un langage récent et les changements à chaque version sont tellement importants que la documentation ou les réponses aux questions posées sur Stack Overflow il y a quelques années sont maintenant erronées. De ce fait il est parfois difficile de se sortir d’une situation délicate.
Pour la productivité des développeurs choisir un langage qui ne les bloquera pas régulièrement est important.
Tendance
C’est le critère qui est sans doute le moins important et pourtant sans doute le plus utilisé dans les équipes de développement à l’heure du choix. Notre industrie tend à régulièrement réinventer des concepts existants depuis bien longtemps avec de nouveaux outils entraînant des effets de mode.
Un bon réflexe consiste à systématiquement questionner ces nouveaux outils ou langages. Quelles problématiques permettent-ils de résoudre que ne permettent pas de résoudre d’autres langages ?
Une citation qui illustre bien ce principe :
My biggest compliment to Rust is that it’s boring and this is an amazing compliment.
Matrice de comparaison des technologies web
Étant donné le nombre de langages existants nous allons uniquement nous concentrer sur les 20 premiers langages de l’index TIOBE. Celui-ci mesure la popularité des langages ainsi que leur évolution au fil des mois.
Bien évidemment il existe des langages du top 50 qui peuvent avoir leur pertinence pour votre projet mais il faudra garder en tête que leur usage est (pour le moment du moins) confidentiel.
Étant donné que nous évaluons la pertinence d’une technologie dans le cadre du développement d’une application web nous allons en faire le premier critère. Ce sera le seul qui sera automatiquement discriminant.
Nous éliminons de fait C et C++ destiné à l’écriture de programme système et très bas niveau. Objective-C et Swift se destinent quant à eux principalement à l’écriture d’applications mobiles. Il existe des projets de framework web notamment en Swift mais ce sont des projets encore assez confidentiels.
Java
Java offre un certain nombre d’avantages dont celui d’être très répandu. Il est utilisé à la fois sur le web avec J2EE mais également sur le mobile en étant notamment le langage utilisé par Android.
Java en tant que langage compilé repose grandement sur la JVM qui n’a eu de cesse de s’améliorer.
Java possède un écosystème très vaste avec toutefois l’inconvénient d’être un langage très verbeux.
Python
Python a récemment retrouvé ses lettres de noblesses en étant très utilisé dans le domaine du traitement de données (machine learning BI etc). Il dispose d’un écosystème très fourni dans ce domaine.
Ce retour en force n’était pas évident. En effet Python 3 (la version majeure courante) n’est pas compatible avec la version 2 ce qui a considérablement compliqué son adoption.
C#
C# est un langage très utilisé par les développeurs de logiciels pour Windows. La communauté est donc conséquente et de ce fait ASP.NET le framework web de Microsoft est lui aussi assez répandu.
Mais pour en tirer un maximum de bénéfices il est essentiel d’utiliser les produits Microsoft comme SQL Server pour la base de données et Windows Server pour héberger vos applications web.
JavaScript
JavaScript a longtemps été le parent pauvre du web souffrant de son manque de consistance (l’ancêtre de JavaScript Mocha a été créé en 10 jours) ainsi qu’un support variable selon les navigateurs.
Il a réalisé un retour en grâce depuis l’avènement de Node.js offrant la possibilité d’interpréter JavaScript côté serveur ainsi que grâce aux améliorations continues des moteurs de rendu permettant d’atteindre un très bon niveau de performance.
Son écosystème est toutefois très fragmenté. Contrairement à d’autres langages de références qui disposent de bibliothèques de référence pour résoudre des problématiques précises JavaScript disposent d’un très grand nombre de modules qui font la même chose ce qui a tendance à brouiller le message.
PHP
PHP est l’un des langages les plus courants sur le web. WordPress le CMS le plus répandu qui s’appuie sur PHP fait tourner ~33% des sites internet. D’autres grands noms comme Facebook ont bâti leurs applications web sur ce langage en incorporant toutefois leurs propres outils (notamment une machine virtuelle qui transforme du code PHP en C++).
PHP est souvent le point d’entrée des développeurs lors de leur apprentissage car il est facile à prendre en main et à mettre en place. Longtemps critiqué pour son manque de consistance notamment dans son modèle objet il s’est amélioré au fil des versions majeures.
Ruby
Ruby a été créé avec une approche particulière en tête celle d’offrir un langage consistant concis et agréable à utiliser par les développeurs. En 2004 un premier framework Ruby on Rails a été bâti sur Ruby en prolongeant l’approche de Ruby.
Il a été l’un des premiers frameworks à instaurer un certain nombre de conventions devenues courantes permettant de développer des applications très rapidement. Il a été rapidement utilisé par l’écosystème startups dont certains noms sont devenus très connus (AirBnB Twitter GitHub Shopify…).
Bien qu’offrant un écosystème très fourni et une utilisation importante aux États-Unis il souffre d’un manque de développeurs qualifiés en France. Sa performance pure est également en deçà de langages compilés tels que Java ou Go.
Go
Go est un langage compilé plus simple à prendre en main que des langages très bas niveau type C ou C++ tout en offrant des performances qui en sont proches.
Il est relativement peu utilisé pour mettre en place des applications web et trouve son usage principal dans la mise en place d’outils permettant de faire tourner ses applications (ex : Docker Traefik Kubernetes…). Son aspect compilé et sa très bonne gestion de la concurrence en font un excellent outil pour les applications exigeantes en performance.
Sa courbe d’apprentissage est plus complexe que des langages type PHP ou Ruby et souffre d’un nombre de développeurs assez confidentiel.
Adaptez vos outils à votre problématique
On le voit il n’existe aucun langage qui remplisse toutes les cases.
Mais le plus important à l’heure de l’arbitrage est de trouver l’outil le plus à même de résoudre votre problématique.
Chacune a son lot de spécificités. Si vous souhaitez réaliser une application de messagerie instantanée vous avez sans doute besoin d’envoyer des informations en temps réel avec un temps de traitement faible. Vous voudrez donc un programme capable de s’exécuter rapidement.
Si votre application de messagerie s’adresse à plusieurs millions d’utilisateurs simultanés vous voudrez également une technologie performante dont la consommation en ressource est modérée pour éviter d’avoir à mettre en place une infrastructure très lourde et coûteuse.
Dans ce contexte de besoin de performance et de passage à l’échelle Go pourrait être un excellent candidat.
Si vous souhaitez développer une application très rapidement ou même simplement un MVP Ruby est une technologie de choix.
Si vous avez besoin de constituer une ou plusieurs équipes de développement rapidement vous voudrez probablement considérer PHP.
Adapter à ses équipes
C’est un difficile équilibre à trouver. Un bon développeur ne doit pas être cantonné à un outil ou une technologie particulière. Tout comme un artisan n’utiliserait pas seulement un marteau mais une trousse à outil complète le développeur doit avoir à sa disposition un ensemble d’outils qu’il maîtrise.
Toutefois si vous décidez de lancer un projet avec des outils que personne n’a jamais utilisés dans votre équipe de développement vous courez à votre propre perte. D’une part la phase de montée en compétence peut être relativement longue d’autre part le manque d’industrialisation fait que vous ne pouvez pas avoir la garantie que l’outil utilisé sera le bon sans le connaître un minimum au préalable.
Adapter aux risques du projet
Si votre projet de développement d’application est critique pour le business de l’entreprise vous voudrez probablement prendre toute la sécurité nécessaire pour limiter vos risques. À l’inverse sur un projet sans réelle criticité vous avez toute latitude pour offrir un champ de R&D à vos équipes et les laisser se faire plaisir.
N’oubliez pas qu’il est important pour les développeurs de rester ouvert à d’autres technologies pour rester au courant des tendances mais également pour être capable de mesurer de façon plus objective quels sont les avantages et les inconvénients des outils qu’ils utilisent de façon quotidienne.