0:00:00.000,0:00:04.140 De acuerdo. Gracias, Brittany, sí, así que como dijo Brittany 0:00:04.140,0:00:10.680 soy un colega de Brittany justo al final del pasillo, dirijo el Developer Experience Design Lab donde 0:00:10.680,0:00:14.220 llevamos a cabo estudios de los desarrolladores y tratamos de construir nuevas herramientas de programación. 0:00:16.140,0:00:20.400 Así que imaginen que están depurando un problema de entrada, por lo que están buscando en algún juego de la serpiente, 0:00:21.120,0:00:22.500 están tratando de conseguir que la serpiente se mueva, 0:00:22.500,0:00:25.860 están introduciendo las teclas arriba abajo izquierda derecha, 0:00:25.860,0:00:29.880 pero parece que no funciona bien. ¿Y qué hacen? 0:00:31.320,0:00:34.140 Una cosa que pueden intentar es añadir algunos puntos de control, 0:00:34.140,0:00:38.460 así que traten de encontrar los controladores de entrada para todos estos eventos de teclado y 0:00:38.460,0:00:42.540 vean lo que sucede cuando son invocados. Pero esto no es lo único que pueden hacer. 0:00:42.540,0:00:45.660 Una forma diferente de tratar de depurar esto es sólo empezar por el final, 0:00:45.660,0:00:49.260 para empezar en la salida, hay que ir a buscar la declaración 0:00:49.260,0:00:53.220 que está generando la salida y luego tratar de seguir el flujo de datos hacia atrás 0:00:53.940,0:00:57.300 para ver, más o menos, en qué punto el flujo de datos no se ve del todo bien. 0:00:58.680,0:01:02.220 Y hay todo tipo de otros enfoques que se pueden imaginar y un montón de variaciones 0:01:02.220,0:01:05.340 sobre estos enfoques. Pero a menudo en la práctica 0:01:05.340,0:01:09.840 esto acaba siendo Stack Overflow, por supuesto. Pero, ¿cómo elegir el enfoque correcto? 0:01:10.920,0:01:15.420 De lo que quiero hablarles hoy es de una forma en la que pueden intentar hacer crecer sus cajas de herramientas de una forma 0:01:15.420,0:01:20.340 que es más deliberada, verdad?, que accidental. Y me gustaría tratar de darles una herramienta que intenta 0:01:20.340,0:01:26.160 rescatarlos de tu peor yo. Y quiero hablarles de una versión de tu 0:01:26.160,0:01:29.100 que está haciendo un trabajo interesante y resolviendo problemas difíciles, 0:01:29.100,0:01:33.660 cuyos colegas vienen a ellos porque simplemente tienen una manera diferente de ver las cosas. 0:01:34.620,0:01:39.060 Y la salsa secreta que voy a intentar darles hoy es esta idea de una estrategia de programación. 0:01:39.060,0:01:44.040 Una estrategia de programación es sólo un procedimiento para llevar a cabo una tarea de programación. 0:01:44.040,0:01:45.060 Es decir, 0:01:45.060,0:01:48.780 ofrece este lenguaje para dar forma a cómo se produce el esfuerzo de ingeniería de software. 0:01:50.400,0:01:53.640 La mayor parte de la programación se trata de resolver problemas, 0:01:53.640,0:01:56.880 por lo que desea solucionar algún problema, y la forma de hacerlo es, 0:01:56.880,0:02:00.060 ya sabes, en primer lugar encontrar un defecto y luego intentar 0:02:00.060,0:02:04.920 rastrear la salida hacia atrás para encontrar el defecto y para rastrear la salida hacia atrás que necesita para 0:02:04.920,0:02:09.720 encontrar dónde se genera la salida por primera vez. Así que cada vez que ustedes están pasando por uno de 0:02:09.720,0:02:13.800 estos problemas, que siempre tienen estos problemas anidados que ustedes están tratando de resolver. 0:02:13.800,0:02:17.880 Y los psicólogos han mirado durante mucho tiempo cómo los seres humanos resolvemos problemas 0:02:17.880,0:02:23.520 y una gran parte de esto es sólo ensayo y error. Así que la resolución de problemas es a menudo como un laberinto donde 0:02:23.520,0:02:25.680 los seres humanos están tratando de elegir qué camino seguir 0:02:25.680,0:02:30.360 y la gente acaba retrocediendo mucho cuando las elecciones no salen como uno espera. 0:02:31.800,0:02:37.020 Así que la estrategia de programación sólo te da una manera de tratar de navegar este laberinto de manera más eficaz. 0:02:38.520,0:02:43.620 Y hay pruebas de que con el tiempo los desarrolladores experimentados aprenden a utilizar estrategias 0:02:43.620,0:02:50.820 que les ayudan a trabajar más eficazmente. Entonces, ¿cómo pueden aprender la estrategia de otro desarrollador? 0:02:52.560,0:02:55.620 Pueden pedirle a alguien que la escriba e intentar seguirla. 0:02:55.620,0:02:59.460 Pero hemos descubierto que esto no es tan fácil como parece. 0:02:59.460,0:03:04.200 Así que como un desarrollador que tienen una tendencia a leer toda la estrategia de una sola vez en lugar de 0:03:04.200,0:03:08.400 ir a través de todo paso a paso y luego tratar de usarla, ustedes 0:03:08.400,0:03:12.540 pueden perder la pista de dónde se encuentran en esa estrategia y, ya sabes, olvidar, como lo que están tratando de 0:03:12.540,0:03:17.160 hacer a continuación y tener que empezar de nuevo desde el principio. O podrían intentar seguirla durante un tiempo, seguir 0:03:17.160,0:03:22.260 confundido, y luego simplemente volver a hacer lo que era el enfoque que de otro modo estarían haciendo antes. 0:03:23.640,0:03:26.520 Y esto tiene sentido. Siempre que estén resolviendo un problema 0:03:26.520,0:03:30.240 hay un montón de lo que se llama la carga cognitiva, hay un montón de cosas a las que ustedes están tratando de prestar 0:03:30.240,0:03:31.860 atención. Es decir, 0:03:31.860,0:03:36.120 es difícil prestar atención al problema y aprender algo nuevo al mismo tiempo. 0:03:37.020,0:03:40.560 Así que el hábito es muy fuerte y termina siendo muy difícil de superar. 0:03:42.120,0:03:45.480 Así que para ayudar a hacer frente a esto inventamos una manera de tratar de aprender una estrategia. 0:03:46.020,0:03:50.820 Construimos lo que llamamos un rastreador de estrategias. Y la idea es que te permita ir paso a paso 0:03:50.820,0:03:55.560 a través de la estrategia y sólo te ayuda a realizar un seguimiento de dónde se encuentran en la estrategia 0:03:56.340,0:03:58.680 y simplemente tomar notas a medida que trabajan. 0:03:59.640,0:04:04.380 E incluso inventamos esta notación más formal para describir estas estrategias 0:04:05.100,0:04:08.100 que luego nos llevó a construir un intérprete que ayuda al 0:04:08.100,0:04:13.560 rastreador de estrategias a realizar un seguimiento del flujo de control para determinar qué paso mostrar al desarrollador a continuación. 0:04:13.560,0:04:19.320 E incluso podemos hacer cosas como ayudar al desarrollador a tratar de recordar qué hacer más tarde 0:04:19.320,0:04:23.280 por tener que escribir las cosas que acabamos de asignar a una variable 0:04:23.280,0:04:26.520 y entonces podemos hacer referencia de esa variable más adelante en la estrategia 0:04:26.520,0:04:30.720 cuando el desarrollador tiene que volver a algo más adelante en la estrategia. 0:04:32.220,0:04:34.920 Así entonces, utilizando esta notación, si desea escribir detalladamente la 0:04:34.920,0:04:39.720 estrategia que explica cómo depurar haciendo búsqueda de flujo de datos hacia atrás, 0:04:39.720,0:04:41.700 ustedes pueden hacer eso en nuestra notación. 0:04:48.180,0:04:50.700 Así que encontramos que con todo esto 0:04:52.320,0:04:55.800 hemos sido capaces de permitir con éxito a un desarrollador para cambiar las estrategias 0:04:57.240,0:05:00.660 y para este defecto, el cambio a una búsqueda hacia atrás 0:05:01.800,0:05:06.480 les ayuda a trabajar mejor. Y de hecho les ayudó a 0:05:06.480,0:05:09.360 progresar más de lo que habrían podido progresar de otro modo 0:05:09.360,0:05:13.080 porque esa estrategia era un mejor ajuste para el problema que estaban tratando de resolver. 0:05:16.140,0:05:20.520 Pero, ¿dónde se encuentran las estrategias? ¿Podemos irnos y preguntar a experimentados 0:05:20.520,0:05:24.000 que empiecen a escribirlas? Así que es posible que estas 0:05:24.000,0:05:28.320 estrategias podrían ser lo que se llama conocimiento tácito, que los desarrolladores simplemente aprendan la nueva estrategia 0:05:28.320,0:05:32.700 pero nunca se dan cuenta de que la están siguiendo, y porque es tácito no es algo que 0:05:32.700,0:05:34.860 podrían tratar de escribir explícitamente y explicar. 0:05:36.240,0:05:38.700 Entonces, ¿son tácitas? De nuevo intentamos averiguarlo, 0:05:38.700,0:05:42.420 y acabamos de pedir a los desarrolladores que nos escriban algunas estrategias. 0:05:42.960,0:05:46.560 Y descubrimos que en gran medida podían hacerlo. Descubrimos que 0:05:46.560,0:05:50.040 los desarrolladores son capaces de escribir todo tipo de estrategias para todo tipo de problemas. 0:05:50.880,0:05:54.300 Pero a menudo es difícil escribir buenas estrategias porque es 0:05:54.300,0:05:58.860 a menudo difícil de generalizar la estrategia, para pasar por el proceso de probarlo, 0:05:58.860,0:06:02.460 para asegurarse de que funciona en todas las diferentes variantes del problema que pueda tener, 0:06:02.460,0:06:07.080 y para tratar de tomar la perspectiva de un usuario de la estrategia que podría no 0:06:07.080,0:06:11.700 tener exactamente la experiencia que tienes y ser capaz de explicar las cosas en el nivel adecuado 0:06:11.700,0:06:18.660 de detalle que otra persona pueda seguir. Pero descubrimos que los desarrolladores de estas buenas 0:06:18.660,0:06:22.680 estrategias pueden tratar de utilizarlos para resolver un problema de programación, 0:06:23.580,0:06:28.080 simplemente a menudo tienen los mismos tipos de desafíos que la gente tiene en la escritura de ellos, 0:06:28.860,0:06:31.860 donde, ya sabes, puede haber pasos que faltan, puede haber ambigüedad, 0:06:32.520,0:06:34.920 podría no decirle cómo utilizar todas estas herramientas. 0:06:35.940,0:06:41.040 Así que la principal conclusión de estos dos resultados es que con el fin de construir este 0:06:41.040,0:06:46.440 proceso, para compartir con éxito las estrategias, es realmente importante tener un proceso de retroalimentación. 0:06:47.040,0:06:50.880 O quieres que alguien primero intente escribirlo y luego quieres una revisión 0:06:50.880,0:06:55.920 para que la gente que lo usa haga comentarios y para que la persona que lo escribe lo mejore 0:06:55.920,0:07:00.660 de modo que con el tiempo se puedan abordar todas estas cuestiones en las estrategias. 0:07:02.940,0:07:06.120 Algunas notas más de precaución sobre la elección de estrategias. 0:07:07.380,0:07:08.340 Como podrás imaginar, 0:07:09.000,0:07:13.740 el tipo de código que ustedes están buscando tiene un gran impacto en la estrategia que ustedes podrían elegir. 0:07:14.700,0:07:17.400 Así que si ustedes están trabajando en el código que interactúa estrechamente con la librería, 0:07:17.400,0:07:22.440 tienen tres veces más de probabilidades de ir a buscar algunos documentos y menos probabilidades de construir un 0:07:22.440,0:07:25.140 diagrama para tratar de entender lo que está pasando o que todo tenga sentido. 0:07:26.220,0:07:29.220 Pero cómo te sientes también puede tener un impacto muy profundo 0:07:29.220,0:07:34.080 en cómo decides abordar un problema. Así que si se sienten estresados o nerviosos 0:07:34.080,0:07:40.380 es el doble de probable que añadan declaraciones de impresión, y más de cinco veces menos probable que intenten pasar 0:07:40.380,0:07:43.920 el tiempo para leer todo el código cerca, que podría ser demasiado complicado. 0:07:45.300,0:07:48.900 Si se sienten tristes o deprimidos, tienen una probabilidad 10 veces menor de 0:07:48.900,0:07:54.360 tratar de experimentar con sólo editar el código que es un montón de especulación con la esperanza de que, ya sabes, 0:07:54.360,0:08:00.480 tengan suerte al azar y consigan lo que quieren. Y si se sienten muy emocionados 0:08:00.480,0:08:05.400 y entusiasmados tienen más del doble de probabilidades de pedir ayuda a un colega. 0:08:07.080,0:08:10.620 Así que, ¿cómo pueden estar orgullosos de su forma de trabajar y trabajar de una manera más 0:08:10.620,0:08:15.360 deliberada en lugar de accidental? Una idea clave es que hay 0:08:15.360,0:08:20.100 siempre, casi siempre una estrategia diferente que ustedes podrían utilizar para tratar de abordar un problema. 0:08:20.100,0:08:25.020 Sólo ser consciente de ello, considerar explícitamente una estrategia que podría funcionar 0:08:25.020,0:08:29.940 mejor para su situación en este momento, es un ejemplo de lo que se llama metacognición. 0:08:31.560,0:08:36.540 Algunos estudios también han demostrado que la autorregulación, el proceso de supervisar 0:08:36.540,0:08:41.160 su progreso y su uso del tiempo, también se asocian con un mayor 0:08:41.160,0:08:42.360 éxito en la resolución de problemas. 0:08:43.620,0:08:47.160 También pueden simplemente encontrar mejores estrategias. Así que hoy hay recursos por ahí 0:08:47.160,0:08:51.600 que tratan de documentar algunas de las formas en que pueden resolver problemas 0:08:51.600,0:08:55.140 y sólo saber más de estos, de estas estrategias pueden ayudarlos a ser más eficaces. 0:08:56.880,0:09:00.120 Pero también pueden intentar participar más activamente, 0:09:00.120,0:09:06.360 para compartir sus propias estrategias y ayudar a curar las estrategias que funcionan para su propia organización. 0:09:07.320,0:09:10.260 Así que hemos estado construyendo esta herramienta llamada How to Dev que puede actuar 0:09:10.260,0:09:18.000 como un repositorio para estrategias como esta. Y, por último, es importante pensar en cómo sus 0:09:18.000,0:09:24.420 propios sentimientos afectan sus enfoques. Por ejemplo, tomarse un minuto para desestresarse o ayudarte a 0:09:24.420,0:09:28.200 a ti mismo a sentirse mejor realmente puede tener un impacto en la forma de resolver problemas. 0:09:30.300,0:09:33.420 Si realmente quieren aprender más acerca de las estrategias que vamos a estar ejecutando, estas 0:09:33.420,0:09:37.020 estrategias de programación o sesiones de mentoría, puedes acercarte a nosotros para eso. 0:09:37.740,0:09:43.080 Con esto, estoy aquí para cualquier pregunta que alguien pueda tener. 0:09:46.140,0:09:51.960 Fantástico, super, muchas gracias. En primer lugar una charla esclarecedora sobre estrategias 0:09:51.960,0:09:55.620 de programación que me gustaría haber escuchado hace mucho tiempo 0:09:56.460,0:09:59.520 o al menos que creo que las conexiones en particular, verdad?, son interesantes, entre, 0:09:59.520,0:10:05.520 cómo, nuestro estado mental, nuestro ser, y cómo hacemos las cosas de manera que podamos 0:10:05.520,0:10:08.820 pensar en navegar eso también es realmente una conexión interesante aquí. 0:10:08.820,0:10:13.140 Tengo una pregunta que veo, y de nuevo, la audiencia, por favor siéntase 0:10:13.140,0:10:19.080 libre de traer las preguntas al Slack. Rebecca quiere saber, ¿sabe usted si 0:10:19.080,0:10:24.120 realmente siguen la estrategia particular que escriben o es más matizada? 0:10:24.660,0:10:28.920 Pensando en el hecho de que en diferentes contextos los expertos pueden variar su estrategia 0:10:28.920,0:10:32.700 ligeramente dependiendo de la tarea o el contexto o dominio. 0:10:32.700,0:10:36.300 ¿Alguna idea al respecto? Sí, creo que es una gran pregunta. 0:10:36.300,0:10:40.260 Quiero decir, muchas de estas estrategias tienen muchos matices y complejidades. 0:10:40.260,0:10:45.360 Así que cuando le pedimos a alguien que lo escriba, es probablemente, ya sabes, un boceto de alto nivel 0:10:45.360,0:10:48.420 de cómo se ven a sí mismos como la solución de este problema 0:10:48.420,0:10:53.820 y podría no tener todo tipo de complicaciones o variantes del problema, 0:10:53.820,0:11:00.060 así que creo que definitivamente debemos tratar de hacer crecer estas estrategias en el tiempo a través de la retroalimentación, 0:11:00.060,0:11:03.720 para eliminar más de estos casos extremos, es definitivamente el camino a seguir, 0:11:03.720,0:11:07.560 ya que probablemente no vas a escribir la estrategia perfecta la primera vez.