È facile ragionare su un termine culturalmente specifico, motivo per cui è così difficile trovare esempi concreti. È un termine che è ancorato alle persone che devono fare il ragionamento.
"Facile ragionare" è in realtà una frase molto auto-descrittiva. Se uno sta guardando il codice e vuole ragionare su ciò che fa, è facile =)
Va bene, scomposizione. Se stai guardando il codice, di solito lo vuoi fare qualcosa. Vuoi assicurarti che faccia ciò che pensi che dovrebbe fare. Quindi sviluppate teorie su cosa dovrebbe fare il codice, e poi ragionate su di esso per cercare di argomentare perché il codice funziona davvero. Cerchi di pensare al codice come un essere umano (piuttosto che come un computer) e prova a razionalizzare gli argomenti su ciò che il codice può fare.
Il caso peggiore per "facile da ragionare" è quando l'unico modo per dare un senso a ciò che fa il codice è quello di andare riga per riga attraverso il codice come una macchina di Turing per tutti gli input. In questo caso, l'unico modo per ragionare qualsiasi cosa sul codice è trasformarti in un computer ed eseguirlo nella tua testa. Questi esempi di casi peggiori si vedono facilmente in concorsi di programmazione ovattati, come queste 3 righe di PERL che decodificano 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*',/((..)*)$/)
Per quanto sia facile ragionare, di nuovo, il termine è altamente culturale. Devi considerare:
- Che abilità ha il ragionatore? Quanta esperienza?
- Che tipo di domande potrebbe avere il ragionatore sul codice?
- quanto deve essere sicuro il ragionatore?
Ognuno di questi influenza "facilmente ragionare" in modo diverso. Prendi le abilità del ragionatore come esempio. Quando ho iniziato con la mia azienda, mi è stato consigliato sviluppare i miei script in MATLAB perché è "facile ragionare". Perché? Bene, tutti in compagnia conoscevano MATLAB. Se scegliessi una lingua diversa, sarebbe più difficile per chiunque capirmi. Non importa che la leggibilità di MATLAB sia atroce per alcune attività, semplicemente perché non è stata progettata per loro. Più tardi, con il progredire della mia carriera, Python divenne sempre più popolare. All'improvviso il codice MATLAB è diventato "difficile da ragionare" e Python era il linguaggio di preferenza per la scrittura di codice su cui era facile ragionare.
Prendi in considerazione anche gli idoms che il lettore può avere. Se puoi contare sul tuo lettore per riconoscere una FFT in una particolare sintassi, è "più facile ragionare" sul codice se ti attieni a quella sintassi. Permette loro di guardare il file di testo come una tela su cui è stata dipinta una FFT, piuttosto che dover entrare nei dettagli nitidi. Se stai usando C ++, scopri quanto i tuoi lettori sono a tuo agio con la libreria std
. Quanto apprezzano la programmazione funzionale? Alcuni degli idiomi che escono dalle librerie dei contenitori dipendono molto dallo stile idematico che preferisci.
È anche importante capire che tipo di domande il lettore può essere interessato a rispondere. I tuoi lettori sono per lo più preoccupati della comprensione superficiale del codice o stanno cercando bug negli intestini?
In che misura il lettore deve essere effettivamente interessante. In molti casi, il ragionamento nebuloso è in realtà sufficiente per portare il prodotto fuori dalla porta. In altri casi, come il software di volo FAA, il lettore vorrà avere un ragionamento ironico. Mi sono imbattuto in un caso in cui sostenevo di usare RAII per un compito particolare, perché "Puoi semplicemente installarlo e dimenticarlo ... farà la cosa giusta". Mi è stato detto che avevo torto su questo. Quelli che stavano per ragionare su questo codice non erano il tipo di persone che "vogliono solo dimenticare i dettagli". Per loro, RAII era più simile a un ciondolo sospeso, costringendoli a pensare a tutte le cose che possono accadere quando si lascia il campo di applicazione. Coloro che stavano leggendo quel codice in realtà preferivano le chiamate alle funzioni esplicite alla fine dello scope in modo che potessero essere sicuri che il programmatore ci pensasse.