Note : 8 ; Le changement dans la continuité
La lecture de la première édition fut une réelle révélation pour moi. C’était à l’époque, la prémices de ma découverte de l’agilité. Aujourd’hui ce texte symbolise plutôt le craftsmanship, mais la différence entre les deux a-t-elle tant de sens ? Guère pour moi, en tout cas.
Beaucoup de choses ont changé dans le détail du contenu, d’une part parce que certaines idées des auteurs ont évolué (ce qu’ils soulignent régulièrement dans le texte même) et d’autre part car à la fois le contexte technologique et les pratiques ont progressé. Je pense, sur ce dernier point, aux pratiques de test.
Cette édition 20ème anniversaire a pris un léger embonpoint : 283 pages contre 259 pour l’édition précédente, passant de 8 à 9 chapitres. Dans votre bibliothèque, la couverture dure de ce nouvel opus va le faire passer dans la catégorie de standing supérieur. Les fameux « tips » qui parsèment le livre passent quant à eux de 77 à 97 ! Le premier chapitre s’intitule toujours « a pragmatic philosophy » et compte 25 pages couvrant 7 sujets. Il couvre en peu de pages un ensemble de comportements : prendre ses responsabilités, ne pas laisser les choses se dégrader et entretenir son portefeuille de connaissances. Une belle introduction.
Le second chapitre « a pragmatic approach » est plus dense avec plus de 40 pages. Ce que le premier chapitre apporte au mindset, celui-ci l’apporte au craftsmanship et au code. On y découvre (ou retrouve) des principes comme le DRY, l’orthogonalité, les tests… Le contenu a pas mal évolué depuis l’édition précédente, mais l’essence reste la même. Les 25 pages du chapitre 3 abordent les outils de base du développeur. Là les idées n’ont guère évolué : s’appuyer uniquement que sur des représentations « plain text », tout mettre en gestion de configuration, s’outiller sur la manipulation de texte et automatiser !
Le thème du chapitre 4 « pragmatic paranoia » n’est pas aussi bon que dans mon souvenir. Le sujet est un peu plus pointu que dans les chapitres précédents : il s’agit de programmation assertive ou de design by contracts (à la Bertrand Meyer), mais aussi de libération de ressources. Tout sujets qui méritent d’être évoqués, cela dit. Le chapitre 5 « bend or break » a bien évolué dans cette nouvelle édition. On y retrouve les mêmes éléments que précédemment à propos du couplage, mais le texte se montre désormais virulent à propos de la conception objet et de la « taxe d’héritage » lui préfèrent d’autres paradigmes comme le « transforming programming »
Le chapitre 6 est nouveau : il adresse la programmation concurrente qui était incluse dans le chapitre 5 dans l’édition précédente. La nouveauté prend la forme de la programmation par acteur et le pattern blackboard y a également élu domicile. Le chapitre 7 « while you are coding » était déjà excellent dans l’édition précédente, il prend un peu d’ampleur mais sans changer fondamentalement, ce qui est très bien. Il est toujours bon d’avoir un petit rappel sur la programmation par coïncidence. Les ajouts concernent le « property-based testing », quelques principes sur le secure by design et un propos un peu superficiel hélas sur le nommage. J’aurais bien aimé quelques mots sur le mutation testing qui manque ici à l’appel.
Au chapitre 8 « before the project », il est question du « mythe des exigences ». Les Use cases selon Alistair Cockburn ont disparu et c’est dommage. En contrepartie j’aurais aimé voir apparaitre de la spécification par l’exemple, mais les tests d’acceptation ne semblent pas faire partie du paysage des pragamtic programmers. Par contre c’est une vraie section consacrée à l’essence de l’agilité qui voit le jour. Bienvenue ! Le chapitre 9 « pragmatic project », s’il subit un certain lifting reste égal à lui-même sur le fond, reprenant des éléments des chapitres précédents. Le dernier tips n’a pas changé depuis 20 ans : Sign your work ! Un tips que je trouve réellement emblématique des pragmatic programmers.
Cette nouvelle édition n’est pas un simple arrangement cosmétique. En y regardant de près, seule une fraction du texte semble épargnée par la retouche. Le texte n’est pas simplement mis au goût du jour ou au diapason des pratiques adoptées. Ainsi, la programmation orientée-objet s’efface au profit de la programmation fonctionnelle. Non, il reflète en plus l’évolution des pratiques et de la pensée des auteurs. Mais le fond et le sens n’ont pas changé. Pour les anciens lecteurs de la première édition, ce n’est ni une nouvelle lecture ni une redécouverte, mais plutôt une révision.
Référence complète : The Pragmatic Programmer 20th anniversary edt. : Your Journey to Mastery – David Thomas & Andrew Hunt – Addison Wesley 2019 – ISBN: 978 0 13 595705 9