{"id":103,"date":"2009-08-25T08:59:00","date_gmt":"2009-08-25T06:59:00","guid":{"rendered":"http:\/\/www.do-as-i-say.com\/notes\/?p=103"},"modified":"2012-12-06T08:22:30","modified_gmt":"2012-12-06T06:22:30","slug":"framework-symfony-explique-a-ma-maman-1","status":"publish","type":"post","link":"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/","title":{"rendered":"Symfony expliqu\u00e9 \u00e0 ma maman, 1\u00e8re partie : qu&rsquo;est-ce qu&rsquo;un framework ?"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" 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\" srcset=\"https:\/\/www.do-as-i-say.com\/notes\/wp-content\/uploads\/symfony_me-150x150.png 150w, https:\/\/www.do-as-i-say.com\/notes\/wp-content\/uploads\/symfony_me-300x300.png 300w, https:\/\/www.do-as-i-say.com\/notes\/wp-content\/uploads\/symfony_me.png 400w\" sizes=\"auto, (max-width: 128px) 100vw, 128px\" \/>A mes heures pas perdues je travaille dans l&rsquo;<a href=\"http:\/\/www.sensiolabs.com\" target=\"_blank\">agence<\/a> qui est \u00e0 l&rsquo;origine d&rsquo;une fort belle chose : un framework PHP 5 qui jouit d&rsquo;une assez bonne presse, ce qui n&rsquo;est pas compl\u00e8tement un hasard parce qu&rsquo;il est vraiment tr\u00e8s bien<sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#footnote_0_103\" id=\"identifier_0_103\" class=\"footnote-link footnote-identifier-link\" title=\"Allez, pas de troll, y a d&rsquo;autres frameworks PHP 5 bien aussi, genre&#8230; heu.. ou aussi&#8230; enfin, y en a quoi, chacun choisit celui qui lui plait, ils ont tous leurs avantages et leurs inconv\u00e9nients &#8211; certains inconv\u00e9nients sont parfois en fait des avantages, mais \u00e7a d\u00e9pend quel outil on cherche.\">1<\/a>]<\/sup>.<\/p>\n<p>Ce framework porte le nom de<a href=\"http:\/\/www.symfony-project.org\" target=\"_blank\"> Symfony<\/a>, pour des raisons expliqu\u00e9es <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\u00e0, fastoche. C&rsquo;est ensuite que \u00e7a se complique. D\u00e9j\u00e0, rien que le premier mot : <em>framework<\/em>. Litt\u00e9ralement, cadre ou structure ; dans la programmation en g\u00e9n\u00e9ral, on le traduit plus pr\u00e9cis\u00e9ment par \u00ab\u00a0cadre d&rsquo;applications\u00a0\u00bb. Enfin, on le tradui<em>rait<\/em>, parce qu&rsquo;on ne le fait jamais, on dit toujours <em>fr\u00e8meouorque<\/em>. A compter de cette phrase, je dirai d&rsquo;ailleurs \u00ab\u00a0framework\u00a0\u00bb sans autre forme de proc\u00e8s, et m\u00eame sans italiques (je suis comme \u00e7a, jsuis un gueudin).<\/p>\n<p><!--more--><\/p>\n<p>Pour commencer, donc, qu&rsquo;est-ce qu&rsquo;un framework ? S&rsquo;il y avait une r\u00e9ponse simple, on se passerait de ces lignes. La difficult\u00e9 majeure tient \u00e0 ce qu&rsquo;il y a en fait dans la d\u00e9finition deux dimensions principales, compl\u00e9mentaires mais en partie ind\u00e9pendantes : <strong>un framework c&rsquo;est \u00e0 la fois une bo\u00eete \u00e0 outils et une m\u00e9thodologie. <\/strong>Ou, si on n&rsquo;a pas peur des envol\u00e9es lyriques : une bo\u00eete \u00e0 outils fournie avec une philosophie.<\/p>\n<h3>Une bo\u00eete \u00e0 outils<\/h3>\n<p>On a l&rsquo;habitude de comparer  un framework \u00e0 un ensemble des \u00ab\u00a0briques\u00a0\u00bb toutes faites qu&rsquo;on peut utiliser pour son application\u00a0<sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#footnote_1_103\" id=\"identifier_1_103\" class=\"footnote-link footnote-identifier-link\" title=\" Comme de par hasard, on se retrouve \u00e0 nouveau dans le champ lexical du BTP&#8230; Et aussi incroyable que \u00e7a paraisse,  l&rsquo;analogie et le BTP sont d\u00e9j\u00e0 \u00e9voqu\u00e9es dans ce post.\">2<\/a>]<\/sup>.<br \/>\nSi l&rsquo;analogie n&rsquo;est pas trop mauvaise, elle est insuffisante, parce qu&rsquo;un framework c&rsquo;est plus que \u00e7a. Cela dit, l&rsquo;image de \u00ab\u00a0brique\u00a0\u00bb convient assez bien \u00e0 ce qui circule \u00e7\u00e0 et l\u00e0 sous le nom de <em>composants <\/em>(et d&rsquo;ailleurs, le monde est bien fait, car certaines parties de Symfony sont justement mises \u00e0 disposition comme composants : <a href=\"http:\/\/components.symfony-project.org\" target=\"_blank\">http:\/\/components.symfony-project.org<\/a> ; dingue, hein ?)<\/p>\n<p>Mais revenons \u00e0 l&rsquo;analogie de d\u00e9part, m\u00eame si elle est un peu faible ; elle  dit qu&rsquo;<strong>un framework est \u00e0 un d\u00e9veloppeur ce qu&rsquo;une bo\u00eete \u00e0 outils est \u00e0 un bricoleur<\/strong>.<\/p>\n<p>Sous plusieurs aspects, un framework peut effectivement fonctionner comme une bo\u00eete \u00e0 outils, en ce sens qu&rsquo;il propose, dans le cas de Symfony du moins, un certain nombre de <em>trucs <\/em>pour faciliter le travail, l&rsquo;acc\u00e9l\u00e9rer, voire automatiser tout ou partie des t\u00e2ches qu&rsquo;on rencontre lors du d\u00e9veloppement d&rsquo;une application web. C&rsquo;est le c\u00f4t\u00e9 <strong>work<\/strong> du framework, si l&rsquo;on veut.<br \/>\nEnfoncer un clou, \u00e0 la main, c&rsquo;est douloureux et tr\u00e8s long ; avec une pierre, moins douloureux, mais pas tr\u00e8s pr\u00e9cis. Avec un marteau, l&rsquo;outil est assez optimal &#8211; m\u00eame s&rsquo;il ne dispense toutefois pas de taper. En plus, ce marteau a \u00e9t\u00e9 test\u00e9 industriellement, donc a de bonnes garanties de solidit\u00e9\u00a0<sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#footnote_2_103\" id=\"identifier_2_103\" class=\"footnote-link footnote-identifier-link\" title=\"Un pertinent relecteur me fait remarquer une autre grosse faiblesse de l&rsquo;analogie de la bo\u00eete \u00e0 outils : elle manque l&rsquo;une des puissances du framework comme ensemble d&rsquo;outils coh\u00e9rent, dont l&rsquo;utilisation en compl\u00e9ment les uns des autres d\u00e9cuple l&rsquo;efficacit\u00e9. Difficile de retrouver cette dimension dans une bo\u00eete \u00e0 outils, o\u00f9 on peut jeter indiff\u00e9remment des items sans rapport entre eux&#8230;\">3<\/a>]<\/sup>.<\/p>\n<p>Dans le d\u00e9veloppement web, on ne plante pas des clous, mais il y a des t\u00e2ches \u00e9quivalentes qui sont r\u00e9p\u00e9titives, peu gratifiantes, et d&rsquo;autant plus sujettes \u00e0 erreur qu&rsquo;elles sont r\u00e9p\u00e9titives et peu gratifiantes : construction de bases de donn\u00e9es \u00e0 partir de leur sch\u00e9ma, import de donn\u00e9es de test, initialisation d&rsquo;interfaces d&rsquo;administration, ex\u00e9cution de tests, gestion du cache, des urls&#8230;<\/p>\n<p>Pour tout \u00e7a, le framework offre marteaux et tournevis, voire dans certains cas pistolets \u00e0 clous. Ces \u00ab\u00a0utilitaires\u00a0\u00bb,\u00a0 test\u00e9s et mis \u00e0 l&rsquo;\u00e9preuve du feu par de nombreux d\u00e9veloppeurs, ont b\u00e9n\u00e9fici\u00e9 de leurs retours d&rsquo;exp\u00e9rience, leur efficacit\u00e9 et stabilit\u00e9 sont assur\u00e9es par ce processus. Mais pas plus qu&rsquo;un marteau ils ne dispensent pas de taper. Vous pouvez vous procurer une belle bo\u00eete \u00e0 outils, \u00e7a ne fixera pas pour autant vos \u00e9tag\u00e8res au mur\u00a0<sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#footnote_3_103\" id=\"identifier_3_103\" class=\"footnote-link footnote-identifier-link\" title=\"D&rsquo;aucuns trouvent \u00e7a bien dommage, et militent pour plus de magie dans les frameworks&#8230; Cela fera peut-\u00eatre l&rsquo;objet d&rsquo;un post ult\u00e9rieur.\">4<\/a>]<\/sup>&#8230;<\/p>\n<p>A un niveau un peu plus complexe, le framework (du moins Symfony) favorise  l&rsquo;int\u00e9gration en deux coups de cuiller \u00e0 pot de <strong><em>plug-ins<\/em><\/strong>, qui sont un peu comme les briques \u00e9voqu\u00e9es plus haut. Il en existe un grand nombre, pour des fonctionnalit\u00e9s plus ou moins \u00e9volu\u00e9es (authentification, gestion de m\u00e9dias, de contenu&#8230;). On d\u00e9passe l\u00e0 le cadre de la \u00ab\u00a0bo\u00eete \u00e0 outils\u00a0\u00bb, et on est plut\u00f4t sur des objets de base qui font gagner du temps. C&rsquo;est comme acheter des planches d\u00e9j\u00e0 d\u00e9coup\u00e9es plut\u00f4t que de les scier soi-m\u00eame. Mais ces objets conviennent rarement tels quels\u00a0<sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#footnote_4_103\" id=\"identifier_4_103\" class=\"footnote-link footnote-identifier-link\" title=\"L&rsquo;antienne \u00ab\u00a0Out-of-the-box vs sur mesure\u00a0\u00bb fera elle aussi sans aucun doute l&rsquo;objet d&rsquo;un post ult\u00e9rieur, qui pourra s&rsquo;appeller Mais qui a vraiment envie d&rsquo;habiter dans une maison Ik\u00e9a.\">5<\/a>]<\/sup>. Il faut les adapter \u00e0 ses besoins. Par exemple peindre ses planches de la couleur qui va bien, choisir combien on en pose, \u00e0 quelle distance les unes des autres&#8230;<\/p>\n<p>Point crucial : dans le cas du framework, l&rsquo;adaptation sera grandement facilit\u00e9e par la <em>m\u00e9thodologie<\/em> qui doit avoir \u00e9t\u00e9 respect\u00e9e par les cr\u00e9ateurs des plug-ins. C&rsquo;est-\u00e0-dire : <em>si <\/em>elle a \u00e9t\u00e9 respect\u00e9e.<\/p>\n<p>Ce qui nous fait une transition toute trouv\u00e9e pour le second aspect, non des moindres, de la d\u00e9finition d&rsquo;un framework : en plus d&rsquo;\u00eatre une bo\u00eete \u00e0 outils, un framework, c&rsquo;est une fa\u00e7on de travailler.<\/p>\n<h3>Une m\u00e9thodologie<\/h3>\n<p>Pour tenter une analogie, disons qu&rsquo;<strong>un framework est \u00e0 la programmation ce que grammaire et orthographe sont \u00e0 la pens\u00e9e<\/strong><sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#footnote_5_103\" id=\"identifier_5_103\" class=\"footnote-link footnote-identifier-link\" title=\"On peut m\u00eame dire : apprendre \u00e0 programmer c&rsquo;est comme apprendre \u00e0 parler &#8211; on tient, pour faire vite, que la parole est incarnation du langage, pas n\u00e9cessairement vocale &#8211; et donc, puisqu&rsquo;il n&rsquo;y a pas de parole sans pens\u00e9e et inversement (comme il n&rsquo;y a pas de fond sans forme ni de forme sans fond, ou plut\u00f4t : comme le fond est fond de sa forme et inversement), apprendre \u00e0 penser. Et comme on le dit bien, si c&rsquo;est en forgeant qu&rsquo;on devient forgeron, c&rsquo;est en parlant qu&rsquo;on apprend \u00e0 penser.\">6<\/a>]<\/sup>.<\/p>\n<p>On quitte l\u00e0 le champ lexical du bricolage pour celui de la linguistique, ou plut\u00f4t de l&rsquo;apprentissage du langage <sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#footnote_6_103\" id=\"identifier_6_103\" class=\"footnote-link footnote-identifier-link\" title=\"Je n&rsquo;ai pas dit : d&rsquo;une langue. Sans faire un chapitre entier, retenons juste que le langage d\u00e9signe la facult\u00e9 d&rsquo;expression et de communication, qui s&rsquo;exerce au moyen d&rsquo;une ou plusieurs langues. On me pardonnera le r\u00e9sum\u00e9 \u00e0 la hache. La langue n&rsquo;est \u00e9videmment pas un simple medium qui serait ext\u00e9rieur \u00e0 la pens\u00e9e, comme une proth\u00e8se anecdotique et interchangeable : la forme est toujours li\u00e9e \u00e0 son fond, et r\u00e9ciproquement, chacune engendrant et h\u00e9ritant de l&rsquo;autre.\nPour quelques \u00e9l\u00e9ments suppl\u00e9mentaires : http:\/\/fr.wikipedia.org\/wiki\/Langue#Langue_et_langage\">7<\/a>]<\/sup>. Glissement qui semble tout indiqu\u00e9, puisqu&rsquo;on parle de <em>langage<\/em> de programmation. Si on fouille un peu, on verra m\u00eame que la n\u00e9cessit\u00e9 de changer de champ r\u00e9pond en fait \u00e0 une exigence interne, dict\u00e9e par le caract\u00e8re sp\u00e9cial des  langages artificiels : un croisement g\u00e9n\u00e9tique, pour ainsi dire, entre de la logique (qui se veut m\u00e9canique et d\u00e9terministe) et de la pens\u00e9e (qui reste inductive et po\u00e9tique par nature, mais c&rsquo;est une autre histoire).<\/p>\n<p>Filons la m\u00e9taphore.<strong> <\/strong>Quand on se met \u00e0 programmer, on apprend une syntaxe, des fonctions, des mots-cl\u00e9s&#8230; ; bref, une sorte de grammaire et de dictionnaire <sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#footnote_7_103\" id=\"identifier_7_103\" class=\"footnote-link footnote-identifier-link\" title=\"On ne saurait trop conseiller \u00e0 ce sujet, pour ceux que les travaux de Chomsky rebutent, de compulser le d\u00e9but du Camel Book de Larry Wall &#8211; Programming Perl, chez O&rsquo;Reilly. En particulier le paragraphe \u00ab\u00a0Langages naturels et artificiels\u00ab\u00a0, dans le premier chapitre.\">8<\/a>]<\/sup>.<br \/>\nMais conna\u00eetre par c\u0153ur l&rsquo;int\u00e9gral de la phpdoc ou autre n&rsquo;a jamais fait un bon d\u00e9veloppeur, pas plus que r\u00e9citer le Bescherelle n&rsquo;a fait un grand auteur.<\/p>\n<p>C&rsquo;est l\u00e0 que, tel un cavalier qui surgit hors de la nuit (mince, \u00e7a y est maintenant j&rsquo;ai la musique de Zorro dans la t\u00eate), intervient le framework. Il joue un r\u00f4le \u00e0 la crois\u00e9e de la rh\u00e9torique, de la litt\u00e9rature et de la logique :<\/p>\n<ul>\n<li> il \u00e9nonce des conventions d&rsquo;\u00e9criture et d&rsquo;organisation destin\u00e9es \u00e0 rendre plus efficace, en homog\u00e9n\u00e9isant et clarifiant<\/li>\n<li>il s&rsquo;inspire des bonnes pratiques d\u00e9j\u00e0 existantes, notamment en termes de style <sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#footnote_8_103\" id=\"identifier_8_103\" class=\"footnote-link footnote-identifier-link\" title=\"J&rsquo;\u00e9vite \u00e0 dessein l&rsquo;expression design pattern, qui arrivera probablement dans un prochain \u00e9pisode.\">9<\/a>]<\/sup><\/li>\n<li>il structure et favorise la discipline du code produit, et son ind\u00e9pendance \u00e0 l&rsquo;\u00e9gard de toute solution logicielle ou mat\u00e9rielle.<\/li>\n<\/ul>\n<p>En gros, il joue son r\u00f4le de \u00ab\u00a0cadre\u00a0\u00bb et de structure. C&rsquo;est le c\u00f4t\u00e9 <strong>frame<strong> <\/strong> <\/strong>du framework : il <strong>contraint<\/strong> \u00e0 un certain nombre de choses, mais pour mieux <strong>lib\u00e9rer<\/strong> le processus intellectuel, en particulier en l&rsquo;affranchissant des routines chronophages, et en aidant, par la clart\u00e9 exig\u00e9e, \u00e0 faire face \u00e0 l&rsquo;augmentation de la <em>complexit\u00e9 <\/em><sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#footnote_9_103\" id=\"identifier_9_103\" class=\"footnote-link footnote-identifier-link\" title=\"C&rsquo;est au fond l\u00e0 tout l&rsquo;enjeu : pour afficher une phrase, au hasard : \u00ab\u00a0Hello World!\u00a0\u00bb, pas besoin de framework, n&rsquo;importe quel code produit avec deux mains gauches fera l&rsquo;affaire. C&rsquo;est quand la complexit\u00e9 passe un certain seuil que le d\u00e9veloppeur va comprendre l&rsquo;int\u00e9r\u00eat d&rsquo;avoir d\u00e8s le d\u00e9part structur\u00e9 son programme &#8211; sans parler des cas o\u00f9 il y a plusieurs d\u00e9veloppeurs.\">10<\/a>]<\/sup>.<\/p>\n<p>Si tout d\u00e9veloppeur qui connait un tant soit peu un langage (PHP en particulier, qui est plus facile d&rsquo;acc\u00e8s que d&rsquo;autres) est capable, m\u00eame en t\u00e2tonnant, de mettre au point une application plus ou moins \u00e9volu\u00e9e, l&rsquo;exp\u00e9rience montre toutefois que son degr\u00e9 d&rsquo;instabilit\u00e9 cro\u00eet alors exponentiellement \u00e0 la mesure de sa complexit\u00e9, et que son code a tendance \u00e0 devenir incompr\u00e9hensible (et donc instable, ind\u00e9buggable, non maintenable, etc&#8230;)<\/p>\n<p>Pour<strong> faire face \u00e0 la complexit\u00e9<\/strong>, il faut \u00eatre \u00e9quip\u00e9 de certains outils, intellectuels cette fois. Un framework a pour but de fournir de tels outils facilitant la mod\u00e9lisation des objets, de leurs relations, et des solutions aux probl\u00e8mes pos\u00e9s. Il est \u00e0 la fois une extension du vocabulaire du d\u00e9veloppeur et un perfectionnement de ses capacit\u00e9s grammaticales.<br \/>\nDu moins, il <strong>peut <\/strong>l&rsquo;\u00eatre. Car comme le marteau ne tape pas tout seul, le framework ne pense \u00e0 la place de personne. Pire, comme un marteau, mal utilis\u00e9, il peut faire mal. Et s&rsquo;il tend \u00e0 structurer, il n&rsquo;oblige ultimement personne \u00e0 suivre sa m\u00e9thodologie ; s&rsquo;il peut aider \u00e0 discipliner, il ne remplace pas l&rsquo;auto-discipline qui est du ressort de ceux qui con\u00e7oivent et \u00e9crivent le code. Bref : un framework \u00e7a n&rsquo;est pas la pierre philosophale qui changera votre code de plomb en or.<\/p>\n<p>On se r\u00e9sume : c\u00f4t\u00e9 pile, le <em><strong>frame<\/strong><\/em>work est un cadre structurant, c\u00f4t\u00e9 face, le frame<em><strong>work<\/strong><\/em> est un outil facilitant le travail.<br \/>\nFinalement, on avait bien raison de garder le mot anglais.<\/p>\n<p><em>Dans le prochain \u00e9pisode, on parlera de design patterns&#8230;<br \/>\n<\/em><\/p>\n<p><em><br \/>\n<\/em><\/p>\n________________________________________________\r\n<br\/><ol class=\"footnotes\"><li id=\"footnote_0_103\" class=\"footnote\">Allez, pas de troll, y a d&rsquo;autres frameworks PHP 5 bien aussi, genre&#8230; heu.. ou aussi&#8230; enfin, y en a quoi, chacun choisit celui qui lui plait, ils ont tous leurs avantages et leurs inconv\u00e9nients &#8211; certains inconv\u00e9nients sont parfois en fait des avantages, mais \u00e7a d\u00e9pend quel outil on cherche. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#identifier_0_103\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_1_103\" class=\"footnote\"> Comme de par hasard, on se retrouve \u00e0 nouveau dans le champ lexical du BTP&#8230; Et aussi incroyable que \u00e7a paraisse,  l&rsquo;analogie et le BTP sont d\u00e9j\u00e0 \u00e9voqu\u00e9es dans <a href=\"\/notes\/2009\/08\/champs-lexicaux-et-metaphores\/\" target=\"_blank\">ce post<\/a>. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#identifier_1_103\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_2_103\" class=\"footnote\">Un pertinent relecteur me fait remarquer une autre grosse faiblesse de l&rsquo;analogie de la bo\u00eete \u00e0 outils : elle manque l&rsquo;une des puissances du framework comme <em>ensemble<\/em> d&rsquo;outils coh\u00e9rent, dont l&rsquo;utilisation en compl\u00e9ment les uns des autres d\u00e9cuple l&rsquo;efficacit\u00e9. Difficile de retrouver cette dimension dans une bo\u00eete \u00e0 outils, o\u00f9 on peut jeter indiff\u00e9remment des items sans rapport entre eux&#8230; [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#identifier_2_103\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_3_103\" class=\"footnote\">D&rsquo;aucuns trouvent \u00e7a bien dommage, et militent pour plus de <em>magie<\/em> dans les frameworks&#8230; Cela fera peut-\u00eatre l&rsquo;objet d&rsquo;un post ult\u00e9rieur. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#identifier_3_103\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_4_103\" class=\"footnote\">L&rsquo;antienne \u00ab\u00a0<em>Out-of-the-box<\/em> vs sur mesure\u00a0\u00bb fera elle aussi sans aucun doute l&rsquo;objet d&rsquo;un post ult\u00e9rieur, qui pourra s&rsquo;appeller <em>Mais qui a vraiment envie d&rsquo;habiter dans une maison Ik\u00e9a<\/em>. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#identifier_4_103\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_5_103\" class=\"footnote\">On peut m\u00eame dire : <strong>apprendre \u00e0 programmer c&rsquo;est comme apprendre \u00e0 parler<\/strong> &#8211; on tient, pour faire vite, que la parole est <em>incarnation<\/em> du langage, pas n\u00e9cessairement vocale &#8211; et donc, puisqu&rsquo;il n&rsquo;y a pas de parole sans pens\u00e9e et inversement (comme il n&rsquo;y a pas de fond sans forme ni de forme sans fond, ou plut\u00f4t : comme le fond est fond de sa forme et inversement), apprendre \u00e0 penser. Et comme on le dit bien, si c&rsquo;est en forgeant qu&rsquo;on devient forgeron, c&rsquo;est en parlant qu&rsquo;on apprend \u00e0 penser. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#identifier_5_103\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_6_103\" class=\"footnote\">Je n&rsquo;ai pas dit : d&rsquo;une langue. Sans faire un chapitre entier, retenons juste que le langage d\u00e9signe la facult\u00e9 d&rsquo;expression et de communication, qui s&rsquo;exerce au moyen d&rsquo;une ou plusieurs langues. On me pardonnera le r\u00e9sum\u00e9 \u00e0 la hache. La langue n&rsquo;est \u00e9videmment pas un simple <em>medium <\/em>qui serait ext\u00e9rieur \u00e0 la pens\u00e9e, comme une proth\u00e8se anecdotique et interchangeable : la forme est toujours li\u00e9e \u00e0 son fond, et r\u00e9ciproquement, chacune engendrant et h\u00e9ritant de l&rsquo;autre.<br \/>\nPour quelques \u00e9l\u00e9ments suppl\u00e9mentaires : <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Langue#Langue_et_langage\" target=\"_blank\">http:\/\/fr.wikipedia.org\/wiki\/Langue#Langue_et_langage<\/a> [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#identifier_6_103\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_7_103\" class=\"footnote\">On ne saurait trop conseiller \u00e0 ce sujet, pour ceux que les travaux de Chomsky rebutent, de compulser le d\u00e9but du <em>Camel Book<\/em> de Larry Wall &#8211; <em>Programming Perl<\/em>, chez O&rsquo;Reilly. En particulier le paragraphe \u00ab\u00a0<a href=\"http:\/\/books.google.fr\/books?id=RZa7Ig-n0gMC&amp;lpg=PA4&amp;dq=perl%20langages%20naturels%20et%20artificiels&amp;pg=PA4#v=onepage&amp;q=&amp;f=false\" target=\"_blank\">Langages naturels et artificiels<\/a>\u00ab\u00a0, dans le premier chapitre. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#identifier_7_103\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_8_103\" class=\"footnote\">J&rsquo;\u00e9vite \u00e0 dessein l&rsquo;expression <em>design pattern<\/em>, qui arrivera probablement dans un prochain \u00e9pisode. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#identifier_8_103\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_9_103\" class=\"footnote\">C&rsquo;est au fond l\u00e0 tout l&rsquo;enjeu : pour afficher une phrase, au hasard : \u00ab\u00a0Hello World!\u00a0\u00bb, pas besoin de framework, n&rsquo;importe quel code produit avec deux mains gauches fera l&rsquo;affaire. C&rsquo;est quand la complexit\u00e9 passe un certain seuil que le d\u00e9veloppeur va comprendre l&rsquo;int\u00e9r\u00eat d&rsquo;avoir d\u00e8s le d\u00e9part structur\u00e9 son programme &#8211; sans parler des cas o\u00f9 il y a plusieurs d\u00e9veloppeurs. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2009\/08\/framework-symfony-explique-a-ma-maman-1\/#identifier_9_103\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>A mes heures pas perdues je travaille dans l&rsquo;agence qui est \u00e0 l&rsquo;origine d&rsquo;une fort belle chose : un framework PHP 5 qui jouit d&rsquo;une assez bonne presse, ce qui n&rsquo;est pas compl\u00e8tement un hasard parce qu&rsquo;il est vraiment tr\u00e8s bien[1]. Ce framework porte le nom de Symfony, pour des raisons expliqu\u00e9es ici. Jusque l\u00e0, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[27,21,23,26,22,24,25,55],"class_list":["post-103","post","type-post","status-publish","format-standard","hentry","category-trucs-expliques-a-ma-maman","tag-complexite","tag-framework","tag-grammaire","tag-langage","tag-methodologie","tag-orthographe","tag-pensee","tag-symfony"],"_links":{"self":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts\/103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/comments?post=103"}],"version-history":[{"count":160,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts\/103\/revisions"}],"predecessor-version":[{"id":1212,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts\/103\/revisions\/1212"}],"wp:attachment":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/media?parent=103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/categories?post=103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/tags?post=103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}