Fácil de raciocinar é um termo culturalmente específico, e é por isso que é tão difícil encontrar exemplos concretos. É um termo que está ancorado às pessoas que devem fazer o raciocínio.
"Fácil de raciocinar" é na verdade uma frase muito descritiva. Se alguém está olhando para o código e quer raciocinar sobre o que faz, é fácil =)
Ok, decompô-lo. Se você está olhando para o código, geralmente quer que ele faça alguma coisa. Você quer ter certeza de que faz o que você acha que deveria fazer. Então você desenvolve teorias sobre o que o código deve estar fazendo, e então raciocina sobre isso para tentar argumentar por que o código realmente funciona. Você tenta pensar sobre o código como um humano (e não como um computador) e tenta racionalizar argumentos sobre o que o código pode fazer.
O pior caso para "fácil de raciocinar" é quando a única maneira de fazer qualquer sentido do que o código faz é passar linha por linha pelo código como uma máquina de Turing para todas as entradas. Neste caso, a única maneira de raciocinar
qualquer coisa sobre o código é se transformar em um computador e executá-lo em sua cabeça. Estes piores exemplos de casos são facilmente vistos em disputas de programação obsedadas, como estas 3 linhas de PERL que descriptografam 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*',/((..)*)$/)
Quanto mais fácil de raciocinar, mais uma vez, o termo é altamente cultural. Você tem que considerar:
- Quais habilidades o raciocinador tem? Quanta experiência?
- Que tipo de perguntas o raciocinador pode ter sobre o código?
- Quão certo o raciocinador precisa ser?
Cada um desses afeta "fácil de raciocinar" de forma diferente. Tome as habilidades do raciocinador como um exemplo. Quando eu comecei na minha empresa, foi recomendado que eu desenvolvesse meus scripts no MATLAB porque é "fácil de raciocinar". Por quê? Bem, todos na empresa conheciam o MATLAB. Se eu escolhesse uma língua diferente, seria mais difícil alguém me entender. Não importa que a legibilidade do MATLAB seja atroz para algumas tarefas, simplesmente porque ele não foi projetado para elas. Mais tarde, conforme minha carreira progredia, o Python se tornava cada vez mais popular. De repente, o código do MATLAB tornou-se "difícil de raciocinar" e Python foi a língua de preferência para escrever código que era fácil de raciocinar.
Considere também quais idoms o leitor pode ter. Se você puder confiar em seu leitor para reconhecer uma FFT em uma sintaxe específica, é "mais fácil raciocinar" sobre o código, se você mantiver essa sintaxe. Ele permite que eles olhem para o arquivo de texto como uma tela em que você pintou uma FFT, em vez de ter que entrar nos detalhes básicos. Se você estiver usando C ++, descubra o quanto seus leitores estão confortáveis com a biblioteca std
. Quanto eles gostam de programação funcional? Alguns dos idiomas que saem das bibliotecas de containers são muito dependentes de qual estilo idiomático você prefere.
É também importante entender em que tipo de perguntas o leitor pode estar interessado em responder. Seus leitores estão mais preocupados com a compreensão superficial do código, ou estão procurando por insetos nas entranhas?
O quão certo o leitor tem que ser é realmente interessante. Em muitos casos, o raciocínio nebuloso é realmente suficiente para levar o produto para fora da porta. Em outros casos, como o software de voo da FAA, o leitor vai querer ter raciocínio ironclad. Eu me deparei com um caso em que argumentei o uso de RAII para uma tarefa em particular, porque "Você pode apenas configurá-lo e esquecê-lo ... ele fará a coisa certa". Disseram-me que eu estava errado sobre isso. Aqueles que estavam indo para raciocinar sobre este código não eram o tipo de pessoas que "só querem esquecer os detalhes". Para eles, RAII era mais como um chad pendurado, forçando-os a pensar em todas as coisas que podem acontecer quando você sai do escopo. Aqueles que estavam lendo esse código realmente preferiam chamadas de função explícitas no final do escopo, para que pudessem ter certeza de que o programador pensou sobre isso.