<?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; complexité</title>
	<atom:link href="http://www.do-as-i-say.com/notes/tag/complexite/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>Les ordinateurs sont des êtres humains commes les autres</title>
		<link>http://www.do-as-i-say.com/notes/2009/09/les-ordinateurs-sont-des-etres-humains-commes-les-autres/</link>
		<comments>http://www.do-as-i-say.com/notes/2009/09/les-ordinateurs-sont-des-etres-humains-commes-les-autres/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 14:37:47 +0000</pubDate>
		<dc:creator>LaurentLC</dc:creator>
				<category><![CDATA[1. La vie c'est comme de la gestion de projet]]></category>
		<category><![CDATA[altérité]]></category>
		<category><![CDATA[application web]]></category>
		<category><![CDATA[complexité]]></category>
		<category><![CDATA[volonté]]></category>

		<guid isPermaLink="false">http://www.do-as-i-say.com/notes/?p=223</guid>
		<description><![CDATA[Quand vous travaillez dans un domaine qui met en jeu de près ou de loin des ordinateurs au quotidien, vous vivez rapidement des situations où vos amis/collègues/voisins/supérieurs/stagiaires/rayez-les-mentions-inutiles finissent par pousser un râle de désespoir accompagné d&#8217;une question en forme de supplique du type &#171;&#160;Mais pourquoi il fait çaaaa..?&#160;&#187;
&#171;&#160;IL&#160;&#187;, c&#8217;est l&#8217;ordinateur, bien sûr. Tentative ultime de [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-527" style="border: 1px solid black;" title="Les machines aussi font n'importe quoi" src="http://www.do-as-i-say.com/notes/wp-content/uploads/robot-150x150.jpg" alt="Les machines aussi font n'importe quoi" width="128" height="128" />Quand vous travaillez dans un domaine qui met en jeu de près ou de loin des ordinateurs au quotidien, vous vivez rapidement des situations où vos amis/collègues/voisins/supérieurs/stagiaires/rayez-les-mentions-inutiles finissent par pousser un râle de désespoir accompagné d&#8217;une question en forme de supplique du type &laquo;&nbsp;<em>Mais pourquoi il fait çaaaa..?</em>&nbsp;&raquo;</p>
<p>&laquo;&nbsp;IL&nbsp;&raquo;, c&#8217;est l&#8217;ordinateur, bien sûr. Tentative ultime de raccrocher à une figure un peu anthropomorphisée ce qui se passe en fait <em>dans</em> la machine, autrement dit les programmes qui font des machins. Parce qu&#8217;évidemment, tout le monde le sait, l&#8217;ordinateur ne <em>fait</em> rien lui-même. Il n&#8217;est ni intelligent, ni bête, il fait ce pour quoi on l&#8217;a programmé.</p>
<p><span id="more-223"></span> Alors pourquoi, pourquoi cette impression si facilement partagée qu&#8217;il y a quand même là-dedans <strong>une sorte de volonté</strong> propre, ou pire, aléatoire (ou encore pire quand vraiment tout va mal, machiavélique)..?</p>
<p>Passons sur notre tendance à l&#8217;anthropomorphisme, assez récurrente, réflexe ancestral face à l&#8217;inconnu et l&#8217;incompris. S&#8217;il n&#8217;y avait que ça, il suffirait de se moquer et ça serait plié. Non non non. Il y a forcément plus.</p>
<p>Ce qu&#8217;il y a, c&#8217;est que les programmes qu&#8217;on utilise ont depuis longtemps dépassé le stade des micro-routines. Ils représentent parfois des millions de ligne de code, et même s&#8217;ils ont été élaborés en suivant les règles de l&#8217;art (respect des bonnes pratiques, design patterns, pizza, <em>versionning </em>des sources, etc), leur niveau de <em>complexité</em> excède grandement nos capacités d&#8217;appréhension en un seul coup d&#8217;œil, pour le dire comme ça.<br />
En d&#8217;autres termes, ils ont franchi le seuil au-delà duquel il n&#8217;est plus possible pour quiconque de savoir ce qui va <strong>exactement</strong> se passer dans tous les cas possibles (notamment parce que ces &laquo;&nbsp;cas&nbsp;&raquo; sont trop nombreux, donc qu&#8217;on peut difficilement assurer qu&#8217;on les a tous envisagés).</p>
<p>Si on veut recourir à une analogie (tu es nouveau ? <a href="/notes/2009/08/le-carreleur-et-le-developpeur/">Cliquette ici</a>), disons que tout programme dépasse rapidement le stade où on peut croire qu&#8217;il est un ensemble fini prévisible, pour devenir un système probabiliste gazeux.</p>
<p>La principale conséquence en est que l&#8217;utilisateur (et même le créateur) n&#8217;est jamais complètement certain de ce qu&#8217;il va faire. Et de quoi est-ce que c&#8217;est la caractéristique, au fond, je vous le donne en mille ? De l&#8217;<strong>altérité</strong>.</p>
<p>L&#8217;autre. Ce truc qui n&#8217;agit pas comme dans ma tête. Bref, sans imaginer bien sûr qu&#8217;il ait une volonté propre, le programme a suffisamment d&#8217; &laquo;&nbsp;indépendance&nbsp;&raquo; pour se comporter comme quelque chose d&#8217;aussi imprévisible qu&#8217;un être humain, et c&#8217;est assez génial (en tout cas à titre personnel je trouve ça exaltant, mais les clients ne partagent pas toujours cet avis, bizarre&#8230;)</p>
<p>D&#8217;où cette belle formule, qui me sert à briller à la cafeteria ou à clore certains débats stériles : oui, les ordinateurs (en fait : les applications) sont des êtres humains comme les autres.</p>
<p>Et c&#8217;est pourquoi <em>bien programmer</em> passe principalement par l&#8217;application de bonnes pratiques qui visent à <strong>réduire au maximum les interstices</strong> où va se fourrer l&#8217;imprévisibilité, et à tester au maximum toutes les éventualités qui peuvent se présenter — ce d&#8217;autant plus que, en face de l&#8217;ordinateur, il y a un utilisateur, qui lui aussi est imprévisible, et qui comme vous l&#8217;aurez appris si vous développez, fera toujours exactement le truc que vous n&#8217;aviez pas prévu.</p>
<p>_________________________________</p>
<p><em>Illustration : Marvin le robot dépressif, dans H2G2 &#8211; </em><em>The Hitchhiker&#8217;s Guide to the Galaxy</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.do-as-i-say.com/notes/2009/09/les-ordinateurs-sont-des-etres-humains-commes-les-autres/feed/</wfw:commentRss>
		<slash:comments>1</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>

