Visualizando React: Metáforas, Modelos y Medios Espaciales

Rate this content
Bookmark

Todo el React que has visto se presenta de una manera: como un archivo de texto lineal. Hay una buena razón para esto. La sintaxis textual es un medio ideal para construir lógica abstracta. Es rápido de escribir, densamente informativo y infinitamente flexible. Sin embargo, la brevedad tiene sus desventajas. ¿Qué información no podemos ver en el texto estático? ¿Cómo pueden las representaciones visuales y las comparaciones metafóricas expandir nuestra comprensión de cómo funciona React? Ven a descubrir qué sucede cuando exploramos formas alternativas de ver React.

31 min
22 Oct, 2021

Video Summary and Transcription

Esta charla explora el uso de visuales en la programación para hacer los conceptos más accesibles y comprensibles. Discute las limitaciones del texto en la programación y los beneficios de visualizar los conceptos de programación. La charla también se adentra en el uso de metáforas visuales en React y las ventajas de usar principios espaciales y representaciones visuales para entender el comportamiento del programa a lo largo del tiempo. Concluye con sugerencias para avanzar en los esfuerzos de programación visual y aprovechar las metáforas existentes en los lenguajes y marcos de programación.

Available in English

1. Introducción a los Programas Pictóricos

Short description:

Esta charla trata sobre cómo hacer imágenes de programas y cómo los visuales pueden hacer que los conceptos de programación sean menos abstractos, más fáciles de entender y más accesibles. Las representaciones visuales traen los invisibles conceptos abstractos de programación al mundo corpóreo, donde vivimos e interactuamos con objetos físicos. Los conceptos de programación son ideas abstractas que existen en un espacio liminal, separado de nuestro mundo altamente visual, espacial y físico, lo que hace que la programación sea difícil.

♪♪ ♪♪ ♪♪ ¡Hola! Estoy realmente contenta de no poder veros a todos debido a la luz cegadora que es realmente útil pero esto va a ir bien. Bueno, sí, estamos arriba. Esta charla se llama Una Imagen Vale por Mil Programas y va a tratar sobre hacer imágenes, y específicamente sobre hacer imágenes de programas, y esperemos que sobre hacer imágenes que valgan por mil programas, como dice el refrán tradicional.

Así que, antes de empezar, quiero presentarme rápidamente y haceros saber que estoy aquí en el escenario hablando con vosotros sobre programas pictóricos. Así que, me llamo Maggie. Soy diseñadora, directora de arte, ilustradora, nerd de las metáforas y tangencialmente también construyo cosas con React. Pasé los últimos cinco años trabajando como directora de arte en Egghead.io que es una plataforma educativa para desarrolladores web pero a partir de la próxima semana, me mudaré a un nuevo rol, liderando el diseño en Hash.ai. Pero he pasado toda mi carrera hasta ahora creando representaciones visuales de programas. Durante mi tiempo en Egghead, hice cientos de ilustraciones de portada para los cursos que enseñamos. Cada una de estas empezaría con un concepto de programación abstracto y yo tenía que encontrar una forma de representarlo visualmente en una sola imagen. Aprendí a confiar mucho en las metáforas visuales para estas y estilizar CSS se convirtió en pintar una casa y organizar tipos se convirtió en trajes en una baraja de cartas. He hecho muchos diagramas ilustrados para explicar cómo funciona la herencia de prototipos de JavaScript o qué pasa cuando aplanas un array. Uno que se hizo popular fue un ensayo visual sobre qué son las APIs y cómo funcionan que se contaba a través de pequeños camareros robóticos que te traen los datos que pides. El objetivo era hacer que los temas técnicos complejos fueran más relacionables y fáciles de entender. También colaboré recientemente en un proyecto llamado Just JavaScript con Dan Abramov. Es un curso de JavaScript que enseña los modelos mentales centrales del lenguaje a través de diagramas visuales y animaciones. Así que trabajamos juntos para desarrollar todo este lenguaje visual que era un poco más formal que algunas de las otras ilustraciones que mostré. Cada pieza de sintaxis se correlaciona con una forma visual específica y usamos el sistema para explicar conceptos como asignar propiedades o mutación de objetos. No estoy repasando todo este trabajo para presumir, sólo quería daros contexto sobre el tipo de visuales de programación que he hecho en el pasado para que tengáis una idea de lo que quiero decir cuando digo imágenes de programación.

Así que en este proceso de transformar conceptos de programación en imágenes visuales cientos de veces, me he visto obligada a pensar mucho en la forma en que representamos y comunicamos ideas de programación complejas y he llegado a creer que las representaciones visuales tienen mucho que ofrecernos aquí en la tierra del código. En esta charla voy a mostraros cómo los visuales pueden hacer que los conceptos de programación sean menos abstractos, más fáciles de entender y más accesibles para más personas. También voy a mostraros por qué los visuales son tan especiales y resulta ser relativamente simple y es porque los visuales traen los invisibles conceptos abstractos de programación al mundo corpóreo. El mundo corpóreo es donde tú y yo vivimos. Todos los que están viendo esta charla tienen un cuerpo y lo usan para interactuar con objetos físicos a su alrededor y moverse por el espacio y experimentar eventos a lo largo del tiempo. Todo lo que sabes sobre el mundo está mediado por tu cuerpo y este hecho es tan fundamental que a veces lo olvidamos completamente. Y los conceptos de programación son ideas abstractas que no viven aquí en el mundo corpóreo con nosotros. Son objetos imaginarios y funciones que existen en el espacio liminal que parece que no obedece las mismas leyes de la física que nosotros. Y sólo podemos interactuar con ellos a través de esta experiencia desencarnada de teclear caracteres de texto lineales en un editor de código. Esto es precisamente lo que hace que la programación sea tan difícil. Estamos tratando de razonar y trabajar con cosas que no podemos ver ni tocar cuando somos criaturas que están evolutivamente adaptadas para funcionar en un mundo altamente visual, espacial y físico..

