L’avenir de la programmation (1/6) : programmer, une activité culturelle ?

L’ordinateur est partout. Pourtant, tout est fait pour nous éviter d’en comprendre les mécanismes. Ce qui fait de nous un peuple d’analphabètes, trop occupé à jouer avec d’anciens médias (texte, vidéo, radio) pour réellement s’interroger sur l’architecture qui sous-tend le système.

“Programmer ou être programmé” clame Douglas Rushkoff dans son dernier livre. Pour lui, pas de doute, le software est devenu le média d’aujourd’hui. Et la clé du pouvoir réside dans notre capacité à programmer des systèmes.

Cette constatation n’est pas neuve. Dans un essai assez ancien (1999,.pdf) mais toujours d’actualité l’auteur de science-fiction Neal Stephenson revisite les deux peuples inventés par HG Wells dans sa Machine à voyager dans le temps, les Morlocks et les Elois. Les Elois semblent, à première vue, vivre dans un paradis néoprimitiviste, plein de ressources, de beauté et d’harmonie. Les monstrueux Morlocks, eux, peuplent les égouts, et font tourner la machinerie, l’infrastructure industrielle qui permet aux Elois d’habiter leur Eden sans se poser de questions (en échange, les Morlocks mangent un peu les Elois).

Les Morlocks dans une des versions du film adapté de l'oeuvre de WellsLes Elois et Morlocks existent aujourd’hui, explique Stephenson : Les Morlocks sont ceux qui effectuent tout le travail intellectuel destiné à rendre compréhensible et facile d’accès une masse d’informations qui seraient, sinon impossibles à obtenir pour le commun des mortels (les nouveaux Elois), du moins difficile à collecter. Seule différence d’importance entre les Morlocks de Wells et leurs héritiers contemporains, précise Stephenson : les nouveaux Morlocks ne vivent plus dans les souterrains, « ils préfèrent les vols en première classe et boire du café haut de gamme, des luxes pour lesquels les Elois émerveillés sont tout à fait prêts à payer ».

Stephenson prend comme exemple Disney World et notamment l’attraction « Maharajah Jungle Trek« , qui reproduit dans tous ses détails les ruines d’un palais indien du 16e siècle. Mais pour réaliser cette prouesse, des « Morlocks » se sont rendus en Inde, ont étudié l’architecture et la culture indienne. Et il ne s’agit pas d’un simple décor : l’ensemble de l’attraction est conçu pour faire passer un message écologique simple sur la nécessité de vivre en harmonie avec la nature. Il s’agit en fait d’une interface graphique (Stephenson parle même d’interface sensorielle), d’une métaphore destinée à exprimer de manière immédiate une idée qui serait beaucoup plus difficile à faire passer par les canaux du langage ou de l’écriture.

On retrouve la situation en informatique précise Stephenson : la plupart des programmes, des interfaces, sont des métaphores. « Ce que les gens achètent lorsqu’ils achètent un système d’exploitation, c’est un ensemble de métaphores ». Fondamentalement, explique-t-il, « Apple/Microsoft et Disney sont dans le même business : court-circuiter une communication verbale laborieuse à l’aide d’interfaces richement conçues ». Au risque bien sûr que la simplification inhérente à ce court-circuit ne réduise considérablement nos possibilités de réflexion et d’action.
Toutefois, il ne faut pas toujours prendre la chose négativement. Nous n’avons ni les moyens, ni le temps d’apprendre les fondements de tout ce dont nous avons besoin : imaginez devoir programmer en langage machine votre propre moteur de blog ! Nous sommes tous des Elois la plus grande partie du temps. « Parfois, conclut Stephenson, « j’ai juste envie d’aller à Disneyland ».

La pensée computationnelle

Si nous voulons comprendre l’importance de la programmation, peut-être faut-il commencer par dégager celle-ci de son association quasi obligatoire avec les machines. Programmer est une activité humaine, une forme de pensée.

