Del final al principio: un tema de lógica
Para terminar esta entrada solo me cabe recordarle que el libro que le he recomendado no es simple, y si no logra comprenderlo, es normal. Pero no desista. El esfuerzo vale la pena: teniendo en cuenta que no es un libro de programación, sino de pensamiento claro, requiere del lector salirse de la caja habitual para explorar otros territorios. En cualquier caso el viaje será grato, se lo aseguro. Porque la lógica está presente en todas partes de nuestro quehacer diario: desde escribir código hasta como nos relacionamos con otras personas.
Este libro de Halvorson, en cambio, nos entrega una forma diferente de enseñar lógica —más moderna si nos permite (incluye la lógica proposicional)—, en ella hay una aproximación más amena, pero, como es de esperar, no implica facilidad. También es relevante recalcar que está muy bien escrito, y eso, ayuda mucho para entender cualquier texto.
Un ejemplo de lógica proposicional podría ser el siguiente: suponga que hay dos afirmaciones: «Ella está SANA» y «debe irse de la CASA», y se pueden asociar con la conectiva lógica «y
». Entonces quedaría «Ella está SANA y debe irse de la CASA», pero dado que estamos trabajando con lenguaje natural, puede ser complejo de analizar, sobre todo, porque la lógica trata sobre la estructura de un enunciado y no de su contenido. Así, la primera frase pasa ser llamada E
y la segunda C
. Entonces podríamos operar sobre ella con símbolos (una abstracción), quedando: E ^ C
(véase que cambié «y» por «^»). Esto significa que para que este enunciado sea verdadero tiene que ser verdadero tanto E
y C
(de nuevo, solo para que sea lógicamente válido).
Durante mi tiempo como programador me he percatado que muchos desarrolladores no saben de lógica, en particular, de la lógica proposicional y la lógica de primer orden. Ambas, deberían ser lo básico a conocer porque asisten al pensamiento con claridad y orden, fundamental, para programar. Ahora le daré ejemplo de esto.
Es común en programación comenzar explicando las tablas de verdad, no obstante, no son suficiente para entender la lógica de un programa. O al menos para entenderlas bien. Todo comienza con tener claro ciertas formas de razonar. Si suponemos que T = verdadero y F = falso, entonces aprender que T ^ T = verdadero
o T ^ F = falso
o F ^ F = falso
, no tiene mucho sentido —ni nos dice mucho— sin un contexto (al menos en un comienzo, es demasiado abstracto).
Hay un libro el cual deseo recomendarle: How Logic Works: A User’s Guide, de Hans Halvorson. Es bastante bueno porque da un tratamiento interesante sobre la lógica y, asume, que el lector no tiene un conocimiento previo. Es diferente a los demás, pues te explica cómo funciona la lógica más que presentarte un conjunto de operaciones lógicas, lo que, es bastante importante para entender los fundamentos (el porqué) y no solo afianzar la memoria (el cómo).
Era Francisco de Quevedo el que dijo, «Cuando decimos que todo tiempo pasado fue mejor, condenamos el futuro sin conocerlo», creemos, a veces, de manera ingenua que nuestros próceres lo hicieron mejor y que, nuestro presente, carece de virtudes. Por lo general es un sesgo que nace de vivir en el presente. El tiempo cambia,1 otra forma de decirlo sería hablar de un cambio de orden. El orden es importante en cualquier actividad de la vida, más, en programación, donde se requiere trabajar con lógica. Por ejemplo, no puedo usar una variable que no he declarado antes, menos puedo compilar un fichero que aún no existe. Ese orden es importante entenderlo.
El orden de los párrafos en esta entrada están ordenados del final al comienzo.