睦勝 Geek
Qui sait quand il faut combattre et quand il faut s'en abstenir sera victorieux.

[REFLEXION] N'apprenez pas à coder, apprenez à penser !


04/07/2014

Il semblerait que le monde entier essaie d'apprendre à coder : code.org a une floppée de célébrités de tous horizons comme Bill Gates (Microsoft), Mark Zuckerberg (Facebook) mais aussi Will.i.am (Black Eyed Peas) ou Chris Bosh (NBA - Miami Heat) qui vous disent que n'importe qui peut coder; des CoderDojo fleurissent un peu partout dans le monde; le Royaume-Uni en a même mis au programme scolaire.

Je pense que cette mouvance est un peu déplacée. Comprenez-moi bien, je crois sincèrement que le monde tournerait un peu plus rond si tout le monde avait quelques notions de programmation mais coder ne devrait pas être le but final. Les ordinateurs et la programmation ne sont que des outils, des moyens et non une fin en soi.

Le but réel devrait être d'apprendre à tous une nouvelle façon de penser. En d'autres termes, il faudrait enseigner ce que les anglophones appellent "Computer science", la science de l'informatique et non pas juste à coder. Je différencie ce que nous appelons, nous, "informatique" de "computer science" parce que trop souvent et surtout en classe, l'informatique se résume à utiliser un navigateur pour chercher des lolcats sur Google, un tableur et un traitement de texte.

Dans ce post, je tâcherai de faire la distinction entre "Computer Science" et programmation ainsi que d'expliquer pourquoi rester focalisé sur le bon cheval est essentiel dans la réussite du mouvement.
Mais si vous préférez une explication en vidéo et en anglais, je vous recommande vivement le TED Talk de Simon Peyton Jones, chercheur chez Microsoft à Cambridge, qui a pas mal inspiré ce billet :

Toujours là pour une version écrite ? super ! Commençons par poser une question-clé : Pourquoi devriez-vous vous soucier de la programmation ou de la science de l'informatique en général ?

Comme le faisaient Nietzsche, Rimbaud, Kant ou Rousseau, pour répondre à cette question, allons nous balader :

Bienvenue dans le monde réel

Vous êtes probablement en train de lire ce billet dans Chrome ou Firefox sous Windows ou OS X sur un ordinateur fixe ou portable, ou encore sous Safari ou Chrome sous iOS ou Android sur un smartphone ou une tablette. Je suppose aussi que vous avez passé un peu de temps à lire vos mails, sur Facebook ou sur Youtube. Une grande partie de votre vie est sur des ordinateurs de nos jours : votre dossier médical est sur une base de données; votre CV est sur LinkedIn; vous utilisez Google et Facebook pour faire votre marché et Amazon pour finaliser l'achat; vous remplissez votre feuille d'impôts en ligne; vous gérez votre argent en ligne et vous jouez peut-être même avec des devises numériques.

Maintenant, levez vos yeux de votre ordinateur : dans votre poche ou votre sac à main ou sur un bureau pas loin, il y a probablement un smartphone. Il est bardé d'un GPS, d'un appareil photo, d'un écran tactile et d'une tonne d'applications. Si vous êtes dans votre salon, vous avez aussi probablement un téléviseur LCD branché à une box, un lecteur DVD et une console de jeux. Les films, la musique et les jeux que vous avez sont pleins de signaux informatiques vidéos et audio.

Sortons un peu. Etes-vous passé à côté de votre voiture ? Les véhicules modernes sont conçues à l'aide de logiciels, construites dans des usines pleines de robots et embarquent une armée d'ordinateurs. Si vous conduisez (surtout ne faites pas ça en lisant ce billet !), vous pourriez utiliser Google Maps pour trouver votre chemin, Foursquare pour trouver un restaurant ou TripAdvisor pour trouver un hébergement. Maintenant levez les yeux. Quelque part au dessus de votre tête il y surement un avion qui passe en pilotage automatique avec du Wi-fi à bord et des systèmes de loisirs et ils communique constamment avec d'autres avions, des tours de contrôle et avec son avioneur. Et encore plus loin au dessus se trouvent des satellites et des stations spatiales en orbite autour du globe qui prennent des photos, mesurent les variations météo et relaient des appels téléphoniques.

Le logiciel est en train de dévorer le monde. Et ce n'est qu'un début. Avant même de vous en rendre compte, vous porterez de la technologie, verrouillerez vos portes à l'aide d'ordinateurs, utiliserez des robots pour livrer des colis et faire le ménage, fabriquerez vos propres appareils électroniques, dirigerez votre propre usine, vivrez en réalité virtuelle, voyagerez dans des voitures qui se conduisent seules et même dans l'espace !

La matrice est partout

Absolument toute la technologie que je viens de décrire est commandée par du logiciel. Dans tous les aspects de votre vie, vous êtes entouré de code. Et la quantité de code ne va qu'en croissant.