coverL’un des textes fondamentaux de l’enseignement de la programmation « Structure and Interpretation of Computer Programs » (qui fut, de 1984 à 2008, le manuel de base de l’enseignement informatique au MIT) ne s’y trompe pas lorsque ses auteurs proclament dès l’introduction : « Nous voulons établir l’idée que le langage informatique n’est pas seulement un moyen de réaliser des opérations, mais plutôt un nouveau médium formel permettant d’exprimer des idées concernant la méthodologie. Les programmes doivent d’abord être écrits pour être lus par les gens et seulement de manière secondaire pour être exécutés par des machines. »

De fait, en 2010, l’Académie américaine des Sciences a sorti les résultats d’un atelier de discussion sur la « pensée computationnelle ». Parmi les intervenants, quelques pointures dont les noms reviendront souvent dans les prochains articles de ce dossier : Mitchel Resnick du Medialab (créateur des langages Starlogo et Scratch, inventeur des « briques programmables », qui allaient devenir Lego Mindstosms) ; Gerald Sussman, l’un des auteurs de « Structure and Interprétation »… ; Uri Wilenski, créateur du NetLogo, qui comme Starlogo, se destine à simuler des systèmes complexes ou encore Alan Kay, inventeur du langage Smalltalk, et avec lui, de la notion de programmation orientée objet.

Les participants ont cherché à déterminer les contours de ce qu’ils appellent la « pensée computationnelle » : une forme de raisonnement qui ne serait ni les mathématiques, ni l’ingénierie, mais qui aurait de fortes similitudes avec elles.
Ainsi, pour Resnick, « la programmation, comme l’écriture, est un moyen d’expression et un point d’entrée pour développer une nouvelle façon de penser. »

Gerald Sussman, essaie lui de montrer l’universalité de la pensée computationnelle en montrant comment elle peut aider à décrire une activité comme la poésie : La tâche d’un poète ou sa problématique consistent produire un mécanisme qui induise une émotion chez le lecteur. Le poète de talent prend les composants qui participent d’un état émotionnel et les réunit de manière juste – il y a des bogues et il doit y avoir des espaces d’interfaçage et toutes ces sortes de choses – afin de produire une plus grande structure qui a cette propriété. » Sussman a cité un essai d’Edgar Allan Poe qui décrit le processus de composition poétique comme un algorithme.

rp8ns4ypDe fait, certains ont été jusqu’à élaborer une pensée computationnelle sans ordinateurs. Dans le rapport de l’Académie des Sciences Joshua Danish de l’université de l’Indiana raconte ainsi son expérience sur une simulation, la collecte du miel par les abeilles : un algorithme propre aux systèmes « multi-agents” mais qui fut, ici, réalisé “dans le monde réel” par un petit groupe d’enfants, qui devaient apprendre à élaborer un modèle de l’abeille, et mimer la recherche du miel et la communication (par la danse) aux autres membres de la ruche. Autre expérience mentionnée dans le rapport de l’académie, celle effectuée par Tim Bell, de l’université de Canterbury (.pdf), au cours de laquelle des enfants portant des tee-shirts colorés devaient, en tenant compte d’un certain nombre de contraintes, échanger des fruits distribués aléatoirement jusqu’à ce que chacun possède un fruit de la couleur de son tee-shirt. Ils reproduisaient ainsi dans le monde réel une opération algorithmique bien connue des professionnels du réseau sous le nom de « routage ».

Bien entendu la pensée computationnelle partage de nombreux points communs avec les mathématiques et l’ingénierie, mais on ne saurait identifier ces différentes approches cognitives. Ainsi, les mathématiques nous enseignent ce que sont les choses, l’informatique comment les manipuler.

Pour illustrer cela, Sussman explique que « la pensée scientifique traite de pommes et d’oranges et se demande comment ces pommes et ces oranges peuvent être différentes ou semblables. Le sujet de la pensée mathématique, ce sont les sphères, avec les aires et volumes qu’elles possèdent (…). La pensée computationnelle cherche à comprendre comment un groupe peut couper et partager une pomme afin que chaque personne soit sûre qu’elle a obtenu une juste part de la pomme. »

