Débattre

La pensée informatique

Peut-on définir un mode de pensée spécifique à l'informatique ? La pensée informatique est présentée ici comme un ensemble d'attitudes et de connaissances universellement applicables, que nous gagnerions toutes et tous à apprendre et à maîtriser.

La pensée informatique s'est élaborée à partir de l'analyse de la puissance et des limites des processus de calcul, qu'ils soient exécutés par des humains ou par des machines. En effet, grâce aux méthodes et aux modèles de l'informatique, nous osons nous attaquer à des problèmes et concevoir des systèmes qu'aucun être humain ne serait capable d'appréhender à lui tout seul. La pensée informatique nous confronte donc à l'énigme de l'intelligence que pourrait avoir une machine. Qu'est-ce qu'un humain peut réaliser mieux qu'une machine, et réciproquement ? D'un point de vue plus théorique, elle cherche à répondre à la question : qu'est-ce qui est calculable ? Aujourd'hui, nous ne sommes en mesure d'apporter que des réponses partielles à de telles interrogations.

© François Cointe

La pensée informatique, c'est fondamental

La pensée informatique constitue pour nous tous un savoir fondamental, pas seulement pour les informaticiens. Au même titre que la lecture, l'écriture ou l'arithmétique, nous devrions la transmettre à nos enfants. Alors que l'imprimerie a permis la diffusion des trois premiers savoirs (lire-écrire-compter), les technologies numériques véhiculeront cette pensée informatique. Mais la situation est particulière, car c'est précisément cette pensée informatique qui a servi à développer ces technologies.

Adopter un mode de pensée informatique conduit à résoudre des problèmes, à concevoir des systèmes et à comprendre le comportement humain différemment, en s'appuyant sur les concepts fondamentaux de la discipline informatique et en y incluant une panoplie d'outils intellectuels qui reflètent l'étendue de la science qu'est l'informatique.

Concrètement, face à un problème donné, se posent les questions suivantes : quel est son degré de difficulté ? et quel est le meilleur moyen de le résoudre ? L'informatique, parce qu'elle s'appuie sur des fondations théoriques solides, nous offre des outils pour répondre à ces questions. Pour déterminer la difficulté d'un problème, il faut alors prendre en compte la puissance de la machine, du dispositif de calcul qui sera utilisé pour trouver la solution. Cela dépendra donc de l'ensemble des instructions que la machine peut exécuter, de ses ressources disponibles et de son environnement d'exploitation.

Pour résoudre un problème efficacement, il faut se demander quelle est la marge d'erreur acceptable. Ainsi, on peut se demander si une solution approchante suffit (sans qu'il soit nécessaire de trouver une solution exacte), s'il est avantageux d'utiliser l'aléatoire pour explorer des possibilités, ou encore s'il est autorisé d'obtenir des faux positifs ou des faux négatifs (trouver des solutions erronées ou au contraire omettre certaines solutions). Penser informatiquement, c'est reformuler un problème qui nous semble difficile en un problème que nous savons résoudre. Nous pouvons par exemple réduire d'abord le problème à un sous-problème plus simple, ou au contraire l'englober dans un problème plus général, ou bien le ramener à un problème équivalent mais formulé différemment, ou encore chercher à simuler des solutions avant de les appliquer.

Penser informatiquement, c'est faire appel au raisonnement par récurrence. C'est aussi utiliser les possibilités offertes par le calcul parallèle.

Penser informatiquement, c'est s'efforcer de nommer correctement les objets que l'on manipule, de les classer selon leurs types, de bien définir leurs propriétés, avant de chercher à les manipuler. Il s'agit de bien peser le pour et le contre avant, par exemple, de donner plusieurs noms différents à un même objet.

Penser informatiquement, c'est manipuler conjointement les informations statiques que sont les données et les informations dynamiques que sont les actions et les instructions. C'est juger une méthode ou un programme non seulement en fonction de sa justesse et de son efficacité, mais aussi de son élégance.

Penser informatiquement, c'est utiliser l'abstraction et la décomposition quand il s'agit d'affronter une tâche d'une grande complexité ou de concevoir un système d'une grande complexité. C'est être capable d'opérer une séparation judicieuse entre ce qui est plus ou moins difficile à résoudre, de choisir une représentation appropriée pour un problème donné ou de modéliser les aspects pertinents d'un problème pour le rendre abordable. C'est mettre en avant des propriétés stables pour décrire de manière synthétique le comportement d'un système.

Penser informatiquement implique de croire qu'on peut sans danger utiliser, modifier et influencer un immense système complexe, même si l'on n'en comprend pas tous les détails.

