Un langage de programmation est un code de communication entre un humain et une machine (en général un ordinateur, mais aussi des cartes électroniques comme l'Arduino). À l'aide de ces langages, on peut écrire des programmes.

Un ordinateur peut être vu comme un petit robot installé entre un tapis roulant et de nombreuses ardoises. Le tapis roulant lui amène des ordres très simples, les uns après les autres, comme « écris K sur l'ardoise n°42 » ou « remplace le contenu de l'ardoise n°17 par celui de l'ardoise n°18 ». Il ne peut faire que ça : lire ce que lui amène le tapis roulant puis lire ou modifier ce qui est écrit sur les ardoises.

Dans la réalité, ce petit robot s'appelle processeur et, au lieu de recevoir ses ordres sous forme de phrases, il récupère une suite de nombres (précisément des 0 et des 1 : c'est le binaire). Par exemple, pour lui, « 111010010110001101110010011010010111001100100000010010110010000001110011011101010111001000100000011011000101110000100111011000010111001001100100011011110110100101110011011001010010000001101110101100000011010000110010 » signifie « écris K sur l'ardoise n°42 ». Quand il reçoit cet ordre, le processeur l'exécute immédiatement ; c'est pour cela qu'on dit qu'un ordinateur est stupide et ne fait que ce qu'on lui dit.