2. Las Limitaciones del Texto en la Programación

Short description:

Y creo que los visuales son una gran parte de cerrar esa brecha entre nuestro mundo humano encarnado y el mundo de la máquina desencarnada en el que estamos tratando de programar. Vamos a explorar este tema a través de tres preguntas. Primero, ¿qué está mal con el texto? Todos nuestros lenguajes, herramientas y documentación de programación actuales son abrumadoramente centrados en el texto. Si miramos la historia de la programación, está bastante claro cómo terminamos en un mundo tan cargado de texto. También hay muchas razones lógicas por las que confiamos tanto en el texto en la programación. La naturaleza abstracta del texto es lo que lo aleja de nuestras experiencias encarnadas en el espacio y el tiempo.

Y creo que los visuales son una gran parte de cerrar esa brecha entre nuestro mundo humano encarnado y el mundo de la máquina desencarnada en el que estamos tratando de programar. Entonces, aquí está el plan. Vamos a explorar este tema a través de tres preguntas.

Primero vamos a preguntar qué está mal con el texto, luego exploraremos qué pueden hacer los visuales que el texto no puede hacer, y finalmente haremos un breve recorrido histórico para averiguar por qué ya hemos intentado esto? Después de todo, no hay ideas nuevas bajo el sol y muchas, muchas personas en el pasado han explorado formas de hacer la programación más visual. Vamos a ver qué se ha intentado ya y qué oportunidades aún quedan por delante.

Entonces, primero, ¿qué está mal con el texto? Esta es una pregunta importante que hacer porque todo lo que hacemos en la programación se expresa en texto. Cada aplicación en la que has trabajado se ve así, ¿verdad? Es texto dispuesto en líneas que van de izquierda a derecha y de arriba a abajo. Aquí está cada sitio web de documentation que has usado. Aquí está cada entrada de blog que has leído. Todos nuestros lenguajes, herramientas y documentation de programación actuales son abrumadoramente centrados en el texto. A veces te encuentras con diagramas aquí y allá, pero son realmente escasos. Si tuviera que adivinar el equilibrio entre texto y visuales en nuestra industria, apostaría a que estamos en un 98% de texto y un 2% de visuales. Esto no se basa en una encuesta oficial y no pude encontrar a nadie que haya hecho una encuesta oficial, así que esto se basa simplemente en mi experiencia personal en la community de web development. Pero si te tomas un minuto y piensas en todo el code y la documentation con los que interactúas a diario, apuesto a que vas a llegar a una estimación similar.

Si miramos la historia de la programación, está bastante claro cómo terminamos en un mundo tan cargado de texto. Este es un ordenador, circa 1970. Notarás la falta de pantalla. Tenías un teclado y un montón de tarjetas perforadas, y lo único que podías hacer era escribir texto lineal para crear programas. Esta restricción de design significaba que todos nuestros primeros lenguajes de programación eran basados en texto, y una vez que estableces el texto como el paradigma principal de un campo, se vuelve realmente difícil alejarse de él. Especialmente en una industria donde confiamos tanto en las abstracciones de nivel inferior creadas por todos los programadores que nos precedieron. También hay muchas razones lógicas por las que confiamos tanto en el texto en la programación. Las palabras escritas y la sintaxis son un medio ideal para expresar la lógica abstracta. Es rápido de crear, es flexible, y es fácil de mover entre aplicaciones a través de copiar y pegar sin preocuparse por la compatibilidad. Puedes empaquetar una gran cantidad de información en un espacio muy pequeño, y puedes ser muy específico sobre lo que quieres decir, lo cual obviamente importa cuando estamos hablando con ordenadores que no tienen sentido de la sutileza.

Hasta ahora, el texto ha funcionado muy bien para nosotros en la programación. Pero algunas de las mayores fortalezas del texto también son sus mayores debilidades. La naturaleza abstracta del texto es lo que lo aleja de nuestras experiencias encarnadas en el espacio y el tiempo. Cuando hacemos code, estamos escribiendo un conjunto de instrucciones hipotéticas para ejecutar en la máquina de otra persona en algún momento en el futuro en un tiempo y lugar que nunca conoceremos. Este nivel de abstracción elimina las cualidades físicas, espaciales y encarnadas que los humanos dependen para entender el mundo que nos rodea. Esto puede ser bueno en algunos aspectos, ¿verdad? Si queremos escribir una función como fetch user data, no tenemos que definir el tamaño, la forma, o el color de la misma.

3. Visualizando Conceptos de Programación

Short description:

Los visuales como cajas y flechas pueden ayudar a explicar conceptos de programación, como la función fetch user data, a los principiantes. Al utilizar cualidades físicas familiares, como el tamaño, la forma, el color y las relaciones espaciales, podemos hacer que la programación sea más comprensible y accesible. Estos visuales aprovechan nuestro conocimiento encarnado preexistente para demostrar cómo funcionan los programas, lo cual el texto lineal por sí solo no puede lograr.

Es solo una simple función flotando en la tierra de la máquina. Si ya sabes qué es esta función y cómo funciona y dónde está ubicada, este nivel de brevedad es genial. Pero imagina a alguien nuevo en la programación que nunca ha escrito una función para fetch user data y no tiene un modelo mental preexistente de cómo podría funcionar. Una de las formas más fáciles y efectivas de hacerlo comprensible para ellos es explicar en términos familiares utilizando cualidades físicas que ya entienden como el tamaño, la forma, el color y las relaciones espaciales. Lo cual podría darnos algo como esto para ayudar a explicar qué hace una función fetch user data. El visual no tiene que ser locamente complejo o hermoso. Las cajas y flechas funcionan muy bien. Ciertamente estamos permitidos a usar etiquetas de texto para hacer la imagen clara. Visuales como este nos permiten usar nuestro conocimiento encarnado preexistente para mostrar cómo funcionan los programas de una manera que el texto lineal no puede.

