Wall Street est le seul endroit où les gens montent dans une Rolls Royce pour obtenir des conseils de ceux qui prennent le métro.

Warren Buffet
Warren Buffet

Programming Concurrency on the JVM, par Venkat Subramaniam

Note : 5 ; Essentiellement intéressant pour la programmation par acteurs, bien que le traitement du sujet soit largement perfectible.

Ce livre a attiré mon attention, car il traite de programmation concurrente, non spécifiquement en Java, mais sur différents langages de la JVM. Dans la pratique, on parle presqu’exclusivement de Java et de Scala. Clojure parvient à se ménager une petite place, surtout que STM vient de là, mais JRuby et Groovy sont abordés de manière vraiment très succincte en fin de livre.

Du livre, parlons-en : il s’agit d’un texte de 250 pages découpé en 5 parties (la 5ème ne contient qu’un court chapitre de conclusion) et totalisant 10 chapitres. Le premier chapitre est une courte introduction illustrée par du multithread « de base » en Java. Il nous présente le thème récurrent du texte : « shared mutability is pure evil ! ».

La première partie s’intitule « stratégies for concurrency » et se contente de 2 chapitres sur 30 pages. Le chapitre 2 « division of labour » évoque le mapping des tâches avec des threads dans différentes configurations applicatives. C’est un sujet instinctivement naturel mais bien illustré ici. Le texte ayant pris quelques rides, il ne pouvait évoquer les co-routines popularisées par Go et désormais disponibles sur la JVM. Au chapitre 3, on prépare la seconde partie en évoquant, hélas de manière légère, des options de conception liées à la gestion des états, et plus précisément l’impact de la mutabilité. Un chapitre un peu décevant.

Lire la suite

Note de lecture : Effective Modern C++, par Scott Meyers

Note : 7 ; Une verve et une pédagogie toujours présente, mais dans un ouvrage (et un sujet) plus difficile d’accès.

Je suis bien rouillé sur le C++. Je le savais déjà, mais ce texte m’en a fait prendre conscience de manière nette. Par ailleurs le C++ et la manière dont on doit penser son code ont aussi évolué de manière radicale, et ce texte plus que tout autre m’en a fait prendre conscience.

Ce sont 300 pages qui sont consacrées à couvrir les 42 items de ce texte. L’ensemble est regroupé en 8 chapitres. La place dédiée à chaque item est significativement plus importante que dans « effective C++ ». Le premier chapitre « deducing types » fait un peu moins de 30 pages et couvre 4 items. Il fait un choc car on prend de face l’un des aspects du C++ 11 les plus complexes : la gestion des types. Et là il faut bien comprendre les notions de lvalue, de rvalue (à propos, ne sautez pas l’introduction) et de référence universelle. Ajoutons-y l’inférence de type et une touche de template métaprogramming, vous vous dites que le livre va être très long, d’autant que l’auteur semble avoir perdu son humour au passage.

Sans être hilarant, le court chapitre 2 dédié à l’inférence de type avec auto nous permet de reprendre notre souffle. Peut-être ces explications nous auraient même été utiles au premier chapitre ? Je retrouve vraiment le style inimitable de Scott Meyers au chapitre 3. Les sujets traités sont moins ardus, mais ce chapitre couvre quand même 11 items sur 70 pages où l’auteur nous fait découvrir « in situ » les nouveaux mots-clés, les nouvelles constructions du C++ … et leurs sombres recoins. Un chapitre vraiment instructif et agréable.

Lire la suite

Note de lecture : Vous allez commettre une terrible erreur ! par Olivier Sibony

Note : 3 ; Plus une tribune pour que l’auteur clame ses idées, qu’un véritable travail d’étude.

De prime abord, le titre semblait prometteur sur l’investigation des biais cognitifs. Hélas, Olivier Sibony essaie de faire « comme les grands » mais n’y parvient pas. Le texte vise les décideurs et l’auteur se livre au long des pages à une danse de séduction à leur égard qui nuit gravement à la force du texte aussi bien qu’à son contenu même. Nous reviendrons là-dessus en conclusion de cette note.

