Note de lecture : More C++ Gems, Robert C. Martin edt.

Note : 4 ; Compilation hétéroclite

On oublie parfois que Robert Martin a été éditeur en chef de C++ durant plusieurs années ! Les articles regroupés ici sont la seconde fournée des morceaux choisis de plus de 10 ans de C++ Report ! Le premier volume était la sélection de Stanley Lippman, celle-ci vient d’un auteur ayant une sensibilité différente.

Le volume n’est pas anodin : il compte plus de 500 pages divisées en 2 parties inégales : la plus petite « diamonds from deep in the past » est la plus courte tandis que « Present day industrial diamonds » représente la portion congrue. Il y a 24 articles en tout, 6 dans la première partie et 18 dans la seconde.

Tout ne mérite pas le détour dans la première partie. Je passe très vite sur le « finite state machine » qui ne nous apprends pas grand chose, pas plus que l’article traitant des classes abstraites et de fonctions virtuelles pures. L’article de Cay Horstmann sur les smart pointers mérité définitivement plus d’attention car il traite de certains problèmes afférents à leur utilisation. A lire. De même « pointers vs references » c’est un peu du retour aux fondamentaux, mais c’est Stan Lippmann. Il faut toujours lire Stan Lippmann. L’article sur les NULL est rentré par une oreille et sorti par l’autre et la prose de James Coplien sur les patterns oublie d’être passionnante. On termine cette première partie par un article sur les patterns du regrété John Vlissides. Cela a à peine sa place ici, mais c’est tellement agréable à lire…

L’open-close principle qui ouvre la seconde partie du livre (et donc les 400 pages restantes) est bien, mais c’est du réchauffé, non seulement de C++ Report mais des propres livres de Robert Martin ! La prose de John Lakos qui suit est très longue. C’est même le monument de ce livre avec près de 90 pages, mais c’est à lire absolument. Il s’agit d’un condensé de son « large scale C++ design » et l’auteur nous y livre les stratégie de structuration de programmes pour gérer les dépendances, les temps de compilation ou de link. C’est passionnant et excellemment illustré !

Les deux articles qui suivent (taskmaster et monostate class) sont plutôt du domaine des patterns. Ils sont d’un intérêt assez moyen. Par contre celui sur les métriques ABC, sans être grandiose, nous propose une alternative intéressante au LOC. Ce n’est pas le cas du « patterns for mapping OO applications to relational database » qui est très léger et n’aurait pas dû figurer ici.

Heureusement, on arrive en terrain plus sérieux : avec Herb Sutter d’abord : les exception-safe container, c’est du lourd et on en a 30 pages ! L’anatomie de l’opérateur d’affectation, c’est du fondamental mais l’auteur creuse bien le sujet, parfait ! On est plus côté système (avec une pincée de patterns) sur cet article de Doug Schmidt sur les thread local storage. C’est du solide et ça ne se laisse pas lire comme ça. L’article de Matthew Austern sur l’exception safety fait écho à celui de Herb Sutter sur les exception-safe container. Bonne lecture aussi, j’approuve. A propos d’Herb Sutter, deux articles de cet auteur viennent à la suite. C’est du C++ pour les hommes, les vrais : lisez-les !

Je suis un peu désappointé de voir ici « external polymorphism » qui devient réellement un plat réchauffé plusieurs fois… Je passe rapidement sur le « safe deletion » qui a trait au multi-threading (mais pas terrible). Doug Schmidt, encore lui, nous parle de performances avec GPerf. Ce n’est pas de la lecture facile, hélas. L’ouvrage se conclut de nouveau par 2 articles d’Herb Sutter (à lire donc). Le second est un peu frustrant car il ne fait que 3 pages pour nous mettre l’eau à la bouche avec le langage BOOSE, une extension à C++. Mais hélas on n’en sait pas beaucoup à la conclusion de l’article !

Cette compilation manque un peu de cohérence. Il aurait fallu, à mon avis séparer les parties « pur C++ », la partie « patterns » et la partie « système ». Cela aurait déjà été plus clair. Le titre même de l’ouvrage est trompeur eut égard à la place importante consacrée aux patterns. Il aurait dû s’intituler : C++ and Patterns in C++ Gems. Bref, un problème de cohérence pour cette compilation qui se reflète dans la note. Comme je l’ai noté, il y a de bons articles, notamment ceux d’Herb Sutter, mais cet auteur a aussi ses propres ouvrages.

Bref, un ouvrage pas vraiment indispensable.

More C++ Gems

Référence complète : More C++ Gems – Robert C. Martin – SIGS books / Cambridge University press 2000 – ISBN: 0-521-78618-5