4. Visuales y Metáforas Cognitivas en la Programación

Short description:

Los visuales revelan tres aspectos de la programación que no podemos ver en el texto lineal: metáforas fundamentales, mapeos espaciales y comportamiento del programa a lo largo del tiempo. Las metáforas en la programación son metáforas cognitivas basadas en nuestras experiencias encarnadas del mundo. Usamos metáforas para entender y comunicar conceptos abstractos. El campo de la metáfora cognitiva y la cognición encarnada, desarrollado en la década de 1980 por George y Mark Johnson, explora este tema extensamente.

Así que acabo de empezar a insinuar la pregunta que vamos a examinar en la segunda parte, que es ¿qué pueden ofrecernos los visuales que no podemos obtener del texto lineal? Creo que los visuales revelan tres aspectos de la programación que no podemos ver en el texto lineal. Revelan metáforas fundamentales incrustadas en nuestros lenguajes de programación. Revelan mapeos espaciales que usamos para razonar sobre cómo están estructurados nuestros programas y cómo se mueven los data a través de ellos, y revelan cómo se comportan nuestros programas y data a lo largo del tiempo. Estas cosas están todas implícitas en los programas que escribimos pero no se muestran explícitamente en el medio del texto lineal. Así que comencemos con las metáforas. Solo para asegurarnos de que todos estamos en la misma página, establezcamos que las metáforas son herramientas de pensamiento que nos permiten entender una cosa en términos de otra. Así que digamos que tenemos la cosa A aquí, que entendemos, y la cosa B, que no entendemos. Mapeamos las cualidades de la cosa A sobre ella. Si decimos que la corrupción es una enfermedad, entendemos que la corrupción se propaga, es difícil de superar, y si se deja sin controlar, puede matar. De manera similar decimos que la vida es un viaje. Hay muchos caminos que nuestra vida podría tomar y varían en longitud y todos tienen un comienzo y un destino final. Cuando hablo de metáfora en el contexto de la programación, no me refiero a las metáforas creativas fantasiosas que encuentras en la poesía como tomar el camino menos transitado y vagar solitario como una cloud. Esas se llaman metáforas figurativas o poéticas y son el tipo que a menudo se nos advierte que no usemos en tutoriales técnicos ya que las metáforas elaboradas y mal elegidas pueden ser más confusas que útiles. Estoy hablando de un tipo de metáfora mucho más fundamental que está en el corazón de todo el pensamiento abstracto incluyendo la programación. Estas se llaman metáforas cognitivas ya que permiten la cognición en un nivel mucho más profundo. Estas metáforas cognitivas se basan en nuestras experiencias encarnadas del mundo. Tenemos todas estas cosas no físicas que necesitamos comunicar entre nosotros como emociones y pensamientos e ideas y programming concepts. Para entenderlos y hablar de ellos, usamos nuestra experiencia del mundo físico que nos rodea como una metáfora. Si observamos la forma en que hablamos de cosas abstractas, esto se vuelve obvio. Hablamos de ideas en términos de luz cuando decimos que es una idea realmente brillante o que realmente iluminó el problema. Hablamos de las emociones como si fueran objetos. Diremos, él escondió su celos o ella no maneja muy bien la ira. También podemos usar metáforas de fuerza y movimiento para describir experiencias. Podemos decir encontré tu charla conmovedora o tu charla realmente me tocó. Programación en términos de temperatura. Tenemos recarga en caliente en React o el panorama de JavaScript se está calentando. Esta no es una teoría que acabo de inventar. Estos principios provienen del campo de la metáfora cognitiva y la cognición encarnada. Fueron desarrollados por primera vez en la década de 1980 por George y Mark Johnson quienes han escrito numerosos libros sobre este tema y se ha convertido en un área importante de investigación en la ciencia cognitiva. Estos dos libros, Filosofía en la Carne y Metáforas que Vivimos son dos de los principales Pero no puedo profundizar demasiado en ello aquí.

5. Metáforas Físicas Encarnadas en la Programación

Short description:

La programación se basa en gran medida en metáforas físicas encarnadas para cerrar la brecha entre el mundo abstracto de la máquina y nuestro mundo humano tangible. Usamos metáforas y abstracciones para simplificar el complejo proceso de programación y hacerlo más accesible. Estas metáforas sirven como un puente entre las puertas lógicas del microchip y los lenguajes de nivel superior que utilizamos.

Así que, esperemos que puedas hacer un doctorado sobre ello. Y al igual que cualquier otro tema abstracto que no podemos ver ni tocar, la programación se basa en gran medida en estas metáforas físicas encarnadas y tenemos que hacerlo porque la programación en sí es un juego de abstracciones, ¿verdad? Escribimos un archivo JavaScript y lo que realmente estamos haciendo es decirle a un microchip que cambie un montón de puertas lógicas usando pequeños pulsos eléctricos. Esto es tedioso y difícil para los humanos, por lo que hemos desarrollado una pila de metáforas elaboradas que lo hacen más rápido y fácil. Algunas personas podrían preferir llamar a estas abstracciones, pero para los propósitos de esta charla, asumamos que las metáforas y las abstracciones son más o menos lo mismo y podemos debatir las diferencias en Twitter más tarde.

6. Metáforas Visuales en React

Short description:

