Fácil de razonar es un término culturalmente específico, por lo que es tan difícil encontrar ejemplos concretos. Es un término que está anclado a las personas que deben hacer el razonamiento.
"Fácil de razonar acerca de" es en realidad una frase muy autodescriptiva. Si uno está mirando el código y quiere razonar lo que hace, es fácil =)
Está bien, rompiéndolo. Si estás buscando en el código, normalmente quieres que haga algo. Quieres asegurarte de que hace lo que crees que debería hacer. Así que desarrollas teorías sobre lo que debería estar haciendo el código, y luego razonas al respecto para tratar de argumentar por qué el código realmente funciona. Intenta pensar en el código como un ser humano (en lugar de en una computadora) e intenta racionalizar los argumentos sobre lo que puede hacer el código.
El peor de los casos para "fácil de razonar" es cuando la única forma de entender lo que hace el código es ir línea por línea a través del código como una máquina de Turing para todas las entradas. En este caso, la única manera de razonar cualquier cosa sobre el código es convertirse en una computadora y ejecutarla en su cabeza. Estos ejemplos del peor de los casos se ven fácilmente en concursos de programación obsoletos, como estas 3 líneas de PERL que descifran 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*',/((..)*)$/)
En cuanto a fácil de razonar, de nuevo, el término es altamente cultural. Tienes que considerar:
- ¿Qué habilidades tiene el razonador? ¿Cuánta experiencia?
- ¿Qué tipo de preguntas podría tener el razonador sobre el código?
- ¿Qué tan seguro debe estar el razonador?
Cada uno de estos afecta a "fácil de razonar" de manera diferente. Tomemos como ejemplo las habilidades del razonador. Cuando comencé en mi empresa, me recomendaron que desarrollara mis scripts en MATLAB porque es "fácil de razonar". ¿Por qué? Bueno, todos en la compañía sabían MATLAB. Si escogiera un idioma diferente, sería más difícil para mí entenderme. No importa que la legibilidad de MATLAB sea atroz para algunas tareas, simplemente porque no fue diseñado para ellas. Más tarde, a medida que mi carrera progresaba, Python se hizo más y más popular. De repente, el código MATLAB se volvió "difícil de razonar" y Python era el idioma de preferencia para escribir código sobre el que era fácil razonar.
También considera qué idomas puede tener el lector. Si puede confiar en que su lector reconozca una FFT en una sintaxis particular, es "más fácil razonar sobre" el código si se adhiere a esa sintaxis. Les permite ver el archivo de texto como un lienzo sobre el que pintó un FFT, en lugar de tener que meterse en los detalles esenciales. Si está utilizando C ++, descubra cuánto se sienten cómodos sus lectores con la biblioteca std
. ¿Cuánto les gusta la programación funcional? Algunos de los modismos que salen de las bibliotecas de contenedores dependen mucho del estilo idomático que prefiera.
También es importante comprender qué tipo de preguntas le pueden interesar al lector. ¿Sus lectores están más preocupados por la comprensión superficial del código, o están buscando errores en las entrañas?
La certeza que debe tener el lector es realmente interesante. En muchos casos, el razonamiento confuso es en realidad suficiente para que el producto salga por la puerta. En otros casos, como el software de vuelo FAA, el lector querrá tener un razonamiento rígido. Me encontré con un caso en el que defendí el uso de RAII para una tarea en particular, porque "puedes configurarlo y olvidarte de él ... hará lo correcto". Me dijeron que estaba equivocado sobre eso. Los que iban a razonar en este código no eran el tipo de personas que "solo quieren olvidarse de los detalles". Para ellos, RAII era más como un chad colgante, obligándolos a pensar en todas las cosas que pueden suceder cuando dejas el alcance. Los que estaban leyendo ese código en realidad preferían las llamadas a funciones explícitas al final del alcance para que pudieran estar seguros de que el programador lo pensó.