Ce sujet fait suite à la conversation commencée dans ce sujet.
Pour rappel, voici le dernier message de la précédente discussion :
Il n’en reste pas moins que, à ma connaissance, il n’existe pas de langage interprété comparable, en matière de performance et de charge serveur (puisque nous parlons d’une utilisation sur un serveur), à un "bon" langage compilé.
Certes mais en cherchant cette comparaison et en te reposant uniquement sur les performances et la charge serveur, je pense que tu occultes d’autres contraintes qui naissent de la nécessité dont tu parles plus bas (discours sur lequel je te rejoins).
Aujourd’hui nous vivons une époque où tout le monde n’a pas les mêmes besoins : une phrase que l’on entend souvent est "on n’est pas google/facebook/tinder/netflix" : avant de se soucier de la charge des serveurs, la nécessité est d’aboutir rapidement à un produit stable et utilisable. Bien souvent, les critères qui auront le plus d’impact dans le choix d’une technologie pour développerune nouvelle application, seront son écosystème et le time to delivery, à savoir le temps écoulé entre l’idée initiale et son déploiement en production.
Dans ces conditions, la nécessité étant le fonctionnel (le service rendu) avant les performances, le choix le plus intelligent est bien souvent celui du langage qui pose le moins de barrières, que celles-ci prennent la forme d’une courbe d’apprentissage ou du developpement d’une bibliothèque qui n’existe pas encore. Et les technologies connues pour lever ces barrières sont généralement Python et Javascript, là où la "nécessité" pousserait… Rust, entre autres.
Ceci étant dit, je suis d’accord avec toi quand tu considères, par exemple, un langage comme Go comme répondant bien à la nécessité, car il offre un excellent compromis entre performances et time to delivery (on peut apprendre à l’utiliser en une après-midi, il est encore plus batteries included que Python, et son écosystème est déjà méga-riche) : la seule chose qui lui manque, finalement, c’est la popularité, mais ça commence enfin à venir (si je me fie au marché de l’emploi, puisque j’ai justement décroché un poste en Go le mois dernier, alors qu’il fallait vraiment fouiller longtemps pour en trouver auparavant).
PS : je propose qu’on crée un sujet dédié. Vraiment. Pour arrêter le HS ici.
Je l’occulte, et je ne l’occulte qu’à moitié en réalité.
J’ai la chance de faire de la programmation un simple passe-temps. Je n’en vis pas, je ne souhaite pas en vivre. Je ne souhaite pas en vivre précisément car je sais l’importance du temps dans la programmation.
Il est évident que les choix en informatique sont des conséquences des injonctions du système économique dans lequel nous vivons. Mais c’est aussi pour cela que je faisais mention des enjeux écologiques.
La raréfaction des ressources, la prise de conscience progressive du coût écologique de la technologie (et notamment des parcs de serveurs) montrent qu’il faut absolument repenser notre usage de la technologie et nos pratiques en programmation.
Mais outre cela, ces questions de nécessité se posent même dans le cadre économique : un produit trop lent, un produit incompatible avec des configurations est un handicap majeur. L’exemple le plus probant est l’exemple du jeu vidéo : combien de clients potentiels écartés par de mauvaises pratiques ?
Actuellement, ces pertes sont très largement compensées par le temps gagné. Des usines à gaz comme Laravel ou Ruby on Rails sont abondamment utilisées dans le développement web parce que payer davantage pour un serveur coûte pour l’instant moins cher que passer davantage de temps à programmer.
Par la force des choses, cette logique va avoir une fin à un moment ou à un autre. D’abord parce que les ressources sont amenées à être limitées, et d’autre part car nous sommes à un stade où nous n’arrivons plus à progresser autant qu’il y a vingt ans en matière de puissance brute.
On voit bien, par ailleurs, que ce sont des préoccupations grandissantes : tous les "nouveaux" langages (Nim "efficient, expressive, elegant", Crystal et son "slick as C", Go qui appuie sa rapidité jusque dans son nom et dans son logo, Rust et ses abstractions "sans coût" à la manière du C++) mettent l’accent sur leurs performances, là où la génération précédente insistait sur le confort du programmeur.
Le cas de Rust, que tu cites, est plus délicat. Rust suit le chemin, assez mauvais à mon avis, du C++ moderne. En somme, Rust répond à des problèmes nouveaux en ajoutant des fonctionnalités nouvelles. Rust est peu à peu en train de devenir un langage d’une complexité absurde. Trop d’axiomes et de règles superflus.
Go est à mon sens préférable car il veut se limiter à l’essentiel. Nous sommes donc d’accord pour dire de Go qu’il est un des meilleurs langages actuels pour faire face à cette exigence de nécessité.
Bref : rasoir d’Ockham.