¿Cómo enseñarías una introducción a la clase de programación sin usar computadoras?

Una vez enseñé un par de clases en la escuela de mi hijo para presentarles a los niños cómo funcionan las computadoras.

Podría haber usado una computadora real, pero en su lugar tomé un montón de cajas de fósforos vacías e hice un bloque de “RAM” con una caja de fósforos por ubicación de memoria. ¡Usamos una calculadora como la ALU (unidad aritmética / lógica) e hicimos que los propios niños ejecutaran el programa de computadora! Los datos se transmitieron en notas “post-it” u otros pequeños trozos de papel.

Entonces habría un grupo de 4 niños: uno sería la ALU, otro el secuenciador de instrucciones, otro el controlador de memoria, otro el Teclado / Pantalla

Inventé un lenguaje ensamblador simple (en inglés) que tendría instrucciones como:

Pídale al “Teclado” que le dé el número de la tecla que se está presionando y dígale a la “Memoria” que lo coloque en el cuadro con la etiqueta “LastKeyStroke”. Pase a la siguiente carta.
Pídale a “Memoria” que obtenga el contenido de la caja etiquetada “Cuenta” y déselo a la unidad “Aritmética”. Pase a la siguiente carta.
Pídale a la unidad “Aritmética” que agregue 123 a ese número y luego dígale a “Memoria” que vuelva a colocar el nuevo número en el cajón con la etiqueta “Cuenta”. Ir a la siguiente carta.
Ahora ve a la tarjeta de instrucciones número 7.

Cada instrucción estaba escrita en una tarjeta de archivo, con un agujero perforado en la esquina para que no salieran de la secuencia.

Escribí un par de programas que sabía que podrían ejecutarse en unos 20 minutos con los niños haciendo esto.

Uno fue el “juego Alto Bajo” (piense en un número entre 1 y 100, haga que la computadora adivine el número en 8 intentos o menos) … otro fue “Hacer un cambio por una cantidad de dinero entre $ 0.01 y $ 0.99”.

Los niños ejecutaron estos programas y lograron comprender lo que sucede dentro de una computadora a un nivel que pocas personas hacen.

Ellos * eran * la computadora.

Una parte interesante fue que los niños se sorprendieron un poco de que pudieran ganar de manera confiable el “juego Alto Bajo” sin saber cómo hacerlo. Esto condujo a algunas discusiones interesantes sobre cómo las computadoras pueden vencer a los mejores jugadores de ajedrez humanos sin que los programadores o la computadora misma sean buenos para el ajedrez.

Utilizando nuestra “computadora personal” pude explicar los conceptos de “dirección” versus “datos”: matrices, bucles, condicionales y aritmética.

De todos modos, no estoy seguro de poder recomendar esto para más de una o dos lecciones. ¡Se pone MUY tedioso rápidamente!

También señalaría esto:

Aprendí a programar en la escuela secundaria a principios de la década de 1970. La única computadora que podíamos usar estaba en el centro regional de computación a 50 millas de distancia. Así que escribimos nuestros programas en “formularios de codificación” – los publicamos (¡correo postal!) En el centro de cómputo – quienes los perforaron en tarjetas perforadas y las introdujeron en su computadora central después de que había ejecutado el software de “nómina”. Los resultados salieron en una impresora y se nos enviaron (¡correo postal!).

Cada uno de nosotros logró escribir varios programas interesantes, a pesar del retraso de una SEMANA (optimista) entre escribir el código y ver los resultados.

¡A menudo me pregunto si el ritmo de prueba de este caracol me lleva a ser el programador cuidadoso que soy! Cuando sabes que una estúpida coma mal colocada es suficiente para que te cueste una semana, ¡tienden a ser MUCHO más cuidadosos!

Para que sus alumnos escriban sus programas, haga que los escriba, los compile y los ejecute, imprimiendo los resultados. Al menos de esa manera, ¡tendría un cambio de 2 días en lugar de una semana a 10 días como lo hice yo!

De nuevo, no estoy seguro de que esto ayude mucho, y probablemente sea un consejo terrible.

La mejor apuesta: supera cualquier regla que no permita las computadoras.

