Nietzsche, rien que son nom effraie le penseur en herbe et philologue mal averti. Il faut reconnaître que cet auteur et son oeuvre sont d'un abord souvent abrupt. Et le Zarathoustra est surement son écrit le plus emblématique dans ce domaine : Recueil de maximes et aphorismes, que Nietzsche par jeu (ironie ?) attribue au fondateur du premier monothéisme humain, le zoroastrime, précurseur des 3 religions du livre (judaisme, christianisme et islam).

Et pourtant, la lueur surgit parfois de la nuit, et je souhaite rapporter ici un passage qui se rapporte à la "Volonté", rubrique de mon blog, mais aussi principe fondateur de la pensée nietzschéenne : ce vouloir, cette volonté de puissance qui doit amener l'Homme à se dépasser et à engendrer le Surhumain.

Avant de livrer cette citation, je tiens à rappeler que je suis moi même monothéiste, donc non athée, et par conséquent pas toujours en accord avec Nietzsche ;-)

Extrait du chapitre "Sur les îles bienheureuses"

"Tous mes sentiments souffrent en moi et sont prisonniers: mais mon vouloir arrive toujours libérateur et messager de joie. "Vouloir" affranchit: c'est là la vraie doctrine de la volonté et de la liberté - c'est ainsi que vous l'enseigne Zarathoustra. Ne plus vouloir, et ne plus évaluer, et ne plus créer! ô que cette grande lassitude reste toujours loin de moi. Dans la recherche de la connaissance, ce n'est encore que la joie de la volonté, la joie d'engendrer et de devenir que je sens en moi; et s'il y a de l'innocence dans ma connaissance, c'est parce qu'il y a en elle de la volonté d'engendrer."

Nous sommes tous las de traquer les bugs dans nos lignes de code en programmation objet : PHP, Actionscript, Javascript, Java, etc ... Mais tel est le dur lot de la programmation par Objets. Pourtant, des méthodes alternatives de codage existent, à portée de main, plus efficaces et moins sensibles aux erreurs syntaxiques. Mais elles ne sont pas mises en oeuvre encore en 2006 : Pourquoi ? Vraisemblablement parce que la grande majorité des développeurs est aujourd'hui piégée dans l'univers impitoyable des machines de Turing :)

Pourtant il existe de nombreuses autres formes de logiques qui peuvent présider au fonctionnement d'automates électroniques et à la syntaxe de langages de programmation, et je vousdrait introduire ici la logique des types qui est à la base d'une forme de programmation extrêmement efficace mais assez délaissée : La programmation fonctionnelle.

La Logique mathématique était jusqu'à une période récente constituée de 4 piliers :=> la théorie des Ensembles, collections d'objets appelés Eléments, formalisée par Georg Cantor au XIX° siècle.=> la théorie des Modèles, qui formalise la notion de Vérité en mathématiques, en posant notamment qu'une Théorie est vraie si on peut définir un Univers dans lequel elle est vraie. Elle a été formalisée par Alfred Tarski au début du XX° siècle.=> La théorie de la Démonstration ou de la Preuve, fondée par David Hilbert au début du XX° siècle et finalement invalidée par Kurt Gödel en 1931 (Théorème d'incomplétude).=> la théorie de la Calculabilité ou théorie de la Récursion, initiée par Alan Turing au milieu du XX° siècle (2nde Guerre Mondiale), qui se consacre à la délimitation des catégories de fonctions calculables et non calculables. Cette branche de la logique mathématique connait des développements considérables avec le développement de l'informatique, et recourt au formalisme du lambda calcul. C'est elle qui a permis la création de la plupart des langages de programmation actuels, dits langages impératifs.

