101224 19 min

Le code de la raison

version(s)
Le plus souvent je suis marginal chez les programmeurs parce que je n'utilise pas le « orienté objet ». Évidemment dit comme cela ça fait peur au badaud, mais si j'avais pris le temps de le leur expliquer, les employeurs qui m'ont refusé comprendraient mieux...

C'est le même principe pour le développement logiciel que pour la conscienciation, il s'agit [de se donner le temps] d'entrer dans la moindre interstice d'illogisme.

De même, j'ai voulu expliquer au public que les programmeurs étaient en possession d'un savoir qui s'exprime d'une façon aussi brutale que la différence entre ceux qui savent lire et ceux qui ne savent pas lire... le code en l'occurrence.

Plein de gens s'élèvent contre la dictature de la technologie qui remplacerait la pensée, du moins tel que cela arrive à ceux qui ne savent pas lire. (quand ils apprendront on en reparlera)

En informatique les choses les plus banales sont celles qui réclament le plus d'attention. C'est normal puisqu'on veut pouvoir s'en servir sans s'inquiéter, pour pouvoir faire des choses pas banales en toute confiance. On entre à l'intérieur du processus qui est appelé et rendu en un temps zéro.

Et c'est d'ailleurs ce qui différencie pour l'instant l'informatique de l'intelligence humaine, ce sont n appels au logiciel par seconde, toujours le même logiciel qui réagit à différentes tâches, là où le cerveau humain, avec un taux de rafraîchissement de 20Hz, ne fait que de progresser au fur et à mesure des appels. De ce point de vue, la progression en informatique est plus lente que la progression de l'intelligence humaine, puisqu'il faut d'abord observer les lacunes pour pouvoir y intervenir. Mais par contre, pour ce qui est certifié comme certain, il n'y a pas à revenir dessus, et c'est inutile de comparer un cerveau humain avec la quantité inimaginable de données qu'un logiciel peut prendre en compte avent de rendre son jugement, pourvu que sa fiabilité soit éprouvée, comme le peut l'être celle d'une petite calculette.