Penser informatiquement implique d'anticiper l'utilisation dès le stade de la conception : prévoir une structure modulaire adaptée à de nombreux utilisateurs, prévoir de stocker de l'information dans une mémoire cache pour rendre de futurs accès plus rapides...

Penser informatiquement, c'est envisager le pire événement, se baser sur lui pour prévoir des moyens de prévention, de protection et de restauration, et proposer comme solutions la redondance, le contrôle des dommages et la correction d'erreurs.

Penser informatiquement revient à trouver pour chaque situation un équivalent dans le domaine informatique : un embouteillage est vu comme un interblocage, lorsque deux processus qui s'attendent mutuellement bloquent le système, un contrat est vu comme une interface, qui permet à deux entités d'interagir... Dans l'organisation de ses rendez-vous, il s'agit d'apprendre à éviter les situations de concurrence, comme lorsque deux processus tentent d'accéder simultanément à la même ressource.

Penser informatiquement, c'est utiliser des raisonnements heuristiques pour trouver des solutions. À tout moment tenir compte de l'incertitude. Inlassablement chercher, explorer, inventorier, classer, pour débusquer les meilleures stratégies ou mettre à jour les contre-exemples. C'est aussi faire des compromis : entre le temps et l'espace, entre la puissance de calcul et la capacité de stockage.

Penser informatiquement signifie beaucoup plus que savoir programmer, cela nous donne une chance d'utiliser plusieurs niveaux d'abstraction.

La pensée informatique, c'est utile au quotidien

Examinons quelques exemples de la vie courante. Quand votre fille va à l'école, elle met dans son cartable les livres dont elle a besoin, c'est du « stockage prévisionnel d'informations ». Quand votre fils perd ses gants et que vous lui suggérez de retourner sur ses pas, cela s'apparente à du « backtracking ». À quel moment devez-vous arrêter de louer des skis pour décider d'en acheter ? : l'« optimisation prévisionnelle » vous permet de le déterminer. Quand vous calculez quelle file choisir à la caisse du supermarché, c'est de la « modélisation des performances d'un système multi-serveurs ».

Pourquoi votre téléphone continue-t-il à fonctionner pendant une panne d'électricité ? C'est parce qu'il est autoalimenté par les fils du téléphone eux-mêmes : un bon exemple de tolérance aux pannes et de redondance de conception ! Comment les tests de Turing arrivent-ils à discriminer les ordinateurs des humains ? En particulier, pourquoi l'analyse de l'écriture manuscrite, dans les formulaires « CAPTCHA », est-elle un excellent moyen d'identifier un humain ? C'est parce que ces tests exploitent la difficulté qu'ont les agents informatiques à résoudre des problèmes qui font appel à des capacités cognitives.

© François Cointe

La pensée informatique sera intégrée à la vie de tous les jours, quand les termes « algorithme » et « précondition » feront partie du vocabulaire usuel, quand le non-déterminisme et le ramasse-miettes auront chez Monsieur Tout-le-monde la signification courante parmi les informaticiens. Les enfants dessineront alors les arbres avec la racine en haut et les branches vers le bas, comme en algorithmique.

Nous sommes déjà témoins de l'influence de la pensée informatique sur les autres disciplines scientifiques. Par exemple, les méthodes d'apprentissage automatiques ont transformé les statistiques. En effet, l'apprentissage statistique est utilisé pour résoudre des problèmes d'un ordre de grandeur inimaginable il y a quelques années. De fait, les départements de statistiques dans toutes sortes d'organisations embauchent des informaticiens et finissent par se confondre avec des instituts d'informatique théorique.

L'intérêt que les informaticiens portent à la biologie a pour origine leur confiance dans le bénéfice que les biologistes peuvent tirer de la pensée informatique. La contribution de l'informatique à la biologie va bien au-delà de la capacité à rechercher des motifs dans de très grandes masses de données. L'espoir est que les structures de données et les algorithmes – nos abstractions et nos méthodes informatiques – puissent représenter la structure des protéines d'une manière qui permette d'en élucider la fonction. Ainsi, la biologie computationnelle change la vision que les biologistes ont de leur discipline.

De même, la théorie computationnelle des jeux est en train de changer la façon dont les économistes abordent leur discipline, la simulation à l'échelle nanométrique la façon de penser des chimistes et la modélisation numérique de phénomènes physiques celle des physiciens.

Bientôt, cette façon de penser fera non seulement partie du bagage des scientifiques, mais aussi de tout un chacun. La pensée informatique en sera au même stade demain que celui où l'informatique ubiquitaire se trouve aujourd'hui. L'informatique ubiquitaire qui était le rêve d'hier devient la réalité d'aujourd'hui, de même la pensée informatique sera la réalité de demain.