Mais depuis quelques années, avec le bond fulgurant de l'informatique, un cinquième grand axe semble se dessiner avec les travaux sur la théorie des Types. Dans cette théorie, les expressions mathématiques sont construites à l'aide de fonctions, où chaque fonction a un type qui décrit le type de ses arguments et le type de la valeur retournée. Les expressions sont bien formées lorsque les fonctions sont bien appliquées à des fonctions ayant le bon type. Ce concept est à la base de nombreux langages de programmation, et surtout les langages fonctionnels typés.

La programmation fonctionnelle est à opposer à la programmation impérative :=> En programmation impérative, on travaille avec une mémoire centrale et des instructions qui modifient son état grâce à des assignations successives. On peut représenter un programme par une machine d'états qui représente les états successifs de la mémoire. Les assignations arbitraires de variables, qui sont plus la règle que l'exception, compliquent grandement la compréhension des programmes et sont la source de nombreuses difficultés et de bogues : en effet, si on oublie de mettre à jour certaines données partagées, si l'ordre chronologique des assignations par les différentes parties du logiciel est incorrect, ou si une zone de mémoire a été désallouée au mauvais moment, le programme se retrouve dans un état imprévu.=> La programmation fonctionnelle s'affranchit de façon radicale de toute opération d'assignation de variables, et de ce fait conduit à des programmes plus robustes et fiables.On n'y utilise pas de machine d'états pour décrire un programme, mais un emboîtement de fonctions que l'on peut voir comme des « boîtes noires » que l'on peut imbriquer les unes dans les autres. Un avantage important des fonctions sans effet de bord est la facilité que l'on a à les tester unitairement. Par ailleurs, l'usage généralisé d'une gestion de mémoire automatique par l'intermédiaire d'un "garbage collector" simplifie la tâche du programmeur. Les langages fonctionnels, afin de s'affranchir de la nécessité de stocker des données temporaires dans des tableaux, font largement appel à la récursivité, ce qui fait qu'il est ainsi généralement possible de réaliser facilement des opérations comme la concaténation de liste, ou l'application d'une fonction à une liste, en une seule ligne de code !

Voilà un exemple flagrant de sous-développement de l'informatique actuelle, et de sous-utilisation des logiques alternatives : Il existe aujourd'hui très peu de langages véritablement fonctionnels (par comparaison avec les langages dits Objets), et les LISP, SCHEME, HASKELL et autres CAML ne passionnent qu'une poignée de théoriciens. A noter toutefois que dans le domaine du développement web, le langage balisé XSLT est de type majoritairement fonctionnel.

Aujourd'hui, le développement des langages fonctionnels est limité par le déficit en outils et en bibliothèques de qualité commerciale et surtout par le manque de programmeurs formés. En outre, les langages fonctionnels souffrent encore d'une réputation de lenteur complètement injustifiée.

Pour aller plus loin :

  • http://www.haskell.org
  • http://www.erlang.org

A priori, cette question peut être comprise de façon très triviale, et c'est bien souvent qu'on qualifie quelqu'un de "calculateur". Mais prise au pied de la lettre, la question recouvre un véritable intérêt !

Je me souviens avoir lu dans un S&V de 2002 qu'un mathématicien français, Jean-Louis Krivine, développait une théorie selon laquelle les couches fonctionnelles logiques de base du cerveau, juste au dessus de l'architecture physique des neurones, parleraient un langage proche ou analogue au lambda-calcul. Ce dernier est un langage logique inventé en 1932, donc avant l'apparition des ordinateurs, par le mathématicien Alonzo Church. Il permet trois opérations grammaticales élémentaires, dont les programmeurs ont découvert ultérieurement qu'elles étaient à la base de toutes les opérations commandées à un ordinateur : => préciser l'adresse des instructions, => préciser l'adresse des données,=> et exécuter.

L'apport de Jean-Louis Krivine est d'avoir montré que ces mêmes opérations se retrouveraient à la base de tous les raisonnements et structures mathématiques. Celles-ci seraient des superpositions de couches de plus en plus complexes, au fur et à mesure que le mathématicien s'élève dans l'abstraction, pouvant toujours être ramenées aux règles de programmation du lambda-calcul.