Lors de l'écriture, il s'agit de produire les différentes fonctions qui sont appelées au cours de l'exécution du logiciel. Il se passe que chaque fonction étant appelée par différents processus, du moins quand on est encore à l'état primitif de l'écriture, ce qu'on attend d'elle peut varier.
Et cela tient au vocabulaire, la fonction « clean_br » nettoie les sauts de lignes (je n'en veux pas plus de deux consécutifs), on s'attend à ce qu'elle fasse cela, mais il est possible de l'appeler de différents endroits, à partir desquels ça peut impliquer différents traitements.

Dès lors ça appelle une autre sous-fonction qui éclairci les nombreux différents formats de saut de ligne existants afin de permettre la première tâche. Ceci ne demandant qu'une ligne de code, on la rajoute. Mais après, en étant appelé par un autre processus, cette même fonction va refaire un nettoyage qui aura déjà été fait avant, ou après, ou qu'il est illégal de faire à ce moment-là. Et ce « nettoyage » est utile à bien d'autres tâches qui en ont besoin. Ce qu'il se produit, c'est que ces sous-routines qui appartiennent au noyau (choses indivisibles) peuvent se trouver préalables à celle qui permet d'aboutir au moment où on a besoin de faire appel à la fonction dont on parle.

Mais pour le logiciel ce n'est pas trop grave qu'on fasse des appels redondants. Toutes les fonctions consécutives qui sont appelées ont des compétences plus vastes que les raisons pour lesquelles on les appelle. En fait même on peut croire que si on était hyper-stricts le logiciel ne pourrait pas même démarrer, on est obligés d'accepter une certaine redondance pour le faire démarrer.
Le temps perdu (par le processeur) à faire des tâches inutiles est quasiment indécelable, quoi qu'on puisse redouter qu'à grande échelle il coûte sûrement des millions à quelqu'un.

La densité du code qu'on désire, si elle n'est pas motivée par l'économie d'échelle, pour le vrai bon geek, est désirée pour des raisons de clarté du code.
En effet elle est nécessaire pour que le logiciel soit possible à lire et comprendre plus facilement.

Et pour se faire, autant que possible, on cherche à écrire des fonctions qui soient à la fois indivisibles, explicites par le nom qu'elles portent, qui souvent sont indissociables de certaines autres dont d'autres encore peuvent avoir besoin à n'importe quel endroit, et compatibles avec les différents endroits d'où on l'appelle, ce qui influe sur son irréductibilité.
Mais ce qui se passe c'est que chaque fonction d'un logiciel est énormément plus longue à expliquer en terme d'octets qu'elle n'en comporte elle-même.

Parce quand on est dans l'analyse, c'est à dire la lecture du code d'un autre, on extrapole vite des choses en ne voyant qu'une seule fonction, par exemple le type de structure à laquelle on a à faire, (le niveau évolutif du programme) ou spécifiquement l'état dans le quel se trouve le processus qui fait appel à cette fonction (lire c'est vraiment faire du rétro-engineering - et écrire c'est faire passer l'ingéniosité du monde des idées au monde du réel). Et si le logiciel veut vivre il lui faut être lisible facilement par autrui, et donc le plus possible facile à rétro-inginérer (ce qui n'est pas une mince affaire, outrepasse allègrement les cahiers des charges habituels, et que seules les entreprises qui pensent à long terme ou les vrais geeks sont capables de faire).

Si on garde ce paradigme en tête on produit une meilleure densité du code.

- la loi -

Le logiciel libre est une mouvance en ce sens qu'il réside au sein d'une mentalité de programmeur, qui dit textuellement qu'elle veut pouvoir comprendre le monde, et que pour ça, le monde doit vouloir être compréhensible.

On veut toujours savoir Pourquoi, c'est ce qu'il y a de plus humain et ça devrait être préconisé en psychanalyse, parce que ça guérit la douleur.

Pour comprendre le Pourquoi il faut connaître les Comment.
Et pour accéder au Comment il faut soi-même être initié à la lecture, et pour savoir lire, il faut d'abord savoir écrire, c'est à dire qu'il faut soi-même être à l'origine de choses qui fonctionnent et qui servent à autrui.

Maintenant allez demander à des politiciens si ils sont à l'origine de choses qui fonctionnent et qui rendent service.

Quoi que ce soit dans la vie, y compris les comportements, on peut rentrer dedans et observer comment il a été construit. C'est un peu ça le paradigme du logiciel libre, toute chose étant le fruit d'un fonctionnement, on possède le droit d'analyser ce fonctionnement, et de lui apporter les améliorations qui s'imposent.

Ce à quoi il faut rajouter (pour aller plus loin mais en toute logique) que les améliorations doivent être conforme aux principes dictés par la densité du code, de sorte à réutiliser au maximum les ressources disponibles, ne pas entrer en conflit avec elles ou leur faire concurrence, ou le cas échéant, à réécrire tout un panel de routines auxquelles tout le logiciel est susceptible de faire appel, ce qui est un gros travail.

Imaginez maintenant comment ça doit être dans la tête du gars (le politicien) dont il faut réécrire les réflexes.

Le problème que je veux soulever est celui de la raison des lois. Dans le civil les lois sont exprimées, mais ce n'est pas le bon mot car la Loi, en programmation, c'est à dire une fois qu'on se place dans le champ de ce qui est fonctionnel au sein d'une logique, une Loi c'est quelque chose contre laquelle on ne peut rien, et c'est loin de n'être que cela.

Par exemple, l'écriture exige que dans les fonctions on soit à l'écart du monde, dans une bulle isolée où aucun nom de variable n'est occupé. Ainsi on a toute liberté d'écrire son algorithme sans se soucier de ce que d'autre fois on fait appel à la même variable.
Pourtant le logiciel a ce problème, on ne peut pas avoir deux fois la même fonction, mais surtout il est relativement illégal d'avoir des fonctions différentes qui font les mêmes choses, car ceci est une source de confusion a des effets nuisibles très faciles à voir, puisque des erreurs apparaissent sans qu'on ne puisse rien n'y faire ni même savoir d'où elles viennent.
Ces choses doivent être isolée et rendues publiques, et accessibles à d'autres process. De même il est illégal qu'une fonction renvoie des données que les autres fonctions exécutées après n'attendent pas, ou ne sont pas prêtes à recevoir. Et si on régit un format de données, il est de l'ordre de la légalité de l'appliquer à tous les processus voisins qui passent par cet endroit (ou cet objet). Et donc, on passe son temps à régenter, « mettre au propre », clarifier, et augmenter l'efficacité et donc, la densité, c'est à dire le rapport entre énergie nécessaire et intelligence du résultat obtenu.

Car il est clair qu'un logiciel super intelligent mais impossible à comprendre n'est d'aucune utilité, c'est comme confier sa foi en Dieu en attendant qu'il répare un pneu crevé.
Ne riez pas c'est à peu près ce que demandent la plupart des utilisateurs de logiciels (et des clients).

On peut donc discerner deux sens à ce qui est légal. Bien sûr il y a l'indépassable, qui provoque immédiatement une fin intempestive de l'exécution du script comme l'absence de caractères d'échappement, la moindre faute de ponctuation, ou un algorithme qui produit un résultat illogique étant donné qu'il n'est pas prêt à traiter avec les données qu'on lui soumet. Cela c'est l'illégal au sens strict, mais le plus intéressant pour nous c'est l'illégal au sens logique, c'est à dire ce qui entre en conflit avec les procédés auxquels on s'est attachés tout au long de l'écriture, procédés qui sont portés par des protocoles qui sont autant de petites lois à respecter, autant qu'on le peux, mais pas obligatoirement.
Ainsi on peut s'obliger à des standards sur lesquels on retombe souvent afin qu'on sache toujours à quoi s'attendre quand on obtient des données qui proviennent, indifféremment, de la mémoire autant que des traitements.

- la liberté -

Jamais on n'agit contre la loi, puisqu'on la fabrique, (on la trouve belle et on l'aime) et grâce à ce travail on se forge une espace à l'intérieur duquel ce qui est illégal est de moins en moins grand. Au fur et à mesure du développement, qui consiste à améliorer la clarté et la densité du code, on ne fait jamais que de produire un espace de liberté de plus en plus grand, et comme il se doit, qui nécessite une compréhension et une connaissance d'autant plus grandes.

Ceci tient à la théorie de l'émergence, où la somme des composant vaut moins que ce que leur fonctionnement permet d'obtenir, et donc grâce à la rigueur des composants et des lois internes qui font le langage du logiciel (écrit avec le langage de programmation), on ne fait qu'obtenir des possibilités de plus en plus vastes.

De ceci il va de la définition de la Liberté. Qu'est-ce que la Liberté, comment se sentir libre, et produire une société où la liberté va en s'accroissant ?
Si la liberté est sur le plan matériel, la liberté de circuler, qui dépend des moyens de circuler, et qui est interdépendante avec le besoin de circuler, et si demain tout le monde peut circuler autant qu'il veut tel que préconisé par les Droits de l'Homme, ça ne paraîtra plus être une « liberté », mais une chose commune, basique, normale, qui tombe dans le domaine public. Ce ne sera plus qu'un composant au sein de tous les autres processus en cours, qui s'exécuteront en connaissance de la possibilité inextinguible de pouvoir circuler librement. Ça donne des idées ! Ça ouvre plein de possibilités. C'est un peu ça l'état d'esprit des riches, et ils sont prêts à tuer pour conserver cet état d'esprit. Mais cet état d'esprit peut être pratiqué par tout le monde. Et même, la pratique de cet état d'esprit de liberté est un apprentissage spirituel, et du point de vue éthique, la liberté est de bien meilleure qualité quand elle est légitime, et d'ailleurs, c'est une faute de l'exprimer ainsi, puisque la liberté découle du savoir et de la technique (c'est donc automatiquement légitime).
L'usage abusif de la liberté c'est quand on s'autorise des choses qu'on n'a pas les moyens de faire accepter le reste du système. Et par extension, l'effroyable consiste à faire accepter par la force que que rien, dans le logiciel, ne permet de faire même à un stade élémentaire. En informatique ce genre de choses coûte bien plus cher qu'il ne rapporte. (mais pas dans le monde réel, où on s'adresse à des gens crédules qui ne savent pas lire le code, et qui en subissent après les conséquences).

