Apprenez à coder

La semaine dernière, Jeff Atwood (fondateur de Stack Overflow) a initié un débat sur son blog avec un article intitulé « Par pitié, n’apprenez pas à coder » :

La tendance à dire que « tout le monde devrait apprendre à programmer » est tellement hors de contrôle que le maire de New York City a réellement juré d’apprendre à coder en 2012.

Le Maire de New York veut apprendre à coder en 2012

C’est un noble geste pour recueillir les votes de la communauté high-tech de NYC, mais si le maire de New York City a vraiment besoin de taper du code JavaScript pour faire son boulot, c’est qu’il y a quelque chose de profondément, horriblement, terriblement de travers avec les politiques dans l’état de New York. Même si M. Bloomberg « apprenait à coder », avec mes excuses à Adam Vandenberg, je suppose que ça donnerait quelque chose comme ça :
10 PRINT "I AM MAYOR"
20 GOTO 10
Heureusement, les chances pour pour que cette fantaisie technologique arrive, même pour plaisanter, sont nulles, et pour de bonnes raisons : le maire de New York City va on l’espère passer son temps à faire le travail que des employés contribuables le payent pour faire à la place. D’après le site du bureau du maire, ça signifie travailler sur les programmes contre l’abstention à l’école, les améliorations des transports publics, le budget de la ville pour 2013, et… il faut vraiment que je continue ?

Pour ceux qui soutiennent que programmer est une compétence essentielle que nous devrions enseigner à nos enfants, au même titre que la lecture, l’écriture, ou l’arithmétique : pouvez-vous m’expliquer en quoi Michael Bloomberg serait meilleur à son travail quotidien de gestion de la plus grosse ville des USA s’il se réveillait un matin en étant un as du développement Java ? Il me semble évident qu’une lecture expérimentée, une écriture expérimentée, et au moins un niveau lycéen en mathématiques sont fondamentaux pour réaliser le travail d’un politique. Ou n’importe quel travail, pour ce que ça vaut. Mais comprendre des variables et des fonctions, des pointeurs et la récursivité ? Je ne vois pas.

Forcément, les réponses ont été vives et nombreuses. J’ai retenu notamment celle de Sacha Greif, webdesign Freelance : « Par pitié, apprenez à coder« .

« Apprendre à coder » ne veut pas forcément dire devenir le prochain Linus Torvalds, tout comme « apprendre à cuisiner » ne veut pas dire ouvrir un restaurant 3 étoiles.

Ça veut simplement dire avoir une compréhension basique du fonctionnement des ordinateurs plutôt que suivre aveuglément ce que vous dit un trombone qui parle (et peut être finalement être capable de programmer vos propres trombones qui parlent).

Si le premier article est particulièrement tranché, je reste persuadé que l’apprentissage de la programmation devrait être aujourd’hui obligatoire à l’école. Pas au même titre que la lecture, l’écriture ou les mathématiques. Mais au même titre que l’histoire, la géographie, la physique, la chimie, l’économie, ou la philosophie. Vous ne deviendrez pas un grand historien, chimiste ou philosophe en vous contentant des cours donnés au collège et au lycée. Mais aussi barbants que certains de ces cours ont pu vous paraître à l’époque, ils ont contribué à votre culture générale, et à la façon dont vous appréhendez et comprenez le monde qui vous entoure.

S’il me paraît important pour un quidam d’avoir des notions basiques en programmation, cela me semble carrément indispensable pour quelqu’un qui travaille dans le web. Mais c’est souvent loin d’être le cas chez les chefs de projet et les graphistes.

Chez Pixar, tous les employés sont invités à apprendre à dessiner :

Grâce à l’Université Pixar, les employés apprennent à voir le travail de la société (et de leurs collègues) sous un nouvel angle. « Les compétences qu’on développe sont des compétences dont nous avons besoin partout dans l’organisation. Pourquoi enseigner le dessin à des comptables ? Parce que des cours de dessin n’apprennent pas seulement aux gens à dessiner. Ça leur apprends à être plus observateurs. Il n’y a aucune société sur Terre qui ne bénéficierait pas d’avoir des employés plus observateurs. »

En apprenant à coder, vous n’apprenez pas seulement à coder (même si c’est plutôt cool). Vous apprenez à résoudre des problèmes. Je ne pense pas qu’il y ait une société sur Terre qui ne bénéficierait pas d’avoir des employés plus doués pour résoudre des problèmes. Ça vaut donc également pour le maire de New York.

Mais trop souvent, j’ai le sentiment que l’ignorance de la programmation parmi les chefs de projet web ou les graphistes est due à un total mépris du métier. « Je suis directrice artistique, je ne me vois absolument pas me lancer dans du développement JavaScript » (entendu à Paris Web, à 38min).