L’ingénierie aussi se base sur des principes différents : l’ingénieur travaille avec le monde physique, il doit tenir compte d’un certain nombre de contraintes qui lui sont données d’emblée. Le programmeur est bien plus libre, explique encore Sussman dans le compte rendu de l’atelier : « au lieu d’être limités, comme nous sommes dans le génie électrique ou mécanique, par des tolérances et ce genre de choses, nous ne sommes limités que par les choses auxquelles nous pouvons penser, par la complexité que nos esprits sont en mesure de contrôler. « Autrement dit », précise le rapport, « la pensée computationnelle invente les abstractions qu’elle manipule ».

On peut donc voir un programme comme une séquence d’instructions destinée à produire un résultat précis sur une machine ou, au contraire, comme un moyen d’exprimer ses idées. De ces deux philosophies dérivent deux manières de travailler, qu’on peut comparer (en la détournant de son sens initial) à la fameuse opposition décrite par Éric Raymond, entre la “cathédrale » et le “bazar”. Dans la “cathédrale” vous établissez des plans, construisez vos organigrammes, l’architecture de vos données, et petit à petit vous mettrez au point votre projet, généralement au sein d’une équipe où le travail est divisé de manière explicite. Vous êtes un programmeur professionnel !

Dans le second cas, vous vous moquez du résultat final, et vous voulez juste matérialiser à la “va-vite” une de vos idées pour voir où elle va vous mener. Ce que vous attendez de votre environnement de programmation n’est donc certainement pas la possibilité de définir avec précision une architecture de données très élaborée. Vous cherchez à coder quelques lignes “à la volée”, voir immédiatement le résultat, modifier éventuellement le code pendant l’exécution, ou en tout cas sans passer pas une pénible procédure de compilation/sauvegarde.

Un environnement de développement comme Squeak, issu de Smalltalk, se définit justement comme un “traitement d’idées” en lieu et place du traitement de texte. Dans Processing, un langage de programmation destiné avant tout aux designers, on ne parle même plus de programmes ou de fichiers, mais de croquis, d’esquisses (sketchbook) afin de mettre en avant le côté improvisé, spontané de la programmation.

La programmation de demain

Aujourd’hui peut-être plus que jamais, la programmation doit faire partie de la culture générale. Car le visage de l’informatique est en train de changer. Il ne suffit plus de créer une page web ou même un jeu vidéo. L’informatique envahit une multitude de domaines qui vont changer radicalement notre vie. Mais comment programme-t-on l’Internet des objets, les robots, l’ADN ou les ordinateurs quantiques ? Comment créer des simulations de systèmes complexes comme les réalités sociales ou écologiques ? Même le web est en train de se transformer sous nos yeux : qu’en est-il du “web sémantique”, du “cloud computing” ?

Dans les articles qui vont suivre, nous allons chercher à comprendre les bases de la programmation de demain, sans entrer dans les aspects techniques liés à l’architecture des machines actuelles : pas de discussion sur les compilateurs versus interpréteurs, sur les bienfaits de la garbage collection ou les subtilités de l’instruction malloc. Nous allons plutôt tenter de saisir comment la programmation incarne de nouvelles logiques, de nouvelles manières de penser. De plus, cela va nous permettre d’aborder sous un angle pratique certains domaines particulièrement abstraits, comme la physique quantique ou la biologie synthétique.

Mais avant toute chose, nous essayerons de répondre à la première question, peut-être la plus importante : si je n’ai jamais touché à un langage de programmation, je m’y mets comment ?

Rémi Sussan

Retrouvez le dossier L’avenir de la programmation :

À lire aussi sur internetactu.net