La liberté c'est donc aussi ce qui est produit après le mouvement qui consiste à s'être forgé la possibilité de faire quelque chose. Par exemple, avant même de parler de liberté il est possible de parler du sentiment de liberté, qui autorise à se sentir bien dans sa peau, à mettre la musique fort, et à sortir en chaussons dans la rue, ou à se faire des pâtes à 4 heures du matin... et d'inaugurer des nouveaux protocoles qui sont très prometteurs.
En développement logiciel, il y a une classe de liberté qui est tout en haut de l'échelle, qui est la liberté qu'on s'est donnée sans le faire exprès seulement en raison du fait qu'on a tenu à produire un travail qui soit propre. Et mine de rien cette classe de liberté est la plus importante, puisque les logiciels qui ne peuvent plus se développer alors qu'ils en ont besoin, sont ceux qui n'ont laissé aucune porte de sortie à la complexité, et qui sont obligés de se mal se complexifier, en augmentant la redondance et en faisant baisser la densité du code.

Donc on a donné deux sens à ce mot de Liberté, le strict, qui présente la liberté comme l'accès à une action qui augmente les potentialités de plein d'autres actions, tellement nombreuses que c'est impossible de les énumérer toutes à part en disant que chacune a besoin d'accéder à une fonction externalisée, et que rien ne peut se faire sans elle.
Et il y a le sens logiciel, où la liberté est quelque chose qui s'acquiert par le travail, où les murs qu'on pousse autour de notre conscience, les horizons qu'on élargit, sont le fruit d'une plus grande connaissance, maîtrise, et surtout, le plus important de tout, le fruit d'une très bonne lisibilité des ce qu'on a le Droit de faire. On en a le droit, mais pas la possibilité, mais cette possibilité peut être dégagée grâce au travail.
La liberté spécifiée dans les Droits de l'Homme, c'est celle qui autorise à augmenter la liberté dont je parle ici, «la liberté logicielle ». On a tous le droit de développer ses logiciels ! De les améliorer, et ainsi, de s'offrir une liberté bien plus grande.