Dans ce cadre, le mathématicien a par exemple montré que la démonstration du théorème d'incomplétude de Gödel pouvait être ramenée à un simple programme d'ordinateur exprimé en lambda-calcul. Un programme qui "ressemblerait au programme réparateur de fichiers" mis en ouvre par un système d'exploitation d'un ordinateur en cas d'arrêt inopiné du système.

Ce programme lui-même, selon une hypothèse de Krivine, pourrait être semblable à ce qui se passe dans le cerveau quand, durant le sommeil, tous les programmes de veille sont éteints pour permettre la restauration des contenus cognitifs en vue d'affronter les aléas de la journée suivante, opérations de maintenance dont les rêves pourraient être de vagues échos.

Est-ce la réduction de l'Homme à un vulgaire PC ? Pour la boutade oui, mais en réalité, ce sont des horizons immenses qui s'ouvrent. A suivre !

P.S. : A noter que le lambda-calcul est un élément cardinal dans la théorie de la calculabilité, initiée par Alan Turing, le célèbre casseur du code Nazi Enigma, à l'aide des machines qui ont porté son nom ;-)

 

Nous ne prenons pas vraiment la mesure de la place de la bonne vieille logique classique dans nos sociétés modernes : Aujourd'hui, c'est tout l'univers informatique binaire qui y a pris racine ! Etrange que l'on ait appelé "révolution numérique" la simple universalisation et production en masse de concepts vieux de plusieurs millénaires :-)

Pourtant, cette logique binaire n'est qu'une parcelle de l'une des nombreuses disciplines de la Logique, en tant que branche de la Philosophie et des Mathématiques. Or il existe en réalité de très nombreuses logiques alternatives : Intuitionniste, multivalente, modales, linéaire, floue ... Imaginer quels types d'ordinateurs pourraient mettre en oeuvre ces nouvelles logiques donne le vertige !

Et pourtant, ce n'est le moindre enjeu pour l'Homme dans les années qui viennent que de s'arracher des carcans dichotomiques et manichéens dans lequels l'informatisation ne fait que nous enfermer chaque jour un peu plus.

Car la logique est une base fondatrice de pans entiers de notre Etre et de notre Civilisation : Voilà pourquoi dans cette nouvelle rubrique de mon blog je l'associé d'une part au concept de Volonté individuelle, et d'autre part à la notion plus collective de Stratégie.

Et in fine, elle doit nous permettre de flirter avec les questionnements les plus ultimes, et à ce titre souhaite me référer à l'incroyable Kurt Gödel, qui à l'âge de 70 ans formula une preuve ontologique de l'existence de Dieu, si abstraite qu'encore aujourd'hui elle est approchée avec une extrême précaution par Philosophes et Mathématiciens de tous horizons. Je vous laisse la savourer avec une tisane et 2 aspros ;-) :

Axiome 1. (Dichotomie) Une propriété est vraie si et seulement si sa négation est fausse.Axiome 2. (Fermeture) Une propriété est vraie si elle contient nécessairement une propriété vraie.Théorème 1. Une propriété vraie est logiquement consistante (c'est-à-dire qu'il est possible de trouver au moins un exemple)Définition. Quelque chose est semblable à Dieu si et seulement si il contient toutes les propriétés vraies.Axiome 3. Être semblable à Dieu est une propriété vraie.Axiome 4. Être une propriété vraie est (logique, donc) nécessaire.Définition. Une propriété P est l'essence de x si et seulement si x possède P et Pest nécessairement minimale.Théorème 2. Si x est semblable à Dieu, alors être semblable à Dieu est l'essence de x.Définition. NE(x) : x existe nécessairement s'il a une propriété essentielle.Axiome 5. Être NE est être semblable à Dieu.Théorème 3. Il existe nécessairement x tel que x est semblable à Dieu.