0 commentaires

  1. Très intéressant article – j’attends la suite avec impatience. Deux remarques:

    1) Votre première proposition est essentielle: “Tout est fait pour nous éviter d’en comprendre les mécanismes”. Pour ceux dans mon genre qui sont vraiment tombés dans les tripes des machines quand ils étaient petits, l’ignorance technique de la vaste majorité des “digital natives” est navrante. Et ce n’est pas neutre sociologiquement! De simples utilisateurs, virtuoses de la deuxième phalange des pouces mais pas beaucoup plus, sont des consommateurs beaucoup plus dociles. Plus on prétend vous “simplifier la vie”, plus l’objectif d’avoir barre sur vous et de vous mettre sous contrôle devient flagrant.

    2) Attention à l’excès inverse. Autant je suis favorable à votre idée d’enseigner la compréhension de la programmation (plus que la programmation technique elle-même, d’ailleurs), autant il me semble nécessaire de laisser sa place au non-déterministe donc au non programmable. Heureusement que les « Misérables » et le Requiem de Mozart ne sont pas programmables. Sinon, quel monde d’abrutis…

  2. Très bel article, et c’est bien de reconsidérer ce qu’est réellement la programmation ou en tout cas ce qu’il devrait être. Vivement la suite !

  3. Un bon angle d’approche de l' »outil » informatique .
    @ Pierre
    « Pour ceux dans mon genre qui sont vraiment tombés dans les tripes des machines quand ils étaient petits, l’ignorance technique de la vaste majorité des “digital natives” est navrante. »

    +1 !! c’est incroyable le fossé existant dans le rapport nombre d’utilisateurs/nombre d’utilisateurs avertis .

    Il faut éduquer les gens , pas les abêtir . Les ordinateurs et internet sont des outils , leur rôle est de nous servir , pas le contraire !

    Question subsidiaire : à quelle date pourra-t-on bénéficier de la suite de cet excellent article ?

  4. @Aymeric:
    Merci de votre post… Un complément: les sublimes dirigeants de notre beau pays témoignent d’une incompréhension stupéfiante des déterminants et des enjeux sociétaux des NTIC. J.P. Manach nous en a d’ailleurs donné un florilège dans son livre passionnant « La vie privée, un problème de vieux cons? » (pp. 48-49). Or on a toujours peur de ce qu’on ne comprend pas. Et comme la fabrication de peurs irrationnelles est un excellent mode de gouvernement, ce n’est certainement pas de nos politiques que viendra la volonté d’éducation et de responsabilisation intelligente que les habitués de ce site appellent de leurs voeux…

    PS: un p’tit coup de brosse à reluire à M. Manach: bravo pour votre définition du vieux con (p. 216). Il a une peur bleue de l’Internet et des réseaux sociaux, mais il se fiche des RFID, de la vidéosurveillance et de l’interconnexion des fichiers, puisqu’il « n’a rien à cacher ». Tout est dit. Et merci aussi pour vos rappels historiques, qui pourraient être utiles aux grands intellectuels qui nous dirigent.

  5. @Aymeric (question subsidiaire):
    bientôt bientôt, la suite est en train de cuire 🙂

  6. @pierre
    merci , difficile d’envisager « la solution » , tout le système sacrifie au dieu argent qui d’un outil est devenu notre maître …

    @Rémi Sussan
    merci , il me tarde de lire la suite .

  7. Le problème de cet article c’est qu’il ne donne pas de définition de « Programmer ». C’est Quoi « Programmer » ?
    Pour moi, Programmer, c’est assembler des blocs d’instructions en vue d’obtenir un traitement automatisé d’informations.

    Est-ce culturel ? Oui parce qu’il s’agit de se poser des questions pour résoudre un problème ! Oui parce qu’il faut être créatif et avoir de l’imagination !
    Comme pour la musique ou la peinture l’aspect technique ne vient qu’après.

    http://fesc.asso.fr/-Atelier-Robotique-Ludique-

  8. C’est ce que nous dit Mitch Resnick dans sa TED Conférence. De la même manière que nous avons appris à lire pour ensuite apprendre en lisant des livres. Nou allons apprendre à programmer pour ensuite apprendre en programmant.