L’ouvrage lui-même compte 330 pages (hors annexes) divisées en 3 parties, le tout totalisant 16 chapitres. La première partie compte 176 pages sur 9 chapitres. C’est la partie la plus longue, de loin, mais aussi la plus intéressante. Ça tombe bien. C’est justement la partie qui évoque les biais cognitifs. On commence au chapitre 1 par « le piège du storytelling ». Ce chapitre regroupe 3 biais : le biais de confirmation, le biais du champion et le biais d’expérience. Le tout est illustré … par une histoire ! Il s’agit de celle des avions renifleurs. Toutefois le propos et les biais sont clairement expliqués. Mais, et l’on retrouvera cela tout au long du livre, l’auteur manipule bel et bien les éléments dans une direction qu’il souhaite donner. Pour quelqu’un qui prône « les faits, rien que les faits » …

Le second chapitre évoque le piège de l’imitation. Il regroupe l’erreur d’attribution (où l’on corrèle trop vite un résultat avec un facteur), l’effet de halo où seuls les traits qui attirent notre regard sont notés à l’exclusion des autres éléments et le biais du survivant où les ratages sont ignorés. Un bon chapitre bien et clairement illustré. Le chapitre 3 nous emmène vers les pièges de l’intuition : en relatant Kahneman, nous y voyons plus clair sur le champ d’application de l’intuition et du danger de l’extrapoler. Un sujet clairement traité.

Lire la suite

Note de lecture : The Rational Unified Process, an introduction, 3rd edt., par Philippe Kruchten

Note : 6 ; Une importante revue de l’ouvrage

Rational Unified Process fut la méthode tendance jusqu’au milieu des années 2000. Cette 3ème édition est en quelque sorte la mouture ultime (en attendant sa renaissance dans les années 201x, sous le nom de SAFe). Chaque workflow de RUP est riche de descriptifs, de rôles et de pratiques, au point que chacun d’entre eux nécessite au moins un ouvrage pour couvrir le sujet. Ici, il s’agit plutôt d’un tour d’horizon de l’ensemble de ces workflows.

Contrairement à l’édition précédente qui ne représentait qu’une évolution mineure de livre (et du processus), celle-ci a fortement évolué, gonflant également l’édition d’une bonne quarantaine de pages, pour un total de 270 pages hors annexes. Le tout est divisé en deux parties inégales. La première compte 110 pages sur 6 chapitres et traite du processus dans sa globalité. Le premier chapitre est certainement particulier, car il traite de la notion de « best practices », mais surtout il est signé Grady Booch. Après une courte introduction sur cette notion de best practices et de développement itératif et incrémental, l’auteur nous évoque les propriétés d’un bon processus : gestion des exigences, modélisation visuelle, gestion du changement, etc… Bref, les propriétés mises en avant par RUP (ou UP).

Le second chapitre fait écho à ce premier chapitre en déclinant les propriétés évoquées sur RUP, puis en évoquant la structure en 2 dimensions du framework. Tout cela se lit facilement mais il est clair que l’on n’est pas rentré dans le vif du sujet. Le chapitre 3 reste très abstrait car il décrit le méta-modèle du framework : rôles, artéfacts, activités (et étapes d’activités), workflows et disciplines ! Les couches de « pilotage » que sont les guidelines et autres templates ne sont que brièvement décrits. L’ensemble revêt une certaine esthétique pour l’académicien ou le théoricien (moi par exemple) mais va sembler austère et très abstrait pour qui ne porte pas un intérêt aiguisé aux processus de développement !

Lire la suite

Note de lecture : More effective C++, par Scott Meyers

Note : 9 ; De la même veine et de la même qualité que le 1er volume

