Fácil de raciocinar é um termo culturalmente específico, e é por isso que é tão difícil apresentar exemplos concretos. É um termo ancorado às pessoas que devem raciocinar.
"Fácil de raciocinar" é na verdade uma frase muito auto-descritiva. Se alguém está olhando o código e quer raciocinar o que faz, é fácil =)
Ok, quebrando tudo. Se você está olhando para o código, geralmente deseja que ele faça alguma coisa. Você quer ter certeza de que faz o que acha que deve fazer. Então, você desenvolve teorias sobre o que o código deveria estar fazendo e, em seguida, argumenta sobre isso para tentar argumentar por que o código realmente funciona. Você tenta pensar no código como um ser 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 entender o que o código faz é passar linha por linha através do código como uma máquina de Turing para todas as entradas. Neste caso, a única maneira de razão qualquer coisa sobre o código é para se transformar em um computador e executá-lo em sua cabeça. Esses piores exemplos de casos são facilmente vistos em concursos de programação obsfucados, como essas 3 linhas de PERL que descriptografam o 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 a fácil raciocinar, novamente, o termo é altamente cultural. Você deve considerar:
- Que habilidades possui o raciocínio? Quanta experiência?
- Que tipo de perguntas o raciocínio pode ter sobre o código?
- Quão certo o raciocinador precisa ser?
Cada um deles afeta "fácil de raciocinar" de maneira diferente. Tome as habilidades do raciocínio como exemplo. Quando 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 um idioma diferente, seria mais difícil para alguém me entender. Não importa que a legibilidade do MATLAB seja atroz para algumas tarefas, simplesmente porque não foi projetada para elas. Mais tarde, à medida que minha carreira avançava, o Python se tornou cada vez mais popular. De repente, o código do MATLAB tornou-se "difícil de raciocinar" e o Python era a linguagem preferida para escrever código que era fácil de raciocinar.
Considere também quais idiomas o leitor pode ter. Se você pode confiar no seu leitor para reconhecer uma FFT em uma sintaxe específica, é "mais fácil raciocinar sobre" o código se você se ater a essa sintaxe. Ele permite que eles olhem o arquivo de texto como uma tela na qual você pintou uma FFT, em vez de ter que entrar nos mínimos detalhes. Se você estiver usando C ++, descubra o quanto seus leitores estão confortáveis com a std
biblioteca. Quanto eles gostam de programação funcional? Alguns dos idiomas que saem das bibliotecas de contêineres são muito dependentes de qual estilo idomatic você prefere.
Também é importante entender que tipos de perguntas o leitor pode estar interessado em responder. Seus leitores estão preocupados principalmente com a compreensão superficial do código ou estão procurando bugs nas entranhas?
O quão certo o leitor precisa 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 desejará ter um raciocínio rígido. Encontrei um caso em que argumentei usar o RAII para uma tarefa específica, porque "Você pode simplesmente configurá-lo e esquecê-lo ... ele fará a coisa certa". Foi-me dito que eu estava errado sobre isso. Aqueles que pensariam nesse código não eram o tipo de pessoa que "apenas quer esquecer os detalhes". Para eles, o RAII era mais como um chad, forçando-os a pensar em todas as coisas que podem acontecer quando você sai do escopo.