En finir avec les estimations ?

Poker, Fibonacci et stock

Aujourd’hui j’aimerais parler d’estimations. D’estimations agiles, bien sûr. Elles n’ont rien à voir avec les estimations classiques. Ou du moins, pourrait-on le croire. Voyons cela !

L’un des points marquants souvent évoqué est que l’estimation n’est pas faite par une seule personne, mais par l’ensemble des membres de l’équipe, afin de bénéficier de la sagesse de la foule. En fait, l’estimation collective est utilisée depuis longtemps dans les approches classiques et est connue sous le nom de wideband Delphi. Il est vrai toutefois que la technique est sous-utilisée, beaucoup de chefs de projets préférant « optimiser » le temps nécessaire aux estimations ou ignorant simplement cette technique !

L’autre élément majeur est l’utilisation d’estimations relatives, décorellé d’une estimation en charge. Une approche déjà utilisée dans le Function Point Analysis. Ici l’approche agile se distingue par l’utilisation d’une échelle de précision adaptative qui a donné lieu aux fameux jeux de carte du planning poker

image

Lire la suite

Publicités

Bientôt l’été !

J’en fais déjà une tradition : le blog va passer en régime estival. Essayons d’en dire plus.

Mon activité

L’an dernier, je vous avais fait part de gros changements. Ce ne sera pas le cas cette année, heureusement ! En fait, j’ai plusieurs petits projets personnels en cours ou à venir pour lesquels je dois me ménager un peu de temps. Mais il ne sert pas à grand chose d’en parler tant qu’ils ne sont pas arrivés à maturité.

Pour préparer la rentrée

Oui, il faut y penser dès à présent ! Il y a bien sûr des conférences et principalement la série des agile tours ! Le programme n’est pas encore fixé, mais je vise 3 présences sur ce dernier trimestre pas plus. Il reste à déterminer sur quels évènements.

Sur le blog

Malgré les sarcasmes de mes confrères, je suis bien décidé à vous relivrer mes notes de lecture has been (je pense à Pablo et Alfred, principalement…). J’en ai un paquet à écouler, donc ce ne sera pas la dernière année. Dans l’ensemble il devrait s’agir de textes accusant une vingtaine d’année environ !

Toujours dans la séquence nostalgie, j’ai aussi quelques articles écrits il y a une dizaine d’année d’année. J’attendais une opportunité pour les replacer : ce sera fait !

En finir avec…

Ce n’est pas très logique de sortir ce genre d’écrits à l’époque où la fréquentation baisse, mais je récidive dans cette voie.
Ce sont 5 opus que je vous ai livré sur les deux années précédentes. Ont déjà subi mon traitement impitoyable :

Je vise 3 sujets pour cet été. Cela parait peu, mais ces posts me demandent vraiment beaucoup de travail et de recherche. L’an dernier, je me suis même limité à deux ! Je vous laisse deviner les sujets que je me prépare à aborder. Vous pouvez laisser un commentaire si vous avez une idée.

L’été commencera le 1er Juillet ! A très bientôt.

Scrum Shu Ha Ri : l’article

Après vous avoir infligé le support de la présentation que j’avais faite lors du Printemps Agile à Caen, voici le contenu de la présentation elle-même. Peaufiné, retravaillé, il ne correspond peut-être pas (certainement pas, en fait) à la transcription de ma présentation, mais en révèle le contenu de manière plus approfondie.

En effet, ce ne sont pas moins de 93 renvois et 80 références bibliographiques (sans compter les 27 illustrations) qui émaillent les 29 pages du texte.

Bonne lecture !

Functional Programming in Scala sur Coursera

Un an ! J’ai attendu un an pour produire ce post suite au cours « functional programming in Scala » ! Je n’avais pas le temps, pas l’humeur, je changeais de boulot, etc. En fait, je suis peut-être simplement un pro de la procrastination. Enfin voilà!

Ce cours proposé par le créateur de Scala n’avait pas pour but de nous initier au langage, mais de nous faire découvrir la programmation fonctionnelle en nous appuyant sur celui-ci. C’est donc plus particulièrement une facette précise du langage que nous avons découvert, et non le langage dans sa totalité.

Le cours

