Il est facile de raisonner sur un terme spécifique à une culture. C'est pourquoi il est si difficile de trouver des exemples concrets. C'est un terme qui est ancré chez les personnes qui doivent faire le raisonnement.
"Facile à raisonner à propos de" est en fait une expression très auto-descriptive. Si on regarde le code, et veut raisonner ce qu'il fait, c'est facile =)
Ok, le décomposer. Si vous regardez du code, vous voulez généralement qu'il fasse quelque chose. Vous voulez vous assurer qu'il fait ce que vous pensez qu'il devrait faire. Vous développez donc des théories sur ce que le code devrait faire, puis vous le raisonnez pour tenter de démontrer pourquoi le code fonctionne réellement. Vous essayez de penser le code comme un humain (plutôt que comme un ordinateur) et de rationaliser les arguments sur ce que le code peut faire.
Le pire cas pour "facile à raisonner" est lorsque le seul moyen de donner une idée de ce que fait le code est de le parcourir ligne par ligne comme une machine de Turing pour toutes les entrées. Dans ce cas, le seul moyen de raisonner quoi que ce soit sur le code est de vous transformer en un ordinateur et de l'exécuter dans votre tête. Ces pires exemples sont facilement visibles dans les concours de programmation obsolètes, tels que ces 3 lignes de PERL qui déchiffrent RSA:
#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)
Quant à facile de raisonner, encore une fois, le terme est très culturel. Vous devez considérer:
- Quelles sont les compétences du raisonneur? Combien d'expérience?
- Quelles sortes de questions le raisonneur pourrait-il avoir à propos du code?
- à quel point le raisonneur doit-il être certain?
Chacun de ceux-ci affecte "facile de raisonner sur" différemment. Prenons comme exemple les compétences du raisonneur. Lorsque j'ai commencé à travailler dans mon entreprise, il était recommandé de développer mes scripts sous MATLAB car il est "facile à raisonner". Pourquoi? Eh bien, tout le monde dans l'entreprise connaissait MATLAB. Si je choisissais une langue différente, il serait difficile pour quiconque de me comprendre. Peu importe que la lisibilité de MATLAB soit atroce pour certaines tâches, tout simplement parce qu’elle n’a pas été conçue pour elles. Plus tard, au fur et à mesure que ma carrière progressait, Python devenait de plus en plus populaire. Soudain, le code MATLAB est devenu "difficile à raisonner" et Python était le langage de prédilection pour écrire du code facile à raisonner.
Pensez également aux idoms que le lecteur peut avoir. Si vous pouvez compter sur votre lecteur pour reconnaître une FFT dans une syntaxe particulière, il est "plus facile de raisonner à propos de" le code si vous vous en tenez à cette syntaxe. Cela leur permet de regarder le fichier texte comme une toile sur laquelle vous avez peint une FFT, plutôt que d'avoir à entrer dans les détails les plus importants. Si vous utilisez C ++, déterminez à quel point vos lecteurs sont à l'aise avec la std
bibliothèque. Combien aiment-ils la programmation fonctionnelle? Certains des idiomes qui sortent des bibliothèques de conteneurs dépendent beaucoup du style idomatique que vous préférez.
Il est également important de comprendre à quelles sortes de questions le lecteur pourrait être intéressé à répondre. Vos lecteurs s'intéressent-ils principalement à la compréhension superficielle du code ou cherchent-ils des bugs au plus profond de leurs entrailles?
Il est intéressant de savoir à quel point le lecteur doit être sûr. Dans de nombreux cas, un raisonnement flou suffit en fait à faire sortir le produit. Dans d'autres cas, tels que le logiciel de vol de la FAA, le lecteur voudra avoir un raisonnement irréprochable. J'ai rencontré un cas dans lequel je plaidais pour l'utilisation de RAII pour une tâche particulière, parce que "vous pouvez simplement le configurer et l'oublier ... cela fera le bon choix". On m'a dit que j'avais tort à ce sujet. Ceux qui voulaient raisonner sur ce code n'étaient pas du genre à "vouloir juste oublier les détails". Pour eux, RAII ressemblait plus à un chad suspendu, les obligeant à réfléchir à tout ce qui peut se produire lorsque vous quittez la portée.