Aprender a programar: con la ayuda de Ron
Tags: javascript, webdev, beginners, programming
Published: 2022-10-05 09:18:22

Permíteme presentarte a **Ron**, una persona común como tú y como yo, excepto que nació en un mundo lleno de magia. La vida llevó a Ron a experimentar muchas aventuras cuando era joven. Aun así, de alguna manera terminó trabajando como gerente en un emporio minorista de bromas mágicas, un trabajo del que finalmente se cansó. Como quería comenzar a trabajar en algo más gratificante, comenzó a investigar una posible carrera en programación y, más específicamente, en desarrollo web.

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1664918691712/zxWerUoVl.png)

Pero Ron sabe que sus técnicas de estudio tienen algunos problemas: **no sabe cómo mejorar sus puntos más débiles**, suele pensar que **los exámenes son una pérdida de tiempo** y constantemente **toma los comentarios de retroalimentación de manera negativa**.

Si prefieres ver el contenido de este artículo en mi video de YouTube, puedes hacerlo haciendo [click aquí](https://youtu.be/aZpS3Qd1T-E):

{% youtube https://www.youtube.com/embed/aZpS3Qd1T-E %}

A lo largo de este post ayudaremos a Ron enseñándole cómo atacar sus puntos más débiles para mejorarlos, cómo puede aprender poniéndose a prueba sobre conceptos de programación y cómo puede permitir que los comentarios de retroalimentación mejoren sus habilidades de programación.

Este artículo es el segundo que trata sobre los conceptos presentados en el libro [Ultralearning de Scott Yong](https://amzn.to/3QviJ4K), y en él aplico estos conceptos al área de aprendizaje de programación, ya que creo que son muy útiles allí. Si deseas saber más sobre estos temas, te recomiendo leer el libro.

En el próximo post publicaré al menos dos principios de aprendizaje más aplicados a la programación, por lo que es posible que desees [seguirme en Twitter](https://twitter.com/DamianDemasiES) para recibir una notificación cuando esté publicado.

Bien, ahora ayudemos a Ron con el primer principio: Entrenamientos.

## Entrenamientos: ataca tu punto más débil

Tan pronto como Ron se sentó y abrió su curso en línea sobre programación, se sintió abrumado por la complejidad de los temas que quería aprender. Según el libro Ultralearning, aplicar un enfoque de "divide y vencerás" es la mejor manera de superar estos desafíos.

Ron podría dividir temas complejos en partes más pequeñas, entenderlas, practicarlas y, una vez que domine esas partes pequeñas, volver a armarlas en un todo más complejo.

![Screen Shot 2022-10-05 at 08.10.39.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1664919723762/1xvYXhK6c.png)

La idea clave detrás de este entrenamiento es elegir conceptos críticos y practicarlos. Los ejercicios se desarrollan a partir del principio de Inmediatez, discutido en mi artículo anterior, pero va un poco más profundo, con un enfoque más concentrado.

A Ron le resulta difícil llevar esta idea a la práctica, así que vamos a darle un par de tácticas que puede usar para diseñar sus ejercicios de entrenamiento.

### Táctica 1: Componentes

En esta táctica, deberemos encontrar formas de ejercitar (practicar) solo un componente específico del concepto o habilidad que estamos aprendiendo.

Resulta que Ron tiene problemas para comprender la estructura de los documentos HTML. En este caso, podría practicar pequeñas partes de la estructura HTML, como, por ejemplo, la [información de la versión de HTML](https://www.w3.org/TR/html4/struct/global.html). Una vez que haya practicado esta pieza hasta que le resulte natural, puede pasar a practicar otros elementos, aumentando así su conocimiento y experiencia sobre HTML.

### Táctica 2: Imitador

A veces necesitaremos practicar una parte de un concepto que no es fácil de reproducir por sí misma. En estas situaciones, podríamos copiar las funcionalidades que no queremos practicar y así enfocarnos en las partes que sí nos interesan.

Ron quiere practicar algunos elementos de formulario HTML, como `<input>` y `<label>`. Para hacer esto correctamente, necesitará escribir una gran cantidad de código HTML solo para llegar a la sección en la que finalmente puede introducir un elemento `<form>` y, una vez allí, practicar sus subelementos: `<input>` y `<label> `.

```html
<!DOCTYPE html>
<html>
    <body>
        <h1>The label element</h1>

        <p>
            Click on one of the text labels to toggle the related radio button:
        </p>

        <form action="/action_page.php">
            <input type="radio" id="html" name="fav_language" value="HTML" />
            <label for="html">HTML</label><br />
            <input type="radio" id="css" name="fav_language" value="CSS" />
            <label for="css">CSS</label><br />
            <input
                type="radio"
                id="javascript"
                name="fav_language"
                value="JavaScript"
            />
            <label for="javascript">JavaScript</label><br /><br />
            <input type="submit" value="Submit" />
        </form>
    </body>
</html>
```

Al usar la táctica del imitador, Ron puede simplemente copiar y pegar el código necesario para crear un formulario vacío y construir sobre eso, practicando los elementos que quiere aprender.

Sobre la base de este concepto, y una vez que Ron obtenga más conocimiento sobre los sistemas de control de versiones, incluso podría usar **Git** para crear ramas en su código y practicar partes de él más eficientemente.

### Táctica 3: El Dojo de Programación

Otra forma de practicar conceptos de programación específicos es trabajar en la resolución de un desafío de programación. Los sitios web como [CodeWars](https://www.codewars.com/) ofrecen muchos desafíos que podemos usar para practicar nuestras habilidades de programación y así mejorar con el tiempo.

En sitios web como este, Ron no solo va a escribir código, sino que también encontrará soluciones provistas por otros muggles, quiero decir, por otras personas, algo que le enseñará sobre las diferentes formas en que se puede resolver un mismo problema.

🧑‍💻 Aquí te dejo un listado de otros sitios similares para practicar programación:
- [CodeWars](https://www.codewars.com/)
- [LeetCode](https://leetcode.com/)
- [CoderByte](https://coderbyte.com/)
- [CodeChef](https://www.codechef.com/)
- [HackerRank](https://www.hackerrank.com/)

Ahora ayudemos a Ron a superar sus ideas preconcebidas sobre los exámenes y cómo las puede utilizar como herramientas de aprendizaje.

## Recuperación de conocimiento: evalúate para aprender

Ron está acostumbrado a pensar acerca de los exámenes como una forma de evaluar el conocimiento cuando, de hecho, también es una forma de crearlo. Debemos ponernos a prueba antes de sentirnos seguros, incluso si no sabemos todas las respuestas, porque al hacerlo prepararemos nuestra mente para prestar atención a la información que luce como una solución cuando la aprendamos más adelante.

<img width="100%" style="width:100%" src="https://media.giphy.com/media/ZaRz2080kt4Yg/giphy.gif">

Ron está acostumbrado a pasar largas horas revisando pasivamente sus puntos resaltados en libros y notas, con la esperanza de que algo se quede pegado en su memoria. Esto no es lo que el libro llama “recuperación de conocimiento”. La recuperación de conocimiento es cerrar el libro y tratar de responder preguntas sobre el tema que acabamos de aprender. Por eso es fundamental construir nuestros propios proyectos en programación, porque es aquí cuando descubrimos lo que sabemos y lo que no sabemos.

Si tenemos las respuestas a lo que queremos recuperar, como las respuestas que figuran al final de un libro, podemos comparar nuestro conocimiento recobrado con las respuestas correctas reales, mejorando así nuestra comprensión y retención.

Ron está tomando un curso sobre JavaScript, y el instructor dice, después de mostrar cómo se construye algo, "Bueno, ahora intenta construir esta funcionalidad". Ron debería tratar de construirla sin mirar por segunda vez cómo lo hizo el instructor y buscar en Google cosas que no sabe o recuerda. Una vez que termine de crearla, puede continuar viendo el curso y comparar su solución con la solución propuesta por el instructor. Esto desencadenará varios momentos de "¡ajá!" en Ron, manteniéndolo involucrado en las actividades de aprendizaje.

<img width="100%" style="width:100%" src="https://media.giphy.com/media/VwUquCGtIatGg/giphy.gif">

Ron debe evitar hacer una recuperación simple de conocimiento, como responder preguntas de opción múltiple. Debería tratar de hacer una recuperación abierta: escribir todo lo que sabe sobre un tema específico. Este es el mejor método para aprovechar al máximo sus actividades de recuperación de conocimiento. Para obtener más detalles sobre la prueba científica detrás de esto, puedes leer el capítulo 8 del libro Ultralearning.

Ron necesita algunas tácticas sobre cómo poner en práctica el concepto de recuperación de conocimiento, así que echemos un vistazo a las siguientes.

### Táctica 1: Recuperación abierta

Después de leer una sección de un libro o aprender un nuevo concepto, podríamos intentar escribir todo lo que recordamos en una hoja de papel en blanco. Hacer esto nos ayudará a recordar estos conceptos más adelante.

### Táctica 2: Anotar preguntas

A menudo tomamos notas durante nuestro proceso de aprendizaje para resaltar las cosas que consideramos importantes. Una mejor manera de tomar notas es escribirlas en formato de preguntas para responderlas más adelante.

En mi caso, hice esto cuando estaba haciendo un curso de Udemy sobre JavaScript. A medida que el curso introducía conceptos, los escribía en una base de datos de Notion en forma de preguntas. Así fue como logré escribir 318 preguntas (con sus respuestas) y tenerlas listas para mis sesiones de recuperación de conocimiento.

![Screen Shot 2022-10-05 at 19.32.32.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1664960586267/p3I_uAPTM.png)

Por ejemplo, en lugar de escribir **"La coerción de tipo es..."**, podríamos escribir **"¿Qué es la coerción de tipo?"** y referirnos a donde podemos encontrar la respuesta. En este ejemplo, será suficiente un enlace a una publicación en FreeCodeCamp: "La coerción de tipos es el proceso de convertir un valor de un tipo a otro (como una cadena a un número)".

Pero tengo que hacer un descargo de responsabilidad, y estoy seguro de que Ron se sentirá identificado con esto: aunque tengo todas estas preguntas, todavía estoy luchando por encontrar tiempo y energía para usarlas en sesiones de recuperación de conocimiento. Entonces, no seas como yo, ¡y encuentra tiempo para responder las preguntas! 😅

### Táctica 3: Desafíos autogenerados

A medida que avanzamos en nuestro material de aprendizaje, podríamos crear desafíos (proyectos acotados) para nosotros mismos para resolverlos más tarde. Por ejemplo, si estamos aprendiendo sobre las APIs, podríamos crear un desafío para usar una API.

Podríamos crear una lista de todos estos desafíos para abordarlos más adelante y tener nuestro propio repositorio de ejemplos de código que podríamos usar en el futuro.

Ahora ayudemos a Ron a superar su tendencia a tomar la retroalimentación de manera negativa.

<img width="100%" style="width:100%" src="https://media.giphy.com/media/rjiRFTZ0NIdi/giphy.gif">

## Retroalimentación: no esquives los golpes

Durante nuestro proceso de aprendizaje, vamos a encontrar retroalimentación (feedback). Podría provenir de otras personas expresando sus opiniones, pero la mayoría de las veces provendrá de una computadora: nuestro código no funciona como esperamos.

No debemos permitir que nuestros egos se interpongan en el camino de esta retroalimentación. Por un lado, podemos pensar que como nuestro programa no funciona, no somos aptos para ser programadores. O, por otro lado, creer que somos grandes programadores porque conseguimos que nuestro código de "Hola, mundo" funcionara al primer intento.

Por lo general, Ron se siente reacio a compartir su código con otros, ya que enfrentará críticas. La mala noticia es que otros deben revisar nuestro código, ya que esta es una práctica estándar en la industria de la programación. Aquí debemos recordar el concepto de tener una mentalidad de crecimiento (como presenté en el primer post de esta serie) y no tomar comentarios o críticas de manera incorrecta. La retroalimentación es lo que nos hace mejores programadores.

Démosle a Ron algunas tácticas para mejorar su respuesta a la retroalimentación y usarla de la mejor manera posible.

### Táctica 1: cancelación de ruido

Cada vez que recibamos una respuesta u opinión sobre nuestro código, veremos que por lo general está compuesta de una parte constructiva y otra ruidosa. Deberíamos aprender a ignorar el ruido y centrarnos en la parte constructiva.

![Screen Shot 2022-10-05 at 19.18.32.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1664959773391/e6EFIRMd_.png)

Por ejemplo, alguien puede comentar sobre el código de Ron: "No eres bueno programando porque olvidaste borrar este timeout en este componente de React. Deberías volver a vender chistes de magia...". La parte constructiva de esta retroalimentación es que Ron debería prestar más atención a la eliminación de timeouts en su código y así evitar memory leaks, por ejemplo. El ruido es la primera y última parte de esta retroalimentación, un juicio subjetivo que alguien hizo sobre las capacidades de Ron como programador, y debería ignorarlo, ya que la persona que da la retroalimentación probablemente no lo conoce bien. No es posible que Ron pueda escribir código sin cometer errores (es por eso que nuestro código debe ser revisado por otros compañeros programadores y pasar pruebas de control de calidad).

### Táctica 2: Encontrar el punto óptimo de dificultad

La retroalimentación que nos da la computadora cuando escribimos nuestro código es muy necesaria, ya que nos dirá si el código funciona o no. Si Ron comete demasiados errores, o muy pocos, debe disminuir o aumentar la dificultad del proyecto en el que está trabajando para obtener una retroalimentación más útil.

### Táctica 3: Meta retroalimentación

Este tipo de retroalimentación no se trata del código que estamos escribiendo, sino del éxito general de la estrategia que usamos para aprender a programar.

Ron podría experimentar con diferentes métodos de estudio, comparándolos y contrastándolos. La mejor manera de hacer esta comparación es evaluándose a sí mismo: ¿Ron aprende más con el método A o con el B? ¿Qué método lleva más tiempo? ¿Qué método es más probable que utilice en sus actividades de estudio?

<img width="100%" style="width:100%" src="https://media.giphy.com/media/FCeqsn7FF2xIQ/giphy.gif">

## Pensamientos finales

Llegando al final de este artículo, espero le hayamos dado a Ron una buena idea sobre cómo puede mejorar sus puntos más débiles, cómo aprender de manera efectiva evaluándose a sí mismo y cómo recibir comentarios de manera constructiva para mejorar sus habilidades de programación. Estoy seguro de que Ron ahora se siente más seguro para aprender a programar.

Quiero recordarte que hay al menos dos principios más que cubriré en el próximo post, por lo que es posible que desees [seguirme en Twitter](https://twitter.com/DamianDemasiES) para recibir una notificación cuando se publique.

¿Alguna vez te has sentido como Ron? **¿Cuál de los principios cubiertos resonó más contigo?** Por favor, deja tu respuesta en los comentarios para que podamos discutir más al respecto.

Muchas gracias por leer este artículo, y ¡nos vemos la próxima! 👋

---

🐦 **Twitter** - [Sígueme en Twitter](https://twitter.com/DamianDemasiES)

🎥 **YouTube** -  [Visita mi canal de YouTube en español](https://www.youtube.com/channel/UCFUBlxKVHymA2VVUsf46aUQ)