Le format est plutôt bien choisi, avec des « petits tronçons » de 10 à 15 minutes. Parfois les sujets plus volumineux s’enchainent sur 2 tronçons avec juste un entr’acte entre les deux. Deux mentions spéciales :

  • Aux quizz qui émaillent ces séquences. Ils ne sont pas toujours évidents !
  • A la chevelure de Martin Odersky qui apparait régulièrement en superposition des vidéo !

Certains cours sont présents mais font en fait partie du cursus d’Odersky à l’EPFL. On les reconnait à leur niveau mathématique franchement plus élevé !

Ce n’est pas un cours sur Scala ! Il s’agit d’un cours de programmation fonctionnelle en Scala. Ainsi il y a tout un pan (au moins) du langage qui n’est pas évoqué. De même, le cours n’est pas directement transposable à un autre langage fonctionnel.

Les exos

C’est un peu la partie dure de ce cours. Ils sont de complexité croissante et arrivé vers la 3ème semaine deviennent de vrai casse-tête. Ils sont aussi très consommateurs de temps. Pas question de les laisser pour le dernier moment ! Si les premiers exercices m’ont pris largement moins de temps qu’indiqué, les derniers ont nettement dépassé le temps normalement requis en ce qui me concerne.

Les exercices sont aussi extrêmement cadrés. La plupart du temps, le squelette des méthode est fourni, on s’attend donc à ce que nous écrivions la solution imaginée par l’auteur du cours. C’est probablement bien, mais assez frustrant.

Une dernière chose : les exercices sont très bien instrumentés : il y a une commande SBT qui permet de soumettre l’exercice en ligne, le résultat est noté et argumenté en retours. On peut aussi pratiquement recommencer « ad noseum ». Seul le meilleurs résultat est conservé !

Scala : ce que j’ai aimé

Multi-paradigmes

Même si l’on n’en parle peu durant ce cours, Scala est en fait un langage « multi paradigmes ». En fonction de la sensibilité du développeur, il y a plusieurs voies pour résoudre un problème, en favorisant un paradigme plutôt qu’un autre, en les mixant…

Bien entendu, ceci en fait un langage difficile d’abord. En fait, il me rapelle C++ ! Si pour beaucoup cette comparaison frise l’insulte, ce n’est pas mon cas…

Le support de l’immutabilité

Le nom même du langage vient de « scalable ». Dans les architectures modernes en général et pour Odersky en particulier, être scalable, c’est offrir peu de prise à la concurrence et permettre de clusteriser les traitements. Pour Scala, l’un des secrets consiste à travailler avec des objets immutables. En choisissant d’en faire des val ou des var, on contrôle parfaitement ce que l’on souhaite faire.

Dommage quand même que l’on ait pas de mécanisme pour effectuer cette déclaration au niveau de la classe elle-même, pour interdire son utilisation mutable ! OK, OK, vous allez me dire qu’il me suffit de déclarer tous les champs de ma class « val »…

La surcharge d’opérateurs

Voici une fonctionnalité qui doit hérisser le poil de bien des Javanais ! Je n’ai rien contre la surcharge d’opérateur lorsque sa sémantique est bien inscrite dans celle qui est implicitement attendue par l’utilisateur. C’est d’ailleurs un des pièges en C++ !

Des objets à la place de singletons

Je ne suis pas fan des Singletons, mais le suis encore moins des bricolages à base de méthodes statiques. Donc si l’on veut une instance unique de quelque chose, il suffit de le déclarer en « Object » plutôt qu’en « Class ». Voilà !

D’ailleurs, il n’y a tout simplement plus de membre statique en Scala : bon débarras !

Les Traits

Les interfaces Java me posent un problème depuis le début. Je ne fais que peu de différence entre une interface et un pattern « template method » : refactorer une interface pour en faire un Template Method est pour moi une évolution naturelle. Oui mais voilà en Java, il faut passer d’une interface à une classe abstraite pour faire cela, et ce sont deux choses radicalement différentes ! Il faut repenser le design, ce qui est même souvent impossible « grâce » à l’héritage unique de Java !

Vous allez me dire que que maintenant c’est possible en Java 8 grâce aux « défaut methods ». C’est vrai, même si conceptuellement ce n’est pas ce que j’essaie d’exprimer avec le template method, je peux m’en servir pour cela (en sacrifiant le « final » que j’aurais souhaité utiliser).

