La compréhension est un élément capital pour décider et donc pour bien vivre. Or une limite à la compréhension est la complexité. Quand on réalise une grosse construction on à affaire à la complexité de ce que l'on crée. Que ce soit pour créer une nouvelle forme de gouvernance ou comprendre notre société actuelle il est donc bon de comprendre la relation entre la complexité et les construction passées et futures.
En quoi la complexité intervient dans l'évolution des grosses sociétés humaines et comment la gérer ?
L'informatique est une activité où l'on construit des logiciels au fonctionnement interne plus ou moins complexe. La gestion de la complexité est devenue un sujet important et a amené de nombreuses évolutions que ce soit techniques ou organisationnelles. L'enjeu est tel qu'elle intervient dans une bonne partie des ressources allouées à l'informatique, que ce soit par l'abandon de couteux projets ou le travail de correction suite à la non maitrîse de la complexité. Cette évolution sur les quelques dizaines d'années permet aussi de constater l'effet de la complexité sur la psychologie des développeurs.
Au début les développeurs construisaient les programmes directement en assembleur, c'est à dire en écrivant les instructions que devra exécuter le processeur. Le manque de ressources informatiques fait qu'il était nécessaire de tout optimiser (mémoire utilisée, taille du logiciel, vitesse d'exécution). Ce besoin d'optimisation est contradictoire à faible échelle avec une gestion de la complexité.
C'est pourquoi au début un développeur admirable était quelqu'un capable de produire du code optimisé tout en s'adaptant à la complexité.
Avec l'acroissement de la puissance des machines, l'optimisation est devenu moins importante et est apparu un nouveau problème: comment arriver à produire de gros programmes efficacement. Il n'y avait pas réellement conscience du problème de la complexité même si les développeurs s'y frottaient continuellement. Par exemple les effets de bord étaient nombreux, ou encore IBM a pratiqué un salaire à la ligne de code ce qui a entraîné une production verbeuse entraînant une augmentation de la complexité.
Tous ces problèmes ont amené au développement de nouveaux outils (comme des nouveaux langages informatiques) et à la prise de conscience de la complexité. Ainsi petit à petit un développeur admirable devenait une personne capable de produire du code simple et modulaire (en réalisant les objectifs bien sûr).
L'histoire de l'informatique a répété l'histoire de la mécanique: on bricole à la main des bouts de bois, de la ficelle et des chevilles et on finit par rechercher des preuves de théorèmes mathématiques hautement abstraits. Cette évolution est une nécessité de la recherche d'efficacité.
Ainsi est apparu des langages de plus haut niveau très proches des mathématiques, comme Haskell et OCaml et des assistants mathématiques permetant de prouver la bonne exécution des programmes, comme Coq et Isabelle/HOL.
Même si cette évolution n'en est qu'à ses débuts un développeur admirable deviendra de plus en plus une personne à l'aise dans les concepts mathématiques utilisés pour l'informatique.
Les logiciels devenant plus gros il a fallu organiser des équipes de développeurs. Cela a amené à avancer dans l'organisation, par exemple avec une gestion par ticket pour suivre le traitement des erreurs et fonctionalités, une gestion des versions du code source ou encore des méthodologies de conception.
Nous avons vu que la conception de ce qu'est un bon développeur a évoluée. Au fur et à mesure de l'évolution technique le développeur passe par les phases suivantes:
Cette évolution change un aspect compagnon et non moins important de la complexité: l'esthétique. En effet:
Nous voyons donc que cette évolution influence l'aspect psychologique des développeurs puisque la normalité de l'esthétique change. Or elle est un aspect important des êtres, par exemple cela nous poussent vers l'espoir du bonheur ou à contrario l'acceptation du malheur. Cela se traduit concrètement: il y avait plus de machisme au début chez les développeurs ou encore il émanait une joie palpable des forums sur Haskell au moins à une certaine époque.
L'expérience de projets informatiques devenus trop complexes nous montre alors que sans travailler à réduire la complexité on obtient:
Cette situation est maintenant fort rare mais elle a existé et permet de tirer des enseignements intéressants pour notre société où l'inconscience du facteur complexité est répandu.
Cela pousse à accepter l'incompréhention, l'inesthétique et renforce des valeurs d'acceptation de la souffrance.
Par rapport à la société, l'informatique est un domaine simple. Si réécrire un logiciel avec des outils de plus haut niveau peut être un peu risqué et couteux, il en est tout autrement de réorganiser la société où là l'enjeu se compte en morts. Le fait d'être parti prenante du système n'aide ni à la compréhension ni à la prise de risque. Par exemple le développement informatique serait bien plus problématique si les développeurs vivaient eux mêmes, en tant que code, à l'intérieur du logiciel à modifier. Nous vivons pourtant en tant qu'humain cette contrainte à la fois difficile et très drôle.
C'est pourquoi, comparé à l'évolution de l'informatique, nous en sommes encore à la phase début, avec donc une conscience très réduite du problème de la complexité et du niveau d'esthétique possible.
On pourra noter le travail de Joseph A. Tainter (voir le livre "The Collapse of Complex Societies") qui met en relation l'augmentation incontrôlée du niveau de complexité, le coût énergitique dû à cette complexité et le déclin que cela engendre.
Voici des exemples où la complexité est utilisée comme outils de domination:
Voici des exemples où la complexité est utilisée comme outil de prospérité:
Sokal hoax.
Nous voyons que la complexité a tendance à prospérer de fait des forts enjeux freinant une réorganisation simplificatrice et de l'ajout continuel d'éléments nouveaux. Elle prospère aussi du fait qu'elle offre des avantages dans certaines circonstances et à certains groupe.
Comme elle a un coût important (en terme de destruction de la facilité de vie) et qu'elle prospère elle amène à des problèmes toujours plus grands.
La comparaison entre l'évolution de la société humaine et de l'informatique nous montre que nous sommes au début, époque où la conscience du besoin de maîtrise de la complexité est très léger et ou les problèmes s'accumulent inexorablement.
La phase de gestion de la complexité a un important impacte sur le cœur de l'esprit des personnes du fait qu'elle touche à la norme du niveau d'esthétique.
Jouer c'est chercher le plaisir de vivre, d'aller sur ce qui réjouit tout en inventant et découvrant des nouveautés. C'est donc déjà en soi l'affirmation implicite d'une grande esthétique, une confiance dans son corps et son esprit à nous guider par le plaisir vers le bonheur à long terme. Cela permet de s'exercer sur des situations plus simples et ne comportant que de légers enjeux. Par exemple chercher du plaisir à développer des logiciels permet d'aller vers des logiciels de plus en plus gros et donc de développer son sens de l'esthétique et sa gestion de la complexité. Il en est de même en explorant librement les mathématiques ou d'autres domaines bien moins complexes que la réalité.
Relativement à l'objectif défini ici d'apprendre à gérer la complexité, il existe des versions dégradées du jeu, par exemple faire des exercices. Elles sont un compromis entre une perte d'amélioration de son sens de l'esthétique (et donc de son intelligence) et un gain éventuel en normalisation ou temps d'apprentissage d'un certain domaine.
La complexité a une place importante dans le fonctionnement sociétal. La comparaison avec l'évolution de l'informatique nous montre que notre société est encore largement immature face à la gestion de la complexité. Cette gestion est capitale pour obtenir une société n'allant pas vers un mortel déclin. Pour arriver à construire une bonne gestion de la complexité il faut passer par le jeu pour améliorer son sens de l'esthétique, qui est le moteur de la gestion de la complexité.