Qu’est-ce que ça fait d’être mon propre étudiant, avec Python

Mon éditorial

Je pense à deux choses. Enfin, oui, évidemment, je pense à plus que juste deux choses, mais c’est un tour de phrase qui est censé indiquer une pluralité dans la ligne de mon discours. Je pense des nombres et je pense en termes de structure logique pour un article ou un livre. D’une part, je continue de me demander comment je pourrais formuler des hypothèses, pour ma propre recherche à propos d’énergies renouvelables, suivant la logique mathématique de Thomas Bayes. D’autre part, j’ai l’impression que le temps est venu de traduire la recherche que j’ai effectuée durant les 4 – 5 dernières semaines en une forme plus canonique qu’un blog : un article ou bien l’esquisse d’un livre. En fait, quand j’y pense, l’un se joint à l’autre et en plus, il y a un troisième fil de pensée qui lève sa tête : la traduction de ces régressions linéaires dont j’ai déjà fait autant en des hypothèses Bayésiennes. Ah bon, y’en a un quatrième, aussi ? C’était évident : mon quatrième fil de pensée est celui d’un prof. Quand je fais de la recherche et quand je travaille sur la présentation de cette recherche de façon à la rendre intelligible, je peux en profiter pour donner un cours. Un cours de quoi, vous demanderez ? Eh bien, c’est un cours de ce que je suis en train de faire. Quand je réussis à expliquer la méthode que j’applique à un problème particulier, et quand cette explication est suffisamment simple et claire pour être comprise par mes étudiants, c’est comme si j’avais écrit un chapitre de manuel de sciences sociales.

Là, il y a encore un petit détail : pour être un bon prof, il est utile de se placer dans la situation d’un étudiant, donc de quelqu’un qui essaie d’absorber des connaissances complètement nouvelles et, avec de la chance, de développer des compétences personnelles sur cette base. Comment puis-je être un étudiant et un prof en même temps ? C’est relativement simple. Premièrement, il faut d’être déjà d’un certain âge qui est une classe spécifique dans le cadre plus large de l’âge certain et l’âge certain, pour moi, ça se compte à partir du 9 mai 1968. Deuxièmement, il faut avoir une progéniture douée, qui, dans mon cas, est mon fils qui commence sa troisième année de licence en informatique. Pour moi, être étudiant, ça veut dire apprendre Python. Pour les complètement non-initiés, Python est une langue de programmation, réputée pour être particulièrement utile dans l’analyse des données et dans la programmation d’intelligence artificielle. Ma propre intelligence, elle commence à prendre un coup de vieux, donc il est logique que j’essaie de m’en faire une artificielle. J’ai une dent en composite céramique, je peux aussi bien avoir une prothèse d’intelligence en Python. Pour les initiés, premièrement, j’implore votre compréhension pour mes tourmentes de néophyte, et deuxièmement je spécifie que lesdites tourmentes surviennent en contact avec Python 3.6.1.

Bon, j’essaye d’être logique. L’hypothèse générale que j’avais déjà avancé dans mon dernier article et que j’ai bien l’intention de maintenir est que les changements technologiques possibles à observer dans l’économie mondiale surviennent comme un processus d’adaptation intelligente en vue de maximiser l’absorption d’énergie par l’espèce humaine. L’adaptation intelligente veut dire un processus où des générations consécutives d’organismes sont produites et chaque génération est conçue par une sélection entre des organismes mâles et des organismes femelles. Cette sélection a lieu suivant une fonction de préférence, qui, à son tour, crée des hiérarchies sociales parmi les mâles et les femelles. Quel contexte que je prenne pour cette hypothèse générale, énergies renouvelables ou Ferraris stylisés en vieilles Citroën, ça se résume à une séquence des choix. Mes choix, je peux les appréhender de trois façons différentes : déterministe, probabiliste façon De Moivre – Laplace, ou bien probabiliste façon Bayésienne.

Un choix déterministe est celui où le fait de choisir une option donnée résulte toujours et inévitablement en une conséquence donnée. Le choix est alors la cause et ses conséquences sont l’effet. Si je pythonne ça, façon néophyte, ça donne plus ou moins :

>>> choix_déterministe=[‘option A’, ‘option B’, ‘option C’]

>>> conséquences_déterministes=[‘effet 1’, ‘effet 2’, ‘effet 3’]

>>> if choix_déterministe [0]:

            conséquences_déterministes [0]

            if not choix_déterministe [0]:

                       conséquences_déterministes [1] or conséquences_déterministes [2]

Vous pouvez remarquer que j’ai été bien paresseux, là : j’ai réduit un choix multiple entre trois options A, B, C à une dichotomie aristotélicienne de forme « A ou bien non-A ». Un mot de clarification s’impose à propos de la notation. Dans cette version de Python que j’utilise, le premier argument d’un string (je sais, c’est rigolo, mais si vous avez l’intention de rire chaque fois que je mentionne un string, ce n’est pas bientôt que vous allez arrêter, avec Python) c’est l’argument [0], le second c’est [1] et ainsi de suite.

Si je veux développer mon choix déterministe bien comme il faut, sans esquives aristotéliciennes, ça aurait l’air comme ci-dessous :

>>> choix_déterministe=[‘option A’, ‘option B’, ‘option C’]

>>> conséquences_déterministes=[‘effet 1’, ‘effet 2’, ‘effet 3’]

>>> if choix_déterministe [0]:

            conséquences_déterministes [0]

            if not choix_déterministe [0]:

                       if choix_déterministe [1]:

                                   conséquences_déterministes [1]

                                   if not choix_déterministe [1]:

                                               conséquences_déterministes [2]

