C'est un peu comme demander: "Pourquoi y a-t-il tant de domaines en mathématiques? Nous avons l'algèbre, pourquoi avons-nous besoin de géométrie, de calcul et de mécanique des fluides?" Chaque langage de programmation vise à résoudre un problème particulier. Plusieurs langues pourraient peut-être résoudre le même problème, mais chacune l’abordera différemment.
Voici quelques unes des principales différences entre les langages de programmation.
Lisibilité et maintenabilité
Certaines langues sont plus faciles à lire pour un être humain, ce qui permet à un programmeur de collaborer plus facilement au code d’un autre programmeur. Python, par exemple, a la réputation d'être facile à lire. Il impose une stricte indentation des lignes pour définir ses blocs de code, ce qui permet de consulter facilement un programme et de déterminer sa structure. D'autres langues permettent également l'indentation, mais en tant que choix stylistique et non pas obligatoire.
En revanche, Perl est un langage qui permet au programmeur d’écrire le même programme de différentes manières, mais son objectif peut ne pas être immédiatement clair pour un autre lecteur. Un tel programme peut être pratique à écrire, mais difficile à comprendre et à modifier pour quelqu'un d'autre.
Performance
Certaines langues sont interprétées et d'autres compilées. Un programme compilé doit être traité par un préprocesseur, un compilateur et un éditeur de liens avant de pouvoir être exécuté par l'ordinateur. Ce logiciel intermédiaire spécialisé effectue une analyse lexicale, traduisant le programme en langage machine. Il peut également optimiser les instructions obtenues en recherchant des moyens astucieux d’accélérer l’exécution du programme.
Les programmes compilés fonctionnent généralement mieux que les programmes interprétés. Par exemple, C, C ++ et Objective-C sont des langages qui compilent généralement en code machine très rapide. Les jeux vidéo et les logiciels système sont souvent écrits dans ces langages, afin de tirer le meilleur parti des performances du processeur.
D'autre part, les programmes en langage interprété sont exécutés par un logiciel appelé interprète, qui exécute les instructions du programme sans les compiler au préalable en code machine. Bien que l'interprète analyse parfois le programme dans un langage intermédiaire, ce qui entraîne une optimisation, les performances ne sont jamais aussi rapides que le code machine compilé.
Un avantage majeur des langages interprétés est leur potentiel de développement interactif. Comme le programme complet n'a pas besoin d'être compilé avant de pouvoir être exécuté, le code peut être exécuté de manière interactive. Vous le connaissez si vous avez déjà utilisé la ligne de commande de votre système d'exploitation: vous entrez une commande et consultez les résultats. Une telle interface est appelée REPL ou "read-eval-print-loop". Un REPL vous permet d'exécuter des commandes (ou des blocs de commandes) individuellement et d'afficher les résultats. Lisp, Perl, Python, NodeJS, Ruby et JavaScript sont des exemples de langages interprétés pouvant être exécutés dans un REPL.
Les interfaces de commande interactives, telles que l'invite de commande Windows et bash, sont également qualifiées de langages interprétés. Les programmes dans ces "langues" sont appelés fichiers de commandes ou scripts shell.
Cas d'utilisation spécifiques
Souvent, les langues sont particulièrement efficaces pour écrire des types de programmes spécifiques. Par exemple, NodeJS est conçu pour écrire des applications à un seul thread pour le Web. Son entrée / sortie de fichier non bloquante permet aux programmes de continuer à fonctionner ("ne pas être bloqués") en attendant que les données requises soient transmises.
Un autre exemple est le langage de programmation R, spécialisé dans l'analyse statistique. Les programmes écrits en R bénéficient des tests et modèles analytiques intégrés et des outils permettant de manipuler efficacement des quantités énormes de données.
Facilité de prototypage
Certaines langues permettent le prototypage rapide: le programmeur peut "commencer à écrire" et construire composant par composant jusqu'à ce que le programme soit complètement formé.
Par exemple, le site Web Reddit a été écrit à l'origine en Lisp. Après le lancement de Reddit, l’ensemble du site a été réécrit en Python pour diverses raisons, à la fois techniques et logistiques. Bien que la refactorisation de tout le code soit une entreprise majeure, les propriétaires du site n'ont exprimé aucun regret. Dans un article de blog de 2005, ils ont remarqué que Lisp leur permettait de créer quelque chose sans savoir exactement ce que cela allait devenir.
Bibliothèques disponibles
Habituellement, lorsque vous démarrez un nouveau projet de programmation, vous ne voulez pas réinventer la roue. En d'autres termes, vous ne souhaitez pas écrire de fonctions pour des tâches courantes telles que le calcul d'une racine carrée ou la recherche de la première occurrence d'un caractère dans une chaîne. Pour cette raison, presque tous les langages de programmation fournissent un ensemble de bibliothèques standard de fonctions communes. Les programmeurs peuvent préférer un langage en raison des bibliothèques qu'il fournit.
Par exemple, les bibliothèques standard C fournissent des fonctions hautement performantes pour de nombreuses opérations système de bas niveau. Perl fournit de nombreuses bibliothèques robustes, ainsi que le référentiel CPAN de modules à télécharger et à utiliser dans votre programme. Python fournit un large éventail de fonctions et de modules intégrés pour à peu près tout ce qui se trouve sous le soleil. Clojure, un langage semblable à Lisp qui s’exécute sur la machine virtuelle Java, tire parti de sa capacité à exécuter du code à partir des nombreuses bibliothèques existantes d’objets et de méthodes Java.
Sécurité
Toutes les langues ne se prêtent pas à l'écriture de code sécurisé. Le langage de programmation C, par exemple, est réputé pour ses fonctionnalités (ou leur absence) qui peuvent conduire à des vulnérabilités dévastatrices telles que le déréférencement de pointeur nul. D'autres langues tentent de résoudre ces problèmes avec des règles plus strictes.
Par exemple, certaines langues imposent des restrictions sur les opérations pouvant être effectuées sur différents types de données. Les plus stricts de ces langages sont parfois appelés "fortement typés" et peuvent offrir une tranquillité d'esprit aux programmeurs qui accordent la priorité à la sécurité et à la stabilité dans le développement de logiciels. Des exemples de langages fortement typés incluent Rust, Nim, Ocaml et Haskell.
Les langues peuvent également limiter la "mutabilité", la capacité d'un objet de données à changer d'état. Au lieu des objets dont les valeurs sont écrasées, ces langages privilégient les objets "immuables": valeurs en mémoire qui ne peuvent pas être modifiées sans exception explicite. Les objets immuables ont suscité l’intérêt de la généralisation des processeurs multicœurs, en raison de leur tendance à promouvoir la «sécurité des threads». Dans un programme thread-safe, plusieurs processeurs peuvent fonctionner sur un ensemble de données avec un risque d'erreur considérablement réduit. Les langues qui donnent la priorité aux objets immuables incluent Rust et Clojure.
Soutien communautaire
Lors de la rédaction d'un programme dans une nouvelle langue, il est utile d'avoir accès à une communauté active et passionnée de développeurs qui utilisent et contribuent activement au travail de chacun. Avant de choisir un langage de programmation, renseignez-vous davantage sur la communauté de ce langage. Certaines langues ont une base d’utilisateurs passionnante, dynamique et vibrante à laquelle vous voudrez peut-être faire partie et d’autres langues peuvent avoir peu ou pas de communauté.
Expressivité
Lors de l'écriture d'un programme, les pensées du programmeur et ses capacités à résoudre les problèmes "parlent" à travers cette langue. En conséquence, les programmeurs ont tendance à préférer les langues dans lesquelles ils s'expriment facilement. Ce qui fait qu'un langage et un programmeur travaillent bien ensemble est cependant difficile à définir. En fin de compte, le seul moyen de savoir dans quelle langue vous êtes à l'aise est d'utiliser différentes langues pour différents projets et de les comparer vous-même.