<?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; 2. Des trucs expliqués à ma maman</title>
	<atom:link href="http://www.do-as-i-say.com/notes/category/trucs-expliques-a-ma-maman/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>Thu, 08 Dec 2011 21:25:45 +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>Twitter expliqué à ma maman</title>
		<link>http://www.do-as-i-say.com/notes/2009/10/twitter-explique-a-ma-maman/</link>
		<comments>http://www.do-as-i-say.com/notes/2009/10/twitter-explique-a-ma-maman/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 09:29:59 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[2. Des trucs expliqués à ma maman]]></category>
		<category><![CDATA[kamoulox]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=787</guid>
		<description><![CDATA[
Comme je ne suis pas mécontent du début de la série consacrée à Symfony et à ma chère mère, et qu&#8217;il ne se passe pas une semaine, que dis-je, un jour sans qu&#8217;ici et là, y compris au bureau, la question d&#8217;expliquer Twitter ne vienne sur le tapis, jme suis dit comme ça, en mon [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-797 alignleft" style="border: 1px solid black;" title="Oops" src="http://www.do-as-i-say.com/notes/wp-content/uploads/twitter_whale.png" alt="Oops" width="128" height="128" /></p>
<p>Comme je ne suis pas mécontent du début de la <a href="http://www.do-as-i-say.com/notes/2009/08/framework-symfony-explique-a-ma-maman-1/" target="_blank">série consacrée à Symfony</a> et à ma chère mère, et qu&#8217;il ne se passe pas une semaine, que dis-je, un jour sans qu&#8217;ici et là, y compris au bureau, la question d&#8217;<em>expliquer Twitter</em> ne vienne sur le tapis, jme suis dit comme ça, en mon for intérieur où je me parle beaucoup (en me tutoyant, ce qui parfois me laisse perplexe), que j&#8217;avais bien matière à noircir quelques <em>div </em>de considérations puissantes et péremptoires sur le sujet.<br />
<span id="more-787"></span></p>
<p>Entendons-nous bien : en octobre 2009, il n&#8217;est plus question de prétendre <em>faire découvrir </em>Twitter, la fréquence d&#8217;évocation du site de gazouilling étant à peu près quotidienne sur tous les médias, y compris les plus grand public, nul doute qu&#8217;à ce jour à peu près tout le monde sait que Twitter existe, du moins toute personne qui a un rapport fréquent à notre ami l&#8217;internet. Mais bon, tout le monde <em>sait</em> aussi que e=mc<sup>2</sup>, ça ne veut pas dire que chacun sache expliquer vraiment ce que ça signifie pour autant (et je vous rassure, à part traduire les signes e, m, c, et le petit deux en l&#8217;air, je n&#8217;en sais pas des masses plus).</p>
<p>Après une comparaison aussi pertinente, négocions le virage pour revenir au milieu du chemin (encore trois métaphores de ce type et je suis le nouveau Heidegger).<br />
On pourra aligner les &laquo;&nbsp;définitions&nbsp;&raquo; qui circulent ça et là ( &laquo;&nbsp;site de mini-messages&nbsp;&raquo;, &laquo;&nbsp;service de micro-blogging&nbsp;&raquo;&#8230;), on n&#8217;aura éclairé personne qui ne sait déjà ce que c&#8217;est. Et c&#8217;est un premier indice de la spécificité de ce qu&#8217;on appellera <em>la chose Twitter</em> : il est d&#8217;une part impossible de la définir entre trois mots, et pire, il est d&#8217;autre part quasi-impossible d&#8217;expliquer &laquo;&nbsp;à quoi ça sert&nbsp;&raquo; à quelqu&#8217;un qui ne connait pas, qui n&#8217;a pas <em>fait son expérience</em> de Twitter.</p>
<p>C&#8217;est là le drame. Et en même temps le sublime (mais oui, rien que ça — si vous pratiquez un peu ce blog, vous aurez pu remarquer que je n&#8217;ai pas peur d&#8217;<em>élever le débat</em> comme on <em>élève son verre</em>, ou pas loin). Allez, lâchons les chiens de la formule qui tue :</p>
<blockquote><p>Expliquer Twitter à quelqu&#8217;un qui ne l&#8217;a jamais utilisé, c&#8217;est comme expliquer les couleurs à un aveugle.</p></blockquote>
<p>On pourrait, on devrait, même aller plus loin : non seulement il faut l&#8217;avoir déjà utilisé, mais il faut <em>être rentré dedans</em>, comme on rentre dans un livre un peu rebutant. Ça prend du temps, et la probabilité qu&#8217;on abandonne dans les premières heures ou les premiers jours est très élevée.<br />
Dans le cas de Twitter, le &laquo;&nbsp;verdict&nbsp;&raquo; est au choix : &laquo;&nbsp;Twitter, c&#8217;est nul, c&#8217;est juste MSN en moins bien&nbsp;&raquo;,  &laquo;&nbsp;Twitter, c&#8217;est chiant, c&#8217;est pas ça qui va me faire quitter Facebook&nbsp;&raquo;, ou autre &laquo;&nbsp;Dans Twitter c&#8217;est vraiment débile cette limitation à 140 caractères&nbsp;&raquo;.</p>
<h3>Twitter, ça ne sert à rien</h3>
<p>Tiens, parlons-en, des 140 caractères. L&#8217;explication historique, pour ceux qui auraient dormi ces trois dernières années, est que l&#8217;une des premières contraintes auto-imposée par les créateurs de Twitter était d&#8217;envoyer et de recevoir les messages, les <em>tweets</em>, aussi par SMS. D&#8217;ailleurs ça a marché partiellement au départ en france, en 2007 et jusque début 2008 et votre serviteur s&#8217;était pas mal amusé à bricoler quelques bots psychopathes qui pouvaient lui envoyer des SMS intéressants, notamment sur l&#8217;état du trafic RATP. Mais c&#8217;est un autre sujet.<br />
Ces considérations autobiographiques de haute volée mises à part, je vois mal qui aurait en 2006 parié trois carambars sur l&#8217;avenir d&#8217;un service Internet contraignant ses utilisateurs à &laquo;&nbsp;s&#8217;exprimer&nbsp;&raquo; avec une limitation de caractères, qui plus est assez vite atteinte. A l&#8217;heure où le bit se négocie au milliard de kilos comme un vulgaire poste à l&#8217;EPAD, quelle hérésie&#8230; Eh bien non seulement ça a marché, mais ça a permis de montrer, s&#8217;il en était besoin, qu&#8217;abondance de caractères nuit parfois, et qu&#8217;au fond, si on a quelque chose à dire, on peut toujours le dire plus simplement. Ou sinon, c&#8217;est qu&#8217;on se trompe de medium.</p>
<p>Cette contrainte génétique est une chose ; elle n&#8217;explique pas pour autant en quoi définir Twitter est un exercice particulier, ni en quoi comprendre et surtout expérimenter l&#8217;intérêt de Twitter prend du temps.<br />
La raison principale est simple : <strong>Twitter, en tant que tel, ça ne fait rien</strong>. Même si on peut accéder en pur spectateur à une partie des &laquo;&nbsp;messages&nbsp;&raquo; mondiaux, le cœur de Twitter n&#8217;est pas un site mais un service (au sens informatique), dont le rôle se borne, pour résumer, à permettre aux gens de s&#8217;inscrire, de poster des messages ou <em>tweets</em>, de &laquo;&nbsp;suivre&nbsp;&raquo; d&#8217;autres utilisateurs et d&#8217;être suivis (l&#8217;un ne nécessitant pas l&#8217;autre), le principe étant de regrouper et de visualiser en un seul &laquo;&nbsp;fil de message&nbsp;&raquo; tous les <em>tweets </em>des utilisateurs qu&#8217;on suit.<br />
Comme ça, je vous l&#8217;accorde, ça a l&#8217;air et trivial et pas très intéressant.<br />
C&#8217;est parce que <strong>tout reste à faire</strong> : une fois inscrit, il faut suivre des utilisateurs (un certain nombre d&#8217;entre eux vous suivra en retour, surtout si vous commencez à poster des messages). Lesquels ? Ben justement, tout est là : ça dépend de ce que vous recherchez. La difficulté étant que d&#8217;une part rien n&#8217;oblige à savoir exactement ce qu&#8217;on cherche (bah oué, c&#8217;est la vie, quoi), et que d&#8217;autre part, on peut chercher plusieurs sortes de choses.</p>
<h3>Twitter, ça sert à tout</h3>
<p>Voilà l&#8217;essence de la <em>chose Twitter</em>, qui traduit la difficulté qu&#8217;on aura toujours à l&#8217;expliquer : <strong>Twitter, ça sert à ce qu&#8217;on en fait.</strong> Encore faut-il donc s&#8217;y mettre activement, définir et inventer ses usages — qui peuvent être mêlés, et changer au fil du temps, ce qui concourt à la complexité de compréhension de la bête. Utiliser passivement Twitter, c&#8217;est vraiment s&#8217;embêter avec un remplaçant de lecteur de flux RSS peu performant .</p>
<p>Twitter, ça peut servir, dans l&#8217;ordre et le désordre, de manière absolument pas exclusive et parfois complémentaire, à :</p>
<ul>
<li>faire de la veille, en suivant des gens qui postent beaucoup de liens, et/ou des flux RSS repostés</li>
<li>discuter de manière plus ou moins impromptue et décousue avec des gens qu&#8217;on connait</li>
<li>discuter de manière plus ou moins impromptue avec des gens qu&#8217;on ne connait pas, voire les rencontrer ensuite dans la vraie vie</li>
<li>raconter sa vie, qu&#8217;il s&#8217;agisse de détails insignifiants ou d&#8217;épisodes cruciaux</li>
<li>promouvoir des choses qu&#8217;on aime, des sites intéressants, des services et pourquoi pas des choses qu&#8217;on vend</li>
<li>taper sur des choses qu&#8217;on n&#8217;aime pas, râler sur la RATP ou la SNCF</li>
<li>faire des recherches sur ce qui se dit sur tous les sujets imaginables</li>
<li>suivre en direct des émissions de télé palpitantes (ou du moins les commentaires avisés qu&#8217;en font les partisans ou les détracteurs)</li>
<li>participer à des sortes de cadavres exquis ou le multilinguisme le dispute à la variété des sujets</li>
<li>jouer au kamoulox</li>
<li>savoir quel temps il fait à Dunkerque ou New-York&#8230;</li>
</ul>
<p>Et ce qui est vraiment très bien, et intellectuellement excitant, c&#8217;est que ça peut être tout ça, un peu de ça, d&#8217;autre chose, dépendre des jours, dépendre du vent, de votre humeur et de ce qui se passe dans le monde. Bien sûr, cet aspect polymorphe demande une certaine <strong>disponibilité</strong>, en termes de temps et de présence d&#8217;esprit au sens strict.<br />
Il y a peu d&#8217;intérêt à venir sur Twitter (quelle que soit la façon dont on consulte son flux) une fois par mois, tout se passe vite, parfois dans l&#8217;immédiateté et la fugacité, ce qui n&#8217;équivaut pas nécessairement à de l&#8217;inutilité.<br />
Mais on peut aussi laisser filer un, deux, dix jours, et revenir comme un fleur sans que ça soit rédhibitoire ; ça n&#8217;est ni un blog, ni un forum, ni irc, ni msn, ni facebook, ni la pierre philosophale, et pourtant éventuellement un peu de tout ça en même temps.</p>
<p>En résumé, Twitter, comme Internet à sa façon, ne peut être défini et surtout expliqué en une phrase, parce qu&#8217;il y a autant d&#8217;usages de Twitter que d&#8217;utilisateurs.</p>
<p>Le nerf de la guerre, c&#8217;est le choix des gens qu&#8217;on va suivre ; une bonne méthode, c&#8217;est d&#8217;y aller à la pelle au départ, de regarder qui suit qui, qui &laquo;&nbsp;répond&nbsp;&raquo; à qui (avec le signe magique @), et de <em>désuivre</em> rapidement, surtout dans les premières semaines. Comme pas mal de choses, la suite se fait&#8230; en se faisant, et le résultat ne sera pas forcément celui qu&#8217;on avait prévu.<br />
En tout cas, pour peu qu&#8217;on fasse quelques efforts (mais c&#8217;est peut-être là une exigence trop forte), l&#8217;inhabituel et la surprise sont vite au rendez-vous ; le banal et le quotidien aussi, mais il ne faudrait pas non plus demander à la réalité d&#8217;être immédiatement plus géniale que les gens qui la font. Et rien n&#8217;oblige personne à utiliser Twitter, encore moins à suivre des utilisateurs prétentieux ou analphabètes (et je vous le donne en mille : ça fourmille).</p>
<p>Une autre fois, on détaillera peut-être les us et coutumes qui régissent plus ou moins la twittosphère, comme on dit.</p>
<p>______________________________________</p>
<p>Si le sujet vous intéresse, il continue ici : <a href="http://www.do-as-i-say.com/notes/2009/10/twitter-est-il-pour-tout-le-monde/" target="_self"><strong>Twitter est-il pour tout le monde ?</strong></a><br />
______________________________________</p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2009/10/twitter-explique-a-ma-maman/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Symfony expliqué à ma maman, 3ème partie : le découplage</title>
		<link>http://www.do-as-i-say.com/notes/2009/09/decouplage-symfony-explique-a-ma-maman-3/</link>
		<comments>http://www.do-as-i-say.com/notes/2009/09/decouplage-symfony-explique-a-ma-maman-3/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 09:53:19 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[2. Des trucs expliqués à ma maman]]></category>
		<category><![CDATA[découplage]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[principe]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=624</guid>
		<description><![CDATA[Alors que j&#8217;avais presque fini l&#8217;épisode sur le MVC, j&#8217;en suis venu à réaliser qu&#8217;il manquait une étape. Un concept capital dans toutes nos histoires de framework, de boîte à outils et de méthodologie. Je ne vous fait pas languir plus longtemps : il porte le nom de découplage.
Pour une fois, le champ lexical auquel [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-632" style="border: 1px solid black;" title="Une prise verte. Dingue." src="http://www.do-as-i-say.com/notes/wp-content/uploads/prise_electrique-150x150.jpg" alt="Une prise verte. Dingue." width="128" height="128" />Alors que j&#8217;avais presque fini l&#8217;épisode sur le MVC, j&#8217;en suis venu à réaliser qu&#8217;il manquait une étape. Un concept capital dans toutes nos histoires de framework, de boîte à outils et de méthodologie. Je ne vous fait pas languir plus longtemps : il porte le nom de <strong>découplage</strong>.</p>
<p>Pour une fois, le champ lexical auquel le concept est emprunté n&#8217;est pas celui du BTP, même si on n&#8217;en est pas loin : c&#8217;est celui de l&#8217;électricité. Découpler y signifie supprimer le couplage entre deux circuits (ok, on est proche de la lapalissade, mais bon).</p>
<p><span id="more-624"></span></p>
<p>L&#8217;exemple le plus parlant sera celui de la prise électrique. Si on n&#8217;avait pas défini de standard ni  un principe de prises mâles et femelles, on vivrait dans un monde où les appareils électriques ne pourraient être vendus prêts à être branchés, où il faudrait  faire intervenir un électricien pour les raccorder au réseau, et où une fois installés on ne pourrait plus les déplacer ni les brancher ailleurs (sauf à répéter l&#8217;intervention). Assombrissons le tableau, et imaginons que dans ce même monde le réseau électrique n&#8217;aie pas de tension standard, mais distribue du 230 volts ici, 110 là, 3.14 ailleurs, etc. Non seulement il faudrait une manipulation technique pour connecter le grille-pain, mais aussi pour l&#8217;adapter à la tension. Manip&#8217; à répéter à chaque déplacement de la bête&#8230;</p>
<p>Le problème que l&#8217;on aurait dans un tel monde serait celui d&#8217;un très fort <strong>couplage </strong>entre les appareils et le réseau électrique. Inutile de vous faire un dessin pour expliquer à quel point ça ne serait pas commode. Pour rester poli et ne pas dire chiant. Ah mince je l&#8217;ai dit.</p>
<p>En informatique, on s&#8217;est rapidement soucié du couplage, que ce soit du point de vue matériel comme pour les prises électriques en définissant des standards plus ou moins universels (PCI, RS232, USB, firewire&#8230;), ou logiciel (dans les programmes, ou dans les couches inférieures, par exemple le modèle adopté pour l&#8217;interconnexion des réseaux, OSI, mais c&#8217;est un autre sujet).</p>
<p>En ce qui concerne le sujet qui nous intéresse, le développement d&#8217;applications web via les frameworks en général et Symfony en particulier, le découplage est une notion critique.<br />
Elle fonde l&#8217;organisation du framework lui-même, et sous-tend toutes les bonnes pratiques qui vont avec et doivent être appliquées dans le code spécifique à l&#8217;application.</p>
<h2>Interfacer pour mieux découpler</h2>
<p>Pour le formuler autrement, le<strong> découplage consiste en l&#8217;indépendance maximale </strong>de toutes les &laquo;&nbsp;briques&nbsp;&raquo; entre elles. Mais comme ces briques doivent communiquer, leurs <strong>interfaces, c&#8217;est-à-dire leur frontières de communication</strong>, doivent être codifiées.<br />
C&#8217;est pourquoi en électricité on a réduit les nombres de connecteurs et définit des standards. C&#8217;est pourquoi en informatique on a défini des <em>protocoles</em>, autrement dit des règles d&#8217;échange. Car pour permettre le découplage, il faut se concentrer sur l&#8217;endroit — si je puis me permettre — où ça s&#8217;accouple, et l&#8217;abstraire des contingences et des spécificités (amen).</p>
<p><img class="alignright size-full wp-image-649" style="border: 1px solid black;" title="sfToasterPlugin" src="http://www.do-as-i-say.com/notes/wp-content/uploads/grille-pain.jpg" alt="sfToasterPlugin" width="128" height="128" />De la même manière qu&#8217;on ne souhaite pas avoir à changer de grille-pain si on change les prises ou si on déménage, on veut pouvoir faire abstraction, en développant une application web, de la façon dont l&#8217;accès aux données est géré (il nous suffit de savoir qu&#8217;il l&#8217;est), du type de serveur de base de données (on veut idéalement pouvoir utiliser n&#8217;importe lequel). Bref, on veut pouvoir se brancher dessus sans avoir à se demander comment. Aussi simplement qu&#8217;en branchant une prise mâle dans une prise femelle.<br />
D&#8217;une manière générale, les fonctionnalités du framework doivent pouvoir être<strong> utilisées les unes indépendamment des autres</strong>, sans quoi leur mise en œuvre reviendra la plupart du temps à écraser une mouche avec un marteau-piqueur, ou pour rester sur notre champ lexical du jour, à faire construire une maison entière pour pouvoir brancher notre grille-pain.</p>
<p>Cette indépendance des &laquo;&nbsp;éléments&nbsp;&raquo; a un deuxième intérêt, non des moindres : il rend possible l&#8217;évolution ou la réparation des uns sans avoir à intervenir sur les autres.<br />
Dans la vie bien découplée, vous pouvez acheter une cafetière neuve (ouaip, changeons d&#8217;objet électroménager, ça commence à devenir saoulant le grille-pain) sans avoir à refaire toute votre installation électrique, non ?  Et bien si votre code et votre application sont eux aussi <em>correctement découplés </em>vous devez pouvoir modifier, mettons, votre logiciel d&#8217;envoi de mail sans avoir à retoucher à tous les endroits où vous envoyez des mails.</p>
<p>En résumé, si vous voulez briller en société (ou en lan party, encore que..) pensez à caser &laquo;&nbsp;découplage&nbsp;&raquo; au détour d&#8217;une saillie, ça fait toujours son effet. Si vous voulez briller en tests unitaires, c&#8217;est bien aussi, mais ça sera l&#8217;objet d&#8217;un épisode de la saison 2.</p>
<p><em>Dans le prochain épisode, cette fois c&#8217;est juré-craché-si-je-mens-je-vais-à-Denfert, on parlera de MVC…</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2009/09/decouplage-symfony-explique-a-ma-maman-3/feed/</wfw:commentRss>
		<slash:comments>4</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>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>