Avec les Traits, on peut pratiquement utiliser toutes les fonctionnalités disponibles sur une superclasse ! De notables différence existent cependant (par exemple les traits n’héritent pas d’Object que j’éxecre de toute façon). Et le mécanisme sous-jacent appelé « linéarisation » est très différent.

On peut désormais penser son design de manière très différente : les classes deviennent des « mix in » de fragments de comportements. Et l’importance de l’arbre d’héritage à la papa est grandement diminué.

Des types spéciaux bien utiles…

En lieu et place d’Object, Scala nous propose différents types de base et différents « bottom types ».

image

Any, AnyVal et AnyRef sont les types parents du système de type Java. AnyRef est en fait un déguisement de Object, car il faut quand même tourner sur la JVM…

Plus intéressant : NULL est une vrai classe (à instance unique) et sous-classe tous les descendants de AnyRef. Nothing fait la même chose pour tous les descendants de Any. Il faut un peu apprendre à se servir de tout cela, ce n’est pas évident.

Les case classes

Elles offrent des facilités d’écriture et d’utilisation bien sympathiques, surtout dans le cas de value classes immutables. Par exemple, les paramètres du constructeur sont disponibles en tant qu’attributs “val” sans qu’il n’y ait rien à faire…

for expressions

Pas très facile à appréhender, le for (…) yield {…}, qui est en fait une combinaison de map, flatmap et filter.

Scala : ce que j’aime moins

Le « mode compression »

Je déteste la plupart des raccourcis syntaxiques qui permettent d’économiser un caractère par ci, un caractère par là… Comme par exemple se passer de parenthèses dans certains cas, ou de l’appel de méthode avec la notation à point.

Comme me le faisais remarquer si justement un de mes collègues, la motivation premières de la plupart de ces sucres syntaxiques est de permettre de transformer Scala en syntaxe type DSL ! C’est à mon avis un mauvais calcul, où l’apparente élégance d’écriture se traduit par plus de difficulté pour appréhender la sémantique. Il y a des fois où le côté rustique…

On ne saurait bien entendu passer sous silence le désormais célèbre « _ » ! Là encore, ces apparente économies rappellent les aspects les moins glorieux du Perl !

Bref, Martin aurait mieux fait de se casser une jambe le jour où il a pondu ces trucs là !

La programmation fonctionnelle, ce n’est pas très objet

Je me faisais un plaisir de masquer les listes, d’encapsuler les algorithmes. Avec la programmation fonctionnelle, j’ai l’impression de les exhiber à nouveau. Sans compter bien entendu que cette chère programmation fonctionnelle est le domaine des matheux …ce que je ne suis pas !

Bref, il me faudra pas mal réflechir pour voir si on peut concilier l’élégance de l’objet avec l’efficacité du fonctionnel. Odersky prétend que c’est ce que fait Scala, mais je n’en ai pas d’exemples frappants pour l’instant.

Un syntaxe dense, même sans le mode compression !

Le code Scala, c’est sans aucun doute élégant et efficace. Mais la lecture en demande pas mal de concentration et d’effort. Là encore, je retrouve un aspect un peu C++.

A côté, la syntaxe plus « paysanne » de Java permet plus facilement de débrancher le cerveau (sauf si vous commencez à utiliser les trucs de Java 8…).

La surcharge d’opérateurs

Oui, je sais, je l’avais mis dans les points positifs ! C’est parce qu’hélas Scala ne s’arrête pas à vous permettre de redéfinir les opérateurs prévus dans le langage. Il permet de définir les vôtres (encore cette satané velléité de faire de Scala une machine à DSL). Du coup cela permet de délirer tranquillement à définir des opérateurs en ASCII art sur 4 ou 5 caractères. Et c’est bien parti !!

Next step…

Le cours n’est pas une ballade de santé. C’était une opportunité pour aborder Scala, mais rétrospectivement, ce n’était pas la plus simple ! Commencer par du « better Java » aurait été plus raisonnable à mon âge…

Il y a beaucoup de choses intelligentes que j’aime bien dans Scala. Entre autre son aspect assumé « ulti-paradigmes », qui en fait aussi un langage difficile ! Ce dernier point signifie qu’il faut beaucoup le pratiquer, ce que je ne fais pas. Je me pose donc pas mal de questions sur le fait de persister…

