Enseñé programación introductoria a nivel universitario. Fue un curso integral, todos los profesores lo hicieron, y creo que lo hicimos bastante bien. Seguimos un texto común y tuvimos exámenes comunes, pero cada uno tenía nuestro propio método de clase que funcionaba. Ha pasado mucho tiempo desde entonces, pero ocasionalmente puedo dar clases particulares a algún niño en programación, y toda la imagen es casi la misma.
La forma en que lo hago es comenzar desde abajo, lo más concreto posible. Lo que los estudiantes saben es una estructura. Ya tienen muchos conceptos. Estoy construyendo más conceptos además de esos, y estoy eliminando los conceptos que pueden formar que son contraproducentes. Al mismo tiempo, les hago aprender haciendo .
Había construido una pequeña computadora con un chip Intel 8008, algunas EPROM y algunos circuitos. Lo había programado para tocar un pequeño dueto cuando el chip de E / S estaba conectado a un par de altavoces. Explicaría cómo funcionaba el pequeño programa, con un bucle interno para contar un contador. Eso actuaría como un retraso. Luego alternaría el bit de salida y lo volvería a hacer. Haría eso por un tiempo, y luego cambiaría a otro retraso, dando otro tono, y así sucesivamente. El chip de memoria tenía un pequeño temporizador, y si colocaba un cable del condensador debajo de una de las entradas del temporizador, el programa se ejecutaría muuuy lentamente . La clase podía escuchar a los oradores haciendo clic, clic, clic ... Quería que la clase entendiera que la computadora estaba haciendo cosas muy simples paso a paso. Luego desengancharía el cable del condensador y la "música" explotaría. (aplausos)
Luego construí un simulador para una computadora decimal muy simple, con 1000 ubicaciones de memoria, cada una con un número decimal con signo de 4 dígitos. Tenía códigos de operación muy simples como "agregar al acumulador", "saltar si es negativo", y así sucesivamente. Me gustaría que escribieran pequeños programas en este "lenguaje de máquina", como sumar dos números o sumar una lista de números. Luego podrían verlo funcionar con un solo paso, o manteniendo presionada la tecla Intro para verlo correr "rápido".
El objetivo de esto era poner en práctica el concepto de que las computadoras solo pueden hacer un número muy pequeño de operaciones básicas diferentes, y las hacen una a la vez. Esto es para contrarrestar la impresión que tienen de que las computadoras son complicadas, y que hacen todo al mismo tiempo, y leen su mente en el trato.
A partir de ahí pasamos a la programación en un lenguaje "real" (BÁSICO :), comenzando con programas muy simples pero interesantes, pasando por condicionales, bucles, matrices, archivos, fusiones, etc. El objetivo era establecer un conjunto de habilidades suficiente para que pudieran asumir un proyecto de su propia elección, porque eso es lo único que hace que la programación sea interesante: el uso que puede darle. Lanzaría algunas ideas para proyectos, y luego lo tomarían desde allí. Pediría ideas escritas, y luego informes de progreso, para evitar que lo pospongan hasta el último minuto y luego entren en pánico. Creo que los proyectos fueron la mejor parte, porque estaban aprendiendo bajo su propio poder.
Esa base inicial en una comprensión muy concreta de lo que hacen las computadoras hizo que fuera mucho más fácil enseñar conceptos más adelante que, de lo contrario, serían golpes de velocidad reales, como conjuntos o punteros (en un curso posterior). Tendemos a glorificar el concepto de "abstracción" como algo maravilloso, pero debe construirse sobre una base concreta, no en el aire.