Rappelons que machines, langages et algorithmes sont intimement liés et comprendre l'une de ces notions ne peut se faire indépendamment des autres. Nous avons introduit les algorithmes sur une machine de base très simple travaillant avec des opérations élémentaires, des mémoires, une unité de calcul et un langage de codage des caractères. Nous avons signalé que l'informatique s'apparentait à un grand jeu de construction. Celui-ci s'applique à la fois pour les données et pour les programmes grâce à des langages informatiques.
En effet, en ce qui concerne les données, si la machine de base travaille avec des 0 et des 1, les langages de description permettent de décrire, dans ce jeu de construction, avec un niveau d'abstraction toujours croissant, les caractères et les nombres, les images, les textes et les tableaux de nombres, les documents structurés, les documents multimédia.
Mais nous l'avons vu, le jeu de construction porte aussi sur les algorithmes. En effet, à partir d'opérations de base sur ces objets complexes, on va pouvoir les agencer dans des algorithmes avec les trois compositions : la séquence, l'alternative et l'itération. Les fonctionnalités de base d'un ordinateur sont très réduites : changer des 0 en 1, effectuer des additions, des comparaisons,... Mais les fonctionnalités développées par ce jeu de construction, nous pouvons à tout moment les considérer comme de nouvelles fonctionnalités de base, plus évoluées. On peut même oublier ces 0 et ces 1 et considérer que l'ordinateur a des fonctionnalités de base dédiées à différents domaines comme manipuler des nombres, des caractères et des textes. Cela peut aussi être un robot qui sait avancer, tourner et repérer des obstacles ; cela peut être un logiciel de dessin vectoriel qui sait se repérer sur une grille, tracer des segments, des cercles, des courbes et colorier ; cela peut être un tableur qui sait traiter des listes de données ; cela peut être un navigateur qui sait gérer des documents du Web. Quelles que soient ces fonctionnalités de base le jeu pourra toujours continuer grâce aux structures de composition que sont la séquence, l'alternative et la répétition.
Mais, si un algorithme est conçu et lu par des humains, il doit ensuite être traduit pour pouvoir être exécuté par une machine. Pour cela, il faut traduire l'algorithme dans un langage compréhensible par la machine. Il faut donc disposer d'un langage commun entre l'humain et la machine avec la contrainte forte d'être compréhensible par les humains tout en étant suffisamment formel et précis pour ne pas laisser d'ambiguïté à la machine. C'est le rôle des langages informatiques pour les traitements.
Il existe, en réalité, de nombreux langages dépendants du mode d'interaction entre l'humain et la machine. Vous pouvez, par exemple, interagir avec une application par un langage graphique à base de menus ou par des clics de souris ou par l'action de frapper sur des touches de clavier. Pour apprendre à vous servir d'une application, vous allez apprendre ce langage : quelle est l'action réalisée par le choix de cet élément de menu, quel est l'effet d'un clic de souris sur cet élément, quel est l'effet de l'appui sur cette combinaison de touches. Mais il est difficile d'automatiser ces actions dans des programmes. On préfère alors utiliser un langage écrit. Lorsqu'il s'agit de traduire un algorithme par un texte à destination de la machine, on utilise des langages appelés langages de programmation .
Il existe de nombreux langages de programmation, qui fournissent tous ces structures de composition (séquence, alternative, itération) et diffèrent par les fonctionnalités de base mises à disposition. Mais comme pour les langues naturelles ils diffèrent aussi par leur règles de syntaxe et de grammaire. Les textes écrits dans ces langages sont des programmes qui sont la traduction d'algorithmes dans le langage choisi. Le choix d'un langage va donc dépendre des fonctionnalités de base du langage, des besoins de l'application, des performances souhaitées, ... et des goûts du programmeur. Ces langages et les programmes se doivent d'être compréhensibles par l'informaticien(ne) mais comme ils sont destinés à être exécutés par la machine, ils respectent des règles très strictes de syntaxe. Ceci explique qu'une machine va refuser une commande mal écrite alors qu'un humain acceptera une phrase mal formée dès qu'il en comprend le sens. Cette rigueur nécessaire et la difficulté d'apprendre un langage de programmation effraient beaucoup de monde.