Complexité

Ornithorhynchus anatinus

, professeur à l’ a mis en ligne des notes concernant l’éthique en informatique qui référence un billet sur ce blog concernant les hypothèses que font les informaticiens sur la géographie. Ces simplifications ont clairement des implications éthiques, mais je pense que le problème sous-jacent est surtout la complexité.

Grossièrement parlant, l’informatique a deux aspects : le premier est de représenter l’information qui décrit la réalité (modélisation), et le second est le traitement de ces données. Le deuxième aspect est celui qui domine dans le curriculum académique : c’est celui qui relève le plus des mathématiques, avec théorèmes, équations et algorithmes. Complexité dans ce domaine est un terme très bien défini, c’est la fonction du temps et de l’espace mémoire nécessaire pour résoudre un problème.

Le premier domaine est beaucoup moins défini, et dépend beaucoup du champ d’application. Selon les domaines, c’est très compliqué, et l’on se retrouve avec un autre type de complexité, celle de l’univers. C’est un problème récurrent en informatique: avec le temps, le code évolue et devient plus compliqué, la maintenance devient plus difficile et la quantité de bugs augmente. Régulièrement, quelqu’un affirme que le problème vient du fait qu’on a utilisé la mauvaise méthodologie de programmation, le mauvais language, le mauvais framework, on essaye alors de ré-écrire le programme de manière plus propre.

Souvent, la nouvelle version est soit incomplète, soit pas si propre que ça. La raison est simple : le code est compliqué parce qu’il représente une réalité compliquée. Cette complexité a été introduite dans le code de manière incrémentale, et il a évolué pour gérer les cas spéciaux qui n’étaient pas dans le modèle de base. Bref, il a absorbé de la complexité de l’univers.

La réalité est compliquée : il y a des exceptions, des cas spéciaux, chaque hiérarchie logique a son ornithorynque, un truc pas réellement classifiable. Je travaille dans la vente en ligne, certaines chaussures ne sont pas faites pour marcher, et les déguisement sont techniquement des vêtements, mais ne sont pas vendus comme des vêtements. En France, la TVA est différente pour les croissants et les sandwiches. Une représentation très structurée de l’information permet de gérer la complexité, mais pas de la faire disparaître, pourtant c’est que nombre d’informaticiens essayent régulièrement – en partie, je pense, parce qu’ils confondent la simplicité d’un design avec celle du modèle sous-jacent.

Cela ne veut pas dire qu’il ne faut pas ré-écrire le code, la structure est une bonne chose, et on peut toujours améliorer. C’est à mon avis censé si on veut revisiter les hypothèses sous-jacentes, les trade-off. Quand on construit un système, le design reflète toujours des hypothèses – conscientes ou non – de ce qui est important et de ce qui ne l’est pas, de ce qui est probable et de ce qui ne l’est pas. Un design n’est pas tant bon ou mauvais, que plus ou moins adapté et les hypothèses changent. Mais une refonte du système ne peut être un succès que si l’on accepte et que l’on comprend les complexités du système
précédent.

Un exemple de réécriture qui a été un succès est le projet Clang. C’est une ré-écriture du projet GCC, mais avec d’autres hypothèses, il supporte moins de langages, délègue la génération du code natif a un autre système (LLVM). Clang est plus modulaire que GCC, mais c’est là encore un trade-of, l’outil est publié sous une license plus permissive, là où GCC était un monolithe conçu pour être impossible à subvertir.

En y réfléchissant cela s’applique à bien plus que l’informatique, les gens semblent avoir beaucoup de peine avec un univers où les choses ne sont pas bonne ou mauvaises, mais simplement compliquées. Les individus les plus vocaux semblent être ceux qui nient la complexité, soit pour défendre le status-quo basé sur un modèle dépassé, ou ceux qui veulent tout ré-écrire en ignorant toute forme de complexité ou de trade-of

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.