Pour la couverture de leur livre The Pragmatic Programmer , Andrew Hunt et David Thomas ont choisi la photo d'un rabot dans un atelier poussiéreux, et ils ont raison lorsqu'ils comparent les attitudes des menuisiers et des développeurs par rapport à leurs outils respectifs.
Pourtant, j'ai toujours été gêné par ce mot d'artisanat. J'ai toujours trouvé qu'il manquait quelque chose, qu'il ne décrivait pas tout. D'ailleurs, je continue d'utiliser l'expression "industrie du logiciel" dans les pages de ce blog.
Alan Cooper semble avoir trouvé une distinction intéressante entre le développement de logiciels et l'artisanat. Alan Cooper est une figure de l'informatique, qui a plus d'une corde à son arc. On le nomme le Père du Visual Basic. Il est co-auteur de About Face, un livre sur l'interaction homme-machine, ou interaction design, qu'il convient de placer en bonne position sur sa liste de lecture.
Et puis il parle bien. Dans une longue présentation intitulée an Insurgency of Quality (une Insurrection de la Qualité) donnée lors du congrès Interactions'08, Cooper dresse un tableau de l'évolution du processus de développement, et en profite pour définir la nature du travail d'un développeur. Pour lui, il ne fait pas de doute que le développement d'un logiciel est plus proche de l'artisanat que de la production industrielle. Mais il évoque aussi les différences, et dégage ainsi les notions d'artisanat pré-industriel et post-industriel.
Cooper dresse d'abord la liste des similitudes entre l'artisanat pré-industriel et le développement. Chaque programme est un pièce unique, qui requiert toute l'attention du développeur. La production d'un logiciel ne peut pas changer d'échelle comme peut le faire la production d'un produit industriel, et passer d'une pièce unique à des millions d'unités. On ne peut pas réduire les coûts de manière substantielle si on souhaite maintenir la qualité du produit, et il n'y a pas non plus de " magic bullet", de méthode miracle pour décupler la qualité et la capacité de production sans contrepartie importante. Le développement est une activité extrêmement complexe, toute en nuances, et requiert des années de formation.
Mais l'artisanat pré-industriel, continue Cooper, était également caractérisé par une innovation technologique lente, et les outils évoluaient lentement. Ce n'est bien sûr par le cas du développement. Un logiciel, " c'est un ensemble de notions abstraites présentées avec des notations abstraites [...] C'est quelque chose d'invisible, d'intangible, d'impénétrable. "
Si l'activité de développement est donc proche de l'artisanat, elle est en revanche très éloignée de la production industrielle. Outre la grande différence de niveau de formation, il y a une différence plus fondamentale encore: un ouvrier travaille avec ses mains, un développeur travaille avec sa tête.
Avant de retrouver un missile scud dans mon salon avec des insultes écrites dessus au feutre, je précise tout de suite que je ne fais aucun jugement de valeur entre le travail manuel et le travail intellectuel. Les deux ont besoin l'un de l'autre, et le premier n'est pas moins noble que le second, tout comme la production n'est pas moins noble que la gestion. Si vous avez de tels missiles chez vous et que vous ne savez pas quoi en faire, ramenez-les à votre supermarché du coin pour être recyclés.
La combinaison de ces deux facteurs, niveau de formation et travail intellectuel, fait qu'un développeur est très souvent une personne autonome, qui a un sens très fort de ce qu'il a à faire, et qui est souvent, dixit Cooper, plus intelligent et plus éduqué que les gens qui sont censés le diriger. Enfin, " [sa] satisfaction professionnelle vient uniquement de la qualité de son produit, et pas de la performance de [son] employeur ".
Les vues de Cooper sur l'ouvrier sont peut-être un peu étriquées. Je veux croire qu'un travailleur manuel aussi éprouve de la satisfaction à bien faire son travail, et personne n'aime vraiment accomplir un travail de mauvaise qualité dont on ne puisse être fier. De même, les développeurs, qui sont plutôt des loups solitaires, aiment faire partie d'une équipe performante, et quoi qu'on en dise le salaire reste un facteur de satisfaction chez eux aussi.
Mais enfin il faut le reconnaître: l'épanouissement et la qualité du geste chez l'ouvrier qui serre des boulons à la chaîne, ou plutôt leur absence, a peu d'influence sur la qualité finale du produit. Par contre, mettez un cloporte ou un dépressif derrière un clavier, et votre logiciel prend lentement mais sûrement le chemin de l'enfer numérique. De même, mettez-moi avec un rabot dans les mains chez Bösendorfer, et voyez tous les pianistes du monde grincer des dents...
On peut dire du développeur qu'il est un artisan, mais comme tout ce qui touche au numérique, les notions et définitions ont évolué, et l'artisan numérique est plus le descendant de l'artisan manuel que son cousin. Les fondamentaux restent cependant les mêmes, et pour l'un comme pour l'autre, rien ne vaut le sentiment de satisfaction de laisser derrière soi un travail bien fait et une pièce unique.