Et en programmation, ce droit, on se l'accorde à soi-même, en se frayant un chemin entre les diverses impossibilités, les protocoles, et la rigueur dans la conception, de sorte à ce qu'on ait produit la compétence la moins réductible possible, et qu'on ait su comment et où appliquer cette compétence sur l'encours de la logique qui se construit, dans le temps d'une fraction infinitésimale de seconde.

- l'intelligence incrémentielle -

Déjà quand on est dans l'informatique, on n'est plus dans le matériel (englués entre les coutumes, les principes, le ce qu'en diront les inaptes...) mais dans le monde des processus, de la logique, des fonctions et de la raison. Ce sont les seuls interlocuteurs de notre désir de liberté.

Et ensuite, quand on est concepteur, on passe encore dans une dimension qui a le même rapport que entre le matériel et l'informatique, puisque ce dont on a le plus besoin ne n'est pas d'écrire du code qu'on rajoute, mais de réfléchir en connaissance de cause et de réassembler convenablement, quitte à les réécrire, les diverses fonctions qui sont sur le chemin du curseur de la conscience du logiciel, en raison d'une stratégie.

(entre parenthèse c'est en raison de cela que je n'ai jamais utilisé le « orienté objet » parce que c'est précisément ce qu'il interdit de faire ; on ne peut pas espérer se défaire de la complexité en terme de nombre de choses à savoir si on veut implémenter correctement une fonctionnalité dont on a constaté l'absence.)

Même si c'est vrai que ce n'est pas grave si on a des tâches redondantes au cours d'un processus, qui sont inutile neuf fois sur dix, sur le plan astral on va dire, et finalement, sur le plan de la facilité à comprendre un code, il est possible de démontrer que l'ingéniosité est capable de stocker de l'information alors que ce n'est stipulé nulle part dans l'écriture, mais dans la compréhension de l'écriture.

Ainsi, c'est grâce à l'ingéniosité que le script peut se dérouler de la façon la plus harmonieuse possible, et donc de la façon la plus économique pour le processeur.
J'estime même, en puriste éberlué, que l'exécution du code fait comme un son et que cette note doit être la plus juste possible.

Imaginez maintenant les gens qui se disent dépassés par la chose scientifique, ou qui sont visiblement inaptes et inquiets devant les choses complexes, au point de n'hériter que de frustration là où un démontage en règle aurait pu faire voir en deux secondes la faille dans la logique.

Eh bien il se produit que lorsqu'on est dénué de technique et de savoir faire, lorsque son logiciel est empli de contradictions, de choses qui se font et se défont consécutivement, de même que lorsqu'on découvre un code qui est trop primitif, il faut plus d'énergie pour le comprendre que s'il avait été bien écrit. En réalité les gens qui sont dépassés à cause de leur manque de compétence sont obligés d'utiliser bien plus fortement leur intellect que ceux qui savent parfaitement comment ça marche et qui passent pour intelligents ! Pour comprendre aussi vite qu'ils le voudraient il leur faudrait un QI de dix mille (et un débit d'information hyper puissant).
Cet entraînement ne peut qu'inéluctablement conduire le cerveau à finir par devenir de plus en plus compétent et capable de se frayer un chemin dans l'encours de la logique.

C'est à dire que ce soit en appuyant vers le bas, par la frustration de ne pas comprendre, ou en appuyant vers le haut, par le désir de liberté, on obtient toujours le même résultat voulu par l'Evolution qui consiste à augmenter la Conscience.

C'est ça le chemin de l'Histoire.

Mais bon comme toutes les disciplines à long terme, comme la philosophie ou l'éthique, l'informatique est celle qui produit des résultats le plus rapidement, alors il ne faut pas être pressé, il faut surtout faire bien le peu qu'on sait.

- la raison -

Et donc, on en arrive à la raison des lois, qui de notre point de vue sont des normes sociales sans intérêts et des règlements intérieur non protocolaires sensés produire un vague sentiment d'équité, par exemple en mettant les acteurs d'un même corps professionnel sur le même plan les uns avec les autres, ou tout ce corps avec les autres corps, en jouant sur des choses qui leur sont chères sur un plan psychologique.

Cela dépeint une volonté d'équité qui est si mal exprimée que ça peut faire rire y compris les nouveau-nés dans le domaine de la programmation.
Ce serait comme si pour obtenir les normes désirées avant et après un processus on massacrait tout ce qui permet au processus d'avoir lieu, c'est carrément illégal, ou en tous cas bien au-delà de ce qui est raisonnable, et on peut le dire, extrêmement grossier et primitif.

C'est ça que je pense de la plupart des lois existantes.
En incluant dans le terme de « lois » tout ce qui régit la « normalité » de la vie de cette société.
A chaque fois qu'on veut en ausculter le Pourquoi on se prend une baffe pour toute réponse.
C'est extrêmement indésirable, car même ceux qui légifèrent aujourd'hui n'ont aucun accès au pourquoi des lois anciennes, qu'ils massacrent en étant motivés par des considérations de moindre importance. Et parfois c'est aux politiciens qu'il faut dire « eh, si il y a une loi c'est qu'il y a une raison », « c'est pas parce que tu ne la vois pas qu'elle n'a pas un effet utile ».

Mais tout ce que cela indique, c'est que chaque loi doit posséder un réseau de raisons mises en relation et aboutissant à une conclusion identique pour tous ceux qui connaissent ces raison, et qui s'exprime sous forme de « loi ».
C'est à dire qu'avant les lois il doit y avoir les raisons, et ce sont surtout ces raisons qui doievnt être stockées dans les mémoires, puisque les lois s'obtiennent ensuite par simple déduction de ces raisons. De plus, les raisons étant fluctuantes, l'enjeu dont il est question ici est de rendre la Loi capable de ne pas se trouver périmée, comme c'est le cas aujourd'hui dans sa plus grande partie.

Le seul paradigme qui permet d'accéder à cette vision est le fonctionnalisme. Même si parfois (entre tout le temps et jamais il y a « parfois ») on la raison des choses est plus à confier à la psychologie ou à des motifs très hautement philosophiques, comme l'éthique, à laquelle aucun politicien n'a accès, puisque pour ça il faut avoir l'esprit de celui qui embrasse l'histoire du monde d'une seule pensée (et donc que cette pensée tienne la route sur le long terme).

L'idée du logiciel libre sera un jour appliquée au fait politique, et on dira pour chacune des lois, selon une méthode que nul ne peut médire :

« Lors de la réflexion qui a conduit à la conclusion qui est proposée :
1 - quels sont les processus à l'oeuvre dans cette construction ?
2 - quel est le schéma des interdépendances entre les processus à l'oeuvre, afin de comprendre pourquoi d'autres processus n'ont pas eu besoin d'être appelés ?
3 - quelles sont les améliorations qu'il est légitime d'apporter à ces processus indépendamment de la question-test que nous cherchons à résoudre ?
4 - le résultat obtenu est-il conforme à ce à quoi on s'attend pour la question-test, et si ce n'est pas le cas, qui est dans l'erreur et pourquoi ? »

Je n'essaie pas de dire qu'il est possible de résoudre un problème à l'aveugle en se fiant à la fiabilité des processus qui sont mis en chaîne afin d'obtenir une réponse, car précisément c'est seulement si un résultat est juste qu'on juge que le procédé est bon, et qu'on peut ensuite l'appliquer ailleurs sans trop se faire de soucis, à ceci près qu'il faut toujours être vigilant.

Et finalement toutes les actions commises par l'homme sont possibles à démonter par rétro-inginérie, afin qu'on puisse les ausculter et intervenir, non pas sur les fonctions mais en priorité sur l'ordre dans lequel elles sont appelées, afin de voir comment elles agissent l'une sur l'autre, afin de produire l'effet d'intelligence.

Ce que promet un monde où la raison d'agir est possible à ausculter et à améliorer est à l'opposé des actions commandées aveuglément par des processus standards (ce qui d'ailleurs aujourd'hui est la règle), c'est l'assurance ou du moins la confiance en l'intelligence des lois qui seront érigées.
Puisque comme on l'a vu, aucune loi n'apparaît du néant, les lois ne sont que la formulation officielle et irréductible de ce qui a été observé comme convenable au sein d'un Système (qu'il soit informatique ou social).

Seul celui qui a les clef des processus à l'oeuvre dans le phénomène de la Logique (universelle) est le plus à même de dénoncer ce qui est frauduleux, dans la mesure où, précisément, il est parfaitement capable de le réparer.

Et c'est pourquoi un jour la politique sera comme les logiciels libres, et en fait toute la société humaine sera un logiciel libre, l'ensemble des processus qui « font système » seront sous forme de code possible à lire et à améliorer. Ce biais deviendra le plus puissant levier d'action de l'intelligence collective.

Et alors, appartiendront à un passé préhistorique quoi qu'assez navrant l'époque où les gens faisaient des lois en se bombant d'une supériorité intellectuelle qui leur permettait de ne pas avoir à s'expliquer sur leurs raisons, sur le fonctionnement de leur propre logique interne, et à devoir justifier l'injustifiable uniquement dans le but de sauver son honneur et au détriment de la vérité, qui leur semblait n'avoir aucun poids.

8119