<?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>Do as i say, not as i do &#187; méthodologie</title>
	<atom:link href="http://www.do-as-i-say.com/notes/tag/methodologie/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.do-as-i-say.com/notes</link>
	<description>Car dire ça n&#039;est pas toujours faire, mais ça ne coûte rien</description>
	<lastBuildDate>Mon, 26 Apr 2010 11:40:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Symfony expliqué à ma maman, 4ème partie : le MVC</title>
		<link>http://www.do-as-i-say.com/notes/2010/03/mvc-symfony-explique-a-ma-maman-4/</link>
		<comments>http://www.do-as-i-say.com/notes/2010/03/mvc-symfony-explique-a-ma-maman-4/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 08:52:59 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[2. Des trucs expliqués à ma maman]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[méthodologie]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=607</guid>
		<description><![CDATA[Suite aux posts un peu laborieux sur les design patterns et le découplage, il est temps d&#8217;être (un peu plus) concret et de raconter la vie d&#8217;un ami qui vous veut du bien : le MVC.
Le MVC est un design pattern qui est l&#8217;abréviation de Modèle-Vue-Contrôleur, et pour une fois, en anglais ou en français, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-618" style="border: 1px solid black;" title="L'homme et la machine" src="http://www.do-as-i-say.com/notes/wp-content/uploads/man_machine-150x150.png" alt="L'homme et le machine" width="128" height="128" />Suite aux posts un peu laborieux sur les <a href="/notes/2009/09/design-patterns-symfony-explique-a-ma-maman-2/">design patterns</a> et le <a href="/notes/2009/09/decouplage-symfony-explique-a-ma-maman-3/" target="_blank">découplage</a>, il est temps d&#8217;être (un peu plus) concret et de raconter la vie d&#8217;un ami qui vous veut du bien : <strong>le MVC</strong>.</p>
<p>Le MVC est un design pattern qui est l&#8217;abréviation de Modèle-Vue-Contrôleur, et pour une fois, en anglais ou en français, ça fait les mêmes initiales (<em>Model-View-Controller</em>), donc y aura pas de débat sur comment qu&#8217;on doit causer. On raconte que son créateur se nomme Trygve Reenskaug, me demandez pas comment ça se prononce — son créateur, ou disons son théoricien, car comme souvent, on ne l&#8217;avait pas forcément attendu pour opérer de cette façon, mais il a mis des mots dessus (ce qui ne diminue pas l&#8217;importance de son travail).</p>
<p><span id="more-607"></span>Pour tout dire, quiconque a fait seul dans son coin des sites web dynamiques en mettant un peu (beaucoup) les mains dans le cambouis des langages/bases de données/exploitations multiples des mêmes informations, etc, a de fortes chances d&#8217;avoir à un certain niveau commencé à appréhender plus ou moins consciemment le MVC &#8211; ou alors, il a vraiment beaucoup galéré, et il est un petit peu décédé à l&#8217;heure qu&#8217;il est.<br />
Moi qui vous parle, enfin vous écrit, avant de lire quelques livres intéressants sur le sujet et de découvrir des frameworks, j&#8217;en étais arrivé à travailler systématiquement avec d&#8217;un côté des méthodes d&#8217;accès aux informations (à peu près bien abstraites du système de base de données), de l&#8217;autre des fichiers traitant les sorties (pour le web, pour le XML, pour des usages internes&#8230;), et au milieu un ou plusieurs points traitant les actions des utilisateurs et décidant ce qui devait être mis en œuvre.</p>
<p>Bien sûr, n&#8217;ayant pas conscience clairement des enjeux de cette division (faute entre autres d&#8217;avoir mis des mots dessus ; d&#8217;où l&#8217;importance de nommer), il traînait de nombreuses erreurs d&#8217;organisation affaiblissant souvent pas mal l&#8217;ensemble. Mais le fond était là : porté par la <strong>nécessité interne </strong>des traitements récurrents nécessaires pour une application web, j&#8217;avais fait un premier pas sans même le savoir, tel le Monsieur Jourdain des design patterns, dans le monde merveilleux du MVC.</p>
<h3>Le MVC, ou comment diviser pour mieux régner</h3>
<p>Précisons avant d&#8217;aller plus loin que comme tout design pattern, MVC n&#8217;est pas spécifiquement dédié à une technologie, un langage ou quoique ce soit.<br />
Il concerne de droit toute application avec une interface Homme-Machine, comme on dit (enfin, on dit IHM si on veut avoir l&#8217;air au courant), et consiste en une sorte de paradigme de l&#8217;organisation de l&#8217;application, séparant les données et leur vie (modèle), leur présentation (vue), et la gestion des événements (contrôleur).</p>
<p>Séparer le modèle et la vue repose sur une exigence au fond assez simple, qu&#8217;on pourra schématiser comme suit : il faut traiter d&#8217;un côté le &laquo;&nbsp;fond&nbsp;&raquo;, de l&#8217;autre la &laquo;&nbsp;forme&nbsp;&raquo;. Je recours aux guillemets, non pas pour pourrir la lecture, mais parce que l&#8217;utilisation de ces deux termes et leur séparation semblent aller de soi, or comme tout ce qui &laquo;&nbsp;va de soi&nbsp;&raquo;, elles méritent d&#8217;être questionnées. Il est illusoire de croire qu&#8217;il y aurait d&#8217;un côté du &laquo;&nbsp;fond&nbsp;&raquo; (du contenu, de la pensée&#8230;) et de l&#8217;autre de la &laquo;&nbsp;forme&nbsp;&raquo; (l&#8217;expression, qu&#8217;elle soit écrite, orale, artistique&#8230;)<br />
Autant supposer qu&#8217;on peut sans autre forme de procès séparer la musique du son, ou l&#8217;objet de sa manifestation — ce fantasme de séparation n&#8217;est en fait qu&#8217;une autre version de l&#8217;illusion platonicienne de la chose en soi, &laquo;&nbsp;vraie&nbsp;&raquo; chose dont le phénomène serait une version dégradée dans notre pauvre monde d&#8217;apparences.<br />
Non pas qu&#8217;il n&#8217;y ait pas un intérêt théorique capital à pouvoir <em>considérer</em> séparément ces aspects ; mais dans la réalité, je vous le dis, croyez-moi sur parole, le phénomène épuise tout ce qu&#8217;il y a à être de la chose, et la forme, comme je l&#8217;ai déjà formulé dans une note précédente, et exactement <strong>forme de son fond et réciproquement</strong>. Bref. J&#8217;ai clairement entamé un autre post ici, qui verra peut-être le jour une autre fois. Revenons à nos moutons.</p>
<p>Nos moutons sont le M, le V, et le C. Il n&#8217;aura échappé à personne, du moins à personne qui aura lu avec un minimum de concentration le <a href="/notes/2009/09/decouplage-symfony-explique-a-ma-maman-3/">billet précédent sur les prises électriques et les grille-pain</a> (mais je reconnais qu&#8217;il faut du courage), qu&#8217;une organisation isolant bien ces trois aspects d&#8217;un programme est comme l&#8217;archétype du découplage.<br />
Votre modèle (en gros, les données) peut changer de principe de stockage, de nature même si ça vous chante, pour peu qu&#8217;il soit correctement <em>interfacé</em> avec les autres couches du MVC, elles n&#8217;y verront que du feu. Le centre nerveux de votre application (le contrôleur, qui réagit aux actions de l&#8217;utilisateur et distribue les réponses) peut de son côté traiter n&#8217;importe quel type d&#8217;entrées et rediriger les sorties vers n&#8217;importe quel affichage, i.e. les vues. Vues qui de leur côté se contentent de mettre en forme (grosso modo) des informations, indépendamment de leur origine. J&#8217;ai failli dire &laquo;&nbsp;se contentent d&#8217;<em>afficher&nbsp;&raquo;</em>, mais en fait, contrairement à ce que son nom laisse croire, une &laquo;&nbsp;vue&nbsp;&raquo; au sens du MVC ne résulte pas nécessairement en quelque chose de&#8230; visuel. Une vue peut-être par exemple un fichier XML, qui vivra sa vie ensuite selon le client (au sens informatique) qui l&#8217;a requis.</p>
<h3>Quand l&#8217;intelligence gagne la matière</h3>
<p>L&#8217;intérêt très concret de l&#8217;application du MVC est qu&#8217;il isole les opérations, donc que chacun n&#8217;a à s&#8217;occuper que de sa partie. Et comme dans la vie, c&#8217;est toujours mieux quand chacun ne s&#8217;occupe que de ce qui le regarde. Dans ma Normandie natale, on dit &laquo;&nbsp;<em>Chacun son champ, les vaches sont bien gardées</em>&laquo;&nbsp;. Eh bien on ne peut mieux formuler le principe du MVC.<br />
En termes de développement, cette division conceptuelle vise à organiser les rôles par fonction, et à <strong>traduire les différences de nature en séparations opérationnelles</strong>. Comme si on faisait rentrer dans la chair du code, qui a priori n&#8217;en a que faire, un peu du sens des objets qu&#8217;on manipule. En contre-partie, dans un effet de résonance sémantique, j&#8217;irais bien jusqu&#8217;à dire : de récompense sémantique, le code, initialement &laquo;&nbsp;bête&nbsp;&raquo;, gagne en intelligence d&#8217;organisation et d&#8217;évolution. Risquons la formule : <em>bien utiliser le MVC, c&#8217;est insuffler de l&#8217;âme dans la matière. </em>Ouaip. Pas moins.</p>
<p>L&#8217;ultime intérêt, non des moindres, est pédagogique : en s&#8217;efforçant d&#8217;appliquer cette discipline de conception et d&#8217;implémentation, on s&#8217;oblige à bien comprendre ce qui fait quoi dans son application. Et croyez-moi, c&#8217;est pas de la tarte.<br />
Mais, une fois encore, une bonne méthode appliquée avec constance finit par insuffler plus que du mécanisme, et crée de l&#8217;intelligence. Et pas que dans le code. Dans le codeur également. C&#8217;est toute la puissance de la <em>méthodologie</em> : des idées régulatrices qui <em>dirigent vers </em>un endroit. Et même si on ne sait pas précisément où est l&#8217;endroit, on peut travailler à avancer dans la bonne direction, et à bien arpenter le <strong>chemin</strong>.<br />
Car pour finir sur une touche étymologique du meilleur aloi, c&#8217;est précisément de là que vient le mot <em>méthode</em> : μέθα (<em>méta</em>, qui suit) οδός (<em>odos</em>, le chemin).</p>
<p>___________________________________</p>
<p><em>Image empruntée ici : <a href="http://www.marriedtothesea.com/archives/2007/Aug/" target="_blank">http://www.marriedtothesea.com/archives/2007/Aug/</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2010/03/mvc-symfony-explique-a-ma-maman-4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Réinventer la roue</title>
		<link>http://www.do-as-i-say.com/notes/2010/01/reinventer-la-roue/</link>
		<comments>http://www.do-as-i-say.com/notes/2010/01/reinventer-la-roue/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 07:57:18 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[3. Sagesse et parts de flan]]></category>
		<category><![CDATA[antipatterns]]></category>
		<category><![CDATA[méthodologie]]></category>
		<category><![CDATA[roue]]></category>
		<category><![CDATA[tradition]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=1047</guid>
		<description><![CDATA[L&#8217;un des arguments principaux justifiant le recours à un framework (par exemple, au hasard, Symfony), contrebalançant le fait qu&#8217;il est un peu &#171;&#160;lourd&#160;&#187;, est que puisqu&#8217;il prend en charge un grand nombre des tâches répétitives de bas niveau, il évite au développeur d&#8217;avoir, selon l&#8217;expression consacrée, à réinventer la roue à chaque fois qu&#8217;il entame [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-1065" style="border: 1px solid black;" title="La roue" src="http://www.do-as-i-say.com/notes/wp-content/uploads/roue.jpg" alt="La roue" width="128" height="128" />L&#8217;un des arguments principaux justifiant le recours à un framework (par exemple, au hasard, <a href="http://www.symfony-project.org" target="_blank">Symfony</a>), contrebalançant le fait qu&#8217;il est un peu &laquo;&nbsp;lourd&nbsp;&raquo;, est que puisqu&#8217;il prend en charge un grand nombre des tâches répétitives de bas niveau, il évite au développeur d&#8217;avoir, selon l&#8217;expression consacrée, à réinventer la roue à chaque fois qu&#8217;il entame une nouvelle application ou une nouvelle interface.</p>
<p><span id="more-1047"></span>&laquo;&nbsp;Réinventer la roue&nbsp;&raquo; (ou &laquo;&nbsp;rihinveinte zeu ouhile&nbsp;&raquo;, pour les bilingues), c&#8217;est perdre du temps sur quelque chose qui a déjà été fait, bien fait, mieux fait, bref, faire un travail inutile. En programmation, c&#8217;est même un <a href="/notes/2009/09/design-patterns-symfony-explique-a-ma-maman-2/">antipattern</a> célèbre. Si on peut lui reconnaitre dans une certaine mesure un intérêt pédagogique (l&#8217;impétrant développeur, en passant du temps sur une fonctionnalité déjà réalisée, s&#8217;initie au code et à sa logique &#8211; pour peu qu&#8217;il soit guidé), il est clair qu&#8217;on déconseille fortement de réinventer la roue. Si ça a déjà été inventé, coco, pourquoi perdre du temps à le refaire, d&#8217;autant qu&#8217;il y a fort à parier que tu le referas moins bien. En effet, non seulement la roue a déjà été inventée, mais depuis le temps, elle a été perfectionnée.</p>
<p>La bonne pratique est donc de capitaliser, comme on dit, sur ce que les autres ont déjà fait, testé et éprouvé.<br />
En programmation, où l&#8217;Histoire est encore fraiche et où tout va très vite, ces &laquo;&nbsp;autres&nbsp;&raquo; sont parfois des contemporains (voire sont plus jeunes que vous ; sales jeunes), mais pour généraliser on peut dire que cette bonne pratique consiste à apprendre de ce qui a été fait, donc apprendre du passé, des générations précédentes, en d&#8217;autres termes : de ses aînés. Ce passé qu&#8217;on peut plus ou moins consciemment faire fructifier a un nom : <strong>la tradition</strong>.</p>
<p>L&#8217;Histoire se répétant, chaque nouvelle génération a une tendance plus ou moins forte à vouloir se défaire de la tradition, comme une transposition à l&#8217;échelle socio-culturelle de la crise d&#8217;adolescence, où le besoin de conquérir son individualité se traduit parfois par des chocs violents (tant il est évident que pour chaque jeune, les vieux n&#8217;ont vraiment rien compris, et ne peuvent de toutes façons pas le comprendre lui).</p>
<p>Il y a pourtant une réalité douloureuse, c&#8217;est que globalement, vu que l&#8217;Histoire n&#8217;a pas exactement commencé hier, ni même à la naissance de Bill Kaulitz/Brian Molko/Kurt Cobain/Robert Smith/John Lennon (choisissez pour votre génération ou celle qui vous suit), vu que l&#8217;humanité, donc, a quelques heures de vol derrière elle, excusez du peu, <strong>il y a de fortes chances que <em>tout ait déjà été fait</em>.</strong></p>
<h3>Connais tes classiques</h3>
<p>Bien sûr, l&#8217;accélération (on va appeler ça comme ça) de l&#8217;Histoire dûe à la technologie au sens très large, donc depuis la fin du XIXème siècle, fait que dans pas mal de domaines, le passé est bref. Ça a un côté assez sympathique, on peut croire un peu qu&#8217;on défriche des choses — et ça n&#8217;est en partie pas faux —, mais il ne faut pas non plus se faire avoir par une courante <strong>illusion d&#8217;optique</strong> : même si concrètement le contenu du savoir/de la technologie en question est &laquo;&nbsp;différent&nbsp;&raquo;, dans l&#8217;histoire du savoir, on n&#8217;<em>invente</em> que très rarement quelque chose. Pour ne pas dire jamais. La plupart du temps, on repasse en fait par des chemins qui ont déjà été empruntés, même si on ne le sait pas (et dans ce cas, en un sens, on peut se retrouver à réinventer la roue).</p>
<p>Cette illusion repose principalement sur un aveuglement, dû à un manque de connaissance du passé, et la bonne pratique qui préconise de ne pas réinventer la roue exhorte donc à ouvrir les yeux. Mais pour ça, comme on dit, il faut <em>connaître ses classiques</em>. Lire, écouter. Plus tu connais le passé, plus tu maîtrises le présent, plus tu façonnes le futur comme tu le veux (je devrais écrire des slogans pour ERDF, moi).</p>
<p>Ça peut avoir l&#8217;air déprimant comme ça, mais ça ne l&#8217;est que si l&#8217;on se berce de l&#8217;illusion (une autre) qu&#8217;on est le premier de l&#8217;espèce humaine et que tout nous a attendu. Il faut se réveiller. Personne ne nous a attendu, et <strong>les morts sont plus forts que les vivants</strong>.<br />
Mais en fait, c&#8217;est très bien, et ça laisse quand même de la place. Parce que l&#8217;histoire est une perpétuelle redigestion, qu&#8217;elle engendre quand même du nouveau, et qu&#8217;emprunter un chemin qui a déjà été foulé est toujours un nouveau périple.</p>
<p>La morale de cette histoire (qui n&#8217;en est pas une), c&#8217;est que quand l&#8217;ego a réussi à faire le deuil de sa toute-puissance, à entrer dans son humilité, et pas au sens chrétien du terme, alors les choses intéressantes peuvent éventuellement commencer.<br />
J&#8217;aborderai probablement une autre fois le rapport à la tradition, qui n&#8217;est évidemment pas univoque et ne doit pas consister en une soumission absolue (car, <a href="/notes/2009/09/si-a-50-ans-tas-pas-ecoute-du-mahler/">comme disait l&#8217;autre</a>, la tradition ça peut aussi être de la paresse ou de la négligence. Mais pour contester ou dépasser, il faut connaître ce qu&#8217;on prétend dépasser.</p>
<p>__________________________</p>
<p><em>Illustration fort à propos trouvée fortuitement ici : </em><a href="http://plennevaux.be/alexandre/general/monocycle-par-ben-wilson/" target="_blank">http://plennevaux.be/alexandre/general/monocycle-par-ben-wilson/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2010/01/reinventer-la-roue/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>L&#8217;appel au bon sens</title>
		<link>http://www.do-as-i-say.com/notes/2010/01/l-appel-au-bon-sens/</link>
		<comments>http://www.do-as-i-say.com/notes/2010/01/l-appel-au-bon-sens/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 07:47:14 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[3. Sagesse et parts de flan]]></category>
		<category><![CDATA[argumentation]]></category>
		<category><![CDATA[bon sens]]></category>
		<category><![CDATA[méthodologie]]></category>
		<category><![CDATA[rationalité]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=1018</guid>
		<description><![CDATA[
Ça fait quelque temps que je fomente cette note. A force d&#8217;entendre répéter ça et là que telle ou telle chose n&#8217;est qu&#8217;une question de bon sens, et malgré des années de sommeil (pas si dogmatique), j&#8217;ai fini par remâcher quelques vieilles dispositions anti-cartésiennes dont je vais vous abreuver pas plus tard que tout de [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-1025" style="border: 1px solid black;" title="Le discours de la thodemé" src="http://www.do-as-i-say.com/notes/wp-content/uploads/200px-Descartes_Discours_de_la_Methode1.jpg" alt="Le discours de la thodemé" width="128" height="128" /></p>
<p>Ça fait quelque temps que je fomente cette note. A force d&#8217;entendre répéter ça et là que telle ou telle chose n&#8217;est qu&#8217;une <em>question de bon sens</em>, et malgré des années de sommeil (pas si dogmatique), j&#8217;ai fini par remâcher quelques vieilles dispositions anti-cartésiennes dont je vais vous abreuver pas plus tard que tout de suite.</p>
<p>Car oui, s&#8217;il n&#8217;a bien évidemment pas inventé le <em>bona mens</em>, c&#8217;est notre ami Descartes qui installe le &laquo;&nbsp;bon sens&nbsp;&raquo; comme le fourre-tout le plus prospère de l&#8217;histoire de la pensée (occidentale) moderne.</p>
<p><span id="more-1018"></span>La première phrase du premier chapitre de la première partie du fameux/fumeux <em>Discours de la méthode</em> assène anéfé sans autre forme de procès que, selon la formule que chacun connait sans la connaitre :</p>
<blockquote><p><span>Le bon sens est la chose du monde la mieux partagée </p></blockquote>
<p><span>Il ne faut pas cela dit prendre Descartes pour plus bête qu&#8217;il n&#8217;est ; son bon sens n&#8217;est pas le pur et mou &laquo;&nbsp;sens commun&nbsp;&raquo;, mais une disposition de l&#8217;esprit que chacun peut trouver, une sorte de sagesse de l&#8217;évidence (et sans mauvaise blague, Dieu sait que c&#8217;est son truc, à René, l&#8217;<em>évidence</em>).<br />
Tout comme <em>faire simple</em> est parfois plus <strong>complexe</strong> que <em>faire compliqué</em>, faire comme on dit &laquo;&nbsp;preuve de bon sens&nbsp;&raquo; n&#8217;est pas si aisé. C&#8217;est que l&#8217;évidence cartésienne est une sorte de préfiguration du résultat de la réduction phénoménologique (enfin, soyons honnêtes, ce sont les phénoménologues qui réinvestissent Descartes un peu moins de trois siècles après).<br />
Il y a le &laquo;&nbsp;bien connu&nbsp;&raquo;, trop connu, qui camoufle, comme le gros drap poilu et poussiéreux d&#8217;années de sensations non questionnées, la phénoménitude du phénomène (Ségo, sors de ce corps).</span></p>
<p><span>Mais quand même, le bon sens selon Descartes est bien à la portée de tout le monde. C&#8217;est <em>la chose du monde la mieux partagée</em>. En une phrase Descartes signe l&#8217;ouverture de la modernité, faisant d&#8217;une &laquo;&nbsp;qualité&nbsp;&raquo; inhérente à tout être humain le butoir à la régression à l&#8217;infini du questionnement philosophique : au bout d&#8217;un moment, il ne faut plus se demander pourquoi, car c&#8217;est <em>bien évident que ça n&#8217;est qu&#8217;une question de bon sens</em>. Jvous la fait à l&#8217;arrache des grands jours, bien sûr, mais l&#8217;argument ontologique<span> (qui sert de base à une preuve de l&#8217;existence de Dieu) ne vaut pas deux cacahuètes de plus.</span></p>
<h3><span>Un coup de poing sur la table</span></h3>
<p><span>Eh oui. Songes-y, toi le voyageur mystérieux (ouaip, j&#8217;ai envie de vous apostropher comme ça), si enfin il <em>suffit</em> de <em>faire preuve</em> de bon sens, il n&#8217;y a plus rien à discuter. Et si tu ne comprends pas, c&#8217;est que tu n&#8217;as pas, ou pas assez, de bon sens. Prends-toi ça dans ta face. Et si tu critiques ou te révoltes, c&#8217;est que tu ratiocines, que tu coupes les cheveux en un multiple de deux, bref, que tu es du côté de la non-clarté (oui, le &laquo;&nbsp;côté obscur&nbsp;&raquo;, ça a des sortes de connotations dont je vais me passer pour ce soir), donc ferme ta mouille.<br />
En quoi le recours à l&#8217;argument, que dis-je, le coup de poing sur la table de l&#8217;invocation du bon sens, est un double geste démagogique — le bon sens est la sagesse des humbles, de la France d&#8217;en bas, pas des intellos parisiens </span><span>— </span><span>et autoritariste : c&#8217;est en fait un ordre impératif de se taire.</span></p>
<p><span>Comprenons-nous bien : je force le trait, comme souvent, pour donner de la chair au propos. Je reconnais tout à fait, je l&#8217;ai évoqué plus haut, la difficulté de la simplicité, et j&#8217;admets qu&#8217;on a souvent tendance à faire d&#8217;emblée compliqué. Je suis assez d&#8217;accord pour mettre la sagesse du côté du <em>moins</em>, ou plutôt du <em>kairos</em>, de la juste mesure, quoi (à strictement parler, le saisissement du bon moment, qui est un art délicat). Et je sais bien que Descartes n&#8217;aurait pas complètement dit le contraire, mais j&#8217;aime bien l&#8217;avoiner, car sous maint aspect il nous a bien plombé. Enfin ça n&#8217;est pas l&#8217;objet.</span></p>
<p><span>Et le <em>bon sens</em>, alors ? Je n&#8217;ai rien contre le bon sens. Quelque soit ce qu&#8217;on entend par là, presque. C&#8217;est plus son invocation, utilisée comme stratagème rhétorique, qui a tendance à me rendre un tantinet suspicieux. </span></p>
<p><span>Ce sera donc le conseil du jour : tout comme quand vous entendez parler de <a href="/notes/2009/08/le-carreleur-et-le-developpeur/" target="_self">carreleur</a>, chaque fois que soudain un <em>appel au bon sens</em> surgit, entendez-le bien, mais ne vous faites pas moucher. <strong><br />
Le bon sens n&#8217;est pas un argument en soi.</strong> Et surtout : il ne va pas de soi (normal, sinon on n&#8217;aurait d&#8217;ailleurs pas à y faire appel&#8230;), donc son irruption dans un discours ne doit pas mettre fin à toutes les questions.<br />
En fait, il ne vaut pas plus qu&#8217;un coup de poing sur la table. Alors ok, un coup de poing sur la table, des fois c&#8217;est utile, mais il faut savoir où on est et ne pas prendre ça pour un argument.<br />
Or, on peut être intimidé par les coups de poing, mais on a toujours le droit de demander des arguments.<br />
</span></p>
<p><span><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2010/01/l-appel-au-bon-sens/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Symfony expliqué à ma maman, 2ème partie : les design patterns</title>
		<link>http://www.do-as-i-say.com/notes/2009/09/design-patterns-symfony-explique-a-ma-maman-2/</link>
		<comments>http://www.do-as-i-say.com/notes/2009/09/design-patterns-symfony-explique-a-ma-maman-2/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 14:36:32 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[2. Des trucs expliqués à ma maman]]></category>
		<category><![CDATA[antipatterns]]></category>
		<category><![CDATA[complexité]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[méthodologie]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=354</guid>
		<description><![CDATA[
Résumé de l&#8217;épisode précédent : un framework, c&#8217;est une boîte à outils, des briques de base, et une méthodologie pour développer mieux, plus vite, et de manière plus sûre (un peu comme ça, quoi). Mais si ça peut fortement aider, ça n&#8217;est pas magique, et ça demande de suivre les principes du framework lui-même.
Une partie [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-491 alignleft" style="border: 1px solid black;" title="Prendre la quatrième à gauche et tourner à droite après la fontaine" src="http://www.do-as-i-say.com/notes/wp-content/uploads/design_pattern-150x150.jpg" alt="Prendre la quatrième à gauche et tourner à droite après la fontaine" width="128" height="128" /></p>
<p><em>Résumé de l&#8217;<a href="/notes/2009/08/framework-symfony-explique-a-ma-maman-1/">épisode précédent</a> : un </em><em>framework, c&#8217;est une boîte à outils, des briques de base, et une méthodologie pour développer mieux, plus vite, et de manière plus sûre (un peu <a title="Plus dur, meilleur, plus rapide, plus fort" href="http://jiwa.fr/track/La-Pompe-Moderne-101321/Plus-dur-meilleur-plus-rapide-plus-fort-159007/Plus-dur-meilleur-plus-rapide-plus-fort-1207858.html" target="_blank">comme ça, quoi</a>). Mais si ça peut fortement aider, ça n&#8217;est pas magique, et ça demande de suivre les principes du framework lui-même.</em></p>
<p>Une partie des principes méthodologiques qui va avec un framework est  couramment regroupée sous le nom de <em><strong>design patterns</strong></em>. Une fois encore, on s&#8217;abstiendra de traduire l&#8217;expression (la version française préconisée étant <em>patrons de conception</em>, et ça sonne un peu Bergère de France&#8230;)</p>
<p><span id="more-354"></span></p>
<p>Pour faire court (dans un premier temps), disons qu&#8217;<strong>un design pattern est une façon de résoudre un problème type.</strong> Il ne s&#8217;agit donc pas d&#8217;une solution en tant que telle, mais plutôt d&#8217;une recette, c&#8217;est-à-dire la description d&#8217;une manière d&#8217;opérer face à un certain type de problème.</p>
<p>Historiquement, la théorisation des design patterns fait beaucoup référence, et c&#8217;est une <a href="/notes/2009/08/le-carreleur-et-le-developpeur/">chose qui ne nous étonnera pas</a>, au domaine de l&#8217;architecture, de l&#8217;urbanisme et de la construction, notamment suite au travaux de <a href="http://fr.wikipedia.org/wiki/Christopher_Alexander" target="_blank">Christopher Alexander</a> dans les années 70.<br />
Constatant que la conception en architecture en particulier, mais aussi en ingénierie en général, conduisait à affronter des problèmes récurrents (isolation, solidité des structures, communication entre l&#8217;intérieur et l&#8217;extérieur&#8230;) il abstrait des archétypes destinés à couvrir tous ces aspects.</p>
<p>Un <em>pattern</em> est ainsi à comprendre comme un <strong>&laquo;&nbsp;modèle&nbsp;&raquo; éprouvé reliant une solution à un problème dans un certain contexte</strong>.</p>
<p>Tout problème de conception, dirait Alexander, met en jeu un seul individu face à une immensité. Ce problème contient un certain nombre de variables qui, combinées en sous-ensembles, représentent un nombre de cas débordant rapidement les capacités limitées de son cerveau.<br />
D&#8217;où l&#8217;intérêt de diviser et de hiérarchiser ces sous-ensembles pour les étudier à part, et recourir à ce qu&#8217;on pourrait nommer le bon sens collectif de l&#8217;histoire (capitaliser sur les solutions qui ont prouvé qu&#8217;elles marchaient).<br />
Dès ses premiers travaux Alexander met l&#8217;accent sur la nécessité de comprendre les rapports entre les parties et le tout, et de savoir comment s&#8217;y prendre pour traiter ce tout. Ce que nous avons appelé dans l&#8217;épisode précédent <strong><em>faire face à la complexité</em></strong>.</p>
<h3>De l&#8217;urbanisme à la POO</h3>
<p>En 1995, les quatre mousquetaires du pattern, le bien nommé &laquo;&nbsp;Gang Of Four&nbsp;&raquo;, s&#8217;inspirent d&#8217;une partie de ces travaux et transposent la méthode dans la programmation orientée objet. Comme Alexander, même si la démarche est, disons, moins empreinte d&#8217;une sourde angoisse métaphysique quant à l&#8217;appréhension de l&#8217;infini, leur but est de proposer des outils conceptuels pour gérer la complexité, en l&#8217;occurrence, posée par certains problèmes récurrents en programmation.<br />
Ils sont issus des bonnes trouvailles et des bonnes pratiques de générations de développeurs et dispensent ainsi, comme on dit souvent, de réinventer le fil à couper la roue.</p>
<p>J&#8217;avais commencé un paragraphe complet donnant un exemple (en choisissant le pattern <em>bridge</em>, un modèle assez &laquo;&nbsp;simple&nbsp;&raquo;), et j&#8217;ai renoncé, car on ne peut pas en dire grand chose sans évoquer la programmation orientée objet, que ma chère maman n&#8217;est pas censée connaître, donc qui déborde le cadre de cette page.<br />
Je tâcherai de présenter en revanche dans un épisode prochain le <strong>MVC</strong>, un design pattern assez connu — qui est en fait, pour être rigoureux, une combinaison de patterns. Retenons juste ceci en attendant, et au risque de me répéter : il ne s&#8217;agit pas de classes ou de bouts de programme, mais de façons de structurer son modèle de données, son architecture, son application, et ultimement son code (quelque soit le langage objet).</p>
<p>En guise de conclusion, et pour s&#8217;éloigner définitivement d&#8217;Alexander, signalons qu&#8217;on parle aussi de temps en temps du négatif des patterns, les <strong>antipatterns</strong>.</p>
<p>Comme leur nom l&#8217;indique, il s&#8217;agit des façons de faire qui sont exactement ce qu&#8217;il faut éviter. On regroupe sous ce nom des pratiques hétérogènes aux noms parfois sympatoches, comme <em>la coulée de lave</em> (mise en production d&#8217;un code non stabilisé qui de fait devient de moins en moins modifiable, se &laquo;&nbsp;solidifiant&nbsp;&raquo; comme de la lave), <em>l&#8217;ancre de bateau</em> (code conservé pour des raisons &laquo;&nbsp;politiques&nbsp;&raquo;, pour ne pas fâcher un développeur et/ou en se disant qu&#8217;il servira plus tard&#8230;), ou <em>l&#8217;objet divin</em> (méthode ou fonction servant à trop de choses, et dont on finit par ne plus trop savoir comment elle marche).<br />
Elles sont évidemment, presque autant que les autres, utiles au développeur — qui aura toujours au début de son existence mis en œuvre, même à son corps défendant, au moins l&#8217;un d&#8217;eux, sinon presque tous.</p>
<p><em>Dans le prochain épisode, cette fois, on parlera de MVC&#8230;</em></p>
<p>___________________________________</p>
<p><em>Image du Schéma empruntée ici : <a href="http://www.simonwhatley.co.uk/coldfusion-and-design-patterns" target="_blank">http://www.simonwhatley.co.uk/coldfusion-and-design-patterns</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2009/09/design-patterns-symfony-explique-a-ma-maman-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Le mythe de la parallélisation</title>
		<link>http://www.do-as-i-say.com/notes/2009/09/le-mythe-de-la-parallelisation/</link>
		<comments>http://www.do-as-i-say.com/notes/2009/09/le-mythe-de-la-parallelisation/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 08:36:40 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[1. La vie c'est comme de la gestion de projet]]></category>
		<category><![CDATA[analogie]]></category>
		<category><![CDATA[application web]]></category>
		<category><![CDATA[jour-homme]]></category>
		<category><![CDATA[méthodologie]]></category>
		<category><![CDATA[parallélisation]]></category>
		<category><![CDATA[réalité]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=394</guid>
		<description><![CDATA[Le monde du travail et du service est depuis des temps immémoriaux divisé en deux catégories distinctes,  structurantes mais non exclusives : les clients et les prestataires. Dans la pub, et souvent le web par extension, on dit les annonceurs et les agences, et ça revient à peu près au même.
Quand vous faites partie [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-442" style="border: 1px solid black;" title="Les parallèles ça peut se croiser" src="http://www.do-as-i-say.com/notes/wp-content/uploads/courbure-150x150.jpg" alt="Les parallèles ça peut se croiser" width="128" height="128" />Le monde du travail et du service est depuis des temps immémoriaux divisé en deux catégories distinctes,  structurantes mais non exclusives : les <em>clients</em> et les <em>prestataires</em>. Dans la pub, et souvent le web par extension, on dit les <em>annonceurs</em> et les <em>agences</em>, et ça revient à peu près au même.</p>
<p>Quand vous faites partie du second groupe, ou quand vous travaillez dans le développement d&#8217;applications, vous apprenez rapidement qu&#8217;il existe, au-delà de l&#8217;heure, du jour, de la semaine, une unité de mesure capitale : le <strong>jour-homme. </strong></p>
<p><strong><span id="more-394"></span></strong></p>
<p>Je me dis depuis quelque temps qu&#8217;on pourrait même entériner un nouveau mot : le &laquo;&nbsp;jourhomme&nbsp;&raquo;, que la réforme de l&#8217;ortografe transformerait en &laquo;&nbsp;jourome&nbsp;&raquo;, et ça serait sympa. Sans parler bien sûr du <em>jourfemme </em>qui devra exister impérativement. Mais je m&#8217;égare.</p>
<p>Comme son nom l&#8217;indique presque, le jour-homme correspond au travail d&#8217;une personne pendant une journée. Ca fait beaucoup rire nos amis anglo-saxons de nous voir utiliser une telle mesure qui passe sous silence toute discussion éventuelle sur la valeur du référent&#8230; Il nous faut alors leur expliquer  que par chez nous, la durée &laquo;&nbsp;officielle&nbsp;&raquo; d&#8217;une journée de travail est de 8 heures, même s&#8217;il s&#8217;agit en fait d&#8217;une durée admise comme standard &#8211; avec toutes les élasticités bien commodes que ça implique, et qui permettent de faire au besoin rentrer deux &laquo;&nbsp;jours&nbsp;&raquo; en une journée (ben oui, il suffit de travailler de 8h à minuit, fastoche).</p>
<p>Quand on estime une charge de travail, on la chiffre donc en jours-homme.<br />
En général, on colle ça après dans un calendrier (avec ou sans l&#8217;aide de certains logiciels pas lourds du tout dont le nom commence par &laquo;&nbsp;pro&nbsp;&raquo; et se termine par &laquo;&nbsp;ject&nbsp;&raquo;), et ça nous donne un planning, autrement dit une représentation dans le temps de la vie des vraies gens, week-end et autres jours chômés inutiles pris en compte.<br />
Il est étonnant de remarquer à quelle vitesse on finit à force de faire cet exercice par penser en multiples de 5, et par assimiler 1 mois au chiffre 20 (ce qui est par ailleurs souvent inexact, mais bon, à la louchasse, c&#8217;est ça). On met en général plus de temps à intégrer comme un réflexe le calcul inconscient de marges de sécurité conséquentes (de 20 à 50%).</p>
<p>Toujours est-il qu&#8217;à l&#8217;arrivée, on présente au client un planning, dans lequel il ne regarde en général qu&#8217;une seule date, celle de la <em>livraison. </em>C&#8217;est le moment où il fait des grands yeux, voire devient livide, voire s&#8217;énerve, voire tout ça en même temps ou dans un ordre aléatoire.</p>
<p>Mais, tenez-vous bien, <em>ça n&#8217;est pas grave</em>. Pourquoi ? Tout simplement parce qu&#8217;on va pouvoir <strong>optimiser</strong> le planning. Et c&#8217;est quoi la solution magique pour <em>optimiser le planning</em> ?</p>
<p>Oui, vous avez trouvé : <strong>la parallélisation</strong>.</p>
<p>La parallélisation, c&#8217;est cette bonne idée qui consiste à dire qu&#8217;on va mettre plusieurs gars sur le coup (ou filles, hein, enfin si seulement on en avait dans l&#8217;équipe de développement), et que paf par magie ça va linéairement diviser le temps de production par le nombre de ressources affectées. En gros (si vous êtes un peu malcomprenant), s&#8217;il y a 60 jours-homme, en mettant deux développeurs, ça va être fait en 30 jours.</p>
<p>Jusque là, je n&#8217;aurais presque rien à dire. C&#8217;est presque vrai, c&#8217;est même presque malin, voire presque réaliste. Sauf que vous connaissez les gens : il leur en faut toujours plus (les coquins). Donc vas-y que jte mets 4 développeurs et c&#8217;est <span style="text-decoration: line-through;">torché</span> fait en 15 jours ! Vous voyez venir l&#8217;écueil (enfin, j&#8217;espère, c&#8217;est pas faute d&#8217;être lourdement didactique) : tant qu&#8217;on y est, mettons 60 développeurs, et ce soir c&#8217;est plié.</p>
<p>Sans parler de l&#8217;incongruité en termes d&#8217;écosystème (essayez de regrouper 60 développeurs et vous comprendrez), on a évidemment oublié un détail dans cette équation, trois fois rien, un mot innocent : <strong>la ré-a-li-té.</strong></p>
<p>Eh oui. <em>Dans la réalité</em>, répartir la charge induit très vite des &laquo;&nbsp;coûts&nbsp;&raquo; collatéraux, notamment en coordination du travail. S&#8217;il est souvent envisageable de séparer les tâches en plusieurs lots, il n&#8217;est pas dit qu&#8217;ils puissent être, d&#8217;un point de vue logique, tous réalisés en parallèle.</p>
<p>C&#8217;est chiant, la réalité, ça marche pas toujours comme les maths ; par exemple, un lapin plus un lapin, pour peu qu&#8217;ils soient de sexe différent, ça a vite des chances de faire plus de deux lapins. Vous me direz : ah mais il s&#8217;est passé quelque chose.  Mais justement, ce qui est caractéristique de la réalité, c&#8217;est qu&#8217;il s&#8217;y <em>passe des choses</em>, et qu&#8217;il y a des <em>contraintes </em>qu&#8217;on ne peut pas réduire, même si on est très bon en maths.</p>
<p>J&#8217;aime bien recourir à une image qui fait en général son petit effet. Elle n&#8217;est pas de moi, je crois l&#8217;avoir trouvée quelque part dans un machin imprimé, un livre, là, mais je ne retrouve pas la référence, et Google est curieusement un peu muet sur le sujet. En la sortant au bon moment, le résultat est garanti :</p>
<blockquote><p>Si on met 9 femmes enceintes en parallèle, on n&#8217;aura pas un enfant en 1 mois.</p></blockquote>
<p>Si vous <a href="/notes/2009/08/le-carreleur-et-le-developpeur/">faites bien vos devoirs</a>, vous ne devez toutefois pas prendre cette superbe saillie pour argent comptant, et <strong>questionner l&#8217;analogie</strong> (n&#8217;est-ce pas). En d&#8217;autres termes, demander si développer une application, c&#8217;est comme faire un bébé (je vous passerai toutes les bonnes blagues auxquelles ça peut me faire penser, sinon on va y passer l&#8217;hiver).</p>
<p>Soyons prudent sans faire de la langue de bois : oui, il y a dans les processus de développement des <em>étapes</em>, qui ne peuvent que s&#8217;enchaîner et donc pas avoir lieu en même temps. Il faut pour cette raison ne pas hésiter à affirmer que :</p>
<ul>
<li>le temps nécessaire n&#8217;est pas linéairement divisible par le nombre de ressources affectées ;</li>
<li>l&#8217;augmentation du nombre de ressources accroit de manière exponentielle les tâches de coordination, et tend pour cette raison très  rapidement à annuler le gain de temps nominal (voire à l&#8217;inverser, c&#8217;est-à-dire à faire perdre plus de temps qu&#8217;on en gagne).</li>
</ul>
<p>Selon les métiers et les projets, le point de la courbe où la tendance s&#8217;inverse est plus ou moins vite atteint, mais d&#8217;expérience on constate qu&#8217;il l&#8217;est toujours plus vite que ce qui serait nécessaire pour satisfaire des plannings irréalistes. Et le plus difficile, c&#8217;est de le faire comprendre aux &laquo;&nbsp;décideurs&nbsp;&raquo; (car les coupables ne sont pas toujours les clients, si si&#8230;)</p>
<p>D&#8217;où les 9 femmes. Ça n&#8217;est pas magique, mais ça peut avoir son poids dans une argumentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2009/09/le-mythe-de-la-parallelisation/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Symfony expliqué à ma maman, 1ère partie : qu&#8217;est-ce qu&#8217;un framework ?</title>
		<link>http://www.do-as-i-say.com/notes/2009/08/framework-symfony-explique-a-ma-maman-1/</link>
		<comments>http://www.do-as-i-say.com/notes/2009/08/framework-symfony-explique-a-ma-maman-1/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 06:59:00 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[2. Des trucs expliqués à ma maman]]></category>
		<category><![CDATA[complexité]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[grammaire]]></category>
		<category><![CDATA[langage]]></category>
		<category><![CDATA[méthodologie]]></category>
		<category><![CDATA[orthographe]]></category>
		<category><![CDATA[pensée]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=103</guid>
		<description><![CDATA[A mes heures pas perdues je travaille dans l&#8217;agence qui est à l&#8217;origine d&#8217;une fort belle chose : un framework PHP 5 qui jouit d&#8217;une assez bonne presse, ce qui n&#8217;est pas complètement un hasard parce qu&#8217;il est vraiment très bien.
Ce framework porte le nom de Symfony, pour des raisons expliquées ici. Jusque là, fastoche. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-205" style="border: 1px solid black;" title="Maman je t'aime" src="http://www.do-as-i-say.com/notes/wp-content/uploads/symfony_me-150x150.png" alt="Maman je t'aime" width="128" height="128" />A mes heures pas perdues je travaille dans l&#8217;<a href="http://www.sensiolabs.com" target="_blank">agence</a> qui est à l&#8217;origine d&#8217;une fort belle chose : un framework PHP 5 qui jouit d&#8217;une assez bonne presse, ce qui n&#8217;est pas complètement un hasard parce qu&#8217;il est vraiment très bien.</p>
<p>Ce framework porte le nom de<a href="http://www.symfony-project.org" target="_blank"> Symfony</a>, pour des raisons expliquées <a href="http://www.symfony-project.org/book/1_2/01-Introducing-Symfony#chapter_01_sub_who_made_symfony_and_why" target="_blank">ici</a>. Jusque là, fastoche. C&#8217;est ensuite que ça se complique. Déjà, rien que le premier mot : <em>framework</em>. Littéralement, cadre ou structure ; dans la programmation en général, on le traduit plus précisément par &laquo;&nbsp;cadre d&#8217;applications&nbsp;&raquo;. Enfin, on le tradui<em>rait</em>, parce qu&#8217;on ne le fait jamais, on dit toujours <em>frèmeouorque</em>. A compter de cette phrase, je dirai d&#8217;ailleurs &laquo;&nbsp;framework&nbsp;&raquo; sans autre forme de procès, et même sans italiques (je suis comme ça, jsuis un gueudin).</p>
<p><span id="more-103"></span></p>
<p>Pour commencer, donc, qu&#8217;est-ce qu&#8217;un framework ? S&#8217;il y avait une réponse simple, on se passerait de ces lignes. La difficulté majeure tient à ce qu&#8217;il y a en fait dans la définition deux dimensions principales, complémentaires mais en partie indépendantes : <strong>un framework c&#8217;est à la fois une boîte à outils et une méthodologie. </strong>Ou, si on n&#8217;a pas peur des envolées lyriques : une boîte à outils fournie avec une philosophie.</p>
<h3>Une boîte à outils</h3>
<p>On a l&#8217;habitude de comparer  un framework à un ensemble des &laquo;&nbsp;briques&nbsp;&raquo; toutes faites qu&#8217;on peut utiliser pour son application .<br />
Si l&#8217;analogie n&#8217;est pas trop mauvaise, elle est insuffisante, parce qu&#8217;un framework c&#8217;est plus que ça. Cela dit, l&#8217;image de &laquo;&nbsp;brique&nbsp;&raquo; convient assez bien à ce qui circule çà et là sous le nom de <em>composants </em>(et d&#8217;ailleurs, le monde est bien fait, car certaines parties de Symfony sont justement mises à disposition comme composants : <a href="http://components.symfony-project.org" target="_blank">http://components.symfony-project.org</a> ; dingue, hein ?)</p>
<p>Mais revenons à l&#8217;analogie de départ, même si elle est un peu faible ; elle  dit qu&#8217;<strong>un framework est à un développeur ce qu&#8217;une boîte à outils est à un bricoleur</strong>.</p>
<p>Sous plusieurs aspects, un framework peut effectivement fonctionner comme une boîte à outils, en ce sens qu&#8217;il propose, dans le cas de Symfony du moins, un certain nombre de <em>trucs </em>pour faciliter le travail, l&#8217;accélérer, voire automatiser tout ou partie des tâches qu&#8217;on rencontre lors du développement d&#8217;une application web. C&#8217;est le côté <strong>work</strong> du framework, si l&#8217;on veut.<br />
Enfoncer un clou, à la main, c&#8217;est douloureux et très long ; avec une pierre, moins douloureux, mais pas très précis. Avec un marteau, l&#8217;outil est assez optimal &#8211; même s&#8217;il ne dispense toutefois pas de taper. En plus, ce marteau a été testé industriellement, donc a de bonnes garanties de solidité .</p>
<p>Dans le développement web, on ne plante pas des clous, mais il y a des tâches équivalentes qui sont répétitives, peu gratifiantes, et d&#8217;autant plus sujettes à erreur qu&#8217;elles sont répétitives et peu gratifiantes : construction de bases de données à partir de leur schéma, import de données de test, initialisation d&#8217;interfaces d&#8217;administration, exécution de tests, gestion du cache, des urls&#8230;</p>
<p>Pour tout ça, le framework offre marteaux et tournevis, voire dans certains cas pistolets à clous. Ces &laquo;&nbsp;utilitaires&nbsp;&raquo;,  testés et mis à l&#8217;épreuve du feu par de nombreux développeurs, ont bénéficié de leurs retours d&#8217;expérience, leur efficacité et stabilité sont assurées par ce processus. Mais pas plus qu&#8217;un marteau ils ne dispensent pas de taper. Vous pouvez vous procurer une belle boîte à outils, ça ne fixera pas pour autant vos étagères au mur &#8230;</p>
<p>A un niveau un peu plus complexe, le framework (du moins Symfony) favorise  l&#8217;intégration en deux coups de cuiller à pot de <strong><em>plug-ins</em></strong>, qui sont un peu comme les briques évoquées plus haut. Il en existe un grand nombre, pour des fonctionnalités plus ou moins évoluées (authentification, gestion de médias, de contenu&#8230;). On dépasse là le cadre de la &laquo;&nbsp;boîte à outils&nbsp;&raquo;, et on est plutôt sur des objets de base qui font gagner du temps. C&#8217;est comme acheter des planches déjà découpées plutôt que de les scier soi-même. Mais ces objets conviennent rarement tels quels . Il faut les adapter à ses besoins. Par exemple peindre ses planches de la couleur qui va bien, choisir combien on en pose, à quelle distance les unes des autres&#8230;</p>
<p>Point crucial : dans le cas du framework, l&#8217;adaptation sera grandement facilitée par la <em>méthodologie</em> qui doit avoir été respectée par les créateurs des plug-ins. C&#8217;est-à-dire : <em>si </em>elle a été respectée.</p>
<p>Ce qui nous fait une transition toute trouvée pour le second aspect, non des moindres, de la définition d&#8217;un framework : en plus d&#8217;être une boîte à outils, un framework, c&#8217;est une façon de travailler.</p>
<h3>Une méthodologie</h3>
<p>Pour tenter une analogie, disons qu&#8217;<strong>un framework est à la programmation ce que grammaire et orthographe sont à la pensée</strong>.</p>
<p>On quitte là le champ lexical du bricolage pour celui de la linguistique, ou plutôt de l&#8217;apprentissage du langage . Glissement qui semble tout indiqué, puisqu&#8217;on parle de <em>langage</em> de programmation. Si on fouille un peu, on verra même que la nécessité de changer de champ répond en fait à une exigence interne, dictée par le caractère spécial des  langages artificiels : un croisement génétique, pour ainsi dire, entre de la logique (qui se veut mécanique et déterministe) et de la pensée (qui reste inductive et poétique par nature, mais c&#8217;est une autre histoire).</p>
<p>Filons la métaphore.<strong> </strong>Quand on se met à programmer, on apprend une syntaxe, des fonctions, des mots-clés&#8230; ; bref, une sorte de grammaire et de dictionnaire .<br />
Mais connaître par cœur l&#8217;intégral de la phpdoc ou autre n&#8217;a jamais fait un bon développeur, pas plus que réciter le Bescherelle n&#8217;a fait un grand auteur.</p>
<p>C&#8217;est là que, tel un cavalier qui surgit hors de la nuit (mince, ça y est maintenant j&#8217;ai la musique de Zorro dans la tête), intervient le framework. Il joue un rôle à la croisée de la rhétorique, de la littérature et de la logique :</p>
<ul>
<li> il énonce des conventions d&#8217;écriture et d&#8217;organisation destinées à rendre plus efficace, en homogénéisant et clarifiant</li>
<li>il s&#8217;inspire des bonnes pratiques déjà existantes, notamment en termes de style </li>
<li>il structure et favorise la discipline du code produit, et son indépendance à l&#8217;égard de toute solution logicielle ou matérielle.</li>
</ul>
<p>En gros, il joue son rôle de &laquo;&nbsp;cadre&nbsp;&raquo; et de structure. C&#8217;est le côté <strong>frame<strong> </strong> </strong>du framework : il <strong>contraint</strong> à un certain nombre de choses, mais pour mieux <strong>libérer</strong> le processus intellectuel, en particulier en l&#8217;affranchissant des routines chronophages, et en aidant, par la clarté exigée, à faire face à l&#8217;augmentation de la <em>complexité </em>.</p>
<p>Si tout développeur qui connait un tant soit peu un langage (PHP en particulier, qui est plus facile d&#8217;accès que d&#8217;autres) est capable, même en tâtonnant, de mettre au point une application plus ou moins évoluée, l&#8217;expérience montre toutefois que son degré d&#8217;instabilité croît alors exponentiellement à la mesure de sa complexité, et que son code a tendance à devenir incompréhensible (et donc instable, indébuggable, non maintenable, etc&#8230;)</p>
<p>Pour<strong> faire face à la complexité</strong>, il faut être équipé de certains outils, intellectuels cette fois. Un framework a pour but de fournir de tels outils facilitant la modélisation des objets, de leurs relations, et des solutions aux problèmes posés. Il est à la fois une extension du vocabulaire du développeur et un perfectionnement de ses capacités grammaticales.<br />
Du moins, il <strong>peut </strong>l&#8217;être. Car comme le marteau ne tape pas tout seul, le framework ne pense à la place de personne. Pire, comme un marteau, mal utilisé, il peut faire mal. Et s&#8217;il tend à structurer, il n&#8217;oblige ultimement personne à suivre sa méthodologie ; s&#8217;il peut aider à discipliner, il ne remplace pas l&#8217;auto-discipline qui est du ressort de ceux qui conçoivent et écrivent le code. Bref : un framework ça n&#8217;est pas la pierre philosophale qui changera votre code de plomb en or.</p>
<p>On se résume : côté pile, le <em><strong>frame</strong></em>work est un cadre structurant, côté face, le frame<em><strong>work</strong></em> est un outil facilitant le travail.<br />
Finalement, on avait bien raison de garder le mot anglais.</p>
<p><em>Dans le prochain épisode, on parlera de design patterns&#8230;<br />
</em></p>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2009/08/framework-symfony-explique-a-ma-maman-1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