Simplificamos nuestro código binario en código de máquina en lenguajes de nivel superior como JavaScript en GUIs. Los componentes en React son contenedores que contienen conjuntos de elementos de UI. En React, los componentes están estructurados en un árbol jerárquico, similar a un árbol genealógico, lo que permite una fácil interacción con las máquinas. Los medios visuales facilitan la representación y explicación de React aprovechando nuestro conocimiento preexistente del mundo físico. Los conceptos espaciales, como arriba, abajo, izquierda, derecha, dentro, fuera, grande, pequeño, se utilizan como metáforas para entender los programas y su estructura.

Simplificamos nuestro code binario en code de máquina que simplificamos en lenguajes de nivel superior como JavaScript que simplificamos en GUIs. Y en cada paso de este proceso, estamos tratando de hacer que el mundo abstracto de la máquina se parezca a nuestro mundo humano tangible. Porque cuanto más nos acercamos al conocimiento intuitivo encarnado en el lado superior derecho de la scale, más fácil se nos hace entender lo que está sucediendo en un sistema.

Los componentes en React son un gran ejemplo de estas metáforas encarnadas en acción. Entonces, los componentes son esencialmente containers, ya sabes. Contienen conjuntos de elementos de UI para nosotros. Así que un componente de tarjeta podría tener una imagen, un botón y un párrafo dentro de él. La CPU que va a renderizar este componente en la pantalla no sabe nada sobre containers. Solo conoce el code de máquina y cómo hacer que los píxeles correctos se iluminen. El contenedor es una metáfora que necesitamos los humanos para gestionar y organizar el code que escribimos. La única razón por la que sabes lo que es un contenedor es porque cuando eras niño, vertiste arena en un cubo y la volviste a sacar. Y a través de este mundo físico, donde estás haciendo experiencia y aprendizaje encarnados, containers contienen cosas. Tienen interiores y exteriores. Tienen límites. Todos estos conceptos son esenciales y necesarios para que entiendas cómo funcionan los componentes en React. Así que tomemos otro. En React, estructuramos nuestros componentes en un árbol jerárquico donde todo está conectado de vuelta a un único componente raíz. Sabes lo que es un árbol por haber visto miles de árboles, y entiendes que tienen muchas ramas que se extienden desde una única raíz, una comprensión que te permite trabajar con árboles de componentes en React. La metáfora del árbol también es una especie de doble metáfora ya que se basa en la idea de un árbol genealógico. Tenemos componentes padres e hijos que heredan props de la misma manera que los niños heredan cualidades de sus padres, y estos conceptos que estamos tomando prestados del mundo humano nos permiten interactuar con las máquinas de una manera que es fácil y natural para nosotros. Y probablemente puedes ver a dónde voy con esto. Dado que tu comprensión de React se basa en tu conocimiento preexistente del mundo físico que te rodea, sería útil si pudiéramos hacerlo explícito en la forma en que representas y explicas React. Y los medios visuales nos permiten hacer esto. Ciertamente puedes leer sobre las estructuras de componentes de React y la transmisión de props, y luego formar una imagen mental en tu mente basada en tu comprensión de los árboles físicos y la herencia familiar, y luego aplicar ese conocimiento a la escritura de code lineal, todo sin verlo nunca explícitamente visualizado. Pero eso se llama hacerlo más difícil de lo que tiene que ser. Así que pasemos a la siguiente cualidad visual, el espacio. Como humanos con cuerpos, entendemos inherentemente una gran cantidad de conceptos espaciales como arriba, abajo, izquierda, derecha, dentro, fuera, grande, pequeño, y usamos metáforas al igual que usamos conceptos físicos para entender los programas. También usamos conceptos espaciales para hablar de la estructura y el comportamiento de los programas. Si piensas en la forma en que hablamos de internet, hay direcciones físicas muy claras para ello.

7. Principios Espaciales y Cambio a lo Largo del Tiempo

Short description:

Usamos principios espaciales de nuestra experiencia encarnada del mundo para hablar y entender React. Los visuales podrían ser útiles porque nos permiten ver múltiples puntos en el tiempo dentro de un solo marco. Veamos la sintaxis del hook use effect como un ejemplo de esto. Aquí hay cuatro versiones diferentes del hook use effect que se comportarán de manera diferente cuando se ejecuten en el navegador.

Subimos data a la cloud sobre nosotros y descargamos archivos a nuestros escritorios. Miramos a través de una ventana del navegador. Navegamos por las páginas web moviéndonos de izquierda a derecha. Por lo tanto, las páginas que visitaste en el pasado están a la izquierda y las páginas a las que vas en el futuro están a la derecha. Este formato se basa en nuestra cartografía cultural occidental del tiempo al espacio. Pensamos que el pasado está a la izquierda y el futuro a la derecha, pero no todas las culturas hacen eso.

Específicamente en React, usamos nuestra comprensión de las direcciones verticales para pensar en cómo se mueven los data. React tiene un orden jerárquico de dos componentes y los componentes padres están por encima de los hijos y pasan data hacia abajo, lo que significa que tenemos gravedad en la tierra de React. La idea de la perforación de propiedades es otra que sugiere perforar hacia abajo, por lo que tienes que pasar data profundamente en tu árbol, por lo que también tiene profundidad. Cuando hablamos de efectos secundarios, estamos usando nuestra comprensión de que hay un centro y una periferia donde las cosas suceden al margen, por lo que cuando ejecutamos una función como un set timeout dentro de un hook use effect, entendemos que está accediendo a algo fuera de nuestro componente central. Podría seguir. Nuestras aplicaciones tienen frontends y backends, fusionas objetos, captas la idea aquí. Usamos principios espaciales de nuestra experiencia encarnada del mundo para hablar y entender React. Cuando creamos visuales que muestran estos principios espaciales explícitamente, aclara lo que ya estamos haciendo en nuestras cabezas.