D’autres langages alternatifs sur la JVM proposent des améliorations allant dans le sens de Scala tout en restant centré sur la facilité de lecture. Je pense spécialement à Ceylon. Bien sûr ils n’ont pas non plus le potentiel de Scala. Ils n’ont pas non plus la « traction » de Scala qui est réelle aujourd’hui et qu’on ne saurait ignorer.

Essai du Livescribe Sky Wifi Smartpen

Découverte de la bête

Le Livescribe est dans la lignée directe du Logitech io : un stylo électronique fonctionnant sur une base clasique (papier + pointe à bille) mais sur un papier muni d’une trame très fine permettant à la caméra et à l’électronique subordonnée de se repérer et de digitaliser l’écriture.

L’ensemble se présente dans un packaging plutôt sommaire (moins bien fini que son prédécesseur). En ouvrant la boite, on constate quelsues différences :

  • Le stylo est bien plus fin : on le tient mieux en main, et il fait moins “alien” quand vous le dégainez en réunion. Il reste quand même assez massif…
  • Il n’y a plus de socle de ravitaillement, la connexion USB (indispensable ne serait-ce que pour recharger) se fait directement entre le stylo et l’ordinateur. Câble fourni, bien sûr. C’est plus simple, c’est mieux.
  • Le stylo lui-même est fourni avec non pas avec un capuchon mais plutôt un embout enfichable pas pratique du tout, que l’on aura tôt fait de perdre. D’ailleurs, il en est fourni 2.
  • On ne saurait rater le petit écran d’affichage, en-dessous du bouton marche/arrêt. Indispensable à différents niveaux d’utilisation. Curieusement, il fait bien le boulot.
  • Enfin le stylo est équipé d’un micro qui permet un enregistrement et qui est synchronisé (vraiment synchronisé !) : la classe.

Sur cette photo, vous pouvez comparer le Livescribe (à l’avant plan) avec le Logitech situé juste derrière. L’embout qui sert de capuchon est situé sr la gauche du stylo. A comparer avec le vrai capuchon du Logitech ! L’écran du Livescribe est égallement visible.

image

Au démarrage !

Ce stylo est Wifi et utilise Evernote pour déverser les pages numérisées. Si vous êtes un accroc d’Evernote (comme moi), c’est franchement bien. Nous reviendrons là-dessus. On pourrait croire que cela va nous dispenser d’installer quoi que ce soit l’ordinateur si tout passe par le cloud ? Pas tout à fait. Donc en fait, pas du tout !

Il y a un petit soft à installer pour le setup de base du stylo et pour charger les mises à jour. Ce soft pilote le cable USB dans cette configuration. Il y a aussi de la configuration à faire sur le site Livescribe pour enregistrer le stylo et autoriser le déversement des notes sur votre compte Evernote.

Une partie importante de la configuration du stylo est saisie complètement sur le stylo lui-même. La méthode est extrêmement originale et déroutante au premier abord : on selectionne les paramètres à configurer et on saisit les valeurs en pointant le stylo lui-même sur une carte spéciale où figure un clavier fictif !

image

Ce clavier fictif figure en première page d’un cahier “starter” fournit avec le kit. Livescribe founit quelques fiches en sus, on ne sait jamais. Au passage notons que Livescribe est plus pingre que Logitech sur les fournitures. Le cahier starter n’est pas extraordinaire (et pas bien gros non plus) il faut penser rapidement à se réapprovisionner.

Hélas seuls certains cahiers sont disponibles en France. Il existe des carnets genre Moleskine, mais qui ne sont disponibles qu’aux USA. J’en ai commandé 2 : le coût du carnet chez Amazon plus la livraison, ça ne fait pas bon marché !

Autre chose orginale concernant les carnets : Livescribe détecte les carnets utilisés et ouvre un carnet Evernote différent pour chacun d’entre-eux ! C’est excellent. Par contre impossible de modifier le titre de la page, c’est très agaçant.

A l’usage

C’est la simplicité même: le bouton marche/arrêt. Ensuite, il ya des commandes pour débuter, arrêter ou mettre l’enregistrement en pause en bas de chaque page !

