dimanche 9 février 2014

Les jeux olympiques

Les jeux olympiques sont-ils pour les pays une compétition pour savoir qui pisse le plus loin ? Depuis toujours j'ai l'impression qu'il y a là l'expression d'un nationalisme malsain mais qui, oui, je l'admet, permet aussi d'être une vitrine exceptionnelle pour la renommée internationale de la ville et du pays hôte.  C'est évidemment pour les compétiteurs qui participent aux jeux, l'ultime gloire, l'ultime compétition, celle qui consacre des années d'efforts.  Et c'est parait-il un événement aux retombées économiques importantes. Mais quand les jeux coûtent 50 milliards de dollars, est-ce que les retombées économiques sont suffisantes pour justifier un tel investissement.  Clairement, il y doit y avoir d'autres raisons. 

Comme l’île de Pâques
Personnellement, je ne peux pas m'empêcher de penser à l'ïle de Pâques, où les chefs des différents clans se seraient fait la guerre de celui qui pisse le plus loin en construisant des statues toujours plus grandes à la gloire de leurs chefs. Certains pensent que ce genre de comportements annoncent souvent le début de la fin pour une civilisation (voir l'excellent ouvrage écrit par Jared Diamond Collapse : how societies choose to fail or succeed.  Est-ce ce qui nous attends?  Je ne pourrais dire mais je crois reconnaître un pattern.  Enfin...

La corruption
Dans le cas qui nous intéresse, les jeux de Sochi, j'ai vu un reportage intéressant hier.  La Russie ne serait-elle pas tout simplement en train de faire une extraordinaire passe de corruption? Des prix gonflés pour enrichir les poches des amis du régime Poutine, qui doit lui même avoir des intérêts personnels dans la chose. Le gouvernement de Poutine semble le parfait outil pour faire cela.  Derrière ce qui semble être le projet personnel d'un homme, derrière la fierté nationale de recevoir le monde entier et d'en mettre plein la vue à tous, n'y a-t-il pas là tout ce qu'il faut pour fourrer tout le peuple russe en toute impunité ? Ce n'est même pas mon argent et je suis révolté ! Il faut dire que j'ai l'impression qu'on se fait faire la même chose ici (à plus petite échelle, j'espère). Le stade Olympique de Montréal, au prix de 1.47 milliard (2006) n'a-t-il pas coûté bcp trop cher? Ouille ! Et attention ! Nous ne sommes pas à l'abri d'autres escroqueries : les projets du CHUM, de l'échangeur Turcot et du pont Champlain sont d'autres projets de plusieurs miliiards de dollards ! Il faut qu'on s'occupe de nos affaires... Et les jeux de Beijing ? et les jeux de Londres ? et les jeux de ... ? 

I would prefer not to

"I would prefer not to"... phrase a été reprise par le mouvement occupy Wall Street.  Cette phrase fut d'abord mise dans la bouche du personnage de Bartleby de la nouvelle "Bartleby, the scrivener" par l'auteur américain Herman Melville (auteur du fameux roman Moby-Dick), au milieu des années 1800.  La phrase inspire aujourd'hui à la résistance passive face à des forces souvent trop grandes pour être combattues directement.  

Un débat imposé
J'ai le goût d'appliquer ce principe à des faits de l'actualité.  Prenons le débat sur la charte de la laïcité au Québec.  Je me suis rendu compte, en prenant un peu de recul, que le gouvernement en place, à travers les médias, m'a imposé un débat.  Leur stratégie est à peine dissimulée.  On crée un débat sur un enjeu qui vient chercher le québécois là où il est sensible : son identité. Le parti au pouvoir fait sienne la position la plus populaire et on a une très belle stratégie pour obtenir une victoire électorale.  Ce n'est absolument pas nouveau comme stratégie.  Est-ce que c'est juste moi où c'est juste tellement plus clair cette fois-ci ? Difficile à dire mais ça apparaissait également assez clairement pendant le débat sur les frais de scolarité.  Toujours est-il que je disais qu'on m'a imposé un débat.   

Un enjeu électoral
Le gouvernement, "démocratiquement élu" par le peuple serait donc mandaté, de par dans son programme électoral, de proposer une charte des valeurs de la laïcité, etc.  Je n'ai pas vérifié si c'était clairement indiqué dans leur programme électoral.  Assurez-vous au passage de déranger le plus de minorités possibles avec la dite charte et de réconforter les tendances racistes ou idéalistes d'une majorité silencieuse et vous avez tout ce qu'il faut pour polariser le débat, que les médias s'en mêlent jusqu'au cou, tellement c'est croustillant comme échange. Et puis après, quand on va tous être bien réchauffés, on va nous dire que c'est un enjeu électoral et on va me demander mon vote pour que je prenne parti (oui étant le parti au pouvoir, non étant tous les autres partis).   

