Symfony expliqué à ma maman, 1ère partie : qu’est-ce qu’un framework ?

Maman je t'aimeA mes heures pas perdues je travaille dans l’agence qui est à l’origine d’une fort belle chose : un framework PHP 5 qui jouit d’une assez bonne presse, ce qui n’est pas complètement un hasard parce qu’il est vraiment très bien[1].

Ce framework porte le nom de Symfony, pour des raisons expliquées ici. Jusque là, fastoche. C’est ensuite que ça se complique. Déjà, rien que le premier mot : framework. Littéralement, cadre ou structure ; dans la programmation en général, on le traduit plus précisément par « cadre d’applications ». Enfin, on le traduirait, parce qu’on ne le fait jamais, on dit toujours frèmeouorque. A compter de cette phrase, je dirai d’ailleurs « framework » sans autre forme de procès, et même sans italiques (je suis comme ça, jsuis un gueudin).

Pour commencer, donc, qu’est-ce qu’un framework ? S’il y avait une réponse simple, on se passerait de ces lignes. La difficulté majeure tient à ce qu’il y a en fait dans la définition deux dimensions principales, complémentaires mais en partie indépendantes : un framework c’est à la fois une boîte à outils et une méthodologie. Ou, si on n’a pas peur des envolées lyriques : une boîte à outils fournie avec une philosophie.

Une boîte à outils

On a l’habitude de comparer un framework à un ensemble des « briques » toutes faites qu’on peut utiliser pour son application [2].
Si l’analogie n’est pas trop mauvaise, elle est insuffisante, parce qu’un framework c’est plus que ça. Cela dit, l’image de « brique » convient assez bien à ce qui circule çà et là sous le nom de composants (et d’ailleurs, le monde est bien fait, car certaines parties de Symfony sont justement mises à disposition comme composants : http://components.symfony-project.org ; dingue, hein ?)

Mais revenons à l’analogie de départ, même si elle est un peu faible ; elle dit qu’un framework est à un développeur ce qu’une boîte à outils est à un bricoleur.

Sous plusieurs aspects, un framework peut effectivement fonctionner comme une boîte à outils, en ce sens qu’il propose, dans le cas de Symfony du moins, un certain nombre de trucs pour faciliter le travail, l’accélérer, voire automatiser tout ou partie des tâches qu’on rencontre lors du développement d’une application web. C’est le côté work du framework, si l’on veut.
Enfoncer un clou, à la main, c’est douloureux et très long ; avec une pierre, moins douloureux, mais pas très précis. Avec un marteau, l’outil est assez optimal – même s’il ne dispense toutefois pas de taper. En plus, ce marteau a été testé industriellement, donc a de bonnes garanties de solidité [3].

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’autant plus sujettes à erreur qu’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’interfaces d’administration, exécution de tests, gestion du cache, des urls…

Pour tout ça, le framework offre marteaux et tournevis, voire dans certains cas pistolets à clous. Ces « utilitaires »,  testés et mis à l’épreuve du feu par de nombreux développeurs, ont bénéficié de leurs retours d’expérience, leur efficacité et stabilité sont assurées par ce processus. Mais pas plus qu’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 [4]

A un niveau un peu plus complexe, le framework (du moins Symfony) favorise l’intégration en deux coups de cuiller à pot de plug-ins, 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…). On dépasse là le cadre de la « boîte à outils », et on est plutôt sur des objets de base qui font gagner du temps. C’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 [5]. 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…

Point crucial : dans le cas du framework, l’adaptation sera grandement facilitée par la méthodologie qui doit avoir été respectée par les créateurs des plug-ins. C’est-à-dire : si elle a été respectée.

Ce qui nous fait une transition toute trouvée pour le second aspect, non des moindres, de la définition d’un framework : en plus d’être une boîte à outils, un framework, c’est une façon de travailler.

Une méthodologie

Pour tenter une analogie, disons qu’un framework est à la programmation ce que grammaire et orthographe sont à la pensée[6].

On quitte là le champ lexical du bricolage pour celui de la linguistique, ou plutôt de l’apprentissage du langage [7]. Glissement qui semble tout indiqué, puisqu’on parle de langage 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’est une autre histoire).