image

Si vous saisissez le texte à un endroit où le Wifi du stylo n’est pas configuré (c’est le cas le plus fréquent), il suffira de l’alumer de retour à l’endroit où le Wifi est configuré : la synchronisation se fera toute seule ! De l’autre côté, la synchronisation dans Evernote se fait comme vous en avez l’habitude.

Maintenant, il faut en venir à la très très mauvaise nouvelle !

Pas de conversion de texte !

Quand j’utilisais le Logitech io, il y a 237 ans, je disposais d’un petit soft de reconnaissance de texte. Il n’était pas parfait, mais fonctionnait raisonnablement bien moyennant un petit apprentissage.

Le prédécesseur du modèle Wifi, le pulse ne fonctionnait pas via Evernote. Mais une société tierce, Vision Object proposait un soft pour convertir le texte depuis le Livescribe Desktop. Comme le Livescribe Wifi fonctionne sans le Desktop, on n’a plus accès à cette possibilité.

Le seul espoir réside dans l’apparition d’une fonctionnalité de conversion dans Evernote. Mais à priori rien ne semble prévu, même en version Premium !

En conclusion

Le gadget est sympathique. Mais l’absence d’un outil de conversion qu’on accepterait de grand coeur de payer en plus m’empêche de recommander ce modèle. Je garde espoir qu’Evernote nous propose quelque chose dans un horizon pas trop lointain. C’est un gros handicap pour moi car j’utilise mes notes manuscrites pour mes blog post en grande partie.

L’absence de conversion est d’autant plus frustrante qu’Evernote sait parfaitement reconnaitre l’écriture manuscrite et la rend “cherchable” !

image

Donc si votre besoin est juste de collecter des note et de pouvoir faire des recherches à l’intérieure, les possibilités offertes ici peuvent vous suffire. Mais c’est plutôt limitant.

Pour vous permettre de vus faire une idée, voici une pertie de cette article sous forme manuscrite saisie avec le Livescribe.

image

Facile à bien utiliser, difficile à mal utiliser: l’article

J’avais évoqué la chose en publiant le support de ma présentation de l’Agile Tour Bruxelles : voici cette présentation cette fois sous forme d’article. Je m’étais déjà livré à cet exercice suite à mon lighning talk sur l’émergence. Je souhaite systématiser cela, car le support de présentation éclaire assez peu sur la teneur d’une présentation.

Hélas, l’exercice est aussi très consommateur de temps, cela explique le retard conséquent que je peux avoir à produire ces articles.

2.0, I me mine (opus 2013)

Comme je l’avais fait sur les deux années précédantes(donc 2011 et 2012), voici mon l’état de mon usage du Web 2.0

Cette année écoulée est marquée des révélations de Snowden. La NSA a transformé l’Internet en source d’information, bien d’autres pays sont sur la voie. Je pensais déjà à ce que je met sur le Web en terme d’information pouvant être espionnée. Il faut se faire à l’idée que ce ne plus une question de pouvoir l’être, mais de l’être vraiment.

De moins en moins à plus du tout

Yammer : J’utilisais peu du temps du SUG. Je ne fais plus partie du SUG, donc maintenant c’est “plus du tout” !

Quora : J’utilisais peu. Là il faut que je l’avoue tout net, j’ai fait une année complète sans y aller. Donc, termeiné ? On verra…

Diigo : J’étais parti avec pas mal d’enthousiasme sur cet outil de bookmarking. Au final, je me suis lassé de continuer son utilisation.

Producteev : C’était un peu mon outil GTD. Des détails ergonomiques un peu crispant ont fini par avoir raison de ma pugnacité. C’est bien dommage. Peut-être essaierai-je un outil concurrent ?

Ideascale : Je l’avais fait figurer ici car j’étais au bureau du SUG. Depuis que je n’y suis plus, mon usage en est devenu anecdotique.

Pas plus, pas moins … mais peu

Google Doc : J’aimais pas avant, j’aime toujours pas ! Je l’utilise pour partager des choses avec des collègues, mais c’est tout, et contraint et forcé !

Google plus : C’est surtout un outil de notification pour moi. Parfois je lis des posts dans certaines communautés… en fait, ce sont bel et bien les communautés que j’ai tendance à trouver pratiques.

