Pourquoi les ordinateurs peuvent-ils nous apparaître plus précis et plus efficaces que nous et pourquoi peuvent-ils même apparaître "intelligents" ? Une partie de l'explication est technologique. Elle tient au fait que les ordinateurs peuvent calculer très vite et, par conséquent, traiter rapidement de grandes quantités de données. Mais une autre partie de l'explication est plus fondamentale. L'ordinateur a la capacité de combiner des traitements pour en définir de nouveaux plus complexes. Ce principe est général. Les traitements définis par combinaison peuvent à leur tour être combinés pour définir de nouveaux traitements, jusqu'à définir des applications très sophistiquées que vous utilisez. Ces combinaisons sont appelées algorithmes et rien n'est magique dans ce domaine. L'intelligence apparente des machines est le résultat de ces combinaisons répétées, mais surtout de l'intelligence collective des femmes et des hommes qui ont conçu ces algorithmes. Les algorithmes sont traduits dans des programmes informatiques. Ces programmes, logiciels, ou applications réalisent les traitements au sein de vos machines. Et chacun peut être capable de comprendre et d'écrire des algorithmes et des programmes. Nous allons étudier, dans ce module, les principes généraux des algorithmes, des programmes informatiques et donc des traitements informatiques.

En introduction de ce cours, illustrons ces points sur l'exemple d'une application de calcul d'itinéraire par un site Web, une application mobile ou encore un petit ordinateur spécifique qu'on appelle abusivement GPS (le GPS pour "Global positioning System' est un système qui permet de déterminer les coordonnées d'une position exacte sur terre). Tout d'abord, réfléchissons aux informations que doit posséder le programme en pensant à quoi nous aurions besoin si nous devions réaliser cette tâche nous même. Il faut connaître le point de départ qui peut être obtenu par un dispositif technique comme un GPS ou être renseigné par vos soins. Il faut également indiquer la destination et le moyen de transport choisi. Supposons, pour simplifier la présentation, que le logiciel dispose d'une ville de départ, d'une ville destination, que le moyen de transport choisi est la voiture et qu'on recherche l'itinéraire le plus court. Qu'est-ce qu'un itinéraire ? C'est une suite de routes à emprunter pour rejoindre la destination mais nous pouvons aussi représenter un itinéraire par une suite de villes voisines, toujours par souci de simplification. Le programme peut-il disposer de tous les itinéraires possibles entre deux villes quelconques ? La réponse est non car cela nécessiterait bien trop de ressources de stockage.

C'est donc un programme qui va calculer l'itinéraire le plus court entre les villes de départ et de destination à partir uniquement des distances entre villes voisines (sans étape). L'ensemble de ces distances représente déjà un volume de données important mais peut être stocké dans un petit équipement comme un smartphone ou un GPS . Mais un programme ne peut pas non plus calculer tous les itinéraires possibles car, même si une machine calcule vite, le temps de calcul serait trop long et vous n'allez pas de Lille à Paris en passant par Marseille ! Donc ce programme se doit d'être plus "intelligent". Pour cela, il utilise un algorithme de recherche de plus court chemin comme l' algorithme de Dijkstra , issu des travaux de recherche des mathématiciens et informaticiens ayant étudié ce problème. Mais qu'est-ce-qu'un algorithme ? Nous y reviendrons dans ce cours, pour l'instant, considérons qu'un algorithme est une explication très précise de comment résoudre un problème. L'algorithme de Dijkstra est très ingénieux, il décrit comment combiner un nombre raisonnable d'opérations élémentaires (des additions, des comparaisons, des recherches dans l'ensemble des distances) pour calculer le plus court chemin entre un départ et une destination.

Le coeur de notre application de calcul d'itinéraire est donc basé sur un algorithme de recherche du chemin le plus court qui peut être adapté pour calculer le chemin le plus rapide en remplaçant les distances par des temps de parcours. Il peut également être appliqué avec d'autres moyens de transports. Ces algorithmes vont pouvoir être intégrés dans des applications en les combinant avec d'autres calculs pour la reconnaissance vocale, la géolocalisation, etc On construira, par exemple, une application qui - analyse le son de votre voix, - traduit vos paroles en mots et phrases, - identifie des adresses de départ ou de destination, - repère votre position, - interroge un service web sur l'état du trafic routier pour finalement vous indiquer, en temps réel, le chemin le plus rapide. Grâce à ces combinaisons nous obtenons une application qui résout des tâches complexes, qui peut paraître intelligente car ses capacités sont souvent supérieures à celles d'un passager uniquement accompagné de sa vision locale, de ses connaissances et sa carte routière. Toutefois, ce logiciel, reposant sur le génie de ses concepteurs, ne peut résoudre que les tâches pour lesquelles il a été programmé et ne pourra pas gérer des situations imprévues.

Pour conclure, cet exemple montre qu'une application moderne : - interagit avec l'environnement (utilisateur, périphériques dont système GPS , réseau). - qu'elle est construite en composant d'autres applications. C'est ce principe de composition qui permet de définir des algorithmes pour résoudre des problèmes complexes et qui permet de passer d'une machine "bête" manipulant des 0 et des 1 à une machine "intelligente" pouvant réaliser des tâches complexes.

L'exemple a également permis de montrer que malgré les capacités sans cesse croissantes des machines, il faut être attentif à la taille des données mémorisées et au temps de calcul des programmes. Enfin, nous rappelons que l'intelligence supposée de la machine est due à l'intelligence des femmes et des hommes ayant conçu les applications.

Enfin, l'exemple montre également que l'algorithme ou l'application a besoin de données pour fonctionner : les distances entre villes, l'état du trafic, ... L'intelligence apparente de la machine est aussi le résultat de la conjonction de ces données avec ces algorithmes. L'industrie moderne du numérique l'a parfaitement compris et accorde aujourd'hui bien plus de prix aux données qu'elle accumule et partage peu, qu'aux algorithmes qui pour la plupart sont publics.

Dans la suite du cours, nous présentons comment composer des opérations pour définir de nouvelles opérations et discutons des algorithmes, nous présentons les langages de programmation et la traduction des algorithmes en programmes. Nous terminons par l'étude de quelques exemples : comment un correcteur orthographique peut-il corriger vos fautes, comment des programmes peuvent classer des textes dans des thèmes et comment une machine peut jouer aux échecs (et au go) en battant les experts humains.