Quelque soit votre métier, vous devez être curieux, et ne jamais rechigner à apprendre quelque chose de nouveau. Récemment lues sur Reddit, je cautionne particulièrement ces paroles de Neil deGrasse Tyson :

Je suis poussé par deux philosophies principales. En savoir plus aujourd’hui sur le monde que j’en savais hier. Et en chemin, diminuer la souffrance des autres. Vous seriez surpris jusqu’où cela peut vous mener.

Ce serait hautain et condescendant de ne pas vouloir apprendre à cuisiner ou de ne pas vouloir apprendre une nouvelle langue.

Je pense que c’est hautain et condescendant de ne pas vouloir apprendre à coder. C’est décrédibilisant pour vous en tant que professionnel du web. C’est décrédibilisant pour vous en tant qu’être humain.

  1. GoOz, le

    Oui alors non.

    Je comprends que dans le monde du web, il est préférable de bien connaître son métier et le domaine dans lequel on évolue et donc que beaucoup de métiers devraient avoir des notions de « programmation ».
    De manière générale, dans le monde professionnel, plus on a de notions de tout ce qui nous entoure, meilleur on devient.

    Mais alors programmation à l’école ? non.
    Pas besoin de savoir programmer pour résoudre des problèmes. T’as besoin d’une logique analytique pour ça. Logique qu’on retrouve en math, physique ou même philosophie.

    Ou alors tu veux juste parler d’algorithme ? Qu’on pourrait très bien aborder dans un cours scientifique.
    Mais des cours de prog’… non.
    M’en est avis que c’est bien trop spécifique pour être enseigné dans les cours généraux.

    Sérieusement, je vois pas ce que ça apporterait d’essentiel que les cours généraux n’apporte pas déjà.

    Faut que t’étoffe ton argumentation à ce propos là parce que, même si je suis d’avis que l’éducation de la jeunesse est en mal à notre époque, je pense qu’il leur manque énormément de chose mais que la programmation n’en fait pas partie.

  2. Sylvain, le

    C’est bête, le free weekend sur http://www.codeschool.com vient juste de passer. Mais bon le premier mois est à 9$, ce qui vaut vraiment le coup. Surtout pour du Rails et du js :)

  3. Bartdude, le

    Si je défend ton point de vue sur les métiers du web et pense que chacun peut y gagner à un peu mieux comprendre/connaître le métier de l’autre, je suis assez d’accord avec Jeff et son article que j’avais lu la semaine passée. Coder, bien coder, demande une certaine tournure d’esprit. Cette tournure d’esprit peut effectivement aider à résoudre des problèmes n’ayant rien à voir. Cela ne veut pas dire :

    1) Qu’en apprenant à coder on acquiert forcément cette tournure d’esprit : certains ne sont simplement pas faits pour ca
    2) Que si on ne sait pas coder on ne sait pas résoudre des problèmes : l’humanité n’a pas attendu l’invention de l’informatique pour résoudre les problèmes, et jusqu’à preuve du contraire les codeurs n’ont pas toutes les solutions. Je dirais même que certains bien que très bons codeurs manquent cruellement de bon sens ou de culture générale pour résoudre des problèmes n’ayant rien à voir avec l’informatique.
    3) Que c’est hautain et condescendant : comme je disais en 1, chacun son truc. Je pense maintenant qu’à profil comparable, un PM est souvent bein meilleurs s’il a des connaissances techniques.

    Pour reprendre l’exemple du maire de New York, on peut espérer qu’il a déjà, pour arriver à ce poste, une certaine compétence à résoudre les problèmes, je ne vois pas bien ce que le Javascript lui apporterait de plus…

    Bref, l’informatique et la programmation comme élément de la culture générale, certes. Mais élément incontournable ? Je ne pense pas.

  4. shavounet, le

    (attention, commentaire démago)

    Je pense que tout le monde a raison ici.

    (voilà)

    Plus concrètement, oui c’est bien (et mieux) de comprendre le métier des autres, non ce n’est pas au maire de New York de faire les specs techniques de son site. Le seul point important ici est d’avoir l’esprit large et ouvert.
    L’exemple de l’école est très bon : certes les maths, la physique ou la philo donnent des outils de logique, mais ce ne sont pas les seuls et l’analyse programmatique en est un autre. Il ne faut pas étouffer un enfant sous des tonnes de matières différentes, mais il faut lui donner le plus de chances de réussir possible, et ça passe principalement par la compréhension du monde qui l’entoure.

    L’important c’est pas de savoir programmer, c’est de savoir comment programmer.

  5. Greg D., le

    Certes, mais développeur c’est un métier, une profession, à laquelle on accède après au minimum un DUT (2 ans après bac S, sélection sur dossier) ou aujourd’hui une école d’ingénieur (5 ans après bac S, sélection drastique via la prépa).

    N’importe qui ne peut pas devenir développeur, comme n’importe qui ne peut pas devenir DA. Passer du temps devant un PC ne fait pas un développeur, on ne devient pas développeur « à l’ancienneté ».

    a l’extrême et au premier degré, c’est très dévalorisant : développeur serait donc finalement un boulot facile que n’importe qui peut faire, exercés par des bas-du-front élitistes cachant leur incompétence derrière un jargon obscur. On pourrait l’apprendre facilement sur le Web plutôt qu’en embaucher un !

    Le problème, c’est que CodeAcademy, CodeSchool n’apprennent absolument pas le métier de développeur : ils apprennent la syntaxe d’un unique langage. Les concepts-clefs ne sont pas abordés : architecture logicielle, fonctionnement d’un interpréteur, d’un JIT, structure du protocole HTTP, pourquoi un GPU est-il meilleur en calcul parallèle, etc. Se former sur ces sites revient à apprendre une langue avec la partie « phrase-book » d’un guide de voyage : impossibilité de construire une phrase soi-même, on apprend juste à répéter.

    On voit d’ailleurs sur ce blog même petit à petit des articles qui glissent de plus en plus vers la confusion « je suis intégrateur HTML, donc je suis presque développeur finalement, donc je suis un codeur ». Non c’est faux : maquettiste oui, codeur non. Ca n’a rien à voir. Les deux postes sont chacun complexes et nécessitent un énorme savoir-faire, mais en aucun cas un poseur d’antennes TV ne se permettrait de se qualifier d’éléctricien, et inversement. Les 2 utilisent pourtant le même outillage.

    Un intégrateur HTML n’a rien à voir avec un développeur, en particulier. La confusion est facile, mais l’usage d’un éditeur de code ne suffit pas… HTML/CSS est à comparer à Postscript ou LaTeX, mais surtout pas à Java ou Python. Les premiers ne sont pas des langages de programmation. Les différents billets référencés au sein de ton billet et le petit buzz de la semaine dernière autour de ces billets ont été publiés justement par des intégrateurs.

    Par contre un minimum de compétence en informatique devrait faire partie de la culture générale de tout nouvel entrant sur le marché du travail, mais le « tous codeurs » est un mythe basé sur une perception totalement biaisée. Aujourd’hui les lycéens font tous de petites pages Web en TPE, ça devrait être généralisé et obligatoire, mais on a déjà bien assez de développeurs médiocres en France comme ça pour les obliger à y mettre du Javascript en plus ;)

  6. Bartdude, le

    Greg > On peut être un très bon développeur sans être passé par la case « études d’informatique »… J’ai beau avoir le diplôme, j’ai appris beaucoup plus durant ma première année de boulot que durant mes 3 années d’études, et depuis 10 ans j’apprends encore tous les jours sans aller à l’école. Certains développeurs que je connais n’ont pas fait ou pas fini d’études d’informatique et sont pourtant bien meilleurs que les candidats que je vois passer avec leur diplôme en poche mais pas forcément grand chose en tête.

    Je suis d’accord avec toi sur le fait qu’il ne faut pas « s’y croire » : écrire quelques lignes de code ne fait pas devenir développeur comme chipoter en Photoshop ne transforme pas en graphiste. Cependant il ne faut pas non plus être sectaire : depuis quelque temps déjà le métier d’intégrateur se spécialise, et certains deviennent effectivement de vrais développeurs par l’emploi de Javascript (avec ou sans framework), ou autre. Certains électriciens sont peut-être de très bons poseurs d’antenne et réciproquement, certains amateurs sont parfois meilleurs que les soi-disant professionnels (« amateur » n’ayant pas le sens péjoratif qu’on lui donne trop souvent).

    Cela dit, pour en revenir au sujet principal, plutôt qu’enseigner la programmation à l’école au même titre que les maths ou l’histoire, je verrais plutôt ca comme la musique, dans des académies en activité parascolaire. Certes ca n’est pas un art, mais le monde actuel a surement autant besoin de bon codeurs que de nouveaux joueurs de guitare ^_^

  7. Art Blackey, le

    « Mais trop souvent, j’ai le sentiment que l’ignorance de la programmation parmi les chefs de projet web ou les graphistes est due à un total mépris du métier. » Je suis designer, et j’ai également souvent le sentiment que les PM et les devs méprisent totalement mon métier. Ceci étant dis, je pense -par exemple-que si le concept de variable est élémentaire pour un dev, c’est très compliqué pour quelqu’un qui a une fonction commerciale, comme je n’ai jamais vu un developpeur concevoir convenablement quelque chose d’aussi simple qu’un bouton (no offense). Ta vision de « cross learning » me semble très utopique, dans la mesure où travailler dans le web implique la collaboration entre des gens qui sont des extra-terrestres les uns pour les autres.