Understanding is crucial for making decisions and therefore for living well. However, a limit to understanding is complexity. When undertaking a large construction, one encounters the complexity of what is being created. Whether it is to create a new form of governance or to understand our current society, it is therefore good to understand the relationship between complexity and past and future constructions.
How does complexity play a role in the evolution of large human societies, and how can it be managed ?
Computing is an activity where software with more or less complex internal functions is built. Managing complexity has become an important issue, leading to numerous technical and organizational evolutions. The stakes are such that it affects a significant portion of resources allocated to computing, whether by abandoning costly projects or working on corrections due to the lack of mastery over complexity. This evolution over a few decades also shows the effect of complexity on developers' psychology.
In the beginning, developers directly built programs in assembly language, meaning they wrote the instructions that the processor would execute. The lack of computing resources meant that everything had to be optimized (memory usage, software size, execution speed). This need for optimization is contradictory on a small scale with complexity management.
That's why, in the beginning, an admirable developer was someone capable of producing optimized code while adapting to complexity.
With the increase in machine power, optimization became less important, and a new problem emerged: how to produce large programs efficiently. There wasn't really an awareness of the complexity problem, even though developers were constantly facing it. For example, the side effects were numerous, or IBM practiced paying by the line of code, leading to verbose production and increased complexity.
All these problems led to the development of new tools (like new programming languages) and awareness of complexity. Gradually, an admirable developer became someone capable of producing simple and modular code (while achieving the objectives, of course).
The history of computing has repeated the history of mechanics: you start by tinkering with bits of wood, string, and pegs and eventually seek proofs of highly abstract mathematical theorems. This evolution is a necessity in the pursuit of efficiency.
Thus, higher-level languages very close to mathematics, such as Haskell and OCaml, and mathematical assistants allowing the proof of correct execution of programs, such as Coq and Isabelle/HOL, appeared.
Even though this evolution is still in its early stages, an admirable developer will increasingly become someone comfortable with mathematical concepts used in computing.
As software became larger, it became necessary to organize teams of developers. This led to advancements in organization, such as ticket management to track error handling and features, version control of source code, and design methodologies.
We have seen that the conception of what makes a good developer has evolved. As technology evolves, developers go through the following phases:
This evolution changes a companion aspect of complexity that is no less important: aesthetics. Indeed:
We can see that this evolution influences the psychological aspect of developers since the norm of aesthetics changes. This aesthetic is an important aspect of being human, for example, it drives us towards the hope of happiness or, conversely, the acceptance of misery. This translates concretely: there was more machismo among early developers, and there was also palpable joy on Haskell forums, at least at one point in time.
The experience of software projects becoming too complex shows us that without working to reduce complexity, we get:
This situation is now very rare, but it did exist and allows us to draw interesting lessons for our society, where the lack of awareness of the complexity factor is widespread.
It leads to the acceptance of incomprehension, in aesthetics, and reinforces values of acceptance of suffering.
Compared to society, computing is a simple field. If rewriting software with higher-level tools can be somewhat risky and costly, it is entirely different from reorganizing society, where the stakes are measured in lives. Being a stakeholder in the system does not help with understanding or taking risks. For example, software development would be much more problematic if developers themselves lived, as code, inside the software they were modifying. Yet we, as humans, live with this constraint that is both difficult and very funny.
That is why, compared to the evolution of computing, we are still at the early stage, with a very limited awareness of the complexity problem and the possible level of aesthetics.
One can note the work of Joseph A. Tainter (see the book "The Collapse of Complex Societies"), which links the uncontrolled increase in complexity, the energy cost due to this complexity, and the decline it leads to.
Here are examples where complexity is used as a tool of domination:
Here are examples where complexity is used as a tool for prosperity:
Sokal hoax.
We see that complexity tends to prosper due to strong stakes that hinder a simplification reorganization and the continual addition of new elements. It also prospers because it offers advantages in certain circumstances and to certain groups.
As it has a significant cost (in terms of destroying the ease of life) and prospers, it leads to ever-growing problems.
The comparison between the evolution of human society and computing shows us that we are at the beginning, a time when the awareness of the need to manage complexity is very low, and where problems accumulate inexorably.
The phase of managing complexity has a significant impact on the core of people's minds because it affects the standard of aesthetic levels.
Playing is about seeking the pleasure of living, going towards what brings joy while inventing and discovering new things. It is already in itself the implicit affirmation of great aesthetics, a trust in one's body and mind to guide us through pleasure towards long-term happiness. It allows one to practice on simpler situations with only minor stakes. For example, seeking pleasure in developing software allows one to move towards larger and larger software and thus develop a sense of aesthetics and management of complexity. The same applies when freely exploring mathematics or other far less complex fields than reality.
Regarding the objective defined here of learning to manage complexity, there are downgraded versions of the game, such as doing exercises. They are a compromise between a loss of improvement in one's sense of aesthetics (and therefore of intelligence) and a potential gain in standardization or learning time in a certain field.
Complexity has an important place in societal functioning. The comparison with the evolution of computing shows us that our society is still largely immature in dealing with complexity. This management is crucial to achieve a society that does not head towards a deadly decline. To build good complexity management, one must engage in play to improve one's sense of aesthetics, which is the engine of complexity management.