Nuestro elemento final aquí es el cambio a lo largo del tiempo. Cuando trabajamos en un editor de texto lineal, el tiempo es esencialmente invisible. Estamos mirando una representación estática que describe una serie completa de eventos futuros que pueden o no suceder dependiendo de qué botón haga clic un usuario o si nuestra solicitud de data se resuelve. Nos vemos obligados a usar nuestra imaginación para predecir lo que va a suceder en todos esos potenciales futuros, en lugar de poder verlo de alguna forma. Nuestra mejor técnica actual para tratar de ver cómo cambian las cosas con el tiempo es el registro de console data en el camino. El registro de console se siente como tratar de hacer que un programa envíe señales a la superficie de un oscuro océano donde todo se está ejecutando fuera de la vista. No podemos ver nada sucediendo allí abajo y tenemos que seguir pidiendo clues sobre cómo está cambiando la data, lo que no parece la mejor developer experience. Aquí es donde los visuales podrían ser útiles nuevamente porque nos permiten ver múltiples puntos en el tiempo dentro de un solo marco. Nos permiten comparar cosas lado a lado de una manera que no podemos con el texto lineal. Básicamente nos permiten jugar a encontrar las diferencias. Veamos la sintaxis del hook use effect como un ejemplo de esto. Aquí hay cuatro versiones diferentes del hook use effect que se comportarán de manera diferente cuando se ejecuten en el navegador. El primero no tiene matriz de dependencia. El segundo tiene una vacía. El tercero tiene el valor count como una dependencia, y el cuarto también tiene count como una dependencia y ejecuta una función de limpieza. Solo mirando estas cuatro versiones de sintaxis, ¿tienes alguna forma de saber cómo se va a ejecutar esta función una vez que se cargue en el navegador? Específicamente, ¿sabes con qué frecuencia se va a llamar y cuándo? Dada la demografía de esta audiencia, apuesto a que sí.

8. Visualizando el Comportamiento del Hook use effect

Short description:

Para entender mejor cómo se comporta el hook use effect con el tiempo, he creado diagramas visuales que demuestran las diferencias de comportamiento en función de diferentes escenarios. Al representar visualmente los cambios a lo largo del tiempo, podemos obtener una comprensión más profunda de cómo funciona el hook use effect.

Es porque has memorizado el significado sintáctico aquí en lugar de saber porque la respuesta es visible en nuestra sintaxis. Lo que necesitamos hacer aquí es comparar cuatro cosas que se comportan de manera diferente con el tiempo. La mejor manera de hacer eso es mostrar visualmente qué cambia con el tiempo. He hecho un conjunto simple de diagramas que intentan mostrar la diferencia entre estos cuatro en una línea de tiempo. Aquí está nuestra primera versión sin dependencia en la RRA. La función use effect se llama en cada renderizado, independientemente de si nuestra variable count se actualiza o no. Aquí está nuestra segunda versión donde el array de dependencia está vacío, por lo que la función de efecto de usuario solo se llama en el renderizado inicial, y todavía no nos importa lo que la variable count esté haciendo. En nuestra tercera versión, con count en el array de dependencia, use effect se llama solo cuando count se actualiza, lo que provoca un nuevo renderizado. En nuestra versión final, use effect se llama en las actualizaciones de count y ejecuta una función de limpieza después. Incluso si quitamos las etiquetas en estos, esta simple representación visual de cómo use effect se comporta con el tiempo nos da una comprensión mucho mejor de cómo funciona que la sintaxis lineal es capaz de hacerlo.

9. Explorando la Programación Visual

Short description:

La programación visual se ha explorado en el pasado incorporando interfaces gráficas de usuario en los IDEs. Sin embargo, estos intentos han enfrentado desafíos de diseño y escepticismo. La programación visual sigue siendo relativamente de nicho, pero el movimiento de no código y bajo código muestra promesa. En lugar de construir lenguajes de programación visual, el enfoque ha cambiado hacia el desarrollo de interfaces visuales para casos de uso específicos en programación. Aunque construir un verdadero medio de programación visual es un desafío, hay formas más fáciles de avanzar en este esfuerzo a corto plazo.

Entonces, parte tres, ¿no lo hemos intentado ya? Obviamente, no soy la primera persona en darse cuenta de que los medios visuales nos permiten entender y razonar de formas que vale la pena explorar en la programación. La forma principal en que las personas han intentado incorporar elementos visuales en la programación en el pasado es pegando interfaces gráficas de usuario en los IDEs. Estos esfuerzos caen bajo el paraguas de lo que se llama programación visual.

Ha habido muchos, muchos intentos pasados en esto con grados variables de éxito. Voy a repasar rápidamente algunos ejemplos para que tengas una idea de lo que ya se ha intentado. El primer lenguaje de programación visual fue el Sketchpad de Ivan Sutherland en 1963. Este es Grail de 1968 donde pusimos texto en cajas por primera vez. Este es Pygmalion de 1975 que se basó en ese modelo de caja y flecha. Este es LabVIEW que salió en 1986 y se usa para ingeniería de sistemas y nos volvimos mucho más intensos acerca de las cajas en esta etapa. Aquí hay un ejemplo más moderno. Este es Blueprint en Unreal Engine, que se utiliza para el desarrollo de juegos 3D. Este es Max MSP, que se utiliza ampliamente para construir experiencias audiovisuales. Aquí está Touch Designer, también para multimedia interactiva. Este es Origami Studio, una herramienta de prototipado construida por Facebook. Notarás que el patrón de diseño de nodos y cables es muy popular en muchos de estos.

