2010.11.12-Utopiales.038.jpg Un faisant mon petit tour du web avant d’aller au bureau je suis tombé sur l’article We need a programming language for the rest of us de Chris Tompkins.

Chris Tompkins est un ancien journaliste et reconnait volontiers n’avoir pas spécialement de bagage dans le développement. Il a essayé d’apprendre un langage de programmation, l’Objective C, pour faire une application iPhone et a lamentablement échoué.

Sa conclusion, c’est : C’est trop dur !. Ce qui me semble vrai. Mais plutôt que de remettre en question le fait qu’il n’a quasiment aucune expérience dans le développement logiciel, il préfère rejetter la faute sur les concepteurs de langage développement.

Ce genre de raisonnement me semble symptomatique de la façon dont est perçu le monde du développement.

En fait, il utilise une métaphore pour expliquer pourquoi le développement logiciel devrait être simple que je trouve particulièrement intéressante. Intéressante, parce que, pour moi, elle permet de comprendre justement pourquoi c’est un métier compliqué qui demande un long apprentissage avant d’être efficace.

Donc je rassure tout le monde, je ne vais pas m’attaquer à ce monsieur ou son article1. Je profite juste de l’occasion pour développer la métaphore. J’aime bien les métaphores :)

#Le développement de logiciels, c’est de la cuisine

Extrait de l’article :

Why can’t coding be more like this? I thought, more like picking ingredients for a meal.

Learning C is like learning the genetic sequencing of a tomato. While it certainly is required for the tomato to exist, I don’t need to be familiar with it to slice it and put it together with a list of ingredients.

Traduction :

Pourquoi est-ce que code ne serait pas comme ça ? Je pensais, comme choisir des ingrédients pour un plat.

Apprendre le C, c’est comme apprendre la séquence génétique d’une tomate. Alors qu’elle est nécessaire pour que la tomate existe, je n’ai pas besoin de bien la connaître pour trancher la tomate et l’utiliser avec une liste d’ingrédients.

#Je commence par l’apprentissage.

Dans un langage, ce que l’on pourrait comparer à la génétique2, c’est l’évolution d’un langage dans le temps qui permet d’expliquer pourquoi et comment il en est arriver là où il en est. Si c’est très intéressant, ça n’est pas utile pour programmer au quotidien. Tout comme, même si la génétique l’explique surement, il n’est pas nécessaire de comprendre pourquoi les tomates ne réagissent pas toute de la même façon à la cuisson. Il suffit juste de savoir que c’est le cas.

Alors c’est quoi apprendre un langage, si c’est pas apprendre sa génétique ?

À mon avis, lorsqu’on apprend un langage, il y deux éléments principaux : les structures de contrôles et les fonctionnalités qu’offrent ce langage pour réaliser des choses.

Les fonctionnalités du langage, c’est simple : c’est les ingrédients, la matière première. C’est à partir de ça que l’on va pouvoir construire des choses.

Les structures, c’est les outils : couteaux, casseroles, gazinières et autres. Toutes ces petites choses qui permettent de manipuler, transformer, combiner les matières premieres pour en faire plus que juste des éléments posé les uns à coté des autres.

Il ne faut pas oublier la syntaxe, et les bonnes pratiques de code que l’on pourrait assimiler à l’assaisonnement : c’est important, indispensable même. Mais ça peut dépendre des goûts.

#Tout le monde sait cuisiner, alors pourquoi tout le monde ne peut pas développer ? Parce que ce que tout le monde sait, plus ou moins, faire c’est suivre une recette de cuisine.

2009.05.26.jpg

Suivre des recettes, c’est comme ça que j’ai commencé à développer : en recopiant des codes entiers de programmes déjà existant3. Mais au final, je ne créais rien, je ne faisais que refaire ce que d’autres avaient fait avant moi.

Parce que créer un logiciel, ce n’est pas suivre une recette de cuisine. Créer un logiciel, c’est créer un menu complet, unique parfaitement adapté aux goûts, aux habitudes et aux besoins nutritifs de ceux qui vont le manger.

Et ça, c’est loin d’être à la portée du premier venu, ça demande de savoir beaucoup plus que de faire cuire des pâtes.

#Oui, mais quand même Alors oui, pas besoin de faire une école pour innover en cuisine. Avec du temps et de la passion, certains arrivent à faire des plats succulent et originaux à faire tomber par terre.

Mais, être développeur, c’est pas juste connaitre un langage de programmation.

Tout comme pour être Chef, il ne suffit pas de savoir cuisiner. Il faut savoir travailler en équipe, choisir les bonnes matières premières, préparer plusieurs plats en même temps, être à l’écoute des clients, avoir un niveau de qualité élevé et constant, …

#L’argument du fond des temps 2010.01.14.jpg

Il y a un point qu’il est bon de rappeler de temps en temps : l’Homme a du créer ses premiers plats il y a quelques dizaines de milliers d’années.

Les premiers programmes ont à peine 100 ans.
On n’a pas encore inventé les pâtes, nos éléments de travail sont des matières bruts. Un jour, les historiens étiquetteront nos outils comme nous le ferions pour des couteaux à silex du néolithique, tout en se demandant comment on pouvait réussir à faire sérieusement des trucs avec ça.

Un jour viendra où on pourra tous faire des programmes simples. Mais on n’en est pas encore là.

#La conclusion Et de toute façon, on aura toujours besoin de Chefs dans les cuisines des restaurants !

  1. d’autant que vu les prises de positions dans les autres articles, j’en suis presque à me demander si ce n’est pas un canular tout ça 

  2. en tant que science qui étudie l’hérédité et les gènes 

  3. qu’on trouvait dans les magazines à l’époque, sur internet maintenant