<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A la Poursuite du Code en Rouge &#187; Génie Logiciel</title>
	<atom:link href="http://www.schwinl.net/categorie/genie-logiciel/feed" rel="self" type="application/rss+xml" />
	<link>http://www.schwinl.net</link>
	<description>Le blog de Guillaume Rams sur le génie logiciel</description>
	<lastBuildDate>Wed, 28 Jul 2010 21:53:10 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Une réfutation de l&#8217;écriture du test en premier (Test-Driven Development)</title>
		<link>http://www.schwinl.net/articles/refutation-du-tdd</link>
		<comments>http://www.schwinl.net/articles/refutation-du-tdd#comments</comments>
		<pubDate>Wed, 28 Jul 2010 21:37:24 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[Cross-post Oxiane]]></category>
		<category><![CDATA[Génie Logiciel]]></category>
		<category><![CDATA[Epistémologie]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Popper]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Test]]></category>

		<guid isPermaLink="false">http://www.schwinl.net/?p=228</guid>
		<description><![CDATA[Karl Popper est un philosophe des sciences ayant fait des apports majeurs à l&#8217;épistémologie, avec entre autres sa définition de la démarche scientifique par la réfutabilité. Je me suis amusé à appliquer certaines de ses thèses à la mise au point de programmes, en supposant qu&#8217;un programme soit une connaissance objective au même titre qu&#8217;un [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_231" class="wp-caption alignleft" style="width: 215px"><a href="http://www.amazon.fr/Conjectures-r%C3%A9futations-croissance-savoir-scientifique/dp/2228900583/"><img class="size-full wp-image-231 " title="Conjectures et réfutations" src="http://www.schwinl.net/wp-content/uploads/2010/07/conjectures.png" alt="" width="205" height="316" /></a><p class="wp-caption-text">Conjectures et réfutations</p></div>
<p>Karl Popper est un philosophe des sciences ayant fait des apports majeurs à l&#8217;épistémologie, avec entre autres sa définition de la démarche scientifique par la réfutabilité. Je me suis amusé à appliquer certaines de ses thèses à la mise au point de programmes, en supposant qu&#8217;un programme soit une connaissance objective au même titre qu&#8217;un théorème ou qu&#8217;une théorie scientifique.</p>
<p>Si on applique ces thèses, on peut démontrer que la lecture du code source ne suffit pas, par la seule puissance de la déduction, à prouver que le programme est correct. D&#8217;ailleurs, un test ne peut pas prouver la validité d&#8217;un programme, au contraire, il ne peut que mettre en évidence une erreur. Popper démontre que le raisonnement inductif n&#8217;est pas la méthode rationnelle pour se rapprocher de la vérité, mais que nous procédons par conjectures et réfutations. Tout raisonnement fonctionnerait à partir de théories que l&#8217;on essaie de contredire, par l&#8217;expérimentation ou par la logique. Pour valider un programme on cherche à le mettre en défaut, ce qui est pourtant intuitivement l&#8217;inverse du résultat visé.</p>
<p>Je vois donc la programmation comme l&#8217;ajout de conjectures sur un fond initial (langage de programmation employé, librairies, système d&#8217;exploitation, autres applications). Fond qui, en passant, est également réfutable selon Popper, contredisant les philosophes affirmant que tout raisonnement rationnel ne se fait qu&#8217;à partir d&#8217;une base de vérités que l&#8217;on augmente par déduction.</p>
<p>En poussant plus loin l&#8217;analogie, le test unitaire consisterait donc à tenter de réfuter la conjecture (le programme). Popper affirme également qu&#8217;une théorie qui en supplante une autre doit expliquer mieux ou plus de choses que la précédente mais également &laquo;&nbsp;survivre&nbsp;&raquo; aux mêmes tentatives de réfutation. C&#8217;est ce que j&#8217;appellerais les tests de non-régression.</p>
<p>Mais alors, si programme = conjecture et test = réfutation, que penser de cette pratique XP : &laquo;&nbsp;<em>écrire systématiquement les test unitaires en premier, et ensuite seulement le programme qui va passer les tests unitaires avec succès</em>&nbsp;&raquo; (le fameux Test-Driven Development) ?</p>
<p>En termes &laquo;&nbsp;popperiens&nbsp;&raquo; cela revient à faire des réfutations avant même de conjecturer ! Les &laquo;&nbsp;XPeurs&nbsp;&raquo; feraient-ils de la programmation d&#8217;une façon irrationnelle ?</p>
<p>Disons plutôt que cela signifie que la conjecture est implicite, qu&#8217;elle trotte dans la tête du programmeur (ou est discutée au sein du binôme pour ceux qui pratiquent également le &laquo;&nbsp;pair-programming&nbsp;&raquo;) pendant la programmation des réfutations/tests. Et c&#8217;est seulement une fois que toutes les réfutations sont posées que l&#8217;on rédige l&#8217;équation ou le programme. Connaissant à l&#8217;avance les tests, la programmation ressemble plus à mon avis à une sorte de régression au sens statistique (trouver la courbe qui passe par tous les points connus à l&#8217;avance).</p>
<p><strong>Cela revient à peser tous les cailloux de la terre et trouver l&#8217;équation vraie pour tout un tas de cailloux donné afin de formuler la gravité. Il me semble donc à la fois plus rationnel (et plus intuitif, je l&#8217;avoue) de poser la conjecture (le programme) avant d&#8217;essayer de le réfuter (par les tests).</strong></p>
<div id="attachment_232" class="wp-caption alignright" style="width: 200px"><a href="http://www.amazon.fr/connaissance-objective-Popper-Karl-R/dp/2080814052/"><img class="size-full wp-image-232 " title="La connaissance objective" src="http://www.schwinl.net/wp-content/uploads/2010/07/connaissance.png" alt="La connaissance objective" width="190" height="302" /></a><p class="wp-caption-text">La connaissance objective</p></div>
<p>Là où je rejoins les partisans du test extrême c&#8217;est que la qualité d&#8217;un programme est proportionnelle à la quantité de tests tentant de le réfuter, tout comme la meilleure théorie, toutes choses égales par ailleurs, est celle qui se prête et s&#8217;est prêtée au plus de tentatives de réfutation.</p>
<p>Ayant moins de connaissances en philosophie qu&#8217;en informatique, il est probable que je résume mal la pensée de Popper, je vous recommande donc chaudement la lecture de l&#8217;original, comme par exemple &laquo;&nbsp;la connaissance objective&nbsp;&raquo; disponible en livre de poche.</p>
<p><a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Frefutation-du-tdd&amp;linkname=Une%20r%C3%A9futation%20de%20l%26%238217%3B%C3%A9criture%20du%20test%20en%20premier%20%28Test-Driven%20Development%29" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Frefutation-du-tdd&amp;linkname=Une%20r%C3%A9futation%20de%20l%26%238217%3B%C3%A9criture%20du%20test%20en%20premier%20%28Test-Driven%20Development%29" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Frefutation-du-tdd&amp;linkname=Une%20r%C3%A9futation%20de%20l%26%238217%3B%C3%A9criture%20du%20test%20en%20premier%20%28Test-Driven%20Development%29" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Frefutation-du-tdd&amp;linkname=Une%20r%C3%A9futation%20de%20l%26%238217%3B%C3%A9criture%20du%20test%20en%20premier%20%28Test-Driven%20Development%29" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/viadeo?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Frefutation-du-tdd&amp;linkname=Une%20r%C3%A9futation%20de%20l%26%238217%3B%C3%A9criture%20du%20test%20en%20premier%20%28Test-Driven%20Development%29" title="Viadeo" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/viadeo.png" width="16" height="16" alt="Viadeo"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Partager/Sauver</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.schwinl.net/articles/refutation-du-tdd/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Espérer le comportement &#8216;A&#8217; tout en récompensant &#8216;B&#8217;</title>
		<link>http://www.schwinl.net/articles/esperer-le-comportement-a-tout-en-recompensant-b</link>
		<comments>http://www.schwinl.net/articles/esperer-le-comportement-a-tout-en-recompensant-b#comments</comments>
		<pubDate>Mon, 13 Apr 2009 21:32:39 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[Cross-post Oxiane]]></category>
		<category><![CDATA[Génie Logiciel]]></category>
		<category><![CDATA[Conduite de projet]]></category>
		<category><![CDATA[Qualité de code]]></category>

		<guid isPermaLink="false">http://www.schwinl.net/?p=177</guid>
		<description><![CDATA[Du management&#8230; Un collègue m&#8217;a récemment envoyé un papier de Steven Kerr &#160;&#187;On the folly of rewarding A, while hoping for B&#171;&#160;. Il montre que très souvent le discours officiel d&#8217;une organisation est de vouloir un comportement, tout en mettant en place un système de récompense/punition qui dans les faits pousse les gens à un comportement tout autre, voire opposé. [...]]]></description>
			<content:encoded><![CDATA[<h3>Du management&#8230;</h3>
<p>Un collègue m&#8217;a récemment envoyé un papier de Steven Kerr &nbsp;&raquo;<a onmousedown="new Image().src='/scholar_url?sa=T&amp;url=http://ieeexplore.ieee.org/xpls/abs_all.jsp%3Farnumber%3D4306645';" href="http://scholar.google.fr/scholar?q=On+the+Folly+of+Rewarding+A%2C+While+Hoping+for+B&amp;hl=fr&amp;lr=&amp;btnG=Rechercher&amp;lr=" target="_blank">On the folly of rewarding A, while hoping for B</a>&laquo;&nbsp;. Il montre que très souvent le discours officiel d&#8217;une organisation est de vouloir un comportement, tout en mettant en place un système de récompense/punition qui dans les faits pousse les gens à un comportement tout autre, voire opposé. <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/wassat.png' alt=':roll:' class='wp-smiley' /> Par exemple on demande à un joueur de sport collectif d&#8217;avoir &laquo;&nbsp;l&#8217;esprit d&#8217;équipe&nbsp;&raquo; et pourtant on ne félicite que les actions individuelles. D&#8217;ailleurs, on ne résume un match de football que par les noms des buteurs. Ainsi, agacé qu&#8217;un joueur fasse trop de passes à l&#8217;adversaire, un entraineur sanctionne chaque passe ratée ; au match suivant personne ne fait plus aucune passe et le jeu est bloqué. <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/pinch.png' alt=':pinch:' class='wp-smiley' /> </p>
<p>Exemple parfait de contre-productivité : une clinique veut réduire le nombre de décès. On met donc en place une prime qui doit récompenser le chirurgien qui a moins de X décès dans le mois sur le billard. Que va-t-il se passer ? On peut parier que dans les mois suivants tous les chirurgiens vont toucher la prime&#8230; En effet, dès qu&#8217;ils s&#8217;approchent du quota fatidique, ils repoussent toutes leurs opérations délicates au mois suivant ! Du coup les gens décèdent dans leur lit en attendant l&#8217;opération, mais ça n&#8217;est pas le problème du médecin. Tout le monde touche sa prime, cependant le nombre de décès global de la clinique augmente&#8230;</p>
<p>Cette théorie semble être un grand classique du management (le papier remonte à 1975) mais je n&#8217;en avais jamais entendu parler. Et quand je l&#8217;ai lu j&#8217;ai eu une illumination. Tenez, imaginez que vous vous tenez sur une grande étendue de sable, une sorte de drap rouge à la main ; vous le secouez un peu en vous demandant pourquoi vous avez ça à la main <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/wassat.png' alt=':wassat:' class='wp-smiley' /> , quand vous entendez un bruit de sabots tagadam-tagadam dans votre dos <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/unsure.png' alt=':unsure:' class='wp-smiley' /> et *vlan* <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/pinch.png' alt=':pinch:' class='wp-smiley' /> </p>
<h3>&#8230; au génie logiciel.</h3>
<p>J&#8217;ai compris beaucoup de choses sur le projet de développement en lisant cela.  Finalement, qu&#8217;est-ce que l&#8217;on demande aux développeurs ? Comportement &#8216;A&#8217; : &laquo;&nbsp;Produire du code de qualité, maintenable par autrui&nbsp;&raquo;. Qu&#8217;est-ce que l&#8217;on récompense ? Les délais de livraison : comportement &#8216;B&#8217;. Je n&#8217;ai jamais vu un développeur se faire sanctionner pour du code mal écrit, non commenté ou conçu de traviole. Par contre, prenez du retard sur le développement, vous allez vous faire enguirlander et vous devrez rester tard tous les soirs pour faire bonne figure. Donc, si vous avez envie d&#8217;une vie de famille ou de loisirs : bâclez votre code. <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/devil.png' alt=':devil:' class='wp-smiley' /> Ne commentez surtout pas, et ne testez que si l&#8217;on vous le demande. De toute façon c&#8217;est votre successeur qui sera pénalisé par le code non-maintenable ; c&#8217;est lui qui ratera ses deadlines <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/grin.png' alt=':D' class='wp-smiley' /> *<em>niark niak niak niak</em>* (&lt;- <em>rire façon méchant dans James Bond</em>).</p>
<h3>Rendre &#8216;A&#8217; inévitable, récompenser  &#8216;B&#8217;</h3>
<p>On va pas chasser le naturel, alors on va biaiser un peu. Continuez à récompenser les délais (&#8216;B&#8217;), mais considérez &#8216;A&#8217; comme acquis. Il faut intégrer le contrôle qualité <strong>continu </strong>et <strong>automatisé </strong>à tout environement de développement. Il doit être impossible de réussir un &laquo;&nbsp;build&nbsp;&raquo; (et donc de livrer) si l&#8217;artefact en question ne respecte pas tous les standards en vigueur. J&#8217;ajouterai même une revue obligatoire de tout code, du stagiaire au chef de projet, avant de pouvoir placer le post-it dans la colonne &laquo;&nbsp;fait&nbsp;&raquo; du tableau blanc. Passez par la colonne &laquo;&nbsp;en revue&nbsp;&raquo;, ne touchez pas vingt-mille francs. Enfin pas tout de suite&#8230; Soyons fous, récompensons la qualité <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/alien.png' alt=':alien:' class='wp-smiley' /> .</p>
<p>PS: merci à Majirus pour l&#8217;article</p>
<p><a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fesperer-le-comportement-a-tout-en-recompensant-b&amp;linkname=Esp%C3%A9rer%20le%20comportement%20%26%238216%3BA%26%238217%3B%20tout%20en%20r%C3%A9compensant%20%26%238216%3BB%26%238217%3B" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fesperer-le-comportement-a-tout-en-recompensant-b&amp;linkname=Esp%C3%A9rer%20le%20comportement%20%26%238216%3BA%26%238217%3B%20tout%20en%20r%C3%A9compensant%20%26%238216%3BB%26%238217%3B" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fesperer-le-comportement-a-tout-en-recompensant-b&amp;linkname=Esp%C3%A9rer%20le%20comportement%20%26%238216%3BA%26%238217%3B%20tout%20en%20r%C3%A9compensant%20%26%238216%3BB%26%238217%3B" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fesperer-le-comportement-a-tout-en-recompensant-b&amp;linkname=Esp%C3%A9rer%20le%20comportement%20%26%238216%3BA%26%238217%3B%20tout%20en%20r%C3%A9compensant%20%26%238216%3BB%26%238217%3B" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/viadeo?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fesperer-le-comportement-a-tout-en-recompensant-b&amp;linkname=Esp%C3%A9rer%20le%20comportement%20%26%238216%3BA%26%238217%3B%20tout%20en%20r%C3%A9compensant%20%26%238216%3BB%26%238217%3B" title="Viadeo" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/viadeo.png" width="16" height="16" alt="Viadeo"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Partager/Sauver</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.schwinl.net/articles/esperer-le-comportement-a-tout-en-recompensant-b/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dessine-moi un POJO&#8230;</title>
		<link>http://www.schwinl.net/articles/dessine-moi-un-pojo</link>
		<comments>http://www.schwinl.net/articles/dessine-moi-un-pojo#comments</comments>
		<pubDate>Thu, 12 Feb 2009 22:56:14 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[Génie Logiciel]]></category>
		<category><![CDATA[Sauf cross-post]]></category>
		<category><![CDATA[Définition]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[POJO]]></category>

		<guid isPermaLink="false">http://www.schwinl.net/?p=138</guid>
		<description><![CDATA[Lu dans la doc d&#8217;un framework : &#171;&#160;un CouteauDeTable est une classe Java standard (ou POJO) qui sert à couper viande ou légume. Il doit sous-classer AbstractCouteau, n&#8217;utiliser dans ses signatures que les types Lame et Manche, avoir un constructeur comme ceci et des attributs comme cela. Et son nom doit finir par CouteauImpl.&#160;&#187; C&#8217;est-à-dire, [...]]]></description>
			<content:encoded><![CDATA[<p>Lu dans la doc d&#8217;un framework : &laquo;&nbsp;un CouteauDeTable est une classe Java standard (ou POJO) qui sert à couper viande ou légume. Il doit sous-classer AbstractCouteau, n&#8217;utiliser dans ses signatures que les types Lame et Manche, avoir un constructeur comme ceci et des attributs comme cela. Et son nom doit finir par CouteauImpl.&nbsp;&raquo; <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/blink.png' alt=':eek:' class='wp-smiley' /> C&#8217;est-à-dire, tout SAUF un POJO <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/ermm.png' alt=':ermm:' class='wp-smiley' /> !</p>
<p>Ce terme est de plus en plus utilisé comme synonyme de &laquo;&nbsp;classe Java&nbsp;&raquo;, ce qui est une erreur. Alors, qu&#8217;est-ce qu&#8217;un <a href="http://www.martinfowler.com/bliki/POJO.html">POJO</a> au juste ? Et bien, ma définition en serait : <strong>une classe Java sans contraintes particulières</strong>.</p>
<p>En fait, il n&#8217;y a pas de POJO sans framework. Un framework peut vous demander de sous-classer telle ou telle classe, respecter telle convention de nommage, limiter ci, imposer cela. A l&#8217;opposé (et un peu en réaction aux EJB), on parle de POJO quand le framework justement n&#8217;impose rien sur vos classes Java : vous développez old-school, classes et interfaces sont conçues librement.</p>
<p>Exemple de framework pas-POJO-du-tout :</p>
<p>&laquo;&nbsp;Sous-classez com.framework.AbstractPrintableObject, avec un constructeur public à un paramètre de type com.framework.PrintEnvironment. Ne définissez que des méthodes publiques non synchronisées qui lèvent comme exceptions des sous-classes de com.framework.PrintException. etc&#8230; etc&#8230;&nbsp;&raquo;</p>
<p>Le même, façon j&#8217;aime-les-POJO :</p>
<p>&laquo;&nbsp;Passez-lui un POJO, le framework d&#8217;impression essaiera de découvrir ses getters publics et de construire une représentation textuelle imprimable.&nbsp;&raquo;</p>
<p>Je précise que j&#8217;écris ça dans un souci d&#8217;illustration, loin de moi l&#8217;idée de suggérer une quelconque supériorité d&#8217;une approche tout-POJO par rapport au framework de grand-papa qui offre un lot de superclasses abstraites. Par exemple, je trouve l&#8217;approche &laquo;&nbsp;pur-POJOs (ah oui, plus plein d&#8217;annotations)&nbsp;&raquo; un peu hypocrite&#8230; <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/whistling.png' alt=':whistle:' class='wp-smiley' /> </p>
<p><a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fdessine-moi-un-pojo&amp;linkname=Dessine-moi%20un%20POJO%26%238230%3B" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fdessine-moi-un-pojo&amp;linkname=Dessine-moi%20un%20POJO%26%238230%3B" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fdessine-moi-un-pojo&amp;linkname=Dessine-moi%20un%20POJO%26%238230%3B" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fdessine-moi-un-pojo&amp;linkname=Dessine-moi%20un%20POJO%26%238230%3B" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/viadeo?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fdessine-moi-un-pojo&amp;linkname=Dessine-moi%20un%20POJO%26%238230%3B" title="Viadeo" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/viadeo.png" width="16" height="16" alt="Viadeo"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Partager/Sauver</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.schwinl.net/articles/dessine-moi-un-pojo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dix-neuf pourcents de commentaires&#8230;</title>
		<link>http://www.schwinl.net/articles/dix-neuf-pourcents-de-commentaires</link>
		<comments>http://www.schwinl.net/articles/dix-neuf-pourcents-de-commentaires#comments</comments>
		<pubDate>Fri, 06 Feb 2009 22:44:08 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[Cross-post Oxiane]]></category>
		<category><![CDATA[Génie Logiciel]]></category>
		<category><![CDATA[Métrique]]></category>

		<guid isPermaLink="false">http://www.schwinl.net/?p=108</guid>
		<description><![CDATA[Si l’on regarde l’ensemble des projets open-source, on trouve en moyenne près d’une ligne sur cinq de commentaires, selon un papier de Dirk Riehle (voir également sur son blog). On y lit que les projets étudiés restent tous très proches de ce taux. Un peu plus surprenant, on découvre que cette densité de très exactement [...]]]></description>
			<content:encoded><![CDATA[<p>Si l’on regarde l’ensemble des projets open-source, on trouve en moyenne près d’une ligne sur cinq de commentaires, selon un papier de <a title="The Sweet Spot of Code Commenting in Open Source" href="http://www.riehle.org/2009/02/04/the-sweet-spot-of-code-commenting-in-open-source/" target="_self">Dirk Riehle</a> (voir également sur <a title="Commentaires sur le Blog de Dirk Riehle" href="http://www.riehle.org/2009/02/04/the-sweet-spot-of-code-commenting-in-open-source/" target="_self">son blog</a>).</p>
<div class="entrybody">
<div>
<p>On y lit que les projets étudiés restent tous très proches de ce taux. Un peu plus surprenant, on découvre que cette densité de très exactement 18,7% de commentaires est la même quelles que soient la taille du projet et la taille de l’équipe <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/shocked.png' alt=':shock:' class='wp-smiley' /> . L&#8217;article propose l&#8217;explication que c&#8217;est dû à une grande auto-discipline de développeurs, très probablement motivée par l’exposition publique du code source à conjointement au nom de son contributeur.</p>
<p>Autre information de cette étude : ce qui influe sur le taux de commentaires est l’âge du projet. Quand un projet avance en maturité son taux de commentaires baisse (enfin d’un chouïa, à 18%). Je suppose que lorsque l’on maintient un code depuis plusieurs années, certaines choses deviennent tellement comprises, partagées et habituelles qu’elles en deviennent implicites, du coup on aurait l’impression d’écrire des évidences dans les commentaires en détaillant trop…</p>
<p>Ces statistiques soulèvent quelques petites questions…    Par exemple, peut-on considérer ce taux comme idéal ? En effet, c’est le taux auquel des développeurs volontaires et auto-organisés aboutissent à moyen terme, quel que soit le projet. Moins de commentaires c’est pas assez, mais plus de commentaires c’est inutile, voire c’est introduire du bruit. Si l’on admet ce taux comme “idéal”, le taux de commentaires de mes développements s’éloigne-t-il significativement de ce chiffre ? Quelle conclusion en tirer ? Ainsi, vous est-il déjà arrivé comme à moi, de vous dire qu’avant de diffuser tel ou tel de vos composants en open-source, il faudrait faire un petit effort de packaging et de documentation ? <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/blush.png' alt=':blush:' class='wp-smiley' /> </p>
<p>Question, en guise de conclusion : si vous imposez de préciser dans les commentaires le ou les auteur(s) de toute classe et méthode par exemple (c’est-à-dire en Java : @author partout), est-ce que vous obtiendrez un code globalement mieux commenté et/ou plus lisible ? <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/devil.png' alt=':twisted:' class='wp-smiley' /> </p></div>
</div>
<p><a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fdix-neuf-pourcents-de-commentaires&amp;linkname=Dix-neuf%20pourcents%20de%20commentaires%26%238230%3B" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fdix-neuf-pourcents-de-commentaires&amp;linkname=Dix-neuf%20pourcents%20de%20commentaires%26%238230%3B" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fdix-neuf-pourcents-de-commentaires&amp;linkname=Dix-neuf%20pourcents%20de%20commentaires%26%238230%3B" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fdix-neuf-pourcents-de-commentaires&amp;linkname=Dix-neuf%20pourcents%20de%20commentaires%26%238230%3B" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/viadeo?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fdix-neuf-pourcents-de-commentaires&amp;linkname=Dix-neuf%20pourcents%20de%20commentaires%26%238230%3B" title="Viadeo" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/viadeo.png" width="16" height="16" alt="Viadeo"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Partager/Sauver</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.schwinl.net/articles/dix-neuf-pourcents-de-commentaires/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Fool on the Hill : prédictions 2009</title>
		<link>http://www.schwinl.net/articles/predictions-2009</link>
		<comments>http://www.schwinl.net/articles/predictions-2009#comments</comments>
		<pubDate>Sun, 25 Jan 2009 18:05:41 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[Cross-post Oxiane]]></category>
		<category><![CDATA[Génie Logiciel]]></category>
		<category><![CDATA[Informatique en général]]></category>
		<category><![CDATA[Le reste]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Amazon EC2]]></category>
		<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Google Apps Engine]]></category>
		<category><![CDATA[Microsoft Live]]></category>

		<guid isPermaLink="false">http://www.schwinl.net/?p=69</guid>
		<description><![CDATA[Hello Goodbye La tendance en ce début d&#8217;année me semble être à la frilosité, au gel de toute forme d&#8217;investissement. On fait le dos rond pour passer la crise, même quand ses propres indicateurs sont au vert. Par exemple, prenez google, pour changer , cette entreprise se porte plutôt bien, et pourtant ça commence à [...]]]></description>
			<content:encoded><![CDATA[<h2>Hello  Goodbye</h2>
<p>La tendance en ce début d&#8217;année me semble être à la frilosité, au gel de toute forme d&#8217;investissement. On fait le dos rond pour passer la crise, même quand ses propres indicateurs sont au vert. Par exemple, prenez google, pour changer <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/wink.png' alt=';-)' class='wp-smiley' /> , cette entreprise <a href="http://news.cnet.com/8301-17939_109-10140992-2.html" target="_blank">se  porte plutôt bien</a>, et pourtant ça commence à dégraisser :  après lively, c&#8217;est <a href="http://news.cnet.com/8301-17939_109-10143245-2.html" target="_blank">au tour  de Notebook et plusieurs autres projets de passer à la  trappe</a>.</p>
<p>J&#8217;en déduis <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/lightbulb.png' alt=':idea:' class='wp-smiley' /> crise <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/icon_arrow.gif' alt=':arrow:' class='wp-smiley' /> réduction des coûts, gel de tout investissement <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/icon_arrow.gif' alt=':arrow:' class='wp-smiley' /> retour  aux mauvaises habitudes <em>quick-and-dirty </em> <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/icon_arrow.gif' alt=':arrow:' class='wp-smiley' /> mauvaise qualité de code.</p>
<p>Il va falloir, avec une réduction du budget, faire aussi bien&#8230; or, en informatique non plus il n&#8217;y a pas de magie. Les DSI vont devoir continuer à faire évoluer les systèmes, et ça se fera, comme d&#8217;habitude, en sacrifiant la qualité. On alimente ainsi une sorte de dette de maintenabilité, on vit d&#8217;une certaine manière au détriment des développement futurs. Par exemple je crois que Flex va continuer sa progression et que Flex augmente la productivité immédiate pour faire très vite des clients web sexy. Mon opinion est que Flex reste une solution qui n&#8217;encourage en rien le développement maintenable à  l&#8217;échelle du gros projet, ne serait-ce que le language actionscript. Malheureusement, la techno diamétralement opposée (non-sexytude, non-démo-immédiate, maintenabilité-nickel), soit GWT, me semble trouver peiner à trouver sa place en entreprise.</p>
<p>Pour résumer : les écrans sexy maintenant, et pour plus tard le développement durable (c-à-d. industrialisé et maintenable).</p>
<h2>Lucy in the sky with diamonds</h2>
<p>Comment réduire les coûts ? On pourrait penser qu&#8217;un élément de réponse est dans ce qu&#8217;on appelle le &laquo;&nbsp;cloud computing&nbsp;&raquo;. Pour résumer le &laquo;&nbsp;cloud computing&nbsp;&raquo; c&#8217;est de faire héberger des applications dans le nuage, vous savez, le reste du monde, le truc que l&#8217;on dessine pour figurer internet sur le diagramme qui représente votre réseau :</p>
<p><img class="aligncenter size-full wp-image-75" title="cloud" src="http://www.schwinl.net/wp-content/uploads/2009/01/cloud1.gif" alt="cloud" width="544" height="359" /><a href="http://www.secmanager.com/files/configuring_pix_firewall.jpg" target="_blank"><br />
</a></p>
<p>Rappelez-vous du slogan de Sun à une époque, &laquo;&nbsp;the network is the computer&nbsp;&raquo;. On est dans la continuité, on dirait maintenant &laquo;&nbsp;the internet is the computer&nbsp;&raquo;.</p>
<p>L&#8217;idée sous-jacente est que votre métier n&#8217;est (probablement) pas de faire tourner des serveurs. Alors, plutôt que de gérer des salles machines, confiez-les à ceux qui ont 1) le savoir-faire et 2) les économies d&#8217;échelle.<br />
Citons le fondateur d&#8217;Amazon, Jeff Bezos : &laquo;&nbsp;We launched our Web services [...]; it&#8217;s the equivalent of creating an electric grid, but for computing. Recently, I went to Luxembourg and visited a 300-year-old brewery. It had this gigantic relic of a generator from when it had to make its own electricity. As soon as they could buy off-grid, they did. Making their own electricity didn&#8217;t make their beer taste better. It&#8217;s the same for running your own data center&nbsp;&raquo;. En passant, si vous pensez qu&#8217;Amazon est seulement une boutique de vente de livres en ligne, ce n&#8217;est plus du tout le cas. Entre autres innovations, Amazon se positionne à travers S3 et EC2 comme un acteur majeur du cloud computing. Disons, qu&#8217;au moins cette fois-ci il y <em>a</em> innovation, rappelez-vous de l&#8217;affaire du brevet &laquo;&nbsp;1-click&nbsp;&raquo;  ! <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/angry.png' alt=':x' class='wp-smiley' /> </p>
<p>Vous voyez le topo. Tout ceci concerne en premier lieu la réduction de coûts, pas vraiment l&#8217;apport de fonctionnalités nouvelles. Autre conséquence d&#8217;un gel des investissements, on ne fera pas l&#8217;investissement de passer ses applications sur le cloud : c&#8217;est une lourde ré-ingénierie, pour l&#8217;instant non maîtrisée.</p>
<p>J&#8217;ajoute donc <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/lightbulb.png' alt=':idea:' class='wp-smiley' /> passer sur le cloud demande investissement initial <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/icon_arrow.gif' alt=':arrow:' class='wp-smiley' /> &laquo;&nbsp;le cloud, oui, mais pas cette année&nbsp;&raquo; <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/icon_arrow.gif' alt=':arrow:' class='wp-smiley' /> désenchantement généralisé et chute du &laquo;&nbsp;hype&nbsp;&raquo; autour cloud computing. Si j&#8217;osais, je dirais sale temps pour le cloud, ha ha <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/wink.png' alt=';-)' class='wp-smiley' /> .</p>
<p>Pour toute innovation, il existerait une courbe de &#8216;hype&#8217; qui serait toujours peu ou prou la même : découverte, attentes déraisonables, désenchantement et finalement compréhension puis productivité. Si vous prenez <a href="http://www.techcrunch.com/2008/08/18/where-are-we-in-the-hype-cycle/">la  courbe publiée par le Gartner de cet été</a>, le cloud computing serait encore avant le &laquo;&nbsp;pic d&#8217;attentes exagérées&nbsp;&raquo;. Et bien ma prédiction est que le cloud va amorcer très vite, dès cette année, la chute des espérances qui se trouve de l&#8217;autre côté de l&#8217;à-pic. L&#8217;avenir (proche) est sombre notamment pour Amazon EC2+S3 justement. En effet, ces technos sont un formidable tremplin à startups, en fournissant un réel service d&#8217;élimination de la barrière à l&#8217;entrée d&#8217;une infrastructure web scalable. Les success-stories d&#8217;Amazon sont pour beaucoup des startups qui offrent des SaaS sur le web. Malheureusement, en cette période de crise, les startups explosent au décollage. Et les grands comptes gèlent veille et investissement. Amazon risque d&#8217;avoir du mal à atteindre son public et se constituer une clientèle. Même constat pour Google Apps Engine.</p>
<p>Bref, y&#8217;en a qui vont un peu <a href="http://www.lemondeinformatique.fr/actualites/lire-plus-de-la-moitie-des-developpeurs-prevoient-de-travailler-sur-des-projets-saas-27842.html" target="_blank">trop vite en besogne</a>.</p>
<h2>Back in the USSR</h2>
<p>Retour aux fondamentaux de la première bulle internet. Hé oui, 1998~2000 : &laquo;&nbsp;détourner la page d&#8217;accueil vers mon portail pour y afficher de la pub&nbsp;&raquo;. C&#8217;est devenu en 2008~2010 : &laquo;&nbsp;détourner les recherches vers mon moteur pour y afficher de la pub&nbsp;&raquo;. Exemple qui m&#8217;a frappé récemment : afin d&#8217;effectuer un dépannage familial à distance j&#8217;installe le tout dernier MSN Messenger Live. A ma grande stupéfaction ça me change mon moteur de recherche dans mozilla ! <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/blink.png' alt='8O' class='wp-smiley' /> Sans me demander mon avis, alors que, franchement, ça n&#8217;a rien à voir, utiliser un pager et mes recherches internet. C&#8217;est un peu comme si je prenais une carte orange et qu&#8217;en vertu d&#8217;accord RATP-TF1 ma télé se mettait à remplacer mes chaines favorites par TF1 et TF6 ! J&#8217;étais furieux : <em>mon ordinateur m&#8217;appartient ! </em> <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/angry.png' alt=':x' class='wp-smiley' /> Winamp : pareil, j&#8217;installe un logiciel pour écouter de la musique et ça me propose un moteur de recherche winamp.com dans mozilla. Bref, plus ça va plus j&#8217;ai l&#8217;impression en installant un logiciel d&#8217;avoir un invité indélicat qui mets les pieds sur la table, le bordel dans mes affaires bien rangées (par exemple &laquo;&nbsp;Mes Documents&nbsp;&raquo;, vas-y, fais comme chez toi), et fouille dans mes affaires&#8230; Il faudra établir une déontologie ou un label indépendant de non-malware sinon bientôt votre navigateur internet ressemblera à ça :</p>
<p><img class="aligncenter size-full wp-image-71" title="moteurs" src="http://www.schwinl.net/wp-content/uploads/2009/01/moteurs.gif" alt="moteurs" width="267" height="466" /></p>
<p>Non, quand une boite ayant pignon sur rue comme Microsoft fait du malware de façon aussi grossière, c&#8217;est que quelque chose va très mal quelque part.</p>
<p>Bref, :idea: retour aux fondamentaux.</p>
<p>En parlant de Microsoft, lot de consolation pour eux, en vertu de tout ce qui précède, pas besoin de se presser pour sortir son <em> office-en-ligne-concurrent-de-google-docs</em>&#8230; c&#8217;est pas encore le moment de  tuer la poule aux œufs d&#8217;or Office&#8230;</p>
<p>Et pour finir, <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/grin.png' alt=':D' class='wp-smiley' /> je vous souhaite une bonne année 2009 !</p>
<p><a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fpredictions-2009&amp;linkname=The%20Fool%20on%20the%20Hill%20%3A%20pr%C3%A9dictions%202009" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fpredictions-2009&amp;linkname=The%20Fool%20on%20the%20Hill%20%3A%20pr%C3%A9dictions%202009" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fpredictions-2009&amp;linkname=The%20Fool%20on%20the%20Hill%20%3A%20pr%C3%A9dictions%202009" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fpredictions-2009&amp;linkname=The%20Fool%20on%20the%20Hill%20%3A%20pr%C3%A9dictions%202009" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/viadeo?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fpredictions-2009&amp;linkname=The%20Fool%20on%20the%20Hill%20%3A%20pr%C3%A9dictions%202009" title="Viadeo" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/viadeo.png" width="16" height="16" alt="Viadeo"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Partager/Sauver</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.schwinl.net/articles/predictions-2009/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les patterns illustrés</title>
		<link>http://www.schwinl.net/articles/les-patterns-illustres</link>
		<comments>http://www.schwinl.net/articles/les-patterns-illustres#comments</comments>
		<pubDate>Fri, 07 Mar 2008 23:05:41 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[Génie Logiciel]]></category>
		<category><![CDATA[Sauf cross-post]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Zoho Creator]]></category>

		<guid isPermaLink="false">http://www.schwinl.net/archives/19/les-patterns-illustres/</guid>
		<description><![CDATA[L&#8217;idée m&#8217;est venue en lisant un billet sur Coding Horror. J&#8217;aime bien les photos qui illustrent les anti-patterns cités par le billet. On pense souvent dans le métier (et à raison, à mon avis) qu&#8217;un diagramme vaut mieux qu&#8217;un long discours, mais on pense rarement aux photos. On a peut-être de mauvais souvenirs d&#8217;abus de clip-art [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;idée m&#8217;est venue en lisant <a title="The Big Ball of Mud and Other Architectural Disasters" href="http://www.codinghorror.com/blog/archives/001003.html" target="_blank">un billet sur Coding Horror</a>. J&#8217;aime bien les photos qui illustrent les anti-patterns cités par le billet. On pense souvent dans le métier (et à raison, à mon avis) qu&#8217;un diagramme vaut mieux qu&#8217;un long discours, mais on pense rarement aux photos. On a peut-être de mauvais souvenirs d&#8217;abus de clip-art dans des présentations PointPuissant, toujours les mêmes, de moins en moins drôles à chaque fois.</p>
<p>Pourtant, une photo bien choisie peut illustrer la philosophie, l&#8217;idée générale derrière un concept technique, le <em>pourquoi</em>, alors qu&#8217;un diagramme va très vite nous emmener dans les détails et dans le <em>comment</em>.</p>
<p> Tout ça pour dire que je m&#8217;amuse à chercher des photos pouvant illustrer les Design Patterns (ceux du GoF pour commencer ça sera déjà pas mal).</p>
<p>J&#8217;ai commencé par le plus évident :</p>
<p><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Adapter_DVI_to_VGA.jpg/800px-Adapter_DVI_to_VGA.jpg" border="0" alt="Adapter" width="320" height="190" align="top" /> <strong>l&#8217;Adaptateur</strong></p>
<p>(ou <em>Adapter,</em> dans la langue de shakespeare, enfin, s&#8217;il avait vécu à notre époque et avait été informaticien).</p>
<p>Un  peu plus subtil :</p>
<p><img src="http://www.diyfactory.com/projects/fetboy/FETboy_Front_Panel.jpg" border="0" alt="Façade" width="320" height="240" align="top" /> <strong>la Façade</strong></p>
<p>(ou en anglais <em>Façade</em> <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/wink.png' alt=';-)' class='wp-smiley' /> )</p>
<p>Je trouve que ça illustre mieux justement la fonction du pattern que le premier degré du genre de ça :</p>
<p><img src="http://www.cg14.fr/chateau_benouville/xhtml/zoom/facade_arriere_z2.jpg" border="0" alt="façade" width="127" height="85" align="middle" /></p>
<p>L&#8217;idée est justement de ne pas ouvrir la porte pour se balader dans toutes les pièces mais bien de piloter en ensemble de composants en boîte noire.</p>
<p> Une autre illustration que j&#8217;aime tout particulièrement :</p>
<p><img src="http://www.pierreyvesracing.fr/images/PereNoel2.jpg" border="0" alt="Stratégie" width="310" height="232" align="top" /> <strong>la</strong> <strong>Stratégie</strong> </p>
<p>(ou <em>strategy</em>, pour les plus anglophones d&#8217;entre vous).</p>
<p>C&#8217;est peut-être déjà un peu plus tiré par les cheveux. Et encore, c&#8217;est rien par rapport à des patterns inillustrables, comme le visiteur ou le pont (et, non, pas une photo de pont, ça serait trop simple).</p>
<p>En bonus, une dernière illustration, pas vraiment un pattern, mais de l&#8217;orienté objet tout de même :</p>
<p> <img src="http://www.detectivefork.com/star3a.jpg" border="0" alt="Héritage multiple" width="266" height="200" align="top" /> <strong>l&#8217;héritage multiple</strong> <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/grin.png' alt=':-D' class='wp-smiley' /> </p>
<p><a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fles-patterns-illustres&amp;linkname=Les%20patterns%20illustr%C3%A9s" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fles-patterns-illustres&amp;linkname=Les%20patterns%20illustr%C3%A9s" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fles-patterns-illustres&amp;linkname=Les%20patterns%20illustr%C3%A9s" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fles-patterns-illustres&amp;linkname=Les%20patterns%20illustr%C3%A9s" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/viadeo?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fles-patterns-illustres&amp;linkname=Les%20patterns%20illustr%C3%A9s" title="Viadeo" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/viadeo.png" width="16" height="16" alt="Viadeo"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Partager/Sauver</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.schwinl.net/articles/les-patterns-illustres/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de RSS</title>
		<link>http://www.schwinl.net/articles/revue-de-rss</link>
		<comments>http://www.schwinl.net/articles/revue-de-rss#comments</comments>
		<pubDate>Sun, 10 Feb 2008 13:40:12 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[Génie Logiciel]]></category>
		<category><![CDATA[Sauf cross-post]]></category>
		<category><![CDATA[DocBook]]></category>
		<category><![CDATA[Revue de RSS]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.schwinl.net/archives/15</guid>
		<description><![CDATA[Norman Walsh nous annonce la sortie de DocBook version 5.0. Ça ne fera probablement pas grand bruit&#8230; Je suis un fervent défenseur de DocBook pour produire la documentation technique, mais on ne doit pas être assez nombreux, en tout cas l&#8217;utilisation de DocBook me semble confidentielle. C&#8217;est bien beau le &#171;&#160;voici les DTD et les [...]]]></description>
			<content:encoded><![CDATA[<p>Norman Walsh nous <a href="http://norman.walsh.name/2008/02/06/docbook50">annonce la sortie de DocBook version 5.0</a>. Ça ne fera probablement pas grand bruit&#8230; Je suis un fervent défenseur de DocBook pour produire la documentation technique, mais on ne doit pas être assez nombreux, en tout cas l&#8217;utilisation de DocBook me semble confidentielle. C&#8217;est bien beau le &laquo;&nbsp;voici les DTD et les XSLT, démerdez-vous vous avez tout ce qui vous faut&nbsp;&raquo;, mais l&#8217;adoption de DocBook serait facilitée par une chaîne d&#8217;édition DocBook libre, facilement installable et utilisable. Faut reconnaitre que le <span style="text-decoration: underline;">premier</span> &laquo;&nbsp;bonjour, monde !&nbsp;&raquo; en DocBook se fait pas en cinq minutes.</p>
<p>Finalisée également la cinquième édition de XML 1.0. Eric Van der Vlist <a href="http://xmlfr.org/actualites/tech/080207-0001">nous explique en quoi cela augure la mort de XML 1.1</a> et en quoi c&#8217;est pas si grave. Les autres annonces de ce déjà fertile mois de Février, <a href="http://www.postgresql.org/about/news.918">PostgreSQL 8.3</a>, <a href="http://wordpress.org/development/2008/02/wordpress-233/">WordPress 2.3.3</a> (un correctif de sécurité avant tout, la mise-à-jour est fortement recommandée si <span style="text-decoration: line-through;">comme moi</span> comme ce site vous êtes sous WordPress) ainsi que les branches <a href="http://www.apachenews.org/archives/001113.html">5.5</a> et <a href="http://www.apachenews.org/archives/001115.html">6.0</a> de Tomcat.</p>
<p><a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Frevue-de-rss&amp;linkname=Revue%20de%20RSS" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Frevue-de-rss&amp;linkname=Revue%20de%20RSS" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Frevue-de-rss&amp;linkname=Revue%20de%20RSS" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Frevue-de-rss&amp;linkname=Revue%20de%20RSS" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/viadeo?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Frevue-de-rss&amp;linkname=Revue%20de%20RSS" title="Viadeo" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/viadeo.png" width="16" height="16" alt="Viadeo"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Partager/Sauver</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.schwinl.net/articles/revue-de-rss/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ohmerde4j</title>
		<link>http://www.schwinl.net/articles/crap4j</link>
		<comments>http://www.schwinl.net/articles/crap4j#comments</comments>
		<pubDate>Tue, 06 Nov 2007 22:26:28 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[Génie Logiciel]]></category>
		<category><![CDATA[Sauf cross-post]]></category>
		<category><![CDATA[crap4j]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Métrique]]></category>
		<category><![CDATA[Qualité de code]]></category>

		<guid isPermaLink="false">http://www.schwinl.net/archives/6</guid>
		<description><![CDATA[Alors, prenons le prochain ticket d&#8217;incident&#8230; voilà. bla bla bla&#8230; mmmh. OK. Ça doit pas être bien compliqué ça devrait se trouver quelque part dans cette classe, là. Tiens, je l&#8217;ai jamais ouverte celle-là. Allons-y, Ctrl+Shift+T, OK, de quoi ça a l&#8217;air ? Oh meeerde&#8230; C&#8217;est précisément l&#8217;effet &#171;&#160;rôh merde&#160;&#187; qu&#8217;essaie de mesurer l&#8217;outil Crap4j, [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Alors, prenons le prochain ticket d&#8217;incident&#8230; voilà. bla bla bla&#8230; <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/pouty.png' alt=':|' class='wp-smiley' /> mmmh. OK. Ça doit pas être bien compliqué ça devrait se trouver quelque part dans cette classe, là. Tiens, je l&#8217;ai jamais ouverte celle-là. Allons-y, <code>Ctrl+Shift+T</code>, OK, de quoi ça a l&#8217;air ? <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/blink.png' alt='8O' class='wp-smiley' /> Oh <em>meeerde</em>&#8230;</p></blockquote>
<p>C&#8217;est précisément l&#8217;effet &laquo;&nbsp;rôh merde&nbsp;&raquo; qu&#8217;essaie de mesurer l&#8217;outil <a href="http://www.crap4j.org/" target="_blank">Crap4j</a>, via la métrique <strong>CRAP (<em>Change Risk Analysis and Predictions</em>)</strong>, ou bien, en français, l&#8217;<em>ohmerditude</em>. Cette traduction en vaut une autre, et puis j&#8217;aime bien le <a href="http://fr.wiktionary.org/wiki/-itude" target="_blank">suffixe &laquo;&nbsp;-itude&nbsp;&raquo;</a> <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/grin.png' alt=':D' class='wp-smiley' /> .</p>
<p>Ce qui me plaît dans cette métrique, c&#8217;est que, pour une fois, on part de la <span style="text-decoration: underline;">question</span> avant de parler de chiffres. Je n&#8217;aime pas l&#8217;approche qui consiste à constituer des tableaux de chiffres sans fin, qui certes donnent un air très savant, mais qu&#8217;on est bien en peine d&#8217;exploiter <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/wassat.png' alt=':roll:' class='wp-smiley' /> . A travers l&#8217;<em>ohmerditude</em>, dans le but de vérifier qu&#8217;un code est maintenable, on essaie de répondre à la question &laquo;&nbsp;un développeur va-t&#8217;il trouver risqué de modifier ce code lors d&#8217;une maintenance ?&nbsp;&raquo;. Si oui, on prend le risque que personne ne touche plus à ce code qu&#8217;entre deux doigts, le bras tendu et en se pinçant le nez de l&#8217;autre main (voir fig. 2 <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/wink.png' alt=';-)' class='wp-smiley' /> ). Les développeurs vont ajouter tout autour de cette boîte noire des couches et des couches de rustines et contournements de moins en moins maintenables <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/cwy.png' alt=':cry:' class='wp-smiley' /> .</p>
<p> <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/lightbulb.png' alt=':idea:' class='wp-smiley' /> Maintenant que vous touchez du doigt tout l&#8217;intérêt potentiel de cette métrique, intéressons-nous à son calcul. La formule est un dosage pifométrique de complexité cyclomatique et de couverture de tests. En gros, un code sera &laquo;&nbsp;crappy&nbsp;&raquo; (ou &laquo;&nbsp;ohmerdique&nbsp;&raquo; si vous préférez) si il est (<em>1</em>) très complexe et (<em>2</em>) très peu testé. Un code très simple sans test ou un code complexe mais très bien testé seront considérés comme acceptables.</p>
<p>Crap4j mélange donc le nombre de <em>conditions </em>à tester avec la couverture de <em>lignes</em> des tests&#8230; mmmmh. <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/pouty.png' alt=':|' class='wp-smiley' /> bon, on a vu pire. Plus exactement, Crap utilise le taux de lignes non couvertes. Si l’on pose l’hypothèse que les décisions sont uniformément réparties dans les lignes de code, alors cette mesure serait une sorte d&#8217;estimation de la quantité de décisions non testées. Malheureusement je ne connais pas d’éléments qui viendraient confirmer cette hypothèse, et ça serait quand même peu fiable.</p>
<h3>Quel usage ?</h3>
<p>Prise en tant que métrique isolée, cette mesure ne serait pas passionnante. Par contre, je l&#8217;utiliserais comme indicateur de <em>testabilité</em> et de <em>possibilité de changement</em>. Selon l&#8217;ISO-9126, <em>testability</em> et <em>changeability</em> sont bien des sous-caractéristiques de <em>maintainability</em>, on est bien en élément de réponse à la question initiale. Et comme la norme laisse complètement libre la façon de calculer des indicateurs pour les sous-caractéristiques qualité (ce qui est la façon normative de dire &laquo;&nbsp;démerdez-vous on vous donnera pas la formule&nbsp;&raquo;), Crap peut être utilisé comme formule de calcul de testabilité &laquo;&nbsp;sur étagère&nbsp;&raquo;, qui présente l&#8217;avantage d&#8217;être simple à expliquer, rapide à mettre en oeuvre et déjà outillée.</p>
<p>A condition que vous n’ayez pas déjà d’outil de mesure qualité qui vous permette de consolider différentes mesures, et à condition également de calibrer crap4j en fonction de vos exigences, celui-ci peut constituer un premier niveau d&#8217;outillage qui vous incitera peut-être à aller plus loin.</p>
<p>On préférera peut-être la version produisant des rapports (via ant, à intégrer à son build continu, donc) que la version plug-in eclipse : le public visé pour cet <strong>indicateur de risque qu&#8217;un changement soit non testé </strong>me semble plutôt le gestionnaire (chef de projet par exemple) que le développeur, qui va probablement garder sous les yeux dans son IDE des règles de codage plus immédiatement &laquo;&nbsp;actionnables&nbsp;&raquo;.</p>
<p><a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fcrap4j&amp;linkname=ohmerde4j" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fcrap4j&amp;linkname=ohmerde4j" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fcrap4j&amp;linkname=ohmerde4j" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fcrap4j&amp;linkname=ohmerde4j" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/viadeo?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fcrap4j&amp;linkname=ohmerde4j" title="Viadeo" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/viadeo.png" width="16" height="16" alt="Viadeo"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Partager/Sauver</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.schwinl.net/articles/crap4j/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT : l&#8217;art est facile, la critique est difficile</title>
		<link>http://www.schwinl.net/articles/gwt-lart-est-facile-la-critique-est-difficile</link>
		<comments>http://www.schwinl.net/articles/gwt-lart-est-facile-la-critique-est-difficile#comments</comments>
		<pubDate>Fri, 02 Nov 2007 18:24:46 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[Génie Logiciel]]></category>
		<category><![CDATA[Sauf cross-post]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.schwinl.net/archives/3</guid>
		<description><![CDATA[Je n&#8217;aime pas JavaScript (sous toutes ses formes, ECMA ou ActionScript) alors je suis très chatouilleux quand on critique GWT sous l&#8217;angle &#171;&#160;c&#8217;est quand même mieux avec &#60;nom de son framework JavaScript favori&#62;&#160;&#187;. Entendons-nous bien, la panacée n&#8217;existe pas, et GWT ne l&#8217;est pas. Je trouve simplement que certains arguments entendus ou lus ici et [...]]]></description>
			<content:encoded><![CDATA[<p>Je n&#8217;aime pas JavaScript (sous toutes ses formes, ECMA ou ActionScript) alors je suis très chatouilleux quand on critique GWT sous l&#8217;angle &laquo;&nbsp;c&#8217;est quand même mieux avec &lt;<em>nom de son framework JavaScript favori</em>&gt;&nbsp;&raquo;. Entendons-nous bien, la panacée n&#8217;existe pas, et GWT ne l&#8217;est pas. Je trouve simplement que certains arguments entendus ou lus ici et là de la part des tenants du JavaScript sont un peu douteux <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/ermm.png' alt=':?' class='wp-smiley' /> Petite revue&#8230;</p>
<h3>Le JavaScript généré par le compilateur GWT est incompréhensible</h3>
<p>Je suis d&#8217;accord à 100%&#8230; mais je ne vois en quoi c&#8217;est un problème ! J&#8217;ai un aveu vous faire : j&#8217;ai fait pas mal de Java jusqu&#8217;ici, et je ne suis <strong>jamais </strong>allé lire le bytecode généré dans mon fichier <code>.class</code>. Honte à moi. <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/blush.png' alt=':oops:' class='wp-smiley' /> Oserai-je l&#8217;avouer ? Je ne saurais de toute façon pas lire du bytecode. Curieusement, cela ne m&#8217;a jamais empêché d&#8217;écrire du Java&#8230; <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/cool.png' alt='8)' class='wp-smiley' /> </p>
<p>Ça revient à dire qu&#8217;il ne faut pas faire de langage C parce-que, eh bien, le langage machine qui est produit en &laquo;&nbsp;<code>-O2</code>&laquo;&nbsp;, on le comprend pas&#8230; Le but du compilateur est justement de générer du code que l&#8217;on a pas envie d&#8217;écrire à partir d&#8217;un langage généralement de plus haut niveau&#8230;</p>
<h3>Oui, mais, ah aaah ! Et si le compilateur GWT a un bug ? Il faut modifier le code généré !</h3>
<p>Je vais même aller plus loin dans votre direction : selon la bonne vieille loi de Murphy, il y a sûrement plusieurs bugs dans le compilateur GWT. Là encore, a-t-on attendu le tout dernier gcc stable pour faire du C ? Je vous mets au défi, quel que soit le langage, de trouver un compilateur qui n&#8217;ait jamais eu un bug ! Dans ce cas-là, on triture, on contourne.</p>
<p>Ça serait effectivement hypocrite d&#8217;affirmer qu&#8217;il n&#8217;y a pas de souci parce-que le compilateur est open-source. Qui a vraiment envie d&#8217;investir le temps nécessaire à rentrer dans le code interne d&#8217;un compilateur ? Moi pas.</p>
<p>La bonne question est plutôt : quel est le <strong>risque </strong>lié à un bug dans le compilateur GWT ? Voyons voir&#8230; Détecter un comportement différent entre le JavaScript généré et le Java sera probablement mis en évidence par un test unitaire (les plus paranoïaques d&#8217;entre nous pourront générer également le javascript pour les tests unitaires et les exécuter in situ dans le navigateur). Reste plus qu&#8217;à trifouiller un peu le Java jusqu&#8217;à trouver une séquence qui compile correctement (vous voyez maintenant pourquoi je vous parlais de test unitaire <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/devil.png' alt=':twisted:' class='wp-smiley' /> ). Au pire, (r)écrivez la séquence problématique en JavaScript via JSNI. La probabilité de tomber sur un bug 100% bloquant et/ou souvent sur des bugs de compilation sévères me semble très faible et donc acceptable.</p>
<h3>Oui, mais le JavaScript généré sera &laquo;&nbsp;sub-obtimal&nbsp;&raquo; ! Sûrement pas aussi bien que mon JavaScript finement ciselé !</h3>
<p>Premièrement : la loi de Moore. Les navigateurs modernes sont capables d&#8217;exécuter de mieux en mieux le JavaScript. La différence supposée de performances est-elle vraiment grave ? Attention à ne pas faire d&#8217;optimisation prématurée (&laquo;&nbsp;la racine de tous les maux&nbsp;&raquo;), le javascript généré suffira-t&#8217;il à faire passer la réactivité d&#8217;un script de <em>acceptable</em> à <em>non-acceptable</em> par l&#8217;utilisateur ?</p>
<p>Deuxièmement, il est possible que le javascript généré par GWT sera bien plus concis :</p>
<ul>
<li>Le compilateur essaie de ne conserver que le code réellement appelé. Je peux me constituer une librairie de composants GWT réutilisable entre les projets, le compilo reconnaîtra les siens. Au contraire, les frameworks JavaScripts sont pour la plupart peu modulaires.</li>
<li>Le code GWT n&#8217;ayant pas besoin d&#8217;être lu/maintenu, il subit une sorte d&#8217;obfuscation lors de la génération de JavaScript, il est bien plus compact que le JavaScript que vous allez écrire. Ou alors vous ne mettez jamais de commentaires et vos noms de fonctions et variables tiennent sur trois caractères <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/devil.png' alt=':evil:' class='wp-smiley' /> . Dans ce cas je vous prierai de quitter ce site immédiatement. Je ne vous salue pas <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/tongue.png' alt=':P' class='wp-smiley' /> .</li>
</ul>
<h3>Oui, mais mon framework JavaScript fonctionne sur tous les navigateurs</h3>
<p>Ça me semble au contraire la meilleures des raisons de faire du GWT : ne plus s&#8217;en occuper ! Le code généré essaie tout autant d&#8217;être multi-navigateur. A moins que le projet GWT meure, on peut supposer qu&#8217;une mise-à-jour du compilateur permettra de simplement recompiler et déployer pour que l&#8217;application soit compatible avec tout nouveau navigateur.</p>
<h3>Alors tu rejettes en bloc toutes nos critiques ! Tu n&#8217;es pas objectif non plus !</h3>
<p>C&#8217;est vrai, j&#8217;adore le principe de GWT <img src='http://www.schwinl.net/wp-content/plugins/smilies-themer/Schwinl/smile.png' alt=':)' class='wp-smiley' /> </p>
<p>Mais l&#8217;implémentation, elle, est critiquable bien sûr. Les remarques pertinentes des javascripteurs sont :</p>
<ul>
<li>GWT réussit à peu près bien à encapsuler le DOM, mais échoue (pour l&#8217;instant) à encapsuler CSS correctement. Il vaut mieux connaître un minimum de HTML+CSS avant de démarrer un développement GWT : Java n&#8217;y suffit pas.</li>
<li>GWT n&#8217;est pas mature. On trouve dans GWT les attributs d&#8217;une techno assez jeunes : documentation incomplète, exemples de code tenant lieu de documentation, bugs effroyables dans la librairie, les &laquo;&nbsp;c&#8217;est pas possible ça a jamais été testé comment ils veulent que ça marche ça !&nbsp;&raquo; et les &laquo;&nbsp;j&#8217;ai fouillé partout je trouve trop pas la fonction pour &#8230;, c&#8217;est pas possible, ils ont jamais fait une vraie appli avec leur truc&nbsp;&raquo;. Bref, attendez-vous à des surprises en allant plus loin que le &laquo;&nbsp;bonjour, monde&nbsp;&raquo;. Cet effet est rattrapé en partie par la réactivité du projet, on sent d&#8217;une version à l&#8217;autre qu&#8217;il est bien piloté par les demandes de la communauté.</li>
<li>GWT n&#8217;est pas à niveau côté Java. Oui, les génériques me manquent&#8230; on y prend vite goût.</li>
</ul>
<p>Si vous voulez voir dans quelle direction va GWT, allez lire <a title="Making GWT Better" href="http://code.google.com/webtoolkit/makinggwtbetter.html">Making GWT Better</a>.</p>
<p><a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fgwt-lart-est-facile-la-critique-est-difficile&amp;linkname=GWT%20%3A%20l%26%238217%3Bart%20est%20facile%2C%20la%20critique%20est%20difficile" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fgwt-lart-est-facile-la-critique-est-difficile&amp;linkname=GWT%20%3A%20l%26%238217%3Bart%20est%20facile%2C%20la%20critique%20est%20difficile" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a> <a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fgwt-lart-est-facile-la-critique-est-difficile&amp;linkname=GWT%20%3A%20l%26%238217%3Bart%20est%20facile%2C%20la%20critique%20est%20difficile" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fgwt-lart-est-facile-la-critique-est-difficile&amp;linkname=GWT%20%3A%20l%26%238217%3Bart%20est%20facile%2C%20la%20critique%20est%20difficile" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a> <a href="http://www.addtoany.com/add_to/viadeo?linkurl=http%3A%2F%2Fwww.schwinl.net%2Farticles%2Fgwt-lart-est-facile-la-critique-est-difficile&amp;linkname=GWT%20%3A%20l%26%238217%3Bart%20est%20facile%2C%20la%20critique%20est%20difficile" title="Viadeo" rel="nofollow" target="_blank"><img src="http://www.schwinl.net/wp-content/plugins/add-to-any/icons/viadeo.png" width="16" height="16" alt="Viadeo"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Partager/Sauver</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.schwinl.net/articles/gwt-lart-est-facile-la-critique-est-difficile/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