Filons la métaphore. Quand on se met à programmer, on apprend une syntaxe, des fonctions, des mots-clés… ; bref, une sorte de grammaire et de dictionnaire [8].
Mais connaître par cœur l’intégral de la phpdoc ou autre n’a jamais fait un bon développeur, pas plus que réciter le Bescherelle n’a fait un grand auteur.

C’est là que, tel un cavalier qui surgit hors de la nuit (mince, ça y est maintenant j’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 :

  • il énonce des conventions d’écriture et d’organisation destinées à rendre plus efficace, en homogénéisant et clarifiant
  • il s’inspire des bonnes pratiques déjà existantes, notamment en termes de style [9]
  • il structure et favorise la discipline du code produit, et son indépendance à l’égard de toute solution logicielle ou matérielle.

En gros, il joue son rôle de « cadre » et de structure. C’est le côté frame du framework : il contraint à un certain nombre de choses, mais pour mieux libérer le processus intellectuel, en particulier en l’affranchissant des routines chronophages, et en aidant, par la clarté exigée, à faire face à l’augmentation de la complexité [10].

Si tout développeur qui connait un tant soit peu un langage (PHP en particulier, qui est plus facile d’accès que d’autres) est capable, même en tâtonnant, de mettre au point une application plus ou moins évoluée, l’expérience montre toutefois que son degré d’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…)

Pour faire face à la complexité, 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.
Du moins, il peut l’ê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’il tend à structurer, il n’oblige ultimement personne à suivre sa méthodologie ; s’il peut aider à discipliner, il ne remplace pas l’auto-discipline qui est du ressort de ceux qui conçoivent et écrivent le code. Bref : un framework ça n’est pas la pierre philosophale qui changera votre code de plomb en or.

On se résume : côté pile, le framework est un cadre structurant, côté face, le framework est un outil facilitant le travail.
Finalement, on avait bien raison de garder le mot anglais.

Dans le prochain épisode, on parlera de design patterns…


________________________________________________
  1. Allez, pas de troll, y a d’autres frameworks PHP 5 bien aussi, genre… heu.. ou aussi… enfin, y en a quoi, chacun choisit celui qui lui plait, ils ont tous leurs avantages et leurs inconvénients – certains inconvénients sont parfois en fait des avantages, mais ça dépend quel outil on cherche. []
  2. Comme de par hasard, on se retrouve à nouveau dans le champ lexical du BTP… Et aussi incroyable que ça paraisse, l’analogie et le BTP sont déjà évoquées dans ce post. []
  3. Un pertinent relecteur me fait remarquer une autre grosse faiblesse de l’analogie de la boîte à outils : elle manque l’une des puissances du framework comme ensemble d’outils cohérent, dont l’utilisation en complément les uns des autres décuple l’efficacité. Difficile de retrouver cette dimension dans une boîte à outils, où on peut jeter indifféremment des items sans rapport entre eux… []
  4. D’aucuns trouvent ça bien dommage, et militent pour plus de magie dans les frameworks… Cela fera peut-être l’objet d’un post ultérieur. []
  5. L’antienne « Out-of-the-box vs sur mesure » fera elle aussi sans aucun doute l’objet d’un post ultérieur, qui pourra s’appeller Mais qui a vraiment envie d’habiter dans une maison Ikéa. []
  6. On peut même dire : apprendre à programmer c’est comme apprendre à parler – on tient, pour faire vite, que la parole est incarnation du langage, pas nécessairement vocale – et donc, puisqu’il n’y a pas de parole sans pensée et inversement (comme il n’y a pas de fond sans forme ni de forme sans fond, ou plutôt : comme le fond est fond de sa forme et inversement), apprendre à penser. Et comme on le dit bien, si c’est en forgeant qu’on devient forgeron, c’est en parlant qu’on apprend à penser. []
  7. Je n’ai pas dit : d’une langue. Sans faire un chapitre entier, retenons juste que le langage désigne la faculté d’expression et de communication, qui s’exerce au moyen d’une ou plusieurs langues. On me pardonnera le résumé à la hache. La langue n’est évidemment pas un simple medium qui serait extérieur à la pensée, comme une prothèse anecdotique et interchangeable : la forme est toujours liée à son fond, et réciproquement, chacune engendrant et héritant de l’autre.
    Pour quelques éléments supplémentaires : http://fr.wikipedia.org/wiki/Langue#Langue_et_langage []
  8. On ne saurait trop conseiller à ce sujet, pour ceux que les travaux de Chomsky rebutent, de compulser le début du Camel Book de Larry Wall – Programming Perl, chez O’Reilly. En particulier le paragraphe « Langages naturels et artificiels« , dans le premier chapitre. []
  9. J’évite à dessein l’expression design pattern, qui arrivera probablement dans un prochain épisode. []
  10. C’est au fond là tout l’enjeu : pour afficher une phrase, au hasard : « Hello World! », pas besoin de framework, n’importe quel code produit avec deux mains gauches fera l’affaire. C’est quand la complexité passe un certain seuil que le développeur va comprendre l’intérêt d’avoir dès le départ structuré son programme – sans parler des cas où il y a plusieurs développeurs. []