Entonces, hay muchas cosas prometedoras en estos ejemplos, pero la programación visual sigue siendo relativamente de nicho. También hemos descubierto un montón de desafíos de diseño realmente difíciles de resolver. Estos sistemas no escalan bien, a veces usan símbolos ambiguos y patrones de interfaz desconocidos. Intentan convertir todo en una caja, lo que ocupa demasiado espacio en la pantalla. Puede llevar a un código literalmente espagueti. Este es un prototipo de Figma que salió muy mal. Estos problemas han llevado a mucho escepticismo sobre la viabilidad de la programación visual. Ser un defensor de ella a menudo se siente como ser Gretchen en Mean Girls. La programación visual ciertamente no está muerta, sin embargo. Curiosamente, el nuevo movimiento de no código y bajo código parece programación visual bajo un nuevo nombre. Muchos de los patrones de interfaz que ayuda a desarrollar la programación visual son visibles en herramientas como IntegroMet y Zapier y Webflow. Pero en lugar de intentar construir lenguajes de programación visual que puedan alcanzar escalas industriales, hemos pasado tácticamente a desarrollar interfaces visuales para casos de uso específicos en programación con restricciones sensatas. Soy un gran fan de la agenda de programación visual y encontrar formas de agregar más posibilidades visuales en las herramientas actuales de desarrollo y hay muchas personas inteligentes e impresionantes trabajando en el problema, pero en muchos aspectos, está tomando el camino difícil. Construir un verdadero medio de programación visual requerirá superar un montón de desafíos de diseño y cultura e ingeniería y, francamente, va a llevar un tiempo.

10. Avanzando en los Esfuerzos de Programación Visual

Short description:

Podemos esparcir visuales en nuestro mundo textual existente agregando diagramas, ilustraciones y plugins. Se necesitan más visuales para revelar metáforas, significado espacial y cambio a lo largo del tiempo en la programación. Los desarrolladores deben aprender de la historia de la programación visual, incorporar posibilidades visuales en sus herramientas y utilizar explicaciones y documentación visual. Consulta a George Laycoff, Mark Johnson, Barbara Javersky, Brett Victor, futureofcoding.org y el libro Visual Explanations de Edward Tufte para obtener más información.

Pero hay formas más fáciles de avanzar en este esfuerzo a corto plazo. Simplemente podemos esparcir algunos visuales en nuestro mundo textual existente, lo que significa agregar más diagramas e ilustraciones en publicaciones de blog, documentation y materiales de aprendizaje y si nos sentimos valientes, construyendo plugins para nuestros editores y herramientas de desarrollo que visualicen elementos muy pequeños de nuestros programas. Esta es esencialmente la versión de prototipo de papel de bajo tecnología de la construcción de una interfaz de programación visual completamente desarrollada.

Entonces, para concluir, aquí está lo que quiero que te lleves de esta charla. Necesitamos más visuales que revelen metáforas, significado espacial y cambio a lo largo del tiempo para hacer la programación más fácil para todos. Te facilitará a ti, ya que eres un humano encarnado que necesita aprender conceptos abstractos de programming concepts para hacer bien tu trabajo. Facilitará a todas las personas que actualmente no saben cómo programar pero están tratando de aprender y facilita a las personas que no son desarrolladores pero necesitan entender lo que hacemos, como los gerentes de producto y diseñadores que no pueden leer todo el argot en nuestra documentation pesada en texto.

Entonces, ¿qué debe hacer un desarrollador? Estoy seguro de que eres un humilde pero hábil desarrollador de React y quieres ayudar a avanzar en este objetivo. Primero, sugiero encarecidamente que investigues la historia de la programación visual y algunos de los pasados intentos en este campo. Hay mucho buen arte previo del que aprender. Si eres un creador actual o futuro de herramientas para otros desarrolladores, deberías considerar formas de incorporar posibilidades visuales en tus bibliotecas, plugins, aplicaciones o frameworks. Y finalmente, deberías usar y abogar por explicaciones visuales y documentation y tutoriales. Eso podría significar hacerlos para tus propias publicaciones de blog o colaborar con diseñadores si trabajas en proyectos más grandes con mucha documentation. Así que podemos poner el listón bajo por ahora. Estamos tratando de mover esta estadística falsa hasta, digamos, el diez por ciento. Así que eso fue mucha información empaquetada en una charla. Definitivamente esto fue más una degustación que una comida completa, así que he reunido una lista de algunas cosas que puedes buscar en Google para aprender más sobre este tema. Estos estarán en mi sitio web. George Laycoff y Mark Johnson son los que trabajaron en metáforas cognitivas. El trabajo de Barbara Javersky sobre cognición encarnada es genial. Literalmente todo lo que Brett Victor ha hecho vale la pena tu tiempo. Y hay algunos recursos realmente geniales en futureofcoding.org, son algo así como una community de entusiastas de la programación visual. Y el libro Visual Explanations de Edward Tufte es realmente genial para obtener advice. Así que muchas gracias por escuchar. Publicaré estos en mi sitio web, maggieappleton.com, donde tengo más escritos sobre metáforas y programación visual y ese tipo de cosas. Y puedes enviarme un tweet a @mappletons. Increíble. Gracias, Maggie. Por favor, ven y únete a mí en la oficina. Eso fue realmente increíble.

11. Llegando a las Metáforas Visuales

Short description:

Al llegar a una metáfora visual, razono verbalmente a través de ella y confío en la lingüística para analizar el lenguaje utilizado en torno al concepto. Presto atención a las palabras físicas utilizadas en la documentación, como mover, pasar y términos espaciales, para diseñar la metáfora.

Y la gente tiene muchas preguntas. Así que vamos directo al grano. L, la letra, pregunta ¿cómo llegas a una metáfora visual? ¿Es algo que forms inconscientemente mientras te relacionas con el concepto? ¿O razonas verbalmente a través de ello? Definitivamente razono verbalmente a través de ello e investigo. Así que confío mucho en la lingüística y en el tipo de técnicas que los lingüistas utilizan para analizar el lenguaje que usamos en torno a las cosas. Así que cuando estoy tratando de design una metáfora para una cierta tecnología, leo los docs y realmente presto atención a las palabras que están usando. Y casi siempre están usando palabras físicas. Están moviendo, pasando, ya sabes, cosas espaciales. Están hablando de cómo las cosas están dispuestas en el espacio aunque sólo estén escribiendo en texto lineal. Pero presto mucha atención al lenguaje.