More C++ Gems

http://www.goodreads.com/book/add_to_books_widget_frame/0521786185?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on

Agile Grenoble 2013

Zenika est aussi présent à cet évènement en tant que sponsor, mais aussi nous l’espérons avec quelques interventions qui contribueront à la qualité de ce bel évènement !

http://2013.agile-grenoble.org/

Agile Grenoble 2013

Note de lecture : Object Engineering, par Philippe Desfray

Note : 4 ; Une vue extrêmement “analyse” de l’objet, dépassée et sans intérêt aujourd’hui.

Philippe Desfray est le directeur technique de Softeam et de son produit : Objecteering. Cet ouvrage, qui est ici dans sa seconde édition, décrit la notation « classe relation » et la méthode qu’elle sous-tend. Cette notation était en grande partie supportée par la version 3 d’Objecteering (au développement de laquelle j’ai participé) avant d’être abandonnée au profit d’UML dans la version 4. J’ai également trempé dans l’affaire. A l’époque, on croyait beaucoup à l’association notation-méthode, et Classe-Relation (dont le nom rappelle Entité-Relation de Chen) se pose alors en concurrent direct d’OMT ou de Booch !

Ce livre a donnée à Classe-Relation une audience internationale. Et cela a certainement aidé Softeam a être une société phare dans le milieu des années 90. Mais voyons comment se présente le contenu. Celui-ci compte un peu plus de 300 pages divisées en 14 chapitres auxquelles il faut ajouter une quinzaine de pages d’annexes. Si le volume bénéficie d’une couverture dure, la qualité du papier et de l’impression ne suivent pas. Dommage !

Le premier chapitre campe le décors. Plus exactement quel rôle pour le modèle lors des phases successives d’analyse et de conception, c’est à dire un même modèle, mais enrichi… avec en plus l’aide de l’hypergénéricité.

Le second chapitre a trait à la nature des objets. Pour Philippe Desfray, ils doivent exclusivement être issus du domaine de travail, quel que soit la phase de travail. Ce qui sera un point de désaccord avec moi quand sonnera l’heure des design patterns !

Le 3ème chapitre est le premier qui ait réellement trait à Classe-Relation. C’est une courte introduction au métamodèle de cette notation.

Le chapitre 4 est conséquent car il couvre près de 40 pages. Il est totalement consacré au modèle structurel, d’un point de vue notation graphique et syntaxe textuelle. Car Classe-Relation possède une représentation sous forme de syntaxe textuelle (supportée par Objecteering 3) ! Globalement, la prose n’est pas passionnante à lire, mais n’est pas non plus imperméable à la compréhension.

Le terme « operating model » employé en titre du chapitre 5 n’évoque rien de prime abord. En fait, il regroupe deux notions. D’une part, les pré / post conditions et invariants, et d’autre part les automates d’état associables aux classes. Ce n’est pas ma partie préférée, disons et la prose est parfois même confuse.

Le modèle dynamique décrit au chapitre 6 est assez rigolo. D’abord il n’existe dans aucune autre notation. Il est vrai que l’object flow qui se veut le remplacement du code des méthodes n’est pas réellement une alternative viable à la simple écriture de code. Et le modèle d’évènements n’a pas non plus subi l’épreuve du feu et ne permet pas réellement de supporter la représentation d’un modèle asynchrone. Aucune de ces notations n’est d’ailleurs supportée par l’outil de l’époque.

Le chapitre 7 traite de structuration en « schémas » (les packages d’UML). J’avoue que les règles de dépendances et les règles de transformations permettant de respecter ces règles de dépendances sont parmi les choses qui m’ont le plus servi par la suite. De plus je trouve le métamodèle Classe-Relation très complet par rapport à ce que l’on peut faire avec les schémas, plus complet que ce qu’offre UML. Un bon point pour le chapitre 7 !

Le chapitre 8 sur les règles de modélisation est assez étrange. Tout d’abord on voit que Classe-Relations se calque pas mal sur le C++ car il supporte le concept de « classes élémentaires ». Ensuite l’auteur nous assène les règles de normalisations… du modèle relationnel ! Vraiment étrange…

Le chapitre 9 est en quelque sorte le chapitre introductif à la seconde partie du livre (bien qu’il n’y ait pas de seconde partie physiquement), on va y parler processus. Et ici, même s’il fait mine d’être mâtiné de cycle itératif, c’est vraiment tout pensé « cycle en V » ! La véritable vertu de ce chapitre c’est d’être court.

