Quel langage pour quel projet ? Guide pragmatique sans évangélisme

La question revient à chaque nouveau projet : "on fait ça en quoi ?" Souvent la réponse est dictée par ce qu'on connaît déjà, ou par ce qui est hype cette saison. C'est rarement la meilleure méthode. Un CRM en Rust parce que le CTO a lu un thread HackerNews, une API haute perf en PHP parce que "on a toujours fait comme ça", un projet data en Node.js parce que l'équipe front ne voulait pas apprendre autre chose — j'ai vu les trois. Voici une grille de lecture pragmatique, sans évangélisme.

PHP : mal aimé, mal compris

PHP traîne une réputation de langage poubelle construite sur le web des années 2005-2012. Le problème, c'est que sa réputation est figée dans le temps alors que le langage, lui, a continué d'évoluer. PHP 8.x, c'est un typage fort optionnel, des attributs natifs, les named arguments, les enums, les fibers, JIT compilation. Ce n'est plus le même langage.

Pour un site web classique, une API REST, un e-commerce, une application métier avec Symfony ou Laravel — PHP est souvent le choix le plus pragmatique qui soit. L'hébergement coûte presque rien (n'importe quel mutualisé fait tourner PHP), les développeurs sont nombreux et donc moins chers à recruter, la documentation est exhaustive, et l'écosystème est mature. Un dev junior peut être productif en deux semaines sur un projet Symfony bien structuré. Essayez de dire la même chose pour Go ou Rust.

Le vrai problème de PHP, c'est qu'il est mono-thread par nature et qu'il n'est pas conçu pour du temps réel ou du CPU-intensif. Si vous avez besoin de WebSockets persistants, de traitement vidéo à la volée, ou d'une API qui doit tenir 50 000 requêtes concurrentes sur un seul serveur — PHP n'est pas le bon outil. Mais pour 80 % des projets web classiques, c'est le choix le plus rationnel qu'on ne fait pas assez.

JavaScript : le couteau suisse qui coupe pas toujours bien

JavaScript est incontournable côté front-end — ce n'est même pas une question. React, Vue, Svelte, le DOM, les Web APIs : tout ça tourne en JS, point. La vraie question c'est côté back-end, avec Node.js.

Le meilleur argument pour Node.js, c'est le partage de code entre front et back. Si vous faites du Next.js ou du Nuxt, vous écrivez de la validation, des types, des utilitaires une seule fois et vous les utilisez des deux côtés. C'est un gain réel, pas marketing. Le deuxième argument, c'est l'écosystème serverless : les fonctions Lambda, Vercel, Cloudflare Workers — tout ça est pensé pour JavaScript en premier.

