Quelle technologie pour votre application web métier en 2020 ?

Publié le 21 mai 2019 par Martin Catty | application web

Cet article est publié sous licence CC BY-NC-SA

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.

"Comment réussir votre application web métier"

Technologie web 2019

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.

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.

Outils de programmation

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, entrainant 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.

Télécharger le guide ultime pour réussir votre application web métier

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.

Matrice de comparaison des technologies pour le développement d'une application web

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 maitrise.

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 connaitre 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.


L'équipe Synbioz.
Libres d'être ensemble.

Télécharger le guide ultime pour réussir votre application web métier