MODULE No 05

Nom : Épistémologie 001

But : Montrer quelques approches épistémologiques et surtout montrer que selon certains physiciens un concept est connu seulement s’il est défini par une mesure.

Antécédents : Aucun

Corps :

Popper et le falsificationnisme. Selon cette école de pensée les scientifiques procèdent par essais et erreurs. Note procéder par essais et erreurs a très peu d’adeptes en génie logiciel. Pratiquement seulement les adeptes de la programmation extrême. Fin de la note
On peut déduire la fausseté d’un énoncé universel en partant d’énoncés singuliers. Exemple classique et galvaudé : tous les corbeaux sont noirs (énoncé universel), je vois un corbeau blanc donc… donc l’énoncé universel n’est pas vrai. Une hypothèse doit être falsifiable. Pour être falsifiable une théorie doit être exprimée dans les termes plus clairs possibles. On n’est donc jamais sûr qu’une théorie soit correcte. Problème : est-ce vrai qu’une fois qu’on falsifie une théorie on la laisse tomber ? Pas nécessairement.
L’histoire de la découverte de Neptune est un cas qui montre qu’une fois falsifiée un théorie n’est pas nécessairement mise de côté. Au XIXe siècle on s’aperçoit que l’orbite de Saturne ne suit pas la loi gravitationnelle de Newton. Que faire ? Abandonner la théorie newtonienne ? Pas nécessairement. On la garde et on fait l’hypothèse qu’il existe une planète, plus éloignée du soleil que Saturne, qui perturbe le mouvement de Saturne. Et en effet on trouvera beaucoup plus tard cette planète que l’on appellera Neptune.
Un autre exemple célèbre est celui employé par Popper pour montrer que la psychanalyse n’est pas une science. Un homme sur un pont voit un enfant qui se noie dans la rivière. S’il se jette pour sauver l’enfant un psychanalyste pourrait dire que pour montrer sa « valeur » il fait le choix « courageux ». S’il ne se jette pas il pourrait dire qu’il n’a pas fait un acte courageux parce qu’il n’avait pas besoin de se jeter pour montrer sa « valeur ». N’importe quel soit le choix, la psychanalyse a une réponse ce qui veut dire qu’elle ne permet pas de prévoir les événements comme doit pouvoir le faire une science (selon Popper).

Lakatos et les programmes de recherche. La signification des concepts dépend de la théorie qui les englobe (tout en conservant le même nom un concept fait référence à des entités différentes). Noyau dur : partie de la théorie qui résiste à la falsification. Elle résiste jusqu’à ce qu’un nouveau programme de recherche ne puisse réintégrer les faits que la vielle théorie n’explique plus. On peut changer ce qui entoure le noyau dur pour adapter la théorie aux nouvelles données : sa ceinture de protection. L’histoire de la découverte de Neptune montre l’importance du noyau dur.

Kuhn et les révolutions scientifiques. Science normale, crise, révolution : voilà comment la science progresse. La révolution provoque un changement de paradigme (mécanique quantique qui « révolutionne » la mécanique classique). La nouvelle théorie est incommensurable avec l’ancienne : on a changé de conceptualisation et l’on ne compare pas les concepts du nouveau paradigme avec ceux de l’anciens. Dans la science normale on accepte les principes, on n’essaye pas à tout moment de mettre en crise la théorie. Le passage de la théorie newtonienne à la théorie de la relativité est un exemple de révolution qui, aujourd’hui, s’est transformée en science normale. Note : est-ce que le passage au paradigme objet a été une révolution ? Fin de la note.

Feyerabend et « tout est bon ». Impossible de définir une méthodologie qui explique le fonctionnement de la science. Ce qui ne veut pas dire qu’il n’y a pas de science. On peut donc développer selon un approche GL « lourd », selon les principes de la programmation agile ou de la programmation extrême. L’important c’est… de bien faire et respecter les objectifs.

Quelques lectures :

Karl R. Popper, The logic of Scientific Discovery, Harper, 1968.

Paul Feyerabend, Against Method, Vers0, 1975

Thomas S. Kuhn, The Structure of Scientific Revolutions, University of Chicago press, 1970

L’opérationnalisme.

