- La depuración es, en los hechos, una capacidad esencial para cualquier desarrollador
- En la depuración, lo importante es la mentalidad de cómo abordarla
- Depurar es el proceso de encontrar la causa de un problema con base en la situación y los datos disponibles
- El autor lo describe como intuición
- La intuición consiste en conectar el conocimiento que uno tiene con el problema
- La experiencia funciona como un atajo que conecta el conocimiento con la intuición
- Para encontrar la causa de un comportamiento inesperado, los desarrolladores terminan reduciendo instintivamente las posibilidades durante la depuración
- El autor considera que avanzar reduciendo posibilidades una por una, con principios claros, es más eficiente
- Presenta cuatro etapas para encontrar el problema
- Primera, sospechar
- Todo —código, logs, mensajes de error, datos de monitoreo, requisitos, hardware, etc.— sirve para recopilar información que ayude a resolver el problema
- Conviene hacer una lista de verificación
- Segunda, clasificar
- De la información recopilada, separar lo que se conoce de lo que no se conoce bien
- La información que se filtra de inmediato en la etapa de recopilación se debe a una intuición pequeña
- El autor la clasifica en cuatro tipos: fallas lógicas, fallas en tecnologías dependientes, fallas en tecnologías base y fallas físicas
- Tercera, aprender
- A partir de la información recopilada, identificar las brechas de conocimiento y aprender lo necesario
- Cuarta, conectar
- Con base en la información, formular hipótesis sobre el problema y ponerlas a prueba
- Si en este proceso surgen nuevas ideas, volver a recorrer las cuatro etapas en un ciclo de retroalimentación
- Lo anterior es una forma útil de practicar la intuición mencionada antes
- Si aún no tienes tus propios principios de depuración, puedes basarte en este texto para crearlos o hacer unos nuevos. Mejor aún si compartes buenos consejos
7 comentarios
Estoy muy de acuerdo. Y me parece que organizó muy bien y propuso un enfoque general para el debugging.
En la práctica, dentro del proceso de depuración se entrelazan de forma compleja causas muy diversas y conocimientos de contexto, así que creo que el proceso de ir acotando el foco para encontrar las pistas necesarias ahí dentro es realmente importante.
En el texto se decía que, en ese proceso, hay que pulir la intuición y la capacidad de observación; y da la impresión de que, a la hora de identificar intuitivamente dónde podría estar la causa y desde qué punto conviene empezar a investigar, la intuición forjada por la experiencia y el instinto ocupa una parte muy importante.
Estoy de acuerdo. Quería expresar bien esa intuición que mencionaste, pero creo que sería mejor unificar todo el texto usando “perspicacia” en lugar de “intuición”.
La idea de que hay personas que pueden razonar y otras que no.
Habrá sido hace unos 30 años.
Los seniors solían decir que en IT, después de unos 3 años, la habilidad de todos termina siendo igual.
Ahora que lo pienso....
¿No sería más natural pensar que conectar información pertenece menos al terreno de la intuición y más al de la inferencia o la demostración lógica? Si uno practica la demostración repetidamente hasta dominarla, puede que, como al memorizar las tablas de multiplicar, se omitan los pasos intermedios y la respuesta salga de inmediato, por lo que podría parecer intuición, pero creo que corresponde distinguir entre ambas.
En cuanto al resto —sospecha, clasificación y aprendizaje— estoy de acuerdo, porque he visto por experiencia que mejoran a medida que se acumulan la experiencia y el conocimiento previo.
Vuelvo a leer el texto y agrego esto
Parece que la definición de intuición que plantea el autor es distinta de la definición de intuición que se usa socialmente de forma general. Yo entiendo que la definición común de intuición es comprender un problema sin un proceso de pensamiento de por medio. Mientras leía el texto, por un momento me pregunté si yo estaba entendiendo mal el significado de intuición, así que terminé volviendo a comprobarlo. También creo que eso no deja de contradecir la tesis general de que para depurar hace falta un procedimiento de razonamiento. Si depurar fuera realmente una tarea que puede hacerse por completo mediante la intuición, ¿no tendría que ser cierto también que al depurar no haría falta en absoluto revisar logs o datos, ni control de versiones?
Hola. Gracias por interesarte en el artículo.
Como mencionas, en general la intuición significa comprender algo sin una actividad de pensamiento directa. Aun así, no creo que realmente se pueda llegar a la respuesta correcta partiendo de un estado de conocimiento completamente nulo.
Primero, para escribir mi idea sobre la palabra intuición: cuando se habla de depuración, a menudo escucho de colegas o incluso de mí mismo frases como “de repente se me ocurrió” o “por alguna razón sentí que esa parte era el problema”. Yo consideré que esa parte era intuición. Al revisar una por una esas ideas repentinas en lugar de dejarlas pasar, al final pude darme cuenta de que había experiencia previa sobre esa parte o de que se entendía bien el conocimiento relacionado. Por eso usé la palabra intuición y, como podía prestarse a malentendidos, añadí la frase “la intuición es conectar el conocimiento que ya conozco con el problema”.
Así que, para responder a algunas de las dudas que comentaste,
respecto a “que esto también contradice la tesis general de que la depuración requiere un procedimiento de pensamiento”, la intuición que describí en el texto se presentó como omitir sin mucho pensamiento algo que ya se ha experimentado o que ya se conoce. Por lo tanto, no significa que no haga falta un procedimiento de pensamiento, sino que quise expresarlo como una herramienta para pensar más rápido.
Luego, sobre “si la depuración de verdad fuera una tarea que puede realizarse enteramente con intuición, ¿no tendría que ser también cierta la afirmación de que al depurar no hacen falta en absoluto revisar logs o datos ni el control de versiones?”, no dije que pudiera realizarse enteramente con intuición. Más bien, añadí la frase “la depuración es el proceso de encontrar la causa del problema con base en la situación y los datos dados”. Aun así, creo que casi no habrá desarrolladores que pasen cada vez por el proceso de inferencia de cuatro pasos que plantea el artículo. Si se tiene cierta experiencia y conocimiento, también habrá casos en los que se omitan pasos según el propio juicio. Pienso que los logs, los datos, etc. que mencionaste cumplen dos funciones: si hay experiencia o conocimiento, ayudan a recordarlos; y si no los hay, ayudan al proceso de inferencia. Por lo tanto, son información importante de la que no se puede prescindir, incluso para la intuición mencionada en el artículo.
Creo que la palabra intuición que usé en este artículo puede ser ambigua en sí misma. Tal vez la estructura o el desarrollo del texto no hayan sido los mejores para expresar mi idea. Por ahora, pienso corregir las partes que no fueron lo suficientemente concretas. Sin embargo, todavía no estoy seguro de si sería mejor reemplazar la palabra intuición. Desde que empecé a escribir, consideré que la palabra intuición era el eje central, así que no se me ocurre otra palabra para sustituirla. Si tienes alguna buena sugerencia, te agradecería que me la compartieras. :)
Considero que, para aumentar la integridad del texto, se podría añadir en la introducción una explicación de fondo sobre por qué en la depuración se necesitan tanto la intuición como el razonamiento, y en el desarrollo ampliar cómo encontrar el problema y su relación con la intuición y el razonamiento.
Antes del cambio
Después del cambio
Introducción
Desarrollo (procedimiento de depuración)