Feeds:
Posts
Comments

Archive for the ‘system design’ Category

A new image

I was hit by these figures the sea waves draw in the beautiful red sand of a Nova Scotia beach. This is a perfect illustration of “Chaos and Harmony”.

(see the interesting book of Trinh Xuan Thuan)

Nature has a tendency to structure things, while minimizing energy cost. A drop of chaos into the deterministic harmony leads to beautiful artifacts, comparable to artwork, like this one.

Hubert Reeves has also an interesting view of this. He gives his explanation of why the nature and artwork both give us the feeling of beauty.

He says that the artist works within a set of rules and while respecting those rules, makes infinite variations in this frame, and so does the nature.

Advertisements

Read Full Post »

“Perfection interne et confirmation externe”. Tels étaient les deux critères, selon Einstein, pour juger de la valeur d’une théorie scientifique.

Le degré de perfection interne d’une théorie est d’autant plus élevée, que le nombre d’axiomes de base sur lesquels elle est fondée est plus restreint.

Perfection interne est donc en quelque sorte synonyme d’élégance.

Quant à la confirmation externe, il s’agit bien entendu de la concordance entre les phénomènes observés et les prévisions de la théorie.

Au fond, puisque que le mérite ultime d’une théorie, c’est de représenter le plus possible la réalité, alors admettre le premier des deux critères précédents revient à postuler que la “réalité” ou la “nature” doit aussi posséder cette même perfection interne, ou élégance.

Bien entendu, ceci suppose que l’on adhère au système de pensée selon lequel il existe une réalité objective, connaissable et indépendante de nous, que nous tentons de découvrir à travers le miroir déformant de nos perceptions et dans les limites des capacités de notre cerveau.

Einstein croyait à cette réalité objective et “a priori”.

Quel rapport avec l’informatique? J’y viens, ayez un peu de patience!

Grady Booch disait aussi dans un de ces livres, en substance : « Si vous voulez concevoir des systèmes complexes qui aient quelque chance de succès et qui supportent l’épreuve du temps, alors étudiez des systèmes qui ont fait leurs preuves et fonctionnent bien. La nature en montre de nombreux exemples».

Une plante, un animal, par exemple sont des systèmes effroyablement complexes et cependant très robustes et résilients.

Leur complexité n’est pas arbitraire, on peut l’appréhender en décomposant ces systèmes à des niveaux d’abstractions grossiers, puis de plus en plus fins.

Mes connaissances en botanique sont très sommaires mais je crois qu’on peut dire schématiquement qu’une plante se compose d’un sous système racinaire et d’un sous système “feuillage”, chacun ayant son role. Les racines absorbent l’eau du sol et certains nutriments. Le feuillage a pour fonction la photosynthèse et la reproduction etc.

Donc on voit que même un système complexe, peut être compris à un niveau grossier d’abstraction. Bien entendu, des connaissances de plus en plus spécialisées sont nécessaires pour appréhender les niveaux plus fins d’abstraction.

Ainsi que le soulignait Grady Booch, la complexité des systèmes naturels repose sur deux “patterns” essentiels : la composition et la spécialisation.

La composition est le fait que ces systèmes sont batis comme des assemblages de sous systèmes, qui sont à leur tour décomposables en parties de plus en plus fines.

Quant à la spécialisation, en poursuivant avec la métaphore botanique, on pourrait dire que la plante est ultimement composée de cellules, dont il existe différents types spécialisés.

Ces deux patterns se retrouvent en design de systèmes sous les termes de “composition” et “polymorphisme”.

Pourquoi les systèmes naturels seraient ils toujours élégants?

En fait ceux qu’il nous est donné d’observer, c’est à dire ceux qui ont survécus, le sont !

L’élégance est également apparentée avec la notion d’économie de moyen. La nature semble toujours tendre vers ce but.

N’en déplaise aux créationnistes, tous ces systèmes que nous observons ont été batis par des processus évolutifs.

Si nous voulons bâtir des systèmes complexes, il faut avoir la modestie de reconnaître qu’il est difficile voir impossible d’en concevoir un du premier coup, “ad-nihilo”.

Les meilleurs systèmes sont donc bâtis par un processus itératif et incrémental.

Toutefois, ces évolutions successives devraient idéalement ne jamais laisser de traces apparentes des “errements” par lesquels le designer sera passé. “Les raisons historiques” voilà l’ennemi !

Une bonne façon de savoir si vous avez échappé à cette embuche, c’est de tenter d’expliquer le système que vous avez conçu à une tierce personne extérieure au projet. Si vos couches d’abstraction sont bien pensées, vous n’aurez pas de difficulté à faire comprendre le système en progressant depuis les abstractions les plus générales, jusqu’aux détails les plus fins. À chaque niveau, votre interlocuteur pourra vous suivre, car les détails non encore dévoilés, des niveaux inférieurs, ne nuiront jamais à sa compréhension du niveau courant.

Je trouve personnellement cet exercice agréable et valorisant. Il vous confirme que vous êtes sur la bonne voie. Quelque fois, les remarques et les froncements de sourcil de votre interlocuteur vous amèneront à certaines remises en question. N’hésitez pas à les faire.

En revanche, si vous êtes obligés d’invoquer des “raisons historiques” pour justifier certaines parties de l’architecture, l’exercice devient alors inutile et frustrant. L’autre personne ne peut plus vous “challenger”, l’argument est sans appel. Puisqu’elle n’était pas présente lors de ces phases “historiques”, que pourrait-elle en dire?

Si vous n’avez pas la possibilité de faire ce transfert de connaissance, alors pourquoi ne pas essayer de documenter le système?
C’est un exercice semblable. Pourquoi de nombreux informaticiens n’aiment pas documenter? Ne serait-ce pas justement à cause de la difficulté d’expliquer clairement un design composée de strates, laissant apparaître nos errements successifs, et n’ayant pas subi les indispensables retours arrière et “refactoring”?

En conclusion:

La nature est efficace, élégante et sa complexité est “décomposable”. Comme le dit Hubert Reeves, la nature est “structurée comme un langage”, formé de lettres, puis de mots, puis de phrases, chapitres, livres… Nos systèmes devraient suivre cet exemple.
Deuxièmement, la nature a été bâtie par un processus évolutif. Faisons de même.

La sagesse populaire dit que “la critique est aisée mais l’art est difficile”. Critiquons donc sans relâche notre design à chaque itération et améliorons le !

Read Full Post »