Il faut bien que vous sachiez que ces séquences de commandes en Python 3.6.1 que je place ici sont celles que le compilateur a accepté comme valides, c’est-à-dire après les avoir validées avec un « Enter » je n’ai pas eu un de ces messages irritants genre « Invalid syntax ». En revanche, je n’en sais que dalle comment ces séquences vont travailler dans un algorithme sérieux. J’y vois une métaphore intéressante, par ailleurs. Nos choix peuvent être évalués selon la façon dont ils se présentent aux autres – c’est-à-dire les gens se demandent si nos choix sont élégants – ou bien on peut se demander de quelle façon ces choix peuvent s’insérer dans la vie réelle.

Le choix déterministe est bien primitif comme concept scientifique, mais il est bon de se souvenir que c’est précisément comme ça que nous pensons. Dans la grande majorité des cas, nous décidons tout en étant convaincus que notre choix va apporter des conséquences bien déterminées. La probabilité c’est quelque chose dont nous prenons connaissance après fait. Si je retourne donc au vieux concept du déterminisme technologique façon Karl Marx, la façon la plus élémentaire de le représenter en Python serait :

>>> choix_technologique=[‘technologie A’, ‘technologie B’, ‘technologie C’]

>>> conséquences_sociales=[‘structure sociale X1’, ‘structure sociale X2’, ‘structure sociale X3’]

>>> if choix_technologique [0]:

            conséquences_sociales [0]

            if not choix_technologique [0]:

                       if choix_technologique [1]:

                                   conséquences_sociales [1]

                                   if not choix_technologique [1]:

                                               conséquences_sociales [2]

#Test

>>> choix_technologique [2]

#produit >>> ‘technologie C’

Encore une fois, ce schéma représente plutôt la façon dont nous pensons que la façon dont les choses marchent.  Si je veux représenter les évènements comme ils se passent, je peux, par exemple, imaginer deux ensembles : un ensemble d’occurrences et un ensemble des probabilités. Ensuite, je les associe avec une règle simple « Si l’évènement A survient, l’évènement B va suivre avec une probabilité de 10%, mais à part ça, on ne sait pas trop ». En Python, ça ferait :

>>> occurences=[‘technologie A amène la structure sociale X1’, ‘structure sociale X1 favorise technologie A’, ‘technologie A amène structure sociale X2’, ‘technologie A amène structure sociale X3’]

>>> probabilités=[‘0.1’, ‘0.2’, ‘0.3’, ‘0.4’, ‘0.5’]

>>> if occurences [1]:

        probabilités [0]

        if not occurences [1]:

                probabilités [1] or probabilités [2] or probabilités [3] or probabilités [4]

C’est bien marrant d’être mon propre étudiant. Je sais déjà que si un étudiant doit comprendre quoi que ce soit de mes classes, il doit avoir ses propres structures logiques pour représenter ce que je lui dis, un peu comme son propre Python. Ensuite, il est important que cette structure logique qui nous sert à comprendre la réalité soit fonctionnelle, c’est-à-dire qu’elle fasse quelque chose. Des associations insuffisamment ancrées ne marcheront pas. Je l’illustre avec Python. J’imagine l’association d’une paire de personnes, associée avec une paire des technologies. Chacune des deux personnes a des préférences, exprimées comme des nombres des points assignés à chaque technologie. En Python, ça se présente comme ceci :

>>> préfèrences={‘Personne A’: {‘technologie 1’: 4, ‘technologie 2’: 3}, ‘Personne B’: {‘technologie 1’: 10, ‘technologie 2’: 12}}

Mon compilateur Python a avalé cette expression sans protester. Côté définition, c’est correct. Maintenant, je fais un petit test : j’écris ‘Personne A’ dans une ligne de compilateur. Il me rend le même, c’est-à-dire l’expression ‘Personne A’. J’écris ‘Personne A’ ‘technologie 1’ et j’obtiens ‘Personne Atechnologie 1’ de la part de mon compilateur. Réaction nihiliste, mais compréhensible. Si je n’établis pas une fonction qui transforme les personnes ou bien les technologies en des scores numériques, l’association d’idées en elle-même n’a pas de valeur.

Toute cette tirade a pour but d’expliquer que l’approche déterministe d’un côté et la probabiliste de l’autre ne s’excluent pas mutuellement. La réalité en tant que telle est une fonction qui transforme un ensemble de phénomènes en un autre ensemble de phénomènes. Nous, les humains, on perçoit comme des fragments de cette fonction et de premier abord, nous faisons des associations du type déterministe. Chaque déterminisme est en fait une espérance, plus ou moins élaborée, à propos de la façon dont marche la réalité. Avec de la chance, on gagne la possibilité d’observer ladite réalité et de tracer des probabilités associées à nos espérances. Lorsque j’essaie de comprendre pourquoi, aux alentours de 2007 – 2008 le taux de croissance du marché mondial d’énergies renouvelables avait tout à coup dépassé le taux de croissance de consommation totale d’énergie, c’est comme si j’écrivais plusieurs expressions alternatives en Python et ensuite, je teste en deux pas. Le premier pas, c’est la logique. Si, après avoir validé mon expression avec un « Enter », mon compilateur Python attend patiemment mon prochain pas, sans s’écrier « Erreur ! », cela veut dire que j’ai réussi le premier test. Le deuxième pas, c’est de mettre cette expression acceptable dans un contexte, comme un algorithme, ou même une simple commande tapée dans le compilateur et regarder si, premièrement, il y a quelle réaction que ce soit et, deuxièmement, si cette réaction semble utile.