Casos de Gettier en la ingeniería de software (2019)
(jsomers.net)- El artículo de 3 páginas que Edmund Gettier publicó en 1963 sacudió el consenso que entendía el conocimiento como una creencia verdadera justificada, y este texto conecta ese problema con las falsas impresiones del debugging de software
- Un caso de Gettier se refiere a una situación en la que una creencia está justificada por la evidencia y además es verdadera, pero cuesta decir que realmente se sabe, porque la razón por la que resultó verdadera es distinta de la base que la justificaba
- En una app web, justo después de desplegar un pull request relacionado con el foco del cuadro de búsqueda,
autofocusse rompió y parecía que ese cambio era la causa, pero el motivo real fue un cambio en el enlace de eventos del DOM raíz del framework - En otro problema con notificaciones por correo, un cambio en el código parecía ser el bug, pero la causa directa fue una caída del servicio de email del que dependía, ocurrida casi al mismo tiempo
- Ponerle nombre a estas situaciones ayuda a sospechar más de supuestos sobre caché, ramas o rutas de código, y a juzgar con más cuidado las causas de problemas de software complejos y transitorios
El problema de Gettier y las condiciones del conocimiento
- En 1963, Edmund Gettier publicó en Analysis un artículo de 3 páginas que se volvió un clásico de la filosofía
- Desde la Ilustración, el conocimiento solía definirse como creencia verdadera justificada
- Justificada: surge de la evidencia
- Verdadera: no se puede decir que se “sabe” algo falso
- Creencia: una proposición en la mente
- Gettier planteó la pregunta: “¿La creencia verdadera justificada es conocimiento?” y presentó casos en los que no lo es
- Estos ejemplos luego fueron llamados casos de Gettier y dieron lugar a una literatura de debate propia
El caso de la vaca en el campo
- Una persona cree ver una vaca a lo lejos en un campo, pero lo que en realidad está viendo es una figura de vaca hecha de papel maché
- Sin embargo, justo detrás de esa figura sí hay una vaca real
- En ese caso, la creencia “hay una vaca en el campo” cumple las tres condiciones
- Cree que hay una vaca en el campo
- Tiene base para creerlo porque vio algo que parecía una vaca
- En verdad sí hay una vaca en el campo
- Aun así, cuesta decir que esa persona realmente sabía que había una vaca en el campo
- Porque la razón por la que la creencia resultó verdadera no fue el objeto que vio, sino la vaca real que estaba detrás por casualidad
El uso de “gettier” en Genius
- El CTO de Genius había estudiado filosofía en la universidad y le interesaban mucho los casos de Gettier
- En Genius, a estas situaciones les decían simplemente gettier, y usaban la palabra para describir ilusiones frecuentes durante la programación
- Cuando una situación recibe un nombre, empiezas a verla con más frecuencia
El caso de la app web donde se rompió autofocus
- Una aplicación web usaba un framework del lado del cliente desarrollado internamente
- En una pequeña app de búsqueda, alguien hizo un pull request para que al presionar Enter en el cuadro de búsqueda el campo de entrada perdiera el foco
- El cambio buscaba que quienes navegan la web con teclado no tuvieran que salir manualmente del campo de texto
- Después de desplegar la nueva versión, descubrieron que se había roto el comportamiento por el cual el cuadro de búsqueda debía recibir foco automáticamente al cargar la página
- Aunque cambiaron varias partes del código, comentaron líneas y forzaron recargas del navegador,
autofocusno volvió a funcionar - La causa real fue que un colega había modificado el framework y había cambiado la forma en que ciertos eventos se enlazaban al elemento DOM raíz
- Como resultado, el atributo
"autofocus"se rompió - Durante un rebase rutinario entraron también otros cambios no relacionados con esa modificación
- Al desplegar un pull request pequeño, también se desplegó un bug ajeno a ese cambio
- Como resultado, el atributo
- Como sí se había modificado el código relacionado con el foco del cuadro de búsqueda, parecía que el pull request había causado el problema
- La creencia de que “el pull request que acabamos de desplegar rompió
autofocusen production” estaba justificada, y además era cierto que se rompió después del despliegue, pero la causa real del fallo era un cambio completamente distinto - Debió haberse detectado en pruebas, y hubo comportamientos raros que podían haber dado pistas, pero sigue siendo cierto que hacer software es difícil
El caso de las notificaciones por correo que se detuvieron
- Un usuario reportó que los mensajes dentro del sitio ya no generaban notificaciones por correo electrónico
- Había habido un cambio reciente en el código que procesaba los correos en la app web, y ese cambio parecía el bug que estaba causando el comportamiento
- Pero casi al mismo tiempo, también se cayó el servicio de email del que dependía ese código
- La creencia de que el cambio en el código era la causa de que se dejaran de entregar correos estaba justificada, y el resultado también era efectivamente verdadero, pero la causa directa era la caída del servicio
Un término útil para programadores
- Un filósofo podría decir que estos ejemplos no son casos de Gettier en sentido estricto, y que los gettier “reales” son poco frecuentes
- Aun así, en Genius el concepto se usaba como un término, y siguió siendo útil después
- Una de las situaciones complicadas que enfrentan los programadores es cuando un problema tiene varias causas potenciales, hay buenas razones para creer en una de ellas, pero la causa real está escondida en otro lado
- Ponerle nombre a esto ayuda a estar más alerta
- Confirmar que no olvidaste limpiar la caché
- Sospechar si estás trabajando en la rama equivocada
- Verificar si realmente se está ejecutando esa ruta de código
- El software es complejo y transitorio, así que los desarrolladores se enfrentan a problemas epistemológicos extraños con más frecuencia que otras personas
- Si puedes distinguir entre la vaca en el campo y un gettier, estarás más cerca de juzgar mejor como desarrollador
1 comentarios
Comentarios en Hacker News
Un tuit relacionado, aunque parece que ya fue borrado:
Los casos del artículo en realidad casi no plantean un punto interesante. El observador que “sabe” que hubo un incendio por ver una nube oscura simplemente está equivocado. Esa nube podría ser un enjambre de insectos o un incendio, así que falta evidencia adicional para resolver la ambigüedad
El brillo que ve a lo lejos el viajero del desierto también podría ser un oasis o un espejismo, así que hace falta más evidencia para llamarlo conocimiento justificado
Me pregunto si tendría sentido incluir la capacidad predictiva dentro de las condiciones del “conocimiento verdadero justificado”. Eso también resolvería estos dos ejemplos y el caso del reloj parado de Russell. Si crees que sabes algo, pero con ese conocimiento no puedes hacer predicciones válidas, entonces en realidad no lo sabes. El ejemplo del fondo de Zoom podría cumplir este criterio si no hubiera un engaño intencional
a) Como nadie piensa que el fondo de Zoom deba representar el fondo real, no veo que haya justificación para afirmar esa conclusión
b) Si el fondo corresponde 1:1 con el fondo real, entonces, incluso si pensaste por otras razones que era el fondo real, la proposición es verdadera, así que terminas con una creencia verdadera justificada
Por ejemplo, mi conocimiento, que el espectador cree que no tengo pero que en realidad sí tengo, también se basa en una justificación. Aquí, esa base es mi conocimiento de que puse un fondo falso
Al contrario, también se puede crear fácilmente una situación en la que yo apague en secreto tu fondo. Entonces la otra persona en Zoom sí tendría conocimiento, pero tú no. Y aun así, esta vez tú pensarías que la otra persona no sabe
Estudié filosofía en la universidad, y en ese tiempo estaba de moda hacer juegos semánticos con el problema de Gettier
Siempre creí que la razón por la que Gettier se volvió famoso era que su artículo tenía solo tres páginas, así que era el único artículo que los académicos realmente leían hasta el final
Nunca pensé que hubiera nada especialmente profundo o digno de atención en este problema. En esencia, es una discusión sobre la definición del conocimiento, y de esas se puede hablar para siempre. De hecho, seguían peleándose sobre la definición del conocimiento escribiendo artículos de 30 páginas, uno tras otro
Supongo que los filósofos de más alto nivel por lo general lo entienden, pero los filósofos de sillón, e incluso algunas personas formalmente entrenadas y con credenciales, se engañan pensando que existe una única definición de “conocimiento” y que discutir sobre ella es una actividad significativa
Actúan como si, con solo ponernos de acuerdo sobre qué es el “conocimiento”, se produjera algún efecto útil en el universo. Tratan la palabra en sí como si fuera importante y tuviera una entidad ontológica real, y creen que, si descubren “qué es exactamente el conocimiento”, habrán logrado algo
Pero en realidad no es así. Y menos aún la parte de que fijarlo produzca algún efecto significativo. Que sea útil o no es otro asunto
Hay varias definiciones de conocimiento. Existe la postura de que solo sabes algo si tienes 100% de certeza y además “debe” ser correcto en abstracto. Lo llamo “abstracto” porque, para empezar, no tenemos ningún oráculo que nos diga si estamos en lo correcto respecto de hechos como “¿hay una vaca en el campo?”, así que no se puede concretar
Esta postura termina yéndose hacia una posición cartesiana, donde casi lo único que “sabes” es que existes. Es una definición filosófica e históricamente interesante e importante, pero enseguida choca con sus límites. Con “yo existo” no puedes construir mucha lógica; necesitas más material
Si tomas otra postura, la del conocimiento probabilístico, entonces puedes decir: “Veo una vaca en el campo, así que sé que hay una vaca ahí”. Lo que eso significa es que tengo razones inductivas suficientes para creer que lo que veo no es una vaca de papel maché, sino una vaca real. Inductivamente, la probabilidad de que alguien haya instalado una vaca de papel maché en el campo es baja
Este tipo de conocimiento puede estar equivocado. No es solo un problema de filosofía teórica: de hecho he visto objetos de broma instalados en campos, y me han engañado espantapájaros muy bien hechos que a primera vista parecían personas, o adornos de jardín diseñados para verse como personas desde lejos. Es una pregunta real
Aun así, incluso en una situación en la que un oráculo de la verdad dijera “estás equivocado”, se puede operar con una definición de conocimiento según la cual yo tenía “conocimiento” de que había una persona ahí. Se puede construir algo sobre un concepto de conocimiento que “converge” hacia la verdad, aunque no necesariamente llegue a ella. Es más complejo, pero mucho más útil
Estos dos ejemplos tampoco abarcan todas las definiciones de conocimiento interesantes y útiles. La segunda se parece más a una familia de definiciones que a una sola definición
De nuevo, no intento criticar así a los filósofos mejor formados en general. Pero muchos filósofos tienden a dar demasiadas vueltas al hecho de que “no se puede acceder a un oráculo de verdad absoluta” durante demasiado tiempo
Sí, es un hecho con el que hay que lidiar. Lo mismo pasa con problemas como “pienso, luego existo; pero aparte de eso, ¿qué más puede concluirse con un 100% de rigor?”. Pero no es productivo seguir aferrándose a eso una y otra vez cambiándole solo la forma
Ese oráculo no existe. Hay que aceptar ese hecho y seguir adelante. No aparece por definirlo, no aparece por desearlo. No aparece aunque derrames tinta sobre el papel, retuerzas la lógica como un pretzel y declares que de algún modo eso es necesario
Si Dios existe, y personalmente me inclino por decir que sí, aunque da igual en qué lado estés, claramente Dios no es una base de datos a la que puedas consultar cada vez que preguntas “¿hay una vaca allá?”
Si no logras salir de ahí, por más palabras que agregues te quedas atrapado en un patio de juegos muy pequeño. Tal vez eso sea todo lo que quieren o todo lo que están dispuestos a hacer, pero sigue siendo un patio de juegos pequeño
En filosofía en realidad no se puede “estar equivocado”. Porque no existe eso de demostrar que una idea es incorrecta y descartarla. Si eso fuera posible, simplemente lo llamaríamos “ciencia”
Por eso la filosofía se convierte en un cuerpo que sigue acumulando “fulano dijo esto y mengano dijo aquello”. Si haces una pregunta filosófica, la respuesta pasa a ser “Aristóteles dijo esto, Kant dijo aquello, Descartes dijo esto, Searle dijo aquello”
Y si preguntas “entonces, ¿cuál es la respuesta?”, te contestan “ya te lo dije”. Por eso, si realmente quieres discutir sobre algo, terminas peleándote por las definiciones
El conocimiento y la verdad son conceptos centralizados. Prefiero mucho más un modelo que no tenga ese problema
Todos los modelos son incompletos y temporales, y puede haber varios modelos para el mismo proceso. El conocimiento y la verdad tienden a llevar a discusiones interminables, pero con los modelos se entienden mejor los límites y nadie afirma llegar a la perfección. En programación a esto lo llamamos abstracción, y también sabemos que siempre tiene filtraciones
Creo que muchos problemas filosóficos nacen del deseo de explicar las cosas de manera centralizada. La conciencia, la comprensión y la inteligencia son ejemplos de eso
Prefiero la expresión “búsqueda”. La búsqueda está descentralizada y abarca lo personal, lo interpersonal y lo social. La búsqueda define un espacio de búsqueda, pero cuando hablamos de conciencia guardamos silencio sobre el entorno y sobre los demás
La búsqueda hace lo que la conciencia, la comprensión y la inteligencia intentan hacer. Todas las capacidades mentales, como la atención, la memoria, la imaginación y la planificación, son formas de búsqueda. Aprender es una búsqueda de representaciones; la ciencia también es búsqueda, el mercado es búsqueda, y la evolución del ADN y el plegamiento de proteínas también son búsqueda
Es más universal y más científico. La búsqueda elimina muchos misterios y no comete el error de centralizarse a sí misma dentro de un solo ser humano
Los problemas filosóficos profundos surgen porque realmente hay cosas en la existencia que son enigmáticas. Cambiar los términos no hace que esos enigmas desaparezcan
Un veterano con el que trabajé en mi primera pasantía llamaba a este tipo de problema la ley del fracaso accidental, y se me quedó muy grabado.
Al depurar, pruebo muchas cosas obvias para verificar la verdad. Por ejemplo, reviso si el bug se corrige al revertir todos mis cambios.
Si tampoco funciona ahí, asumo que cambió algún factor externo como el hardware, un servicio de backend o la oscilación de la Tierra. Si funciona, hago una búsqueda binaria sobre la línea de tiempo para encontrar dónde está.
En bugs difíciles que desafían la lógica, este método funciona el 99% de las veces. Es como empezar desde un estado conocido como bueno en lugar de hurgar interminablemente en logs,
blamey diferencias de archivos.Claro, en algunos casos es imposible, pero en código donde el ciclo de compilación, instalación y pruebas es bastante rápido, funciona realmente bien.
Incluso escribí pruebas para ver si había encontrado un bug de caso límite del compilador o un problema en código de la librería. Estuve a punto de abrir un issue en la librería cuando salió a la luz la causa real.
En realidad, era la combinación de un bug sutil en la configuración de pruebas y el error de haber definido mal la interfaz de hardware de un protocolo antiguo como
HREGen vez deIREG.Eso había funcionado por casualidad y luego, por razones como corrupción de stack o un puntero equivocado, creó un bucle de callbacks dentro de la librería. Fue un bug que de verdad me hizo empezar a dudar de mi cordura.
“Estoy sentado en el jardín con un filósofo; él señala un árbol que está cerca y dice una y otra vez: ‘Sé que eso es un árbol’. Alguien más llega y escucha esto, y yo le digo: ‘Este hombre no está loco. Solo estamos haciendo filosofía.’”
― Ludwig Wittgenstein
No veo muy claro cuál es el gran problema. La justificación es una escala entre 0 y 1, y 1 sería un estado de omnisciencia
Vivimos en un mundo complejo, y como nadie tiene tiempo para volverse dios, basta con aceptar una creencia verdadera justificada de 0.5 y seguir adelante
En cuanto a la parte de la creencia, también se podría decir: “si tú lo crees, no es mentira”
Y respecto a la parte de que sea verdadera, supongamos que de verdad hay una vaca. Pero antes de que llames a alguien para verificar tu creencia verdadera justificada, unos extraterrestres secuestran a la vaca y dejan un círculo misterioso. Ahora lo único que todos ven es una vaca de papel maché, así que tú quedas como un idiota, pero en realidad sí tenías una creencia verdadera justificada. Es una creencia verdadera justificada de Schrödinger
Si no puedes convencer a los demás, ¿de verdad importa? Y al revés, si el conocimiento es incorrecto pero todos están de acuerdo en que es verdadero, ¿importa?
La creencia verdadera justificada existe solo para revelar supuestos erróneos. Es parecido a estar del lado equivocado de un predictor de saltos. Si tienes una creencia verdadera justificada de 0.9, aciertas con una probabilidad de 0.1 y no actualizas tus supuestos, entonces sí hay un problema. Una estatua en el campo no es para tanto
Eso sí, si se trata de una investigación de asesinato y tú eres Sherlock Holmes, entonces es la excepción. Él sí es un predictor de saltos realmente potente
Si metes un robot dentro del cadáver de una vaca y nadie nota la diferencia, ¿sigue siendo una vaca? Si descubres un horrible híbrido vaca-caballo, ¿cómo habría que llamarlo? Si esa vaca tiene una mutación única que ninguna otra vaca posee, ¿sigue encajando en el prototipo de vaca?
Por ejemplo, ¿y si no puede producir leche? ¿Y si fue creada en un laboratorio? ¿Qué rasgos necesita heredar para tener vacunidad?
Esto también es una ambigüedad que el lenguaje recubre. Por ejemplo, “cow” también se usa como insulto despectivo sin referirse necesariamente a un bovino
También está la cuestión de si “el conocimiento es finito o infinito”. ¿Llegará un punto en el que podamos explicarlo todo, la ciencia termine y podamos descansar sobre nuestros logros? ¿Y luego qué pasaría? ¿Pasaríamos el tiempo explicando supuestos que no existen? ¿Matemáticas teóricas puras? ¿O acaso eso también podría acabarse?
https://www.wikiwand.com/en/articles/Karl_Popper
Vale la pena leer sobre el problema de la inducción y el problema de la demarcación: https://www.wikiwand.com/en/articles/Falsifiability
En resumen, significa que como no somos “omniscientes”, en la práctica nunca podemos saber nada con certeza
Pero cuando se les pide que la expresen con claridad, la gente a menudo descubre que su explicación no es compatible con la de otras personas. Y si se profundiza más, esa explicación no resiste en absoluto. Por eso algunos experimentos mentales de la antigua Grecia pueden parecer casi koanes
Se puede vivir sin encontrar una respuesta rigurosa. La mayoría de las actividades humanas más allá de la supervivencia pueden meterse en la categoría de “no veo cuál es el gran problema”
Seguir con 200 palabras después de decir eso sobre la cuestión del conocimiento no es negarse a participar. Es remendar una respuesta suficientemente buena para enfrentar un reto nuevo y luego seguir avanzando
Precisamente por eso estas preguntas son difíciles, y por eso a algunas personas les atrae explorar sus respuestas
Caso de Capgras Delusion de Ramachandran:
https://www.youtube.com/watch?v=3xczrDAGfT4
La pregunta “Y al revés, si el conocimiento es incorrecto pero todos están de acuerdo en que es verdadero, ¿importa?” es un caso de realidad consensuada. Es una bomba de intuición tomada de alguna parte
La realidad consensuada también se respeta en el ámbito cuántico:
https://youtu.be/vSnq5Hs3_wI?t=753
Las partículas individuales permanecen en superposición cuántica, pero sus posiciones relativas crean un consenso colectivo dentro de una red de entrelazamiento. Ese consenso define la estructura de los objetos macroscópicos y hace que parezcan bien definidos para el observador, incluido el gato de Schrödinger
Los casos de Gettier nos enseñan algo interesante sobre la verdad y el conocimiento
Una afirmación fáctica tiene que trazar el acontecimiento que fue la causa eficiente de que esa afirmación se produjera. La descripción es una relación de representación, es decir, una correspondencia entre palabras y acontecimientos posibles. Por ejemplo, algo como la vaca en el campo
El conocimiento se da cuando el acontecimiento descrito fue la causa eficiente de la creencia. Como la vaca de papel maché fue la causa de la creencia y la vaca real no lo fue, nuestra intuición no considera esto conocimiento normal
Por lo tanto, una afirmación verdadera debe tener tanto una relación causal con algo del mundo como una relación descriptiva. Dicho de otro modo, una afirmación verdadera describe implícitamente parte de su propia historia causal
En la lógica clásica, una proposición puede ser verdadera por sí misma aunque no haya una prueba, pero en la lógica intuicionista una proposición solo es verdadera cuando hay una prueba. La prueba es la causa que hace verdadera a la proposición
En la lógica intuicionista no es tan simple como decir “hay una vaca en el campo o no la hay”. Como se dijo, para que el conocimiento “hay una vaca en el campo” sea verdadero, hace falta esa prueba
Por eso aparecen muchas sutilezas. Por ejemplo, saber que “no es cierto que no haya una vaca en el campo” es un conocimiento más débil que saber que “hay una vaca en el campo”
QED, prueba por convención terminológica.
El problema empieza desde la parte de “si ‘sabes’ algo falso, entonces no tiene sentido, así que debe ser verdadero”.
Tal vez a los griegos les sonaba razonable, pero en el siglo XXI no tiene ningún sentido. Hoy se acepta ampliamente que todos vivimos “sabiendo” cosas falsas.
Es decir, lo equivocado no es el conocimiento, sino la creencia de que uno posee conocimiento.
Claro, en el sentido cotidiano igual podríamos decir que sí lo sabíamos, y que esta distinción no es más que hilar demasiado fino. Pero la filosofía está dispuesta a partir un cabello en tantos pedazos como la razón permita.
Quizás se deba a creencias fundamentales distintas sobre la naturaleza de la realidad, o quizá simplemente estén usando definiciones distintas para la misma palabra.
Por lo tanto, no puedes saber como verdadero algo que en realidad es falso; solo puedes creer como verdadero algo que en realidad es falso. Describir con precisión cómo se pasa de la creencia al conocimiento es justamente la epistemología.
Y en algunos debates concretos sobre ciertos temas, incluso puede parecer que para la mayoría de los participantes que no guardan silencio, el estado de “no saber” es prácticamente imposible.
El problema es que la palabra “saber” está sobrecargada.
Saber en primera persona es creer. Hasta cierto punto, es simplemente fe. Creemos que las leyes de la física no cambiarán mañana, y creemos que recordamos que ayer existió.
La ciencia intenta empujar esa fe lo más cerca posible de los hechos mediante una verificación implacable. Pero nunca podemos saber por qué algo es como es.
El otro “saber” es una idea parecida a la verdad absoluta, y la creencia de alguien coincide con ella por casualidad. Da igual si esa casualidad es pura suerte, una observación aguda o, como en el caso del artículo, ambas a la vez.
En realidad se parece más a un espectro, y esa misma expresión también la estoy usando de forma sobrecargada. Otra frase que uso mucho es: “esto es una cuestión probabilística, y aquí no hay nada absoluto”.
Puede que esto haya sacudido a la filosofía analítica o a alguno de sus subcampos, pero en la filosofía en general no se sintió mucho más allá de eso.
A la filosofía analítica le gusta imaginarse como si fuera la filosofía de verdad, pero eso no tiene sentido. Es solo una facción excesivamente segura de sí misma, agresiva al defender su territorio y acaparadora de recursos.
Y eso, a pesar de que muchos estudiantes anhelan la riqueza y amplitud de lo que hoy se llama filosofía postkantiana, más cercana a lo que antes se llamaba filosofía continental o filosofía europea moderna.