Tags : , , , , , , ,

9 commentaires sur “Symfony expliqué à ma maman, 1ère partie : qu’est-ce qu’un framework ?”

  1. ReivaX :

    très bon article ! je vais le conseiller à beaucoup de personnes qui me demandent ce qu’est un framework !
    vivement les prochains articles :)

  2. jclc :

    Bon, j’ai pas tout compris mais ça demande réflexion. mais je le savais, je suis hasbeen, j’ai pas de facebook, de twitter ni d’iphone et j’ai windows XP 1 version familiale…je sais, ça, ça tue.

    JCLC

  3. martin :

    Belle manière de présenter l’outil. J’approuve complètement l’idée de « frame » avec une grammaire à respecter, j’irai jusqu’à parler de philosophie. Il faut adhérer à la façon de faire d’un framework. Pour en profiter pleinement il faut l’utiliser tel qu’il est pensé et développé. C’est ce qui m’a fait préférer Zend Framework à Symfony, le premier correspondait plus à ma manière de faire.

    Et aller à contre-sens est contre productif, j’ai repris dernièrement un projet basé sur Zend Framework ou finalement tout était surchargé et réécris, pour au final avoir un projet qui n’utilise plus le Zend Framework directement, et qui en perd même l’esprit, perd en souplesse, et devient difficile à maintenir…

    Au final je pense qu’il ne suffit d’utiliser une bibliothèque d’outils pour gagner en efficacité, il faut en comprendre la logique, et s’imprégner de sa philosophie pour travailler dans la continuité.

  4. Pierre Martin :

    Bravo pour cet article … la série s’annonce très intéressante !

    Un framework est un outil, et qui dit outil dit à la fois personnel et fonctionnel. C’est là où justement les différences de « philosophie » entre frameworks doivent permettre à chacun de trouver chaussure à son pied, ce qui nécessite un temps de recherche et de tests … mais qui est par la suite très vite compensé par le plaisir et la qualité de développement obtenus !

    Vivement le prochain article ;o)

  5. julien :

    Nan, sérieux, c’est bien toi là ? Chouette, chouette, j’ai toujours pensé que ça serait chouette chouette ! Go on buddy !

    C’est rigolo, j’ai déjà eu cette explication mais dans d’autres circonstances (arrosées). Je ne crois pas que l’une soit meilleure que l’autre, je crois bien qu’elles sont aussi complémentaires qu’indépendantes (et en plus ça déteint)

  6. Klaire :

    Mamaaaaaaaaaaaannnn? T’as compris tout bien ce qu’il a dit le monsieur ?
    Moi j’ai compris.

    Merci Monsieur.

  7. David :

    Tres bon article. A recommander pour expliquer Symfony mais aussi la notion de framework tout court. Pas toujours évident ! Merci pour ce bon travail !

  8. iloWeb :

    Bonjour,
    Je tenais à vous remercier pour cet article qui me permet de décrire très simplement à mes clients ce qu’est un framework et en quoi Symfony est une révolution.

    Dans notre entreprise, depuis que nous sommes passés sous Symfony, nous avons pu réduire considérablement le temps de développement et nos coûts de production par la même occasion ce qui est bénéfique pour les clients avec une tarification horaire.

    Bonne continuation pour la suite.

  9. jaycreation :

    Allez encore plus simple (ma maman est douée en informatique)
    Symfony expliqué à mon boss.
    Un power point qui complete cette présentation
    http://blog.jaycreation.net/post/Symfony-explique-a-mon-boss