Effective C++ fut indéniablement un succès. La formule a depuis été reprise par d’autres auteurs, empruntant souvent la même qualité de pertinence technique. Mais ces autres textes n’ont pas la verve d’un Scott Meyers ! Ce second volume est de la même eau que le premier. Ici les centres d’intérêts se focalisent sur un certain nombre de sujets précis (exceptions, casts, etc…) et l’auteur développe plus son propos. D’ailleurs le nombre de règles est plus réduit, tandis que le nombre de pages a augmenté, passant à 290 pages.

L’auteur a structuré son propos en 6 thèmes. Les « basiques » couvrent 4 items plutôt simples sur une quinzaine de pages. La seule « nouveauté » étant les cast C++ apparus depuis peu (à l’époque). La seconde partie couvre aussi 4 items, cette fois sur une vingtaine de pages et sur un sujet plus particulier : les opérateurs. Outre les subtilités dont l’auteur nous régale comme à son habitude, je relève ici deux items particulièrement importants : les écritures idiomatiques des opérateurs pré et post incréments, et les différentes formes des opérateurs new et delete.

La troisième partie nous conduit vers un sujet délicat avec les exceptions : 7 items leur sont dédiés sur 35 pages. Ici, il s’agit tout au long de ces items de nous faire prendre conscience des implications et des limites de leur usage : fuite de mémoire, contraintes au sein des constructeurs et des destructeurs, impact sur les performances, etc. Il y a de quoi s’enfuir, ce qui n’est pas le propos de l’auteur.

Lire la suite

Note de lecture : Blueprint for Revolution, par Srdja Popovic & Matthew Miller

Note 10 ; Un regard radical et perturbant sur le changement. Mais aussi un livre captivant, parfois drôle et touchant ! Pour une révolution qui commence dans nos têtes ! Book of the year 2019 !

Srdja Popovic fait un métier en quelque sorte unique au monde : il est consultant en renversement de dictateurs ! Il a gagné ses galons de crédibilité en étant l’un des chefs de file du mouvement qui a renversé Milosevic. Et il nous gratifie aujourd’hui d’un livre formidable auquel cette note de lecture aura bien du mal à rendre justice.

Le volume lui-même se présente dans un moyen format de 260 pages comptant 11 chapitres. Chacun représente une des étapes de sa méthode de renversement de dictateurs. Car oui, il a une méthode et donne même des formations là-dessus ! Le premier chapitre « it can never happen here » nous trace les débuts de son mouvement : Otpor ! (ne pas oublier le point d’exclamation). Deux décisions initiales à retenir du mouvement. Tout d’abord il est né avec le symbole du poing stylisé, sans plan ni organisation, mais en demandant aux nouveaux venus de montrer leur engagement en peignant au pochoir le symbole dans les rues de Belgrade. Une bonne méthode pour rendre le symbole omniprésent. Ensuite, le choix de ne pas avoir de « leader charismatique » afin de ne pas rendre le mouvement fragile par rapport au pouvoir en place. L’auteur se distingue de Gandhi ou Martin Luther King : pour lui et aujourd’hui, un mouvement pour rallier doit être sympa et marrant. Ce sont les révolutionnaires égyptiens qui sont au centre de ce chapitre qui se conclut par « the fist is shaking Cairo ».

Le second chapitre intitule « Dream big, start small ». Et il débute par l’histoire d’Alrov et de l’augmentation du « Cottage cheese » en Israël. Qui aboutira certes à une révision des prix du fromage mais se poursuivra par des batailles plus importantes. L’auteur nous rappelle qu’il faut choisir ses batailles et que celles-ci doivent parler au plus grand nombre. Ce sont rarement des concepts abstrait comme la liberté, mais souvent des choses plus terre à terre et quotidiennes. Souvent, cela a à voir avec la bouffe. Voir grand, c’est le sujet du 3ème chapitre « A vision of tomorrow ». C’est aux Maldives que nous emporte cette fois l’auteur. Ici Srdja nous invite à visualiser un but concret à atteindre, à l’image du solution focus.

Lire la suite