Ce qu'est vraiment l'informatique et ce qu'elle n'est pas

L'informatique, c'est l'étude du calcul, c'est-à-dire de ce qui peut être calculé mécaniquement. Elle confère ainsi à la pensée informatique les caractéristiques suivantes :

Conceptualiser n'est pas programmer
La programmation permet d'implémenter la pensée informatique, mais celle-ci ne s'y réduit pas. Penser comme un informaticien va bien au-delà de la capacité à programmer, cela requiert de penser à différents niveaux d'abstraction.

Qui dit mécanique ne dit pas routinier
La pensée informatique est un savoir fondamental qui doit être partagé par tous pour vivre dans nos sociétés modernes. Il s'agit bien d'une pensée, pas simplement de calcul mécanique au sens de routinier. Paradoxalement, la pensée deviendra routinière le jour où l'informatique surmontera le grand défi qui se pose à l'intelligence artificielle et produira des ordinateurs capables de penser comme les humains. À supposer que ce jour arrive...

Aux humains de penser, aux ordinateurs de calculer
La pensée informatique est un moyen mécanique pour les humains de résoudre des problèmes. Aux ordinateurs le barbant et le répétitif. Aux humains les idées malignes et imaginatives. À nous, les humains, grâce aux ordinateurs, d'utiliser notre intelligence pour nous confronter à des problèmes que nous aurions délaissé avant l'âge du calcul et pour construire des systèmes qui ne sont limités que par notre imagination.

Un complément à la pensée mathématique et à la pensée technologique
L'informatique s'appuie sur les mathématiques, étant donné que comme toutes les sciences, elle se fonde formellement sur elles. L'informatique s'appuie aussi sur la pensée technologique, étant donné que nous construisons des systèmes qui interagissent avec le monde réel.

Un monde de contraintes et de liberté
Les contraintes des calculateurs obligent à penser en termes de calcul, c'est-à-dire informatiquement, et pas seulement mathématiquement. Mais la liberté de construire un monde virtuel permet à nos ingénieurs de fabriquer des systèmes qui vont bien au-delà du monde physique.

De nouvelles idées, pas que des avatars
Notre vie quotidienne ne va pas seulement être peuplée des avatars logiciels et matériels que nous produisons. Les concepts informatiques que nous utilisons pour affronter et résoudre des problèmes, organiser notre vie de tous les jours, communiquer et interagir avec les autres, vont nous conduire à modifier notre mode de pensée.

Allons enseigner la pensée informatique à nos enfants !

© François Cointe

La pensée informatique sera notre réalité quand elle sera vraiment partagée par toutes et tous, au quotidien, intégrée dans l'aventure humaine pour que nous devenions tous ensemble les bâtisseurs de la société numérique de demain. Beaucoup de gens assimilent encore l'informatique à la programmation, avec un spectre étroit d'offres d'emploi. Nombreux sont ceux qui pensent que la recherche fondamentale en informatique est terminée et qu'il ne reste plus que l'ingénierie.

Et pourtant, la pensée informatique est une perspective qui peut guider les éducateurs, les chercheurs et les praticiens. En particulier, nous devrions prioritairement toucher les lycéens, ainsi que leurs professeurs et leurs parents, pour leur envoyer ce double message que l'informatique est un univers de problèmes ludiques, intellectuellement séduisants et scientifiquement stimulants à explorer, avec pour seules limites notre curiosité et notre créativité, non sans noter qu'après des études en informatique, on peut faire ce que l'on veut, s'orienter vers différentes branches professionnelles.

Créons des modules sur « les chemins de la pensée informatique », pour les étudiants en licence, toutes disciplines confondues. Parallèlement, présentons aux lycéens les méthodes et les modèles informatiques. Éveillons l'intérêt d'un large public pour l'aventure intellectuelle de notre discipline.

Ainsi nous pourrons communiquer la joie, l'enthousiasme et le dynamisme de l'informatique, dans le but de diffuser largement la pensée informatique.

Nous remercions Jeannette Wing d'avoir accepté que nous adaptions son article Computational Thinking paru dans les Communications de l'ACM vol. 49, n° 3, Mars 2006, la première traduction française par Pierre Lescanne ayant été publiée en décembre 2008 dans le bulletin de l'association Specif.

Niveau de lecture

Aidez-nous à évaluer le niveau de lecture de ce document.

Il vous semble :

Si vous souhaitez expliquer votre choix, vous pouvez ajouter un commentaire (qui ne sera pas publié).