Percy W. Bridgman (1882-1961) prix Nobel pour la physique en 1946 pour ses études sur les propriétés des corps assujettis à de très hautes pressions peut être considéré comme le fondateur de l’approche opérationnaliste à la science. Qu’on soit d’accord ou non avec ses interprétations de la physique, sa vision « extrémiste » est utile pour mieux saisir les problèmes associés aux mesures de la qualité. En simplifiant pour les besoins de notre cause, pour Bridgman afin qu’un concept puisse être dit scientifique, il faut qu’on puisse définir des opérations physiques et mentales pour le cerner. Opérations qui doivent être les mêmes pour tous les physiciens si on veut pouvoir comparer.

Par exemple l’introduction du concept d’espace/temps et de la relativité naît quand Einstein se demande ce que veut dire : « deux événements sont contemporains ». Le concept de contemporanéité, quand on l’analyse en détail, est beaucoup plus complexe que celui de la vie quotidienne. Selon Bridgman le coup de génie de Einstein consiste à se demander comment mesurer la contemporanéité. Einstein pense à une méthode de mesure et la méthode le porte très loin (conceptuellement).

Prenons un exemple presque banal en GL : le nombre de lignes de code d’un module. Quoi de plus clair et immédiat ! et pourtant… Et pourtant si on veut obtenir des valeurs comparables il faut considérer les types d’énoncé (exécutables, déclarations, directives au compilateur, commentaires), comment ils sont produits (programmés, générés avec des générateurs de code, copiés, modifiés, effacés), leur origine (nouveau travail, adaptés d’une version précédente, bibliothèques d’un autre vendeur non modifiées, d’autres composants logiciel)… Comment établir une règle (des opérations) de mesure ? Il faudra avant tout classifier les énoncés (l’autre possibilité qui consiste à laisser indifférenciés les types d’énoncés est sans doute faible : qu’il suffisent de considérer la différence entre compter les commentaires et ne pas les compter). Une fois faite la classification il faut voir si la mesure doit nous permettre de prévoir « quelque chose » qui peut être important. Par exemple : est-ce que le nombre de ligne de code nous permet de prévoir le nombre d’erreurs présentes ? Dit d’une autre manière : existe-il une loi qui relie le nombre d’erreurs présentes dans une méthode et sa longueur ? Imaginons qu’une analyse expérimentale nous permette de trouver une loi comme la suivante :

Em = K *L

Où Em  est le nombre d’erreur (moyen), L la longueur de la méthode et K une constante.

Analyse expérimentale de quel genre ? Sur combien de projet, d’entreprise ou de domaines ? De quel genre de paramètres K dépend-il ? Il y a fort à parier qu’elle n’est pas une constante universelle comme la constante de Planck !

Cette « loi » nous oblige au moins à faire quelque chose de conceptuellement important : mieux définir les lignes de code et trouver les (quelques) paramètres qui influencent K.

Autre exemple.

Prenons un concept qui est sur la langue de tout informaticien, celui de cohésion, c’est-à-dire la force qui relie des éléments entre eux (par exemple la force qui relie entre eux les énoncés d’une fonction). Comment mesurer la cohésion pour la rendre « scientifique » ? Peut-on la mesurer directement ou faut-il des mesures d’autres attributs dont la combinaison nous donne la cohésion ? Mais la cohésion n’est pas importante en soi, elle est importante parce que plus la cohésion est élevée et plus… plus il est facile de modifier l’élément (au moins c’est cela que l’on dit). Est-ce qu’une classe doit avoir une grande cohésion ? Certainement. Mais si la cohésion est grande n’est-il pas plus difficile de modifier une méthodes sans avoir un impact sur les autres ? Faut-il parler de cohésion des méthodes et de cohésion des classes et des cadres et des sous-systèmes et des systèmes ? Sans doute.

Alors est-ce qu’il faudrait être d’accord avec Bridgman et dire que les opérations nécessaires pour mesurer sont la définition même du concept que l’on veut mesurer ?

Conséquents : Avoir une petite idée de ce qu’est l’opérationnalisme et de ce qu’il pourrait être en GL.

Notes 01 :

1) Il s’agit bien sûr d’un module extrêmement pauvre !

2) Nous ne sommes pas nécessairement d’accord avec l’opérationnalisme.