🧵 Haz tu vida y la de los demás un poco menos terrible haciendo que todos tus programas impriman su información interna como imágenes; ✨ un hilo ✨
Prácticamente todos los programas que escribo pueden, de alguna manera, volcar su estado interno. Si hay algo que quiero que recuerden de este hilo, es que pueden hacer esto con sus propios programas. ¡No tiene por qué ser complicado!
No me refiero a algo así. Seguramente has visto diagramas de listas enlazadas, con punteros en forma de flechas y un pequeño símbolo para NULL, etc. Son muy útiles para hablar de una implementación, pero rara vez se necesitan fuera del ámbito académico. Crédito: Moses Effiong Ekpenyong
¡Un aplauso para CISC 3130 de Brooklyn College por su increíble diagrama de una lista enlazada! 🚂🚃�libguides.brooklyn.cuny.edu/cisc3130/linke…o/VTw0qbKDXA
Al subir un nivel de abstracción, ¿resulta útil mostrar el contenido de un TAD? Probablemente no. Es mejor mostrar algo que sea más significativo para tu programa, expresado en sus propios términos. A veces se trata del contenido de una sola estructura de datos, otras veces de la relación entre varias.
Trabajo mucho con temas de compiladores, pero esta idea también se aplica a otros ámbitos. La razón por la que los compiladores tienen fases es *porque* hay datos diferentes entre cada fase. Por lo tanto, parece muy lógico volcarlos. ¡Solo tienes que añadir una bandera a tus herramientas de línea de comandos! Eso es todo lo que necesitas.
Esta es una estructura de una fase temprana en un shell de Unix. Mi programa muestra la relación entre un árbol de sintaxis y una tabla de símbolos jerárquica, que se completa simultáneamente durante el análisis sintáctico. Espero que se pueda apreciar la relación entre ambos.
Como ves, no muestro cómo se almacenan, solo qué contienen. Esto es únicamente el contenido, no la implementación de estas estructuras de datos específicas. Es el nivel de abstracción adecuado para depurar otras partes del programa.
Aquí hay otro árbol de un programa diferente. Este es un IR de un compilador de C y C++. A menos que estés depurando esta parte en sí, el detalle de implementación es solo ruido.
¡Estas estructuras pueden llegar a ser enormes! Pero incluso con el zoom alejado, ver la forma general de algo puede ayudarte a la hora de depurar. Cuando estés familiarizado Observando las cosas, puedes detectar patrones en los cambios. ¡Nuestro cerebro es excelente para eso!
Sobre la estructuración de programas: Asegúrese de que la estructura de los datos sea correcta. El código es secundario. - El código es más fácil de modificar - El diseño de datos tiende a arraigarse por todas partes Por eso es importante mantenerlo contenido dentro de fases (o módulos o lo que sea).
Para los demonios con estado, agregue una forma de consultar el estado actual a través de IPC. ¡Realiza el renderizado fuera de tu programa!
Genera gráficos en formato Graphviz, JSON, TSV simple o cualquier formato que parezca más natural para tus datos. Imprime en un formato *simple*, utiliza herramientas externas para renderizarlo.
El hecho de tener un programa no significa que deba ser responsable de todo esto. ¡Divide las tareas! Usa lenguajes diferentes. Yo uso awk. Tú usa el lenguaje que prefieras.
JSON es un buen medio de comunicación entre equipos que utilizan diferentes lenguajes. Si trabajas en un entorno comercial, úsalo como nexo de unión y gánate puntos por ser un ingeniero principal que colabora entre equipos.
Los colores deben ser aptos para personas con daltonismo y solo para información funcional. Me gusta nature.com/articles/nmeth… https://t.co/XtUlGdalOb
El flujo de trabajo es importante, tanto para obtener datos como para visualizarlos. No sirve de nada tener que hacer un montón de cosas para ver lo que acabas de crear, ya que eso interrumpe tu trabajo. La próxima vez intentaré escribir un poco sobre eso. Cuídate, gracias por leer.