Estoy seguro de que si la máquina no tiene WiFi u otra capacidad de red, y todo lo que hay en el disco duro es un editor de texto, un compilador de C y esencialmente nada más, no debería haber ninguna objeción a que se use durante la clase y quitado después.

Con solo una computadora compartida, debería poder realizar un seguimiento de todo lo que se está haciendo en ella, y sin la red, no es probable que pueda entrar o salir algo importante sin su conocimiento.

Gracias por la A2A Irene!

Este es un problema muy desafiante y, para ser sincero, me alegro de no estar en la posición en la que tengo que hacer esto. En muchos sentidos, me gusta la respuesta sobre los algoritmos de direccionamiento temprano en lugar de la programación. Sin embargo, voy a profundizar un poco más.

El principal desafío que veo al enseñar de esta manera es motivar a los estudiantes. La sugerencia de que esto es como un idioma extranjero es correcta, pero la programación es el lenguaje que las personas usan para hablar con las computadoras. Si no tiene una computadora con la que hablar, no hay razón para usar ese idioma, independientemente del idioma de programación que elija. Por esa razón, probablemente iría con pseudocódigo. Soy un fanático de la mecanografía estática, por lo que probablemente probaría algún tipo de pseudocódigo mecanografiado, pero no veo mucha utilidad en enseñar toda la sintaxis de un lenguaje de programación real si nunca tienes la oportunidad de “hablarlo” la computadora y obtener comentarios en forma de mensajes de error o salida correcta. Supongo que la mayoría de los estudiantes sentirán lo mismo, por lo que será muy difícil lograr que los estudiantes realmente participen en esta clase a menos que les hagas hacer demostraciones activas de algoritmos.

Personalmente, no me gusta la idea de enseñar introducción a la programación a través de pseudocódigo, por lo que también voy a responder una pequeña extensión sobre esta pregunta. Si puede tener acceso a una sola computadora que se puede programar al menos una o dos veces por semana, creo que eso lo cambia todo. Incluso si es solo la computadora de los instructores, y solo tienes que codificarla una vez por semana, eso alteraría todo mi enfoque. La elección del idioma aquí es secundaria, y honestamente, basaría esa elección completamente en la máquina a la que tuve acceso y en los antecedentes de mis alumnos. Me inclinaría a usar un lenguaje expresivo porque podría hacer problemas más interesantes. También me gusta la comprobación de tipos estáticos. Si bien esas dos cosas me empujarían hacia Scala o tal vez Haskell, puedo ver argumentos muy válidos para usar JavaScript o Python dependiendo de los detalles de las configuraciones y los estudiantes. Así que no quiero centrarme en el lenguaje más allá de eso.

La pregunta más interesante es qué haces en clase si solo tienes una computadora que los estudiantes pueden programar y solo puedes usarla una vez por semana durante una hora o menos. Rompería mi tiempo con los estudiantes en varios segmentos de aproximadamente la misma longitud. En el primer segmento, presentaría un problema que vamos a resolver esa semana y la construcción del lenguaje que los estudiantes necesitarían usar para resolverlo. Presentar soluciones a problemas más simples usando esa construcción. En el segundo período de tiempo, pediría a los estudiantes que escriban su solución al problema en papel. Circularía mirando lo que estaban haciendo para ayudar a corregir los problemas básicos de sintaxis y los desafíos lógicos que podrían enfrentar. En el tercer grupo de tiempo, pondría a los estudiantes en pequeños grupos donde todos mirarían las soluciones de los demás y tratarían de llegar a una solución grupal ideal.

En el último período de tiempo antes de obtener la computadora, los grupos deberían presentar sus soluciones a la clase y la clase elegiría una solución ideal que en realidad se codificaría. Eso lleva al momento en que tiene la computadora y tiene una solución en la que todos los estudiantes han tenido que ingresar que realmente se ingresa, se prueba y se depura. Repite este proceso nuevamente para el próximo concepto que desea enseñar la próxima semana.

Técnicamente, podría hacer lo mismo sin la computadora y hacer que el maestro “sea” la computadora para esa lección, pero creo que eso es menos efectivo.

