Réaction au commentaire sur ma réaction au billet d'Uncle Bob sur la difficulté d'estimation.
Dans Sur la difficulté d'estimation, D. de Vito indiquait dans un commentaire qu'Uncle Bob, dans cet article, semble parler d'un problème d'impedance mismatch.
Même si cela est sans doute le cas dans d'autres problèmes, Uncle Bob, sur l'exemple qu'il donne, déclare que l'humain ne suit pas une procédure ("We don’t follow procedures.") principalement parce qu'il ne la connaît pas.
Je suis d'accord sur le fait que la plupart du temps l'humain ne connaît pas la procédure qu'il applique, ce qui ne veut pas dire qu'il n'en suit pas une.
Sur l'exemple donné par Uncle Bob, l'humain trouve facile l'exercice de répartition de mots sur des lignes. En effet, c'est facile pour un humain. Mais pourquoi est-ce si facile ? et pourquoi alors est-il plus difficile d'en déduire un algorithme pour la machine ?
Le problème en question contient notamment deux étapes importantes: d'une part trouver les séparateurs de mots (espaces), d'autre part ajouter un mot à une ligne s'il y rentre (ligne de moins de N caractères), ou sinon le mettre à la ligne suivante. Cette deuxième étape implique donc un test sur la longueur du mot à placer.
Premièrement, les mots à placer sont présentés de manière otpimale pour un humain, en lettres et séparés par des espaces:
Four score and seven years ago our fathers brought forth upon this continent a new nation, conceived in liberty and dedicated to the proposition that all men are created equal…
Or, depuis qu'il a appris à lire, l'humain a en quelque sorte, par force entraînement, optimisé l'opération de repérage des séparateurs et des mots. La machine, au contraire, part de zéro, il faut tout lui dire. Pour faire apparaître le traitement que nous faisons inconsciemment, enlevons l'avantage dû à la forme de l'entrée, en représentant le texte sous forme de codes ASCII:
466f75722073636f726520616e6420736576656e2079656172732061676f206f7572
20666174686572732062726f7567687420666f7274682075706f6e20746869732063
6f6e74696e656e742061206e6577206e6174696f6e2c20636f6e6365697665642069
6e206c69626572747920616e642064656469636174656420746f207468652070726f
706f736974696f6e207468617420616c6c206d656e20617265206372656174656420
657175616ce280a6
L'humain fait déjà moins le malin pour séparer les mots, non ? A ce point, il sort son papier et son crayon pour noter les séparateurs:
466f7572_73636f7265_616e64_736576656e_7965617273_61676f_6f7572_666174
68657273_62726f75676874_666f727468_75706f6e_74686973_636f6e74696e656e
74_61_6e6577_6e6174696f6e2c_636f6e636569766564_696e_6c696265727479_61
6e64_646564696361746564_746f_746865_70726f706f736974696f6e_74686174_
616c6c_6d656e_617265_63726561746564_657175616ce280a6
Ensuite, il reste le problème du test de la longueur. A force de lire, l'humain a une intuition de la longueur des mots, sans forcément connaître leur longueur exacte. C'est le flou qu'Uncle Bob décrit quand il déclare que l'humain va essayer un mot et corriger s'il est trop long. En fait, pour chaque mot, l'humain va décider si le mot rentre de façon évidente dans la place restante, est de façon évidente trop grand pour la place restante ou bien s'il ne sait pas. Lorsque cette dernière possibilité se présente, l'humain se résoud à compter.
Avec la conversion ci-dessus, l'humain, habitué à évaluer des distances (pour se déplacer, pour saisir ou poser des objets, ...), va finir par s'habituer à la longueur des caractères. Il suffirait d'utiliser des tailles de caractères différentes pour empêcher cette adaptation et permettre à l'humain de se retrouver sans avantage par rapport à la machine.
A ce moment-là, l'humain peut découvrir la procédure qu'il utilise inconsciemment: découper la phrase en mots selon les blancs et compter la taille des mots pour les placer sur la ligne courante ou la suivante. Il ne reste plus qu'à implémenter cette procédure.
Dans mon approche, j'utilisais une fonction que j'avais de côté pour découper le texte en une liste de mots. De mon point de vue, la machine partait avec un "handicap" moins grand.
L'impedance mismatch n'est donc pas, selon moi, sur ce cas, dans une différence des opérations possibles entre l'humain et la machine, mais dans le fait que les conditions de départ sont différentes.