Christopher Alexander

Les Design Patterns et l'Extreme Programming partagent une inspiration : les travaux de l'architecte Christopher Alexander. Une précision s'impose : il ne s'agit pas d'un architecte logiciel ! Alexander construit des immeubles, des maisons, des quartiers, des campus universitaires...

Alexander travaille depuis une quarantaine d'années sur la formalisation d'une activité de conception qui permette de faire émerger des constructions parfaitement adaptées aux besoins de leurs habitants. Au-delà de l'aspect purement fonctionnel de cette adéquation, Alexander s'est attaché à comprendre d'un point de vue scientifique ce qui fait que l'on se sent bien dans certaines constructions, et mal dans d'autres.

Principes généraux de son approche

La première phase de l'étude d'Alexander est celle qui a donné naissance au concept de patterns, et qui a été transposée dans le monde du développement logiciel au milieu des années 90 grâce à des gens comme Kent Beck, Ward Cunningham, Martin Fowler, Jim Coplien, Robert Martin, Grady Booch, et bien entendu le fameux "Gang of Four" - Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides.

Alexander décrit l'approche en question dans son livre The Oregon Experiment, dans le cadre d'une évolution du campus de l'université d'Oregon. Il présente ainsi ses six principes :

  • Organic Order : faire émerger un tout cohérent à partir d'actes locaux.
  • Participation : laisser aux utilisateurs le choix de ce qu'il faut construire, et comment le construire.
  • Piecemeal Growth : favoriser les petites évolutions plutôt que les grands chantiers.
  • Patterns: guider l'activité de construction par des principes appelés Patterns.
  • Diagnosis : améliorer progressivement l'ensemble à partir de cartes établies périodiquement qui identifient les parties à corriger.
  • Coordination : utiliser un système de financement qui favorise l'émergence et la coordination d'initiatives individuelles.

Les Patterns

L'un des éléments majeurs de son approche est le concept de langage de patterns. Chaque pattern représente un élément de design éprouvé qui résout de manière élégante un ensemble de contraintes interdépendantes. Un langage de patterns représente une collection de patterns complémentaires, chaque pattern renforçant d'autres patterns et se trouvant lui-même renforcé par d'autres patterns. Un langage de patterns est un outil puissant de vulgarisation qui met à la portée des concepteurs et des utilisateurs une expertise avancée du domaine. Dans son livre "A Pattern Language", Alexander propose un langage de 253 patterns, qui couvrent tous les aspects de la construction allant de la répartition des villes dans une région jusqu'à la façon d'établir une charpente pour une maison individuelle.

Dans le monde du développement logiciel, les Design Patterns du "Gang of Four" constituent l'un des fruits majeurs de l'effort d'adaptation des travaux d'Alexander. Cependant, malgré leur intérêt général ces patterns sont encore bien loin de former un langage de patterns au sens "alexandrien" pour les raisons suivantes :

  • Ils traitent uniquement de la structure interne du logiciel, à l'échelle d'une classe, alors que des patterns alexandriens couvriraient des sujets beaucoup plus variés allant - par exemple - du système d'exploitation jusqu'à l'ensemble d'Internet.
  • Ils s'adressent uniquement à des développeurs, alors que les patterns alexandriens ont pour but de vulgariser les éléments de conception pour les rendre accessibles aux utilisateurs.
  • Ils sont quasiment indépendants les uns des autres et ne suffisent pas à générer des designs complets. En cela, ils ne forment pas ce qu'Alexander nomme un langage de patterns.

L'Extreme Programming intègre également un certain nombre des principes proposés par Alexander : construction par réparation progressive, implication forte de l'utilisateur... Mais si XP représente un pas important vers une approche "alexandrienne" de la construction, il lui manque le langage de patterns qui aiderait les utilisateurs à définir eux-mêmes leurs applications.

Le mouvement des patterns s'est malheureusement très nettement essouflé ces dernières années, en partie du fait du succès des Design Patterns qui a occulté les objectifs initiaux du mouvement et répandu une image réductrice du concept de pattern. Le sujet est cependant loin d'être épuisé, et la constitution d'un véritable langage de patterns dans notre domaine reste un sujet d'étude à la fois ambitieux et passionnant.

Cependant, les patterns ne sont aujourd'hui plus au coeur des préoccupations de Christopher Alexander. Au début des années 2000, Alexander a présenté la nouvelle direction de ses recherches dans The Nature of Order - une série en 4 volumes qui décrit une approche beaucoup plus large, qu'il appelle la Théorie des Centres.

La Théorie des Centres

En quelques mots, le principe central de cette théorie consiste à réaliser qu'une structure quelconque - une maison, un visage, un logiciel - est caractérisée par un certain nombre de "centres", qui sont des parties notables de cette structure. Par exemple, dans un visage, les centres sont les yeux, le nez, le menton, etc. Ces éléments de structure se retrouvent à différentes échelles - par exemple, l'oeil est lui-même composé de centres qui sont les cils, l'iris, etc. Le principe de la théorie des centres est que tous les centres d'une structure intéragissent entre eux pour créer - ou non - un tout cohérent, à travers un ensemble fini de propriétés : la symétrie, la répétition, le contraste, etc.

Une présentation plus complète de cette théorie dépasse le cadre de cette introduction. Nous la présenterons plus en détail, en proposant notre propre adaptation au monde du logiciel, dans le blog Growing Code.