Considere enseñar algoritmos primero antes de saltar a la programación. Puede ilustrar fácilmente los algoritmos más básicos sin computadoras:

  • Clasificación: el ejemplo de video a continuación muestra la clasificación de inserción:
  • Recursión – Torres de Hanoi:

y así.

Luego puede introducir la programación con Logo (Logo Programming). Es un lenguaje extremadamente simple en el que una tortuga virtual puede ser programada para moverse hacia la izquierda, derecha, adelante y atrás. Esto se puede “programar” fácilmente en papel.

Esto le brinda la oportunidad de ilustrar los conceptos básicos de la depuración “jugando a Mr Computer” y ejecutando instrucciones una por una, escribiendo el estado de la tortuga antes y después de cada instrucción.

A partir de ahí, puede construir sobre las nociones adquiridas e introducir lenguajes de programación más sofisticados con más instrucciones, el concepto de bucle,.

CARDIAC: La Ayuda ilustrativa de la tarjeta de cartón fue desarrollada por los Laboratorios Bell en la década de 1960 para enseñar a los estudiantes de secundaria acerca de las computadoras.

La computadora CARDIAC es una máquina de un solo acumulador de una sola dirección, lo que significa que las instrucciones operan solo en el acumulador, o en el acumulador y en una ubicación de memoria. La máquina implementa 10 instrucciones, como cargar, almacenar, sumar / restar, y ramificación condicional, a cada una de las cuales se le asigna un código de operación decimal de 3 dígitos.

Operar la computadora es bastante simple: las diapositivas de cartón lo guían a través de la operación de la ALU y el decodificador de instrucciones, y el diagrama de flujo le muestra qué etapa debe seguir.

Aquí hay plantillas para imprimir los componentes para hacer su propio clon junto con enlaces para descargar las instrucciones de ensamblaje y un escaneo de la guía original.

En lugar de centrarme en idiomas o libros de texto particulares, presentaría la programación a los aspirantes a desarrolladores con ejercicios de resolución de problemas y trabajo en equipo.

Haga que los estudiantes resuelvan sudokus en parejas, impriman rompecabezas lógicos como estos (Rompecabezas lógicos imprimibles) y haga que grupos de estudiantes participen en juegos y desafíos de toda la clase. Vea quién puede dibujar el laberinto más difícil, quién puede navegar uno más rápido. Hay muchas buenas ideas en línea (¡incluso en esta página!) Y crear las suyas propias es parte de la diversión. Haga que los estudiantes desarrollen juegos, enumerando claramente las reglas que decidan. El enfoque debe estar en el disfrute y la satisfacción que resulta de encontrar soluciones a los problemas. Aún mejor si las soluciones nacen de la colaboración. Al principio, es más importante desarrollar herramientas para todo uso que vocabulario específico.

Cuando los estudiantes tienen acceso a las computadoras, la manipulación DOM ya se sentirá familiar, un tipo de rompecabezas lógico algo diferente. La programación en pareja (probablemente la forma más efectiva de piratear el aprendizaje … o aprender piratería …) será cómoda ya que los estudiantes habrán practicado juntos habilidades de comunicación claras y precisas. La creatividad y el entusiasmo son preferibles a la memorización y la repetición, incluso si eso significa que los estudiantes aprenden a registrar su primer “Hola Mundo” un término más tarde.

Esto me recuerda a la era antes de que las computadoras personales estuvieran ampliamente disponibles. El usuario de Quora menciona CARDIAC, que fue una simulación simple que me pareció bastante útil para comprender conceptos básicos.

En la era de las tarjetas perforadas, escribiste tu programa a mano en un formulario de codificación y luego pasaste por el programa una línea a la vez, haciendo un seguimiento manual de cada variable a medida que cambiaba. Esa técnica aún podría funcionar. Puede darles impresiones de muestras de código y pedirles que pronostiquen la salida.

Hay muchas buenas razones para hacer esto.

Recuerdo que hace 42 años, cuando estaba en la escuela secundaria, comencé mi primera clase de grabación y edición de video. Estaba tan emocionado que apenas podía esperar para entrar al aula.