Mais ce n'est pas parce que la technologie est omniprésente qu'on doit l'étudier à l'école. Prenons un exemple : nous prenons tous l'avion mais obtenir votre licence de pilote ne fait pourtant pas partie du programme scolaire.

Ceci dit, les outils qui vous permettent de comprendre et d'appréhender le vol en avion font bel et bien partie du programme :

  1. La physique et les mathématiques vous aident à comprendre les notions de gravité, de force, de pression, de vélocité, de friction et de portance.
  2. La biologie vous apprend ce qui arrive au corps humain en haute altitude où l'oxygène se raréfie et ou les températures sont extrêmement basses.
  3. L'histoire décrit comment les avions ont été développés, comment ils ont évolué et leur rôle dans les domaines migratoire, touristique, commercial et militaire.

Votre bac acquis, vous avez une idée assez précise de ce qu'est un avion, comment il fonctionne et comment l'utiliser de manière sûre. Les matières générales comme la physique, les maths, la biologie et l'histoire vous ont appris quoi penser sur un vaste spectre de domaine, y compris l'aéronautique. Cet aspect vient, en quelque sorte, s'opposer aux matières qui vous apprennent comment utiliser des outils, comme par exemple, un certain type d'avion.

Pour cette même raison, je pense qu'il est important de rester focalisé sur l'apprentissage de la science informatique et non pas sur l'apprentissage du code. Le premier est une façon générale de penser, le second juste un outil spécifique. Prenons une loupe et un scalpel et décortiquons un peu ces deux notions afin de faire clairement la différence.

Qu'est que la (science) informatique ?

L'informatique (je me répète : la science) est l'étude de ce que les anglophones appellent "computation". Nous n'avons pas d'équivalent en Français. Il s'agit d'une science qui se focalise sur la façon de représenter et de traiter l'information. Voici quelques uns de ses aspects que vous pourriez apprendre :

  1. La résolution de problèmes : Vous apprendrez ce que sont les algorithmes qui vous permettront de résoudre n'importe quel type de problème. - Ce sont des stratégies générales comme "Diviser pour régner", la récursivité, l'heuristique, la recherche gloutonne et les algorithmes probabilistes que vous emploierez pour solutionner un problème.
  2. La logique : vous commencerez à utiliser des méthodes de pensée précises et formelles qui vous permettront de blinder votre solution contre tout dommage collatéral. Citons l'abstraction, l'algèbre de Boole, la théorie des nombres et des ensembles par exemple.
  3. Les données : Vous aborderez la théorie de l'information et commencerez à vous demander ce qu'est réellement l'information ? Comment la représenter ? Et comment est-ce qu'on modélise le monde réel ?
  4. Les systèmes : comment élaborer et construire des systèmes complexes qui répondent à un ensemble de spécifications et de contraintes ? L'ingénierie des systèmes est un sujet essentiel dans quasiment tous les secteurs d'activité.
  5. La pensée : une des meilleures façons d'appréhender l'esprit humain est d'essayer de le reproduire. Des sujets comme l'intelligence artificielle, l'apprentissage automatique, la vision numérique et le traitement automatique du langage naturel sont au coeur, non seulement de la science informatique, mais également de la biologie, de la psychologie, de la philosophie et des mathématiques.

Notez que cette liste ne comprend PAS la programmation ou le code, parce que ce ne sont que des outils qui peuvent procéder à des opérations les données : ils ne constituent pas l'informatique, ni seuls ni même en partie.

Computer science is no more about computers than astronomy is about telescopes, biology about microscopes, or chemistry about beakers and test tubes. Science is not about tools.

Michael Fellows and Ian Parberry

Il se trouve qu'il y a encore un outil sur lequel on compte encore plus que tous les autres en informatique : le cerveau ! Le but de l'informatique est d'apprendre à notre cerveau de nouvelles façons de penser, très généralistes et applicables à de très nombreux domaines. Avec la montée en puissance inexorable de la technologie, cette nouvelle façon de penser deviendra aussi importante que la physique, les maths, la biologie et l'histoire.

Ceci étant dit, la pensée seule ne suffit pas. Nous devons également apprendre comment la mettre en application. En physique, nous faisons des expériences avec des poids, des prismes et des aimants. En biologie, on utilise des tubes à essai, des plantes, des boites de Pétri. En informatique... on apprend à programmer.

Qu'est ce que la programmation ?

La programmation, ou coder, c'est comment on ordonne à l'ordinateur de faire un ensemble d'opérations. Même si vous n'avez jamais programmé, vous avez quand même déjà utilisé un ordinateur en cliquant sur des options dans une application ou un logiciel. Ce qu'il y a sous le capot de cette application est un ensemble d'instructions (du code) qui lui indique comment et quoi afficher, où stocker et lire les données et comment réagir à vos clics.