github : Ca ne fait pas terrible de dire ça, mais j’utilise très peu github. Juste un peu les gist…

Stackoverflow : Il est et reste le site incontournable pour répondre à n’importe quelle question de développement. Même si c’est rare, je cntinue à en faire l’expérience !

Trello : Quelques boards personnels et quelques boards professionnels. Je garde un rythme modéré mais réel sur l’outil.

Meetup : Je n’administre plus le meetup du French SUG, mais je reste connecté à 3 ou 4 groupes qui y organisent leurs rencontres.

Slideshare : Là non plus, ce n’est pas un site que je fréquente régulièrement. Juste pour y poster mes présentations 4 ou 5 fois par an…

Disqus : J’ai connecté mon blog à Disqus. Mais pour être honnête, j’ai très peu de commentaire par ce biais. J’en ai bien plus par LinkedIn d’abord, et par Google plus ensuite !

Capitaine Train : La plupart de mes déplacements en train sont pris en charge par l’entreprise. Mais j’utilise bien volontier cet excellent service quand je dois le faire moi-même. Donc peut-être 2 fois par an ou quelque chose comme ça…

Viadeo : Le LinkedIn Français est un incontournable. On y accepte des contacts, j’y notifie les posts de mes blogs (ça ne semble pas porter beaucoup…). Et dans tout ça, mon profil n’y est même pas à jour !

LinkedIn : Si Viadeo est le LinkedIn Français, LinkedIn est le Viadeo international. J’entretiens avec beaucoup d’attention mes contacts. Et mes informations y sont à jour. L’un dans l’autre, je l’utilise un petit peu plus que Viadeo, également pour les notifications de post. Mais ce n’est pas mortel quand même…

Pas plus, pas moins … mais plutôt pas mal

Dropbox : Le stockage en ligne reste un de mes très gros usages. J’y stocke vraiment beaucoup de choses. Bref, usage quaotidien et intensif. Aussi bien “pro” que “perso” !

Evernote : Je suis toujours un utilisateur intensif de DropBox. Et même si cela ne se justifie pas toujours pas, j’ai désormais un abonnement Premium. Et aussi un Livescribe (sur lequel je ferais bientôt un post). Bref, je l’utilise quotidiennement : usage professionnel, personnel, brouillons de mes posts (y compris celui-ci), etc.

GMail : Il faut bien l’avouer, aujourd’hui pratiquement tous mes mails sont sur GMail. Autant pour la confidentialité…

Twitter : Il s’agit surtout d’un usage pro, qui tourne autour de la thématique de l’agilité. C’est aussi pour moi un outil de notification. Pour moi, le web “social” tourne presqu’exclusivement autour de Twitter. Bien que je ne sois pas un fondu des réseaux sociaux…

Tumblr : Mon volume de posts est disons … intéressant. Avec plus de 200 posts par an, on peut dire que c’est une plateforme que j’utilise intensivement !

Plus aujourd’hui qu’hier

Flickr : Depuis que j’ai fait l’acquisition d’un appareil numérique digne de ce nom (un Olympus Pen), mon volume de photo a bien grimpé. Notament lors des évènements pro. Je poste toutes mes photos pro sur Flickr, ne serait-ce qu’à cause du redimensionnement qu’effectue ce service pour faire rentrer mes prises de vues dans le blog. Ce redimensionnement est réellement d’excellente qualité.

Dashlane : J’ai pratiquement cessé d’avoir un même mot de passe pour plusieurs services. J’ai aussi arrêté les mots de pase triviaux. Tout cela grâce au coffre-fort électronique. Esérons que la confidentialité affichée soit réelle … et que le service dure très longtemps !

Issuu : J’utilise désormais exclusivement ce service pour partager des PDF sur mon blog (malgré un techno Flash…). Donc de plus en plus, que ce soit pour mes propres textes, ou d’autres du domaine public que je souhaite partager.

Les nouveaux venus

Goodreads : Le seul nouveau venu de l’année écoulée ! Goodreads permet de partager sa liste de lecture et de consulter celles des autres. Bref, tout ce que l’on a envie d’échanger sur la lecture !

Donc peu de grosses nouveautés pour cette année. En fait, j’ai même un peu fait le ménage. A l’année prochaine !