En être conscient, je m'élève au dessus du débat...
C'est bizarre, pourquoi est-ce que j'ai l'impression qu'on essaie de me manipuler en me demandant mon vote?   Pourquoi est-ce que j'ai l'impression qu'on essaie de m'inclure dans un système dont je n'aime pas du tout le fonctionnement?  Pourquoi est-ce que j'ai l'impression que les vrais enjeux ne sont jamais discutés? Non, je ne peux pas combattre directement cette puissante machine qu'est le gouvernement, c'est vrai. Mais je peux résister passivement.  Quand on me fait le coup, comme on le ferait à un enfant de deux ans qui répondrait toujours non à tout, et qu'on m'offre le choix entre des toasts et des céréales pour me forcer à répondre quelque chose, alors je m'élève au dessus de la question, comme un être conscient, et je répond "I would prefer not to".

jeudi 6 février 2014

TDD is just a software practice

Today, I’d like to talk about Test-Driven Development (TDD) and its place in our developer life. Especially, since it is a software practice that has received a lot of attention recently, especially in the Agile World.

I’ve had many discussions with my colleagues about TDD.  Don’t get me wrong, I like the intention behind TDD but I just can’t convince myself that we should always use TDD, everywhere.  Of course, using words like “always” and “everywhere” makes it easy not to be convinced of anything!  There are always exceptions and I’m sure my colleagues would agree with that, so in a way, we’re on the same page ;)

What makes me skeptical is how a small group of individuals, with evangelistic motivation (lecturers, consultants and the likes), are now taking a lot of place in the prevailing discourse, having found THE way (or should I say “the silver bullet”) to develop every kind of software.  The TDD practice is very appealing (or not), in a way, because the principles behind it are so simple.  More people are quickly adopting the practice, as if it was bad not to adopt it.  But wait a minute…  Why should someone change his software practice if it’s working for them, for their context, etc ? In fact, many people don’t because they don’t feel they need to and I think they might be right.

Read recently on a forum post answering the question “What do I lose by adopting test driven design?.  This post was supposedly written by Uncle Bob (Robert C. Martin), writer of several good books on software design, lecturer and a very active proponent of TDD.


You lose the ability to say you are "done" before testing all your code.

You lose the capability to write hundreds or thousands of lines of code before running it.

You lose the opportunity to learn through debugging.

You lose the flexibility to ship code that you aren't sure of.

You lose the freedom to tightly couple your modules.

You lose option to skip writing low level design documentation.

You lose the stability that comes with code that everyone is afraid to change.

You lose the title of "hacker".


Ok, on the surface, it is funny but the content is debatable.  First, the way he writes is misleading, because he is suggesting that he knows (or implies) what software practice the reader uses.  What about people carefully writing their tests last and carefully designing first? What about people writings tests first without doing TDD ? What about designing by contract ? Why is Uncle Bob implying that if I’m not doing TDD then I must not be testing my code or I must be designing it badly ? Was all software badly written before TDD ? Of course not ! But it seems to me that this kind of discourse is way too common these days.  I really like Uncle Bob, he is very charismatic .  Unfortunately, the way he talks, the way he writes, when he sells TDD and professionalism, is demagogic .  I’ve heard him debate with Jim Coplien, a well-known writer, lecturer and researcher, and he is a lot less demagogic when he is challenged.  I cannot prove the following assertion but it looks to me like he decided to stop the interview when he concluded that he could not convince Jim Coplien. I’d like to add that Uncle Bob did not convince me that a good architecture would emerge efficiently, using TDD, when responding to Coplien’s example of programming  a bank account.

Now back to TDD.  I’m not saying TDD is bad, all the contrary.  But the burden of proof is on the side of the proponents of TDD.  There is not enough empirical studies on the matter to conclude anything yet.  The studies I have read conclude often to mitigated results because it is very difficult to isolate the factors influencing the metrics.  For me, it is very clear that convincing people to adopt TDD by showing coding kata demonstrations and a persuasive argumentation is not enough.  Sure, it will influence people.  But we should ask for numbers ! Show me the numbers! And I don’t care if Kent Beck successfully applied TDD to every projects.  Kent Beck is hardly representative of the common programmer.

Moreover, I claim a more global approach in choosing our software practices.  Certainly, I agree that there is a general need for improvement of the software quality delivered in the industry.  Certainly there is still a need for more professionalism. TDD might have served its purpose in bringing testing software quality at the center of the discussion.  TDD also served its purpose in bringing software design on the front line.  But now that we are more conscious about that, could we consider choosing other alternatives?   There are many ways to achieve quality software.  And what is quality software anyways…

I’d like to conclude on the following note; my latest thoughts and readings on the subject got me deeply interested to know more about Design by Contract programming, which seems to me like a more formal approach to testing software than TDD is.


Bye !