Cuando llegué, había una pizarra colocada y el maestro comenzó a dibujar las vías del tren en el tablero. Todo lo que quería hacer era jugar con el equipo.

Resulta que el equipo ni siquiera había sido entregado a la escuela y no llegaría en semanas. Imagina mi decepción. El equipo finalmente llegó. Portapaks cámaras de estudio, mesas de edición y mezcla, fue un paraíso.

Los nuestros eran aún más voluminosos que este modelo. Y solo teníamos 12 años.

La moraleja de esta historia es que las primeras lecciones que tuvimos fueron sobre cómo conectar el equipo. Luego tuvimos lecciones sobre cómo construir el estudio. Luego tuvimos lecciones sobre cómo construir un escritorio de edición. Finalmente llegó el equipo.

Hasta el día de hoy, todavía recuerdo el diagrama en la pizarra de esa primera lección.

Cuando comienzo a enseñar a la gente a codificar, no empiezo con una computadora. Comienzo con que la clase instruya a un miembro para que dibuje un cuadrado en el piso. La tiza en la alfombra está bien, aunque hay que hablar dulcemente de los limpiadores.

Paso adelante gire a la derecha paso adelante. ¡Oh, olvidé que primero tienes que poner la tiza en el suelo! (nuestro primer error) vea El primer error informático registrado

ver:

Informática desconectada

ver: enseñanza de informática usando papel

UNA ACTIVIDAD PEDAGÓGICA PARA LA INTRODUCCIÓN DE CONCEPTOS BÁSICOS DE COMPUTADORAS

¡Que te diviertas!

¡Posiblemente sus alumnos estarán tan decepcionados como yo y todavía recordarán la lección 40 años después!

Aparte: cuestiono toda la premisa de esta pregunta. La programación es el conjunto de técnicas que utiliza para programar computadoras. Ese es el objetivo de la programación. Decir que no puedes usarlos es como decir que vas a enseñar a alguien a ser pianista, pero que no pueden usar un piano.

Simplemente no tiene ningún sentido para mí.

Pero esas críticas se aplican principalmente a aprender a programar. Si solo desea darles a los estudiantes una buena idea sobre cómo funcionan las computadoras en abstracto, entonces hay cosas que puede hacer que eventualmente harán que su introducción a la programación sea más fluida.

Anteriormente había hojeado el CS Unplugged – Informática sin una computadora antes.

El libro – Informática desconectada

Básicamente es un plan de estudios para que los estudiantes de primaria aprendan sobre informática. Al final, los niños no serán programadores en ningún sentido real de la palabra, pero probablemente tendrán una mejor comprensión de algunas de las ideas básicas detrás de la aritmética binaria, los algoritmos y los procedimientos.

Tengo un colega que usa contenedores tupperware con números para mostrar memoria (aunque los estudiantes sí usan computadoras en la clase).

Aquí hay una introducción muy divertida al cálculo lambda: ¡Huevos de cocodrilo!

Empecé con BASIC. Pero, C ++ también es útil. Me acercaría al curso, como idioma extranjero para principiantes, aprendería todos los términos de programación unos pocos por clase y su propósito individual, completamente, luego introduciría la sintaxis adecuada, luego la estructura escrita de un programa C ++ y finalmente usaría mini módulos que el programa utilizaría para realizar diversas tareas. Haga que los estudiantes escriban a mano programas individuales. Proporcione información y pida a los alumnos que lean las líneas del programa y determinen el resultado antes de la introducción de las computadoras en el aula.

Mi maestra de sexto grado enseñó una clase de programación de computadoras como parte de las matemáticas en los años 60. NO computadoras. Solo papel, lápices y un póster de símbolos de diagrama de flujo. Primero enseñó cómo definir problemas y hacer preguntas correctamente. En segundo lugar, presentamos soluciones de diagrama de flujo.

Hacía lo que siempre hago, cuando Iv’e tenía que hacerlo antes.

Enséñeles a jugar ajedrez.

y si no se me permite usar un tablero de ajedrez real, dibuja uno junto con las piezas.