Quand on veut faire effectuer une tâche par un ordinateur, on doit donc mettre les ordres correspondants sur le tapis roulant, afin que le processeur les lise et les exécute. Une suite de tels ordres est appelée programme. Tous les programmes, même les plus complexes (comme le navigateur Web et même le système d'exploitation), sont en fait une suite d'ordres aussi simples que dans notre exemple. Bien sûr, ces ordres sont beaucoup trop simples pour représenter facilement une opération aussi complexe que, par exemple, l'affichage d'une page Web ; c'est pourquoi il en faut une très longue suite, de la même façon qu'une chose aussi simple qu'un atome permet de construire le cerveau s'ils y en a beaucoup et s'ils sont bien agencés.

On voit bien, cependant, qu'il est très difficile d'exprimer (et de vérifier) le comportement d'un programme comme une très longue suite de tels nombres. C'est pourquoi on a inventé les langages de programmation : des façons beaucoup plus naturelles pour les humains d'exprimer leurs ordres mais qu'on peut toujours traduire en langage machine (la suite d'ordres donnés au processeur). Le premier d'entre eux, le langage d'assemblage, consiste (presque) seulement à donner un nom aux ordres numériques : par exemple, au lieu de « 249 75 42 », on écrira « move 'K' 42 » ; un petit programme appelé assembleur remplacera « move » par « 249 » et « 'K' » par « 75 » que le processeur comprend. Ce n'est pas très compliqué, mais « move 'K' 42 » est déjà bien plus proche de la phrase comprise par les humains, « met K dans l'ardoise n°42 » !

On a par la suite inventé des langages plus évolués, comme Fortran ou le C, qui sont bien moins proches du langage machine et nécessitent donc une importante phase de traduction (appelée compilation) avant d'être compréhensibles par le processeur ; certains sont toujours très utilisés, d'autres ont disparu et il s'en crée de nouveaux tous les ans pour correspondre aux besoins des programmeurs.

Le langage machine est une suite d'instructions qui seront interprétées par le processeur de l'ordinateur. Le nombre et la nature de ces instructions dépendent donc du type de processeur utilisé. Elles sont en nombre limité : déplacement d'un nombre, addition, soustraction, comparaison de deux valeurs, saut vers une autre instruction, etc. Ces instructions ne disent pas grand-chose à un être humain : c'est juste une suite de nombres.

Il est très compliqué d'écrire des programmes en langage machine. À l'origine de l'informatique, c'était pourtant le seul moyen de communiquer avec un ordinateur.

Pour simplifier la vie des programmeurs, on a inventé le langage d'assemblage (aussi appelé, par abus de langage, « assembleur »). Il s'agit toujours d'utiliser les instructions spécifiques du processeur, mais des mots remplacent les nombres.

Voici, par exemple, un extrait de programme écrit pour un processeur Motorola :

Dans cet exemple, on efface un registre (une petite mémoire, comme une ardoise), on y ajoute 1, on compare avec 10 et on recommence la même opération d'addition tant que le registre ne contient pas 10.

Pour être exécuté, un programme écrit en langage d'assemblage doit d'abord être traduit en langage machine grâce à un programme spécial : c'est l'assembleur.

Très vite, on a cherché à simplifier encore le travail des programmeurs en offrant des langages beaucoup plus évolués, et surtout qui ne dépendent plus du processeur utilisé.

Le premier était Fortran, qui est toujours utilisé aujourd'hui. Beaucoup de langages ont été inventés depuis. Certains anciens langages ont été oubliés, certains sont toujours améliorés, d'autres continuent à apparaître aujourd'hui.

Les fichiers d'un programme écrit en langage de haut niveau constituent le code source de ce programme. Comme pour le langage d'assemblage, ils doivent être traduits en langage machine par un programme spécial, le compilateur. Un programme qui a été traduit en langage machine peut être compris par l'ordinateur, mais est beaucoup plus compliqué à comprendre pour un être humain.

Dans pratiquement tous les langages de programmation, certaines notions élémentaires reviennent car c'est à la fois ce que les programmeurs trouvent le plus pratique et ce que les compilateurs manipulent le mieux :

Les commentaires sont des portions du code source ignorées par le compilateur. Ils permettent donc au programmeur d'écrire ce qu'il veut (le plus souvent, des explications) sans rendre son code invalide.

Un exemple de commentaires est donné à la section suivante.

Une variable associe un nom (symbole) à une valeur (qui peut éventuellement changer pendant le déroulement du programme).

Voici un exemple, en Haskell :

Dans de nombreux langages, chaque donnée (une variable par exemple) est associée à une certaine catégorie de valeurs (comme les nombres entiers ou vrai/faux). Cette catégorie s'appelle un type et on dit alors que les données sont typées.

Une fonction est un ensemble d'instructions réalisant une certaine tâche.
Voici un exemple, toujours en Haskell :

On a ainsi défini une fonction maximum qui compare les deux nombres qu'on lui donne. Voyons le résultat :

Voici quelques exemples de langages, mais il en existe une multitude d'autres (JavaScript par exemple, que l'on trouve partout sur Internet).

Le Fortran (abréviation de FORmula TRANslator) est le premier langage de programmation évolué de l'histoire de l'informatique. Créé en 1957 par John Backus chez IBM pour simplifier le dialogue avec la machine et le rendre plus proche du langage humain.

Il est très souvent utilisé pour faire faire à la machine des calculs compliqués dans les domaines scientifiques et techniques.

COBOL (acronyme anglais de COmmon Business Oriented Language) est un langage de programmation créé en 1959.

Le but était de créer un langage de programmation proche du langage naturel humain, avec des phrases complètes rédigées en anglais, sans oublier le point à la fin de la phrase !

Cobol est un langage bavard. Le même petit programme qu'en assembleur donnerait cette ligne d'instruction en Cobol, mais elle devrait être précédée d'une douzaine d'autres pour préciser le contexte :

Le langage COBOL était de loin le langage le plus employé dans les domaines de la gestion et la comptabilité jusque dans les années 1980, et reste toujours utilisé en particulier dans les banques. C'est en partie l'existence de programmes anciens dans ce langage qui a fait craindre le bogue de l'an 2000.

BASIC (acronyme anglais de Beginner's All-purpose Symbolic Instruction Code) est un langage de programmation, inventé en 1964. Il a été rendu célèbre car un interpréteur BASIC équipait tous les premiers ordinateurs personnels dans les années 80.

Comme son nom l'indique, il a été conçu pour être facilement et rapidement appris par un débutant. Ce langage est encore utilisé de nos jours.

Le même petit programme que précédemment donnerait ceci en BASIC :

Le langage C est apparu au cours de l'année 1972 dans les Laboratoires de l'entreprise Bell. Il était développé par Dennis Ritchie et Ken Thompson pour permettre de créer et de maintenir le système d'exploitation UNIX car, à l'époque, aucun autre langage que l'assembleur (qui n'est pas pratique du tout) n'était capable de cela.

C'est aujourd'hui l'un des langages les plus utilisés par les programmeurs : on le retrouve en quantité dans Linux, Windows et de très nombreux autres logiciels.

Voici un exemple d'une boucle, et d'un texte qui va être écrit (ici, le traditionnel « Hello world ») :

Deux caractéristiques intéressantes du C. La variable i (celle qui contient le nombre) doit être déclarée à l'avance. Enfin, un bloc d'instructions (ici une boucle for) est délimité par des crochets. Le point-virgule, lui, sert à terminer une instruction. 
Dans la boucle, printf sert à insérer du texte, ici le traditionnel « Hello, world ! ». Y a été ajouté un \n pour faire un retour à la ligne.

Le langage C++ est une version modifiée du langage C. Il a été inventé par Bjarne Stroustrup entre 1979 et 1983.
Comme les inventeurs du C, Bjarne Stroustrup travaillait chez Bell.

Un code en langage C est très souvent valide en C++. On peut par contre utiliser des constructions en C++ qui n'existent pas en C.

Le C++ est utilisé par beaucoup de programmeurs. Cependant, il n'est pas très facile à apprendre, et est encore moins facile à apprendre que le C. L'aprentissage du langage demande de la patience.
Voici un exemple de code avec une boucle qui va écrire dix fois « Hello World » :

Le langage Java est apparu en 1995. Il a été inventé par James Gosling et Patrick Naughton, qui travaillaient alors pour l'entreprise Sun Microsystems.

À première vue, il ressemble beaucoup au langage C++ (et donc au langage C), ce qui est normal car il s'en inspire. En fait, il y a énormément de différences entre les deux.

Un des objectifs de Java était de permettre de créer des programmes qui fonctionnent sur tous les ordinateurs. C'est quelque chose qui n'est pas facile à faire avec du C++, par exemple. Pour cela, les programmes écrits en Java ne sont pas traduits directement en langage machine. Un logiciel, la machine virtuelle, se charge d'exécuter le programme à la place de l'ordinateur. Comme cela ralentit l'exécution, Java ne peut pas être utilisé lorsque la vitesse est très importante.

Le Java est utilisé par de très nombreux programmeurs et dans beaucoup d'entreprises.

Un jeu très connu codé en Java est Minecraft !

Attention, Java et JavaScript sont deux langages différents, qui ne se ressemblent que par leur nom !

Exemple:



Ce langage a été créé en 1994 par Rasmus Lerdorf pour son site Web. Le programme est exécuté en principe sur un serveur Web (une machine sur laquelle on se connecte pour lire des pages Web). Son principal intérêt est de permettre de fabriquer simplement des pages HTML. Au fil du temps, ce langage s'est enrichi et il peut fonctionner maintenant comme n'importe quel autre langage.

Exemple :

Voilà un langage fortement inspiré au langage C et C++.



Le langage LOGO a été conçu par Seymour Papert et une équipe de chercheurs du Massachusetts Institute of Technology (le MIT) à partir du LISP (langage basé sur le traitement des listes) dont il est une version simplifiée, pour être facilement utilisé par de jeunes élèves. Voici un exemple de programme LOGO (syntaxe Logoplus) qui décrit un algorithme qui transforme une multiplication (ici 3x5) en une suite d'additions répétées (itération).

Exemple 1 :

soit "résultat 0 // Le résultat est initialisé à 0.
répète 3 [ soit "résultat : résultat + 5 ] // On itère dans la variable résultat. 
écrisligne :résultat // On écrit le contenu de : résultat.

/* Ceci est un commentaire encadré. */ 
// Ceci est un commentaire de fin de ligne.

/* *** Fin de l'exemple 1. *** */

Même si la syntaxe du langage LOGO a été pensée pour être simple à utiliser, ce langage n'a pas grand-chose à envier aux autres langages procéduraux (dans les versions actuelles), comme le montre l'exemple 2 qui construit la liste des diviseurs d'un nombre.

Exemple 2 :

pour diviseurs :nombre :début // Début du bloc des calculs "diviseurs".
teste égalité? :début ( racine2 :nombre )
sivrai répondre :début /* Un résultat est exigé. */
teste :début > ( racine2 :nombre )

sivrai répondre " // C'est une fonction.
sifaux[
teste égalité? reste :nombre :début 0
sivrai [ répondre phrase :début phrase diviseurs :nombre :début + 1 :nombre / :début ]
sifaux répondre diviseurs :nombre :début + 1
]fin // Le bloc "diviseurs" se termine ici.

effacetexte /* On efface l'afficheur des résultats. abrév. : efftxt */
écrisligne diviseurs 12 1// On écrit le résultat après être passé à la ligne suivante. abrév. : ecl
/* *** Fin de l'exemple 2. *** */