Hay muchas cosas dentro de la “Programación” que solo se pueden aprender programando realmente, pero relacionarse con el mundo real es una forma fantástica de enseñar a las personas a “pensar computacionalmente” e introducir algunos conceptos importantes de programación y computación que están programando agnóstico del lenguaje. Los métodos y ejercicios específicos que usaría para hacerlo variarán considerablemente según el grupo de edad que esté enseñando (muchos de los ejercicios tradicionales para introducir conceptos de programación de esta manera están dirigidos a niños y otras audiencias más jóvenes).
Las computadoras son estúpidas, pero obedientes
Las computadoras siempre harán exactamente lo que usted les dice que hagan, ni más ni menos. Las computadoras no tienen la capacidad de inferir el significado deseado y lo llevarán literalmente.
Una forma común de enseñar esto es el ejercicio ” Programe su maestro ” en el que se les pide a los estudiantes que den instrucciones sobre cómo realizar una tarea específica (como hacer un sándwich de mantequilla de maní y mermelada), ya sea verbalmente o por escrito, a su maestro, quien luego siga esas instrucciones al pie de la letra con resultados a menudo cómicos. Hay muchas variaciones en este ejercicio y puede usarlo para enseñar algunas lecciones diferentes. Aquí hay una formulación:
- ¿Cuáles son los pros y los contras de permitir que un alumno de su clase grabe su audio o video mientras enseña?
- ¿Qué se puede hacer para mejorar la enseñanza en las instituciones públicas de investigación?
- ¿Los maestros tienen regalos?
- ¿Cómo se puede identificar fácilmente a un maestro ineficiente?
- ¿Por qué algunos maestros hacen que parezca que su clase es lo único que importa?
El maestro es la computadora y la clase (o un alumno) es el programador. El programador da una instrucción a la vez y el maestro hace exactamente lo que dice el programador, malinterpretando las instrucciones siempre que sea posible. Si el programador dice algo que podría interpretarse de más de una manera, el maestro sigue la instrucción de una manera que claramente no es lo que el programador pretendía. Esto le enseña al programador a ser más específico y claro en futuras instrucciones, a evitar ambigüedades léxicas y a tratar de eliminar cualquier “brecha inferencial” de sus instrucciones, reduciendo su nivel de abstracción.
Ejemplo: si la maestra sostiene un cuchillo con un botón de maní con la mano derecha y el alumno dice “mueve tu brazo hacia adelante”, la maestra movería su brazo izquierdo hacia adelante. Alternativamente, el maestro puede mover el brazo correcto hacia adelante, pero no dejar de moverlo hacia adelante hasta que el estudiante le diga que se detenga, de modo que la próxima vez, el estudiante dirá algo como “mueva su brazo hacia adelante hasta que esté sobre la rebanada de pan en el plato”. “.
Si el programador da una instrucción que es de alto nivel (es decir, no una acción “primitiva”), el maestro devuelve un mensaje de error.
Ejemplo: si el alumno dice “quita la tapa del frasco”, el profesor puede responder “¡Error! La instrucción” Quitar la tapa “no es una acción definida. Por favor, sé más específico”.
Los lenguajes de programación tienen un vocabulario limitado (pero extensible)
Es posible que haya notado que el último punto en el ejemplo anterior no era del todo exacto como analogía a los lenguajes de programación; En la programación real, el programador puede referirse a una lista de “acciones primitivas” para saber qué instrucciones están disponibles. Si bien eso haría que el ejercicio anterior sea más “preciso” como metáfora de la programación, proporcionar dicha lista de antemano eliminaría algunos “momentos de Aha” clave durante el ejercicio en los que los estudiantes se dan cuenta de que necesitan reducir su nivel de abstracción. Recomiendo guardar esa lección para un ejercicio de seguimiento.
Este es otro ejemplo “en vivo”, lo que significa que los estudiantes dan una instrucción a la vez y pueden ver los resultados antes de dar su próxima instrucción, opcionalmente con la capacidad de dar un comando “deshacer” para restablecer el estado anterior. Después de hacer el ejercicio anterior como demostración, los estudiantes pueden emparejarse para hacerlo nuevamente (con algunas pequeñas modificaciones para enseñar otra lección).
En este ejercicio, proporciona una lista de “acciones primitivas” en una hoja de papel a ambos estudiantes: el que juega la “computadora” y el que juega el “programador”. El objetivo del programador es indicar a otro alumno que complete una tarea utilizando solo las instrucciones de la lista. La “computadora” debe proporcionar un error a cualquier instrucción que no esté en la lista. Cualquier número de tareas sería apropiado aquí. Por ejemplo: podrían hacer otro sándwich de PB&J, hacer la Macarena o hacer un dibujo de algo.
Definiendo funciones
Si elige una tarea en cualquiera de los ejemplos anteriores que requiere algunas secuencias repetitivas de acciones, puede incluir una lección sobre la extensión del vocabulario limitado a través de funciones definidas por el usuario. Alternativamente, esto se puede extraer en su propio ejercicio como seguimiento.
La tarea es la misma: dirigir a una persona que actúa como computadora para completar alguna tarea, aunque el objetivo es lograr la tarea en la menor cantidad posible de instrucciones explícitas . Sin embargo, el programador tiene la capacidad de definir funciones compuestas de la lista de acciones primitivas y, opcionalmente, otras funciones que han definido.
Por ejemplo, si la tarea fuera la tarea sandwich PB&J, el programador podría definir una función llamada “Open Jar” que toma una entrada : “jar”.
Cortaré la explicación de este breve, ya que debería ser una extensión obvia de los dos ejercicios anteriores.
Estado de gestión
Otra extensión de los ejemplos anteriores es la gestión del estado. Al realizar los ejercicios de finalización de tareas de una manera “en vivo” donde el programador da una instrucción a la vez, es fácil para ellos saber cuál es el estado actual para que puedan dar una instrucción adecuada. Simplemente haciendo que el ejercicio sea asincrónico haciendo que el programador escriba primero las instrucciones y luego haciendo que la computadora las siga, obliga al programador a pensar cómo sus acciones afectan el estado de la computadora.
Al enseñar el ejercicio estatal, las tareas que involucran la orientación de la computadora en el espacio físico son probablemente las mejores. Por ejemplo, puede proporcionar un laberinto para que el programador tenga que escribir las instrucciones a seguir. En este caso, las primitivas pueden consistir únicamente en “girar a la izquierda”, “girar a la derecha” y “avanzar ____ pies / pulgadas” y (opcionalmente) “avanzar hasta golpear una pared”. Con este conjunto restringido de instrucciones y la naturaleza asincrónica de la tarea, el programador debe pensar en qué dirección se enfrentará la computadora en cualquier paso dado de las instrucciones.
(Debo señalar que este ejemplo puede ser más adecuado para usar tecnología si está disponible. Existen algunos robots programables o controlados a distancia simples que están diseñados específicamente para permitir que los niños los programen para moverse en ciertas direcciones para aprender esta lección).
Control de flujo y algoritmos
El ejemplo anterior se puede ampliar para incluir lecciones con Control Flow: declaraciones If-Else, declaraciones “do _____ hasta ______” (también conocidas como “While Loops”), For-Each loops, etc. Todo lo que necesita hacer es agregar el requisito de que las instrucciones podrán manejar múltiples entradas, como más de un laberinto. Generalizar tal solución para poder manejar TODAS las entradas dentro de una clase determinada es un algoritmo.
Conclusión
Hay todo tipo de formas creativas de enseñar a pensar computacionalmente a través de ejercicios y ejemplos del mundo real. Estos son sólo unos pocos. Creo que hay un gran potencial en los pequeños robots visualmente programables, incluso cosas tan simples como un automóvil de juguete programable. Estos cierran la brecha entre el mundo digital y el real. Aunque en ausencia de dicha tecnología, “programar” a otros humanos es una alternativa bastante buena (y a menudo agradable).