È facile ragionare su un termine culturalmente specifico, motivo per cui è così difficile trovare esempi concreti. È un termine ancorato alle persone che devono fare il ragionamento.
"Facile ragionare su" è in realtà una frase molto auto-descrittiva. Se uno sta guardando il codice e vuole ragionare su ciò che fa, è facile =)
Va bene, abbattendolo. Se stai guardando il codice, di solito vuoi che faccia qualcosa. Vuoi assicurarti che faccia quello che pensi che dovrebbe fare. Quindi sviluppi teorie su cosa dovrebbe fare il codice, e poi ragionerai su di esso per cercare di argomentare perché il codice funzioni davvero. Cerchi di pensare al codice come un essere umano (piuttosto che come un computer) e cerchi di razionalizzare gli argomenti su ciò che il codice può fare.
Il caso peggiore per "facile ragionare" è quando l'unico modo per dare un senso a ciò che fa il codice è quello di passare riga per riga attraverso il codice come una macchina di Turing per tutti gli input. In questo caso, l'unico modo di ragionare nulla circa il codice è quello di trasformare se stessi in un computer ed eseguirlo nella tua testa. Questi esempi peggiori sono facilmente visibili in concorsi di programmazione offuscati, 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 facile da ragionare, ancora, il termine è altamente culturale. Devi considerare:
- Quali 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 influisce "facilmente su cui ragionare" in modo diverso. Prendi le abilità del ragionatore come esempio. Quando ho iniziato presso la mia azienda, mi è stato consigliato di sviluppare i miei script in MATLAB perché è "facile ragionare". Perché? Bene, tutti nell'azienda conoscevano MATLAB. Se avessi scelto una lingua diversa, sarebbe stato più difficile per chiunque capirmi. Non importa che la leggibilità di MATLAB sia atroce per alcuni compiti, semplicemente perché non è stata progettata per loro. Più tardi, con il progredire della mia carriera, Python divenne sempre più popolare. Improvvisamente il codice MATLAB divenne "difficile da ragionare" e Python era il linguaggio di preferenza per la scrittura di codice su cui era facile ragionare.
Considera anche quali idomi può avere il lettore. Se puoi fare affidamento sul tuo lettore per riconoscere una FFT in una particolare sintassi, è "più facile ragionare su" il codice se ti attieni a quella sintassi. Li consente di guardare il file di testo come tela su cui hai dipinto un FFT, piuttosto che dover entrare nei dettagli grintosi e nitidi. Se usi C ++, scopri quanto i tuoi lettori si sentono a proprio agio con la std
libreria. Quanto gli piace la programmazione funzionale? Alcuni dei modi di dire che escono dalle librerie dei contenitori dipendono molto dallo stile idomatico che preferisci.
È anche importante capire a quali tipi di domande il lettore potrebbe essere interessato a rispondere. I tuoi lettori sono per lo più interessati alla comprensione superficiale del codice o sono alla ricerca di bug nelle viscere?
Quanto sia sicuro il lettore deve essere davvero interessante. In molti casi, il ragionamento confuso è in realtà sufficiente per far uscire il prodotto. In altri casi, come il software di volo FAA, il lettore vorrà avere ragionamenti coraggiosi. Mi sono imbattuto in un caso in cui ho sostenuto di utilizzare RAII per un compito specifico, perché "Puoi semplicemente impostarlo e dimenticartene ... farà la cosa giusta". Mi è stato detto che mi sbagliavo. Coloro che avrebbero ragionato su questo codice non erano il tipo di persone che "vogliono solo dimenticare i dettagli". Per loro, RAII era più simile a un ciad sospeso, costringendoli a pensare a tutte le cose che possono accadere quando lasci l'ambito.