Toute la programmation repose sur les principes cités plus haut. Il est remarquable qu'un seul ensemble de concepts (logique, algorithmique, données et ingénierie des systèmes) peut être utilisé pour tout fabriquer, du navigateur que vous êtes en train d'utiliser au système de pilotage automatique du F-35 Lightning II. Bien que la programmation mette en jeu beaucoup de mathématiques et de structure, c'est également un exercice très créatif : vous créez des produits à partir du néant (Fiat lux !), une ligne de code à la fois.

Apprendre à programmer dans le contexte de l'apprentissage de l'informatique a ses avantages :

  1. DIY (Do It Yourself ou Faites-le vous-même) : si vous savez programmer, vous pouvez vous fabriquer des choses. Vous pouvez commencer par des choses simples : écrire un script pour renommer automatiquement un lot de photos de vacances ou une formule Excel qui calculera vos impôts. Puis aller vers des choses un peu plus élaborées : un site web pour votre portfolio, une appli mobile pour votre boite, un jeu pour jouer avec vos amis !
  2. Troubleshooting (élimination des problèmes) : quand vous avez vous-mêmes créé quelques applications, comprendre le fonctionnement d'autres applis devient plus facile. Une fois passée votre peur de l'ordinateur - l'inconnu -, vous serez le maître du support informatique. Puisque la technologie affecte tous les aspects de notre vie, savoir comment la parcourir deviendra aussi important que de savoir lire.
  3. Carrière : étudier l'informatique n'a pas vocation à faire de vous un codeur professionnel. Nous étudions tous les maths, la physique et la chimie en classe mais ne devenons pas pour autant des mathématiciens, des physiciens ou des chimistes. Cependant, si vous vous découvrez une passion, vous vous rendrez compte que l'ingénierie logicielle est un des secteurs les plus porteurs, qui paie le mieux et qui se développe le plus vite.

Assemblons nos legos

Récapitulons :

  1. L'informatique est une nouvelle façon de penser, bien spécifique. Les concepts qui la constituent sont profitables à tout un chacun dans un monde envahi par la technologie.
  2. La programmation est une partie essentielle de l'informatique qui permet de mettre en application (dans les deux sens du terme) cette nouvelle façon de penser. Cependant, en soi, elle est loin d'être aussi généraliste.

La confusion qui est faite entre ces deux concepts pose pas mal de problème au mouvement "appendre à coder". Slate a publié un article en 2013 intitulé "Maybe Not Everybody Should Learn to Code"; the Altantic écrit "Should Journalism Schools Require Reporters to 'Learn Code'? No"; Jeff Atwood (fondateur de Stack Overflow, site bien connu des codeurs) écrivait en 2012 "Please Don't Learn To Code" où il pose une simple question qui résume clairement la confusion :

How [would] Michael Bloomberg be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder?

Jeff Atwood

Bien sûr, ce n'est pas la bonne question à poser. Ce n'est que le résultat de campagnes de communication qui suggèrent qu'apprendre à coder, plutôt de d'apprendre à penser, est le but final. Si même Jeff Atwood, un programmeur très expérimenté et respecté se fait avoir par cette confusion, il y a peu de chances que le citoyen lambda s'en sorte. De mon point de vue, la question devrait être :

Est-ce que Michael Bloomberg - ou n'importe qui d'autre, d'ailleurs - serait meilleur dans son job s'il améliorait sa capacité à penser en apprenant de nouvelles stratégies de résolution de problèmes et en développant une meilleure maitrise de la logique ?

Je pense que la réponse est triviale. Dans un monde de plus en plus dominé par la technologie, la réponse est encore plus flagrante. Voilà pourquoi on doit se concentrer sur l'apprentissage de la SCIENCE informatique et non pas sur le code.

A propos de Young Sun TAN :

Young Sun TAN est un geek webophile, technophile, bidouilleur et gourmet.

Sur la toile depuis 1995 avec sa première page web (une biographie de Beaumarchais pour le compte du collège Beaumarchais de Paris), il revendique une identité de "digital native". Après une Terminale S au Lycée Louis-le-Grand à Paris et un Master en Informatique option Ingénierie Informatique - Systèmes d'Information, il a entamé une carrière d'analyste web et est désormais Project Leader pour le Groupe Lagardère. Il compte parmi ses réalisations les sites de Celebrity Cruises, Royal Caribbean ainsi que Gulli, Canal J, Tiji et Europe 1.

Menant un veille constante sur les évolutions du web et du développement, son expertise couvre le PHP-MySQL, le framework jQuery ainsi que le CMS eZPublish et Symfony pour lequel il a une affection toute particulière.

Côté détente, il affectionne tout particulièrement les bonnes tables et les bons plans foodista. Bien que la street food occupe une place de premier choix dans son cœur ventre, il n'est pas allergique à une excursion gastronomique ou bistronomique.

Retrouvez Young Sun TAN sur :