Le côté sombre : Node.js reste mono-thread côté CPU. L'event loop est excellente pour les I/O concurrents, mais dès qu'une opération bloque le thread (calcul lourd, traitement d'image, compression), tout le monde attend. Et l'écosystème npm, malgré ses progrès, reste un terrain miné — dépendances transitives douteuses, packages abandonnés, incompatibilités de versions. TypeScript améliore significativement la situation sur la maintenabilité, mais ça reste une couche de complexité supplémentaire.

Si votre projet n'a pas de front-end JavaScript, utiliser Node.js pour l'API parce que "l'équipe connaît JS" est une décision à questionner sérieusement. Ce n'est pas une raison suffisante.

Go : ennuyeux, et c'est un compliment

Go est probablement le langage dont j'entends le moins parler dans les conversations hype, et pourtant c'est celui que j'utilise le plus pour des choses qui doivent fonctionner en production sans me réveiller la nuit. Cette contradiction dit quelque chose.

Go est ennuyeux dans le bon sens : il n'a pas de magie, pas de dix façons d'écrire la même chose, pas de méta-programmation obscure. Quand vous revenez sur du code Go six mois après, vous le lisez comme vous l'avez écrit. La concurrence est intégrée au langage avec les goroutines et les channels — pas une lib tierce, pas un pattern à connaître, c'est dans la spec. Pour des microservices, des APIs à fort trafic, des outils CLI, du DevOps tooling, Go est difficile à battre sur le ratio performance / simplicité de code.

Mais soyons honnêtes : Go est verbeux. La gestion des erreurs if err != nil en boucle est connue pour faire grincer des dents. L'écosystème de bibliothèques est moins riche que Python ou JavaScript. Et surtout : pour un CRUD simple, un site avec 100 visiteurs/jour, un prototype, c'est de l'over-engineering flagrant. Go brille quand la performance à long terme, la maintenabilité et la résistance à la charge comptent vraiment — pas quand vous testez une idée en deux semaines.

Python : incontournable pour tout ce qui touche aux données

Pour la data science, le machine learning et l'IA, la conversation est simple : c'est Python, et ce n'est pas près de changer. NumPy, Pandas, scikit-learn, PyTorch, TensorFlow, Hugging Face — l'écosystème Python sur les données est imbattable et a une décennie d'avance sur tout le reste. Si quelqu'un vous propose de faire du ML en Go "pour les performances", c'est une mauvaise idée à presque tous les coups.

Python est aussi excellent pour le scripting, l'automation, et le prototypage rapide. La syntaxe est lisible, la bibliothèque standard est riche, et vous pouvez aller vite. FastAPI, sorti en 2018, est devenu une référence pour les APIs légères avec de la validation automatique et une doc générée : c'est excellent pour exposer des modèles ML ou construire des services internes.

Là où ça se complique, c'est pour du web métier complexe. Django est solide, mais l'écosystème PHP/Symfony est plus mature pour des applications e-commerce, des ERP, des projets avec beaucoup de règles métier et de devs à maintenir. Python a aussi un défaut structurel : le typage est lâche par défaut. Mypy et les type hints ont largement amélioré les choses, mais vous devez choisir activement de bien typer votre code. Les performances sont également limitées — CPython reste lent pour les opérations CPU-bound en dehors des bibliothèques écrites en C.

Rust, et les autres : pour les cas extrêmes

Rust mérite d'être mentionné parce que c'est le seul langage qui offre des performances proches du C avec une sécurité mémoire garantie à la compilation. Pour des compilateurs, des moteurs de rendu, du WebAssembly, des outils CLI ultra-performants (ripgrep, exa, Zed) — Rust est dans une catégorie à part.

La réalité pour 95 % des projets : la courbe d'apprentissage est réelle et coûteuse. Le borrow checker est une innovation majeure, mais il faut des semaines pour ne plus se battre contre lui. Si votre deadline est dans trois mois et que votre équipe ne connaît pas Rust, ce n'est pas le bon moment pour apprendre. Rust est un investissement à long terme qui se justifie quand la performance ou la sécurité mémoire sont des contraintes non négociables — pas des "c'est bien d'avoir".

Une mention rapide pour les autres : Java et Kotlin restent des valeurs sûres pour les grandes entreprises avec des équipes importantes, des projets complexes et une culture JVM bien installée (Spring, Quarkus). Le recrutement est plus facile qu'on ne le croit. Ruby est moins à la mode mais Rails reste une base solide pour des startups qui ont besoin d'aller vite — c'est exactement pour ça qu'il a été créé.

Le tableau récapitulatif

Langage Points forts Points faibles Projet type À éviter si...
PHP Maturité, hébergement pas cher, dev disponibles Réputation (injuste), mono-thread Site web, e-commerce, API REST classique Temps réel, haute perf
JavaScript / Node Partage front/back, écosystème npm, serverless npm chaos, mono-thread CPU Full-stack JS, SPA, real-time API pure sans front JS
Go Perf, concurrence native, lisibilité long terme Verbeux, moins de libs Microservices, CLI, APIs à fort trafic Prototypage, data science
Python IA/data imbattable, prototypage rapide Perf, typage lâche par défaut ML, scripting, automation, APIs légères Mobile, front-end
Rust Perf maximale, sécurité mémoire Courbe d'apprentissage élevée Systèmes, WASM, tooling critique Projets avec deadlines serrées

Conclusion

Le vrai problème, ce n'est pas de choisir le "meilleur" langage — c'est de résister à deux tentations opposées : celle du langage hype qu'on a envie d'essayer, et celle du langage qu'on connaît déjà et qu'on applique partout par défaut. La bonne question n'est pas "est-ce que Go est meilleur que PHP" — elle n'a pas de réponse générale. La bonne question c'est : "est-ce que le gain de performance vaut le coût de recrutement et d'onboarding sur ce projet précis, avec cette équipe précise, dans ce délai précis ?"

Un projet avec trois devs PHP seniors qui maîtrisent Symfony ira plus loin en six mois en PHP qu'en Go où ils partent de zéro. C'est évident une fois qu'on le dit, mais ça ne l'est pas toujours dans le feu d'un choix technique. Le meilleur langage est souvent celui que votre équipe peut maintenir dans deux ans — pas celui qui cartonne sur les benchmarks.

Commentaires (0)