Donc logiquement, c’est de phase d’analyse que parle le chapitre 10 ! La démarche proposée est très prescriptive, et ça ne fait pas briller les yeux. Comme toute approche prescriptive, de mon point de vue, ça ne marche pas dans le monde réel…

Au chapitre 11, on aborde bien entendu la conception. Classe-Relation a une vue très réductionniste de la phase de conception : c’est la prise en compte des contraintes physiques d’implémentation, et c’est tout ! On y est moins prescriptif, mais c’est aussi plus décousu. Et pour parfaire le tout : on évoque bien entendu la bonne vieille plaisanterie de l’étape d’intégration ! Bref, après seulement la traversée de ces deux phases, on sait déjà que la méthode est complètement dépassée.

Le chapitre est important en volume (35 pages) et en thème, car il traite d’un aspect cher à Philippe Desfray : l’hypergénéricité et le langage H. C’est MDA avant l’heure. Et je dois dire que techniquement ça marche. Et ça marchait en 1995 dix fois mieux que n’importe quoi d’autre. Hélas je n’adhère pas au postulat méthodologique : On peut ajouter les aspects de conception sur un modèle d’analyse « pur » et les règles d’hypergénéricité fabriqueront les classes techniques de conception qui sont finalement jetables ! On peut (et on a) tiré quelque chose de cette mécanique, mais cette vue intégriste du monde est simplement impraticable.

Le chapitre 13 consacré à la phase d’implémentation (car il y a une phase d’implémentation !) est très peu convainquant. On y parle vaguement de règles de génération de code et des mérites comparés des différents langages orientés objet de l’époque : C++, Eiffel et Smalltalk.

Plus amusant le chapitre 14, qui est également le dernier, compare Classe-Relation avec OMT. Je vous laisse deviner lequel gagne. Ce travail est loin du sérieux avec lequel les auteurs d’OMT se sont livrés au même exercice. On est loin aussi du niveau de technicité de leur analyse. Bref, une belle blague.

Cet ouvrage est probablement à lire pour les propos sur l’hypergénéricité. La notation Classe-Relation recèle quelques trouvailles intéressantes qui n’ont hélas pas été reprises dans UML. Mais sinon, la notation sent très fort le C++. La seconde partie du livre dédiée à la méthode est non seulement dépassée mais était même sans intérêt à l’époque. Elle accumule les erreurs : depuis le phasage analyse-conception implémentation jusqu’au mépris par lequel est traité la conception en passant par une démarche prescriptive digne du Taylorisme. Le texte est lisible sans être spécialement plaisant et les positions intégristes de l’auteur ont parfois tendance à me hérisser le poil.

La 3ème édition, en français à nouveau cette fois, et fait progresser (un peu) le propos de l’auteur. Mais c’est une lecture qui n’a plus d’intérêt aujourd’hui, de toute façon.

Object Engineering, the fourth dimension

Référence complète : Object Engineering, the fourth dimension – Philippe Desfray – Addison Wesley 1994 – ISBN: 0-201-42288-3

Object Engineering: The Fourth Dimension

http://www.goodreads.com/book/add_to_books_widget_frame/0201422883?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on

Aidez-moi à trouver un titre !

Comme je l’ai signalé hier, je m’attelle à la tâche de non pas traduire, mais adapter la prose de Tobias Mayer : The People’s Scrum !

A peine ai-je commencé que je dois déjà faire face à une première difficulté : traduire le titre de l’ouvrage ! L’idée n’est pas nécessairement de faire une traduction littérale, mais de préserver l’esprit du texte !

Comment traduiriez-vous “The People’s Scrum” ?

French Translation

thepeoplesscrum:

There is now a fourth translation of The People’s Scrum in the works. Christophe Addinquy will be doing his “spirited translation" into French. Thanks, Christophe!

Read more about the four translations

The People’s Scrum, c’est un livre sur Scrum pas comme les autres ! C’est grandement dans l’esprit de ce que j’essaie de faire avec certains des articles de ce blog. C’est pourquoi nous avons décidé de travailler ensemble sur ce qui sera bien plus qu’une traduction, une adaptation !

Je cherche en ce moment à traduire le titre du livre pour bien en refléter l’essence. Votre aide est la bienvenue !

The Software Preservation Group

http://www.softwarepreservation.com/

Notre discipline n’est plus si jeune. Elle accuse 65 ans, enfin à peu près en fonction de ce que l’on s’accorde à considérer comme l’informatique moderne…

Mémoriser, référencer les documents ayant trait à cette histoire devient une tâche importante à laquelle le SPG s’attelle. Cela reste très partiel, souvent Wikipedia fait même mieux, mais le SPG référence aussi de vieux documents introuvables ailleurs !

The Software Preservation Group