12. Pegatinas, Colaboración, Herramientas y Metáforas

Short description:

Hay interés en pegatinas y merchandising, pero no tengo una tienda. La colaboración con el equipo de documentación de React está en progreso. Para una exploración más profunda, visita mi sitio web. Utilizo un iPad con Procreate para las ilustraciones. Las metáforas pueden ser interpretadas de manera diferente por diferentes culturas, pero en la comunidad de desarrollo web, tenemos una comprensión compartida.

Hay más de una pregunta preguntando si tienes pegatinas o merchandising de tus ilustraciones. ¡La gente necesita más Maggie! No vendo nada personalmente. Egghead tiene un sitio de merchandising donde venden algunas de las pegatinas de ilustración del curso. Pero también tendemos a regalarlas gratis cuando aparecemos en conferencias. Pero no tengo una tienda de merchandising organizada. Lo siento.

Y de manera similar, de nuevo, la gente realmente está interesada. ¿Hay alguna posibilidad de una colaboración con el nuevo equipo de documentación beta de React? Creo que estoy autorizada para decir. Podría tener algunas visuales en la nueva documentación de React. Increíble. Están en progreso.

Uh, sí. Lo sé, ¿verdad? ¿Qué recursos recomendarías para alguien que quiere explorar estos conceptos más a fondo? Sé que mencionaste un par. ¿Pero hay algo más que te gustaría añadir? Creo que lo mejor es quizás ir a mi sitio web donde tengo esa lista en la sección de programación de imágenes. Añadiré más allí. Porque tengo una lista larga. Pero llevaría un tiempo leerlas todas.

Un par de personas están interesadas en las herramientas. ¿Qué usas para dibujar, para añadir tus ilustraciones a la presentación, etc.? Todas las ilustraciones que dibujo hoy en día son en un iPad con Procreate. Solía dibujar más en Photoshop en un Cintiq. Para ser honesta, son casi intercambiables y el iPad es simplemente mejor. Hemos tenido avances mucho mejores en hardware y software en los últimos cinco años que el iPad es una especie de estado del arte.

Esta es una interesante. ¿Crees que ... Estoy seguro de que hay. ¿Existe potencialmente un problema de que las metáforas sean interpretadas de manera diferente por diferentes países y culturas y cómo pensamos en eso? Definitivamente hay en que las metáforas son increíblemente culturales. Casi todas las metáforas que usamos están delimitadas al país en el que estamos y el idioma que estamos hablando. Dado el hecho de que React y la comunidad de desarrollo web es un lugar bastante unificado y todos tenemos una comprensión bastante compartida de metáforas y símbolos. Encuentro que no es tan difícil encontrar metáforas que se relacionen con todos. Aunque, siempre estoy consciente de que si alguien en otro país que no tiene muchas de las mismas asociaciones que nosotros lo ve, hay una buena posibilidad de que puedan perder matices de ello.

13. Aprovechando las metáforas existentes en la programación

Short description:

¿Deberíamos aprovechar las metáforas existentes en los lenguajes de programación y los marcos? El diseño de los lenguajes de programación incorpora metáforas que se consideran apropiadas. Cuando no hay una metáfora clara, se hace necesario inventar una.

Eso es algo que debes considerar caso por caso. Necesitaremos Maggies en todos los países y en todas las zonas horarias, por si acaso. ¿Deberíamos, crees tú, estar aprovechando las metáforas existentes que ya están en nuestros lenguajes de programación y frameworks? ¿O intentar optimizar para aquellas que quizás comunican algo bien? Esa es una buena pregunta. Casi se convierte en una pregunta de diseño de lenguaje de programación. Me gusta suponer que las personas que diseñaron el lenguaje de programación pensaron lo suficiente en abstracciones y en el lenguaje de la API que las metáforas que han elegido, ya sea consciente o inconscientemente, son las correctas. No intento inventar nuevas de la nada si estoy tratando de dibujar algo que realmente pretende explicar el punto. Pero a veces, si no parece que haya una metáfora clara, es cuando te metes en la invención de una que se ajuste a las necesidades. Sí. Eso es realmente genial. Hay un par aquí que son personas que quieren saber un poco más sobre ti y tu proceso. ¿Empezaste a programar y luego te metiste en el diseño, o viceversa? ¿Cuál es un poco más tu proceso para convertir los conceptos de programación en? Mencionaste leer un poco la documentación. ¿Hay algo más que haces? La documentación y luego hago cosas como navegar por Reddit y Twitter y simplemente busco el lenguaje que la gente común usa alrededor de lo que sea la tecnología, si eso responde la pregunta. ¿Y cuál vino primero? Más o menos ambos al mismo tiempo. Empecé a jugar con HTML cuando tenía 12 años y había mucho deseo de hacer cosas bonitas en la web fue el impulso allí. Así que siempre he hecho ambos y he pasado por diferentes períodos de intensidad para cada uno. Creo que cuando empecé a aprender React hace seis años, me metí mucho más en la programación durante unos años y estaba principalmente diseñado antes de eso. Pero siempre he ido y venido. ¿Haces... esto es solo yo pensando, haces muchos dibujos en papel y lápiz alguna vez? Sí. Como, casi todos mis dibujos comienzan en notas adhesivas con un lápiz, y el iPad es realmente solo el paso final, pero hay muchos bocetos en el medio donde estoy simplemente averiguando cosas, y la versión final pulida casi nunca es la que lleva tiempo o el mayor esfuerzo. ¿Alguna vez encuentras un dibujo y no recuerdas para qué era? ¿Hago qué? ¿Encuentras un dibujo y no recuerdas para qué era? Oh, sí. No, sí. Miro hacia atrás, como, de la misma manera que encuentras notas de hace 10 años y dices, no entiendo ni siquiera qué se suponía que debía ser esto. Tenemos tiempo para una más. Drew pregunta, ¡ayuda! Soy terrible en el diseño y el dibujo. ¿Qué puedo hacer? Ooh. Tengo en mi sitio web, una lista completa de todos mis cursos y libros favoritos y enlaces y cosas que tratan sobre las tecnicidades de cómo dibujas bien un círculo, cómo haces que una cara humana parezca una cara humana? Ese tipo de contenido de dibujo técnico, eso, sí. Los recursos en mi sitio web serán un buen recurso para ti. Muchas gracias, Maggie, por tu tiempo. Encuentra a Maggie en internet. Claramente grandes recursos allí. Un gran agradecimiento a Maggie, por favor.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

React Advanced Conference 2022React Advanced Conference 2022
25 min
A Guide to React Rendering Behavior
Top Content
React is a library for "rendering" UI from components, but many users find themselves confused about how React rendering actually works. What do terms like "rendering", "reconciliation", "Fibers", and "committing" actually mean? When do renders happen? How does Context affect rendering, and how do libraries like Redux cause updates? In this talk, we'll clear up the confusion and provide a solid foundation for understanding when, why, and how React renders. We'll look at: - What "rendering" actually is - How React queues renders and the standard rendering behavior - How keys and component types are used in rendering - Techniques for optimizing render performance - How context usage affects rendering behavior| - How external libraries tie into React rendering
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Building Better Websites with Remix
Top Content
Remix is a new web framework from the creators of React Router that helps you build better, faster websites through a solid understanding of web fundamentals. Remix takes care of the heavy lifting like server rendering, code splitting, prefetching, and navigation and leaves you with the fun part: building something awesome!
React Advanced Conference 2023React Advanced Conference 2023
33 min
React Compiler - Understanding Idiomatic React (React Forget)
Top Content
React provides a contract to developers- uphold certain rules, and React can efficiently and correctly update the UI. In this talk we'll explore these rules in depth, understanding the reasoning behind them and how they unlock new directions such as automatic memoization. 
React Advanced Conference 2022React Advanced Conference 2022
30 min
Using useEffect Effectively
Top Content
Can useEffect affect your codebase negatively? From fetching data to fighting with imperative APIs, side effects are one of the biggest sources of frustration in web app development. And let’s be honest, putting everything in useEffect hooks doesn’t help much. In this talk, we'll demystify the useEffect hook and get a better understanding of when (and when not) to use it, as well as discover how declarative effects can make effect management more maintainable in even the most complex React apps.
React Summit 2022React Summit 2022
20 min
Routing in React 18 and Beyond
Top Content
Concurrent React and Server Components are changing the way we think about routing, rendering, and fetching in web applications. Next.js recently shared part of its vision to help developers adopt these new React features and take advantage of the benefits they unlock.In this talk, we’ll explore the past, present and future of routing in front-end applications and discuss how new features in React and Next.js can help us architect more performant and feature-rich applications.
React Advanced Conference 2021React Advanced Conference 2021
27 min
(Easier) Interactive Data Visualization in React
Top Content
If you’re building a dashboard, analytics platform, or any web app where you need to give your users insight into their data, you need beautiful, custom, interactive data visualizations in your React app. But building visualizations hand with a low-level library like D3 can be a huge headache, involving lots of wheel-reinventing. In this talk, we’ll see how data viz development can get so much easier thanks to tools like Plot, a high-level dataviz library for quick & easy charting, and Observable, a reactive dataviz prototyping environment, both from the creator of D3. Through live coding examples we’ll explore how React refs let us delegate DOM manipulation for our data visualizations, and how Observable’s embedding functionality lets us easily repurpose community-built visualizations for our own data & use cases. By the end of this talk we’ll know how to get a beautiful, customized, interactive data visualization into our apps with a fraction of the time & effort!

Workshops on related topic

React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
React Advanced Conference 2021React Advanced Conference 2021
132 min
Concurrent Rendering Adventures in React 18
Top Content
Featured WorkshopFree
With the release of React 18 we finally get the long awaited concurrent rendering. But how is that going to affect your application? What are the benefits of concurrent rendering in React? What do you need to do to switch to concurrent rendering when you upgrade to React 18? And what if you don’t want or can’t use concurrent rendering yet?

There are some behavior changes you need to be aware of! In this workshop we will cover all of those subjects and more.

Join me with your laptop in this interactive workshop. You will see how easy it is to switch to concurrent rendering in your React application. You will learn all about concurrent rendering, SuspenseList, the startTransition API and more.
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
React Hooks Tips Only the Pros Know
Top Content
Featured Workshop
The addition of the hooks API to React was quite a major change. Before hooks most components had to be class based. Now, with hooks, these are often much simpler functional components. Hooks can be really simple to use. Almost deceptively simple. Because there are still plenty of ways you can mess up with hooks. And it often turns out there are many ways where you can improve your components a better understanding of how each React hook can be used.You will learn all about the pros and cons of the various hooks. You will learn when to use useState() versus useReducer(). We will look at using useContext() efficiently. You will see when to use useLayoutEffect() and when useEffect() is better.
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript, and TDD
Top Content
Featured WorkshopFree
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
React Advanced Conference 2021React Advanced Conference 2021
145 min
Web3 Workshop - Building Your First Dapp
Top Content
Featured WorkshopFree
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn