Estoy dando clases particulares a algunos estudiantes que tienen problemas importantes para aprender los conceptos básicos de su primer lenguaje de programación: C ++. He conocido a muchos estudiantes excelentes y brillantes que han reprobado o abandonado su primer curso de CS. Todas las personas a las que estoy dando tutoría dan una descripción similar de su experiencia en clase: el instructor avanza demasiado rápido, nada en las conferencias tiene sentido, et al. Antes de esta clase de CS, la mayoría de estos estudiantes con dificultades no habían expresado ningún interés en las computadoras como algo más que procesadores de texto, navegadores web o alguna otra forma de entretenimiento. La computadora es una caja negra que funciona, entonces, ¿por qué meterse con ella?
Mi mejor conjetura es que están teniendo problemas para conectar las abstracciones de la informática con conceptos familiares. Es decir, estos estudiantes pueden saber aprender matemáticas, biología o física, pero esas técnicas no funcionan cuando se trata de programación.
¿Alguien tiene alguna sugerencia o consejo? Los estudiantes a los que estoy ayudando no merecen reprobar esta clase. Está claro que el instructor no tiene en cuenta el estilo de aprendizaje de estos estudiantes. Es decir, el instructor no está fallando a sus alumnos.
Respuestas:
Hay algunas cosas con las que prácticamente todos los principiantes luchan. Los estudiantes necesitan saber cómo leer el código antes de que puedan aprender a escribir el código.
=
) en lenguajes de estilo C es extremadamente engañoso. Debe explicar con mucho cuidado quea = 5
significa "asignar 5 a la variablea
, no " a es igual a 5 ".3+3
es un entero,3.5 + 3
es un doble,"3" + "3"
(en C #) es una cadena,x == 5 * 3 + 25
es un booleano (o entero en C ++). Dedique mucho tiempo para asegurarse de que el estudiante esté completamente cómodo con esta noción.x
definido en un alcance es diferente de unx
definido en otro alcance.for
los bucles no deben enseñarse hasta que se den ejemplos adecuados de iteración usandowhile
bucles. La sintaxis abreviada es confusa y deja a los estudiantes preguntándose por qué no pueden simplemente usarwhile
bucles. Tener una hoja de trucos que describa unfor
ciclo en términos de unwhile
ciclo puede ser útil.Los componentes OOP de C ++ son una bestia completamente diferente, y espero que el instructor no llegue allí, porque OOP se enseña mejor usando lenguajes que fueron diseñados desde cero para ser OOP. En mi experiencia, enseñar OOP a través de C ++ nunca ha ido bien.
fuente
¿Has enseñado programación antes?
Enseñé programación a estudiantes de CS y no CS durante cuatro años. El primer semestre, mi experiencia fue como la tuya, hasta que aprendí algunas cosas.
Lo que me pareció vaciamente simple no fue nada simple para los principiantes.
Independientemente del idioma, debe establecer un marco mental: cosas tan obvias que ni siquiera se da cuenta de que las conoce, como:
Las computadoras solo hacen una cosa a la vez. (Cualquiera que diga que tiene paralelismo y tuberías, vete. Vuelve cuando los estudiantes sepan algo). Las computadoras solo pueden hacer un pequeño número de cosas diferentes, y no pueden comenzar a dar un paso hasta que el anterior esté terminado. Solo digo esto, porque las computadoras parecen hacer tantas cosas, y las hacen instantáneamente, que para un principiante parece que hacen todo a la vez, y también le leen la mente.
Las variables son importantes. Es esencial comprender que el nombre de una variable y su contenido en tiempo de ejecución son dos cosas completamente diferentes. Los principiantes luchan con esto. Si digo "Escribe un programa para ingresar tu nombre y luego te saluda", necesitan darse cuenta de que necesitan una variable para mantener su nombre, y tienen que pensar un nombre para la variable, y se sienten tentados nombrarlo después de sí mismos y preguntarse qué significa "entrada".
Hay una gran diferencia entre el momento en que escribe / edita el programa y el momento en que se ejecuta. Durante sus primeros ejercicios, deben recordar esto con bastante frecuencia.
El lenguaje que usé fue BASIC, porque es muy simple para principiantes. No es difícil pasar a otros idiomas después de que hayan desarrollado un conjunto de habilidades básicas de programación.
A menudo escribíamos un programa en la pizarra y luego "jugabamos a la computadora". Es decir, coloque una X al lado de la declaración actual, hágalo manualmente, luego mueva la X a la siguiente declaración. Las variables eran rectángulos en el tablero, donde escribiríamos los contenidos actuales. Cuando sucedía una tarea, la borrábamos y poníamos el nuevo valor.
Un truco que desarrollé fue una computadora decimal simulada, con 1000 ubicaciones de memoria, cada una capaz de contener un número de 4 dígitos. Hubo un pequeño conjunto de "códigos de operación", como cargar el acumulador, agregar, almacenar, saltar, etc. Me gustaría que escribieran pequeños programas en este "lenguaje de máquina" y luego un solo paso para verlo funcionando. Luego, más tarde, conceptos como variables, saltos, etc., son mucho más fáciles de explicar.
Espero que ayude.
fuente
En mi opinión, C ++ es una exageración como primer idioma.
Si yo fuera usted, y tuviera suficiente tiempo a mano, me gustaría introducir los conceptos de programación y CS utilizando Python (o similar).
Cuando los conceptos son claros, es decir, cuando se sienten cómodos con las estructuras de datos básicas, la indirección, los algoritmos básicos, etc., introduciré lentamente C ++ y podrán relacionarse muy rápidamente con lo que ya habrían aprendido.
fuente
Esto es lo que recomendaría:
Básicamente, le aconsejaría que cree un solo papel a4 que tenga todos los detalles necesarios requeridos. Algún tipo de manual de referencia que tiene todos los detalles. Algunos libros también pueden ayudar, por ejemplo, el libro "El lenguaje de programación C" ayudó enormemente porque tenía todos los detalles necesarios disponibles en forma compacta. La compresión de la información es parte necesaria en la creación del papel a4 que contiene todos los detalles.
fuente
La programación es sustancialmente diferente de los otros dominios comunes que encuentra un estudiante. Muchos estudiantes antes de la universidad han tenido éxito simplemente prestando atención en clase y tal vez haciendo algunas tareas con problemas fáciles y las respuestas al final del libro. Se trata más de memorizar procesos, luego de crearlos. También es la primera vez que muchos estudiantes obtienen la respuesta incorrecta repetidamente (errores de sintaxis, errores lógicos, fallas seg, etc.). Esto puede agotar la motivación de los estudiantes al trabajar en programas.
Para saber realmente qué está pasando con la programación, deberán PRACTICAR MUCHO. Una técnica que a menudo se pasa por alto es hacer que escriban el código psuedo en cualquier idioma nativo. Pídales que sigan expandiendo eso hasta que tengan una solución bastante detallada al problema. Entonces es cuestión de traducir eso en código real.
fuente
Cuando estaba en la universidad, solía ser tutor para la introducción al curso de programación, entre otros cursos. El problema que está describiendo no es infrecuente. Dependiendo de cuál sea su rol específico, puede tener diferentes enfoques que desee adoptar.
Primero, si este es un problema generalizado que afecta a partes significativas de los estudiantes en la clase, si tiene acceso para hacerlo, me acercaría al profesor que enseña el curso con comentarios específicos sobre los conceptos que los estudiantes no están entendiendo, para que él o ella puede incorporar una revisión adicional de ese material a medida que aparece nuevamente en el término o mejorar el plan de estudios para futuros términos.
Si enseña una sección de discusión para el curso además de su tiempo de laboratorio, sería un momento maravilloso para exponer las cosas que eran confusas en la conferencia y ayudar a hacerlas más concretas y asegurarse de que se entiendan todos los fundamentos.
Si el único momento en que trabaja con estos estudiantes es durante su tiempo en el laboratorio de tutoría, aún puede usar este tiempo para enseñarles a los estudiantes, uno a uno, o algunos a la vez, los componentes conceptuales que necesitan para comprender y completar su tarea.
Pueden sentirse tan perdidos en clase que ni siquiera saben dónde detenerse y hacer preguntas. Si ese es el caso, vuelva a lo básico con ellos. ¿Dónde estaban en el curso la última vez que entendieron lo que estaba pasando? Si no están seguros, o "nunca" entendieron, puede que tenga que volver al principio para explicar hola mundo, enseñándoles cosas como qué es una variable, cómo la computadora toma su lista de "instrucciones" e intenta hazlos en orden, pero la computadora no es tan "inteligente" como nosotros, por lo que debes ser muy literal y decir las cosas exactamente para que la computadora las entienda, etc.
En realidad, ese es un punto de lucha y frustración que he visto con bastante frecuencia en los cursos de programación no especializados. Los estudiantes escriben un código. Parece "correcto", pero luego van a compilarlo y da un error, un error muy críptico. Y no tienen idea de qué tiene de malo. Y mira su código por horas. Luego, finalmente descubrí que era algo que parece trivial, como un punto y coma faltante o un aparato ortopédico en el lugar equivocado. Luego van a compilarlo nuevamente, y todavía hay un error, es otra cosa. Deletrearon un nombre de variable de manera diferente la segunda vez que lo usaron. Y así. Entonces le piden ayuda a un amigo o tutor o alguien, y pueden responderles "oh, simplemente agreguen esto y luego funcionará". Entonces su experiencia es que la programación es un poco "misteriosa"
Esa es un área como tutor, donde tienes mucho espacio para ayudar. Dependiendo de su nivel de frustración, podría tener diferentes enfoques para ayudarlos a descubrir por qué su código no funciona. Si de alguna manera lo están entendiendo, podría darles pistas e intentar ayudarlos a resolverlo por su cuenta. Pero si están al final de su cuerda, listos para rendirse frustrados, a menudo les daré un par de respuestas gratuitas, y luego intentaré al menos hacerles preguntas como "¿Entienden por qué este cambio solucionó su programa? ? "
Para algunos estudiantes, especialmente los que no son mayores, pueden no tener la atención metódica a los detalles necesarios para ser un buen programador o disfrutar de la programación. Puede sostenerlos a través de estrategias para ayudarlos a prestar atención a los detalles y ser lo suficientemente metódico para resolver los problemas, incluso si es un desafío para ellos.
Pero anal-retentivo sobre los estudiantes que sangran su código "correctamente"; con frecuencia, los programadores principiantes crean problemas con el anidamiento y el alcance porque tienen llaves que no coinciden o similares porque no prestan atención a lo que está anidado bajo qué. Dales una lista de verificación de "cosas para verificar cuando tu programa no compila", como sangrar todo el código correctamente y asegúrate de que las llaves coincidan, asegúrate de que todas las líneas terminen en punto y coma, especialmente alrededor del número de línea donde se muestra el primer error arriba, etc.
Enséñeles a compilar temprano y compilar a menudo. Escriba el código esqueleto mínimo (digamos, hola mundo), compile / pruebe. Agregue algunas líneas, compile nuevamente. Es mucho más fácil encontrar errores si solo está mirando un pequeño grupo de cambios, no uno grande.
Ayúdelos a aprender cómo dividir un problema en problemas solucionables más pequeños. Esto es lo mismo que hacemos como programadores profesionales para resolver problemas mucho más difíciles que no sabemos cómo resolver. Sigue dividiéndolo en pedazos hasta que llega a algo que sabe cómo resolver o puede investigar un poco para aprender cómo resolverlo. "¿Qué pasos necesitarías tomar para llegar a una solución que funcione?" Bueno, primero necesitarías un código esqueleto (hola mundo). ¿Sabes como hacer esto? Sí, genial, así que cuando hayamos terminado de hablar, ¡puedes comenzar haciendo eso! Entonces necesita leer un archivo como entrada. ¿Recuerdas haber leído sobre eso en el capítulo 4? ¿Realmente no? ¿Por qué no echas un vistazo a eso después de poner en marcha hello world, y ver qué tan cerca puedes llegar a hacer que funcione y luego volver a llamarme y yo? Te ayudaré un poco más cuando te quedes atrapado en eso. Es posible que las primeras veces solo necesite hacer una lista numerada de los pasos necesarios para resolver el problema, para que puedan aprender, por ejemplo, cómo descomponer el problema.
Si están obteniendo parte del material en clase, pero no todo, aliéntelos a hacer preguntas en clase, porque nueve de cada diez veces, no son el único estudiante que no comprende, y el profesor probablemente solo pasó por alto algo importante.
Si pasan "horas" mirando un error pero no lo descifran, eso es una pérdida de tiempo, no están aprendiendo mucho de él. A menudo, los errores son problemas de comprensión, y se trata de encontrar la visión correcta para resolverlo, y es posible que no tengan una habilidad especial para ese tipo de problemas. Sugiera otros enfoques generales para tomar cuando se atascan: pida ayuda a otro amigo en la clase (conozca a algunos compañeros de clase si es necesario), comience su tarea con anticipación para que tengan tiempo de detenerse y luego entren el tutor del laboratorio y hacer preguntas durante el horario de atención, o ir a las horas de oficina del profesor. Si están acostumbrados a abarrotar, lo que funciona bien para los sujetos de memorización, se encontrarán con un muro de frustración cuando ' se enfrenta a una programación que trata más sobre la resolución de problemas que la memorización. Muéstreles cómo buscar ejemplos de sintaxis en su libro de texto, stackoverflow, etc. Aliéntelos a publicar una pregunta en un foro privado de preguntas de clase si existe.
Enséñeles cómo reducir dónde deja de funcionar el código. Comenta cosas hasta que vuelvas a algo que se ejecuta, y luego agrega cosas lentamente hasta que vuelvas a tener ese defecto.
Muchas de estas ideas podrían convertirse en folletos si surgen mucho. Las estrategias suelen ser la parte que los profesores pasan por alto: pasan su tiempo en la sintaxis, la semántica de cómo escribir bucles, matrices, E / S, etc. Pero no dedican suficiente tiempo a "qué hago cuando intento ejecutar mi código y simplemente no se compila o se bloquea en mí "
Cuando se trata de cosas conceptuales, especialmente fundamentos, como "¿qué es una variable" o "qué es un bucle?" no entender eso les impedirá mantenerse al día con el resto del curso. En un curso basado en conferencias, el profesor puede no tener tiempo para responder todas las preguntas o ayudar a que se apague la bombilla de cada estudiante. Y eso es parte de por qué los tutores son tan importantes para aprender a programar. Es posible que necesiten instrucción individualizada con analogías adicionales para concretar un tema en particular.
Como estás enseñando en C ++, imagino que las clases surgen como un tema abstracto que algunos estudiantes luchan por "entender". A menudo, la abstracción de clases se enseña con ejemplos correspondientes a algún objeto aleatorio del mundo real, como un "cajero automático", y se hacen analogías con el objeto del mundo real. Es posible que tenga variables para realizar un seguimiento de cuánto dinero hay dentro, tiene métodos, que son como reglas que le dicen a la máquina de cajero automático cómo responder a condiciones particulares, etc. , y otros estudiantes captan mejor uno diferente.
Siempre que sea posible, dibuja para ellos. Como un diagrama de secuencia de lo que sucede con el tiempo para ayudarlos a ver el panorama general de lo que hace el código que están escribiendo. El usuario hace clic en este botón. Entonces el programa debería responder haciendo x, y y z. Dibuje una matriz como un montón de apartados postales en la oficina de correos que cada uno puede contener solo un número, y punteros como flechas que apuntan a la "dirección" en el frente de la casilla. Etc.
fuente
De todas las maravillosas opciones para los lenguajes de programación, esta universidad usa C ++ como su clase de introducción de CS para estudiantes que no son CS. En manos de un instructor talentoso, puede ser remotamente concebible, pero ¿por qué hacerlo tan difícil?
Cuando aprendí "Pascal" en mi clase de intro-CS de la universidad, pasamos las primeras 3 semanas trabajando con " Karel el robot ". Este era un entorno de programación similar al logotipo de sandbox muy simple donde todos los conceptos básicos (incluida la recursividad) se exploraron a fondo antes de hacerlo en Pascal. En "Karel the robot", controlas un robot en el espacio 2D utilizando un pequeño conjunto de comandos simples. Esto les brinda a los estudiantes una base concreta útil sobre la que pueden recurrir para lo que sucederá después.
¿Quizás hay ahora lenguajes de programación de instrucción más modernos que cumplen el rol de "Karel the Robot"? Sin embargo, probablemente sea demasiado tarde para tus alumnos ahora.
fuente
Además de lo que se dijo, supongo que, como principiantes, solo necesitan rascar la superficie, así que adapte su plan de estudios en consecuencia para evitar cosas complejas.
0-darles un problema simple (digamos evaluar una expresión).
1-dales tiempo para resolverlo.
2-darles la respuesta.
3-ve a través de la respuesta línea por línea
4-pídales que comparen su respuesta con su intento
5-pídales que deriven la lección de este problema
6-agregue un paso más al MISMO problema, digamos una condición que requiere una declaración IF
7-repita la tarea anterior en varios problemas. Para entonces habrían comprendido los conceptos básicos del lenguaje y cómo usar el entorno. El estaría listo para lo que viene después.
También,
-tienen un problema simple adicional para que puedan probar en casa cada 2 clases más o menos
Comprometerse con cada alumno para ver cuál es el punto que le impide avanzar
-proporcionar material de referencia fácil, olvidar temas complejos y libros complejos
-Observe sus comentarios con frecuencia y úselos
-pídales que se preparen para el próximo tema antes de que vengan a clase
fuente
Lo que me ayudó cuando pasé por CS 101 fue aprender la lógica incluso antes de mirar el código. Revisamos tablas de verdad y cálculos preposicionales para comenzar a pensar "esto es verdadero o falso" y no "esto es igual o igual".
Eso fue justo cuando todo hizo clic para mí. Una vez que descubrí que la programación es básicamente manipular valores verdaderos / falsos en su núcleo, todo se volvió relativamente simple.
Y esto hizo que no importara qué idioma estaba usando, la lógica es la misma en todas partes. La sintaxis puede ser confusa, pero puedo decir cosas como "Ok, en Obj CI enviar mensajes a clases como esta y en C ++ los mensajes se enviaron de esta manera de otra manera. Pero el algoritmo no ha cambiado en absoluto". etc.
fuente
Hay un artículo de ACM o IEEE en algún lugar que detalla algunos de los por qué los principiantes (incluso los graduados de CS que comienzan en el campo) deben sentarse detrás de un programador sénior y verlos codificar un problema.
Los profesionales a menudo se emparejan por problemas difíciles. A los estudiantes se les dice con demasiada frecuencia que no lo hagan. Ventajas del emparejamiento (turnándose en el teclado): 1. Al alumno se le dice lo que está haciendo mal de inmediato. Retroalimentacion instantanea. 2. Cuando el alumno mira al profesor, el alumno capta las cosas que el profesor nunca hubiera pensado señalar.
En lugar de dejar que un estudiante desarrolle malas prácticas, se les corta de raíz. (Daría la vuelta al # 1 con el # 2 aquí y dejaría que el estudiante mire al Instructor / TA PRIMERO )
Enseñar CS con un conjunto estático de diapositivas de PowerPoint no se presta bien al proceso temporal de escribir un programa. (De acuerdo, hay trucos que puedes hacer con el crecimiento de las funciones línea por línea, pero generalmente son incómodas).
Los alumnos necesitan saber dónde comenzar a escribir y dónde parar y compilar. Nuestros cerebros están en su mayoría conectados para leer de izquierda a derecha de arriba a abajo, ¡pero un programa es como un todo, elige tu propio libro de aventuras en una sola página!
Con demasiada frecuencia, un principiante copiará un programa completo y luego lo compilará. Incluso un profesional podría darle una primera oportunidad de esa manera, antes de darse cuenta de que deberían haber dejado todas las funciones vacías y compilar el programa, y luego agregarlo iterativamente a un esqueleto funcional.
Además, está relacionada la ridícula idea de que la CS debería enseñarse sin una computadora y solo lápiz y papel. Me pregunto cuántos profesionales de programación empleados realmente piensan que esta es la mejor manera, o si es solo lo que hacen los instructores de CS porque a ellos mismos no les gusta trabajar con computadoras. Cualquier intento de eliminar una computadora de la imagen es muy malo. Hacerlo hace que la programación sea menos divertida y menos interactiva de lo que debería ser. Ya pasamos los días de ingresar datos en una tarjeta perforada y esperar pacientemente. Los desarrolladores profesionales de hoy son fanáticos de la gratificación instantánea. Afortunadamente, la mayoría de los estudiantes también lo son.
Obviamente, el dibujo de bonitos diseños con lápiz y papel antes y durante el proceso de desarrollo es una herramienta poderosa tanto para programadores profesionales como principiantes. ¡Esto como el tiempo de "manos en el teclado" también se debe gastar emparejamiento! Quizás aquí tenga sentido dejar que el estudiante intente la primera ronda antes de mirar al maestro, aunque incluso con esto probablemente valga la pena ver el proceso de pensamiento real del maestro.
Por último, las teclas de acceso rápido y los trucos de edición que emplea el desarrollador profesional no son "ruido" para el aprendizaje del estudiante. Lo más importante, involucran e interesan al estudiante. En segundo lugar, crean conciencia sobre las necesidades comunes de desarrollo. Además, las prácticas más básicas son a menudo fáciles de ejecutar pero inicialmente no son obvias. Un joven estudiante de carpintería puede aprender fácilmente cómo quitar un clavo con la garra de un martillo, pero en la mayoría de los casos primero se le debe decir que para eso es la garra. Algunas cosas extremadamente fáciles de hacer no son triviales de aprender sin que se les enseñe. Incluso los desarrolladores profesionales se olvidan de estos "trucos" todo el tiempo, y se benefician de las herramientas de refactorización como resharper para eliminar código redundante o no alcanzado, etc.
fuente
La programación informática es a menudo uno de los primeros cursos en los que se requiere la habilidad cognitiva de síntesis para aprobar. Esa habilidad es muy difícil de impartir a alguien más. Puede explicar todos los componentes que tienen disponibles y cómo funcionan. Puede dar una multitud de ejemplos de cómo otras personas han usado la síntesis para combinar esos componentes en un todo más útil, pero solo hay mucho que puede hacer sin que algo "haga clic" en la mente del alumno.
En mi experiencia, es la habilidad de síntesis lo que con mayor frecuencia elude a las personas que no "entienden" la programación. Tienen una comprensión perfecta de las partes, como variables, funciones y bucles, pero hacen preguntas como: "Entiendo por qué funciona, pero ¿cómo sabías que necesitabas poner un bucle allí?" Simplemente tienes que practicar hasta que lo consigas.
fuente
Para citar mal a Aaron Hillegass, recuérdeles que no son estúpidos, es difícil. La programación es difícil de entrenar para su mente, es una forma completamente diferente de pensar, y si bien pueden estar luchando con los conceptos básicos, probablemente sean muy conscientes de que son y los hará bastante abatidos.
Digo esto como alguien que también reprobó su curso de CS de primer año, había programado mucho antes y obtuve todos los conceptos (VB, sí, bebé), pero C ++ simplemente no me hizo clic. Terminé volviendo a lo básico y trabajando desde allí, luego hizo clic, pero si alguien hubiera dicho "No eres un idiota, esto es difícil", me habría hecho la vida más fácil.
fuente
Dijiste que "estos estudiantes pueden saber aprender matemáticas, biología o física, pero esas técnicas no funcionan cuando se trata de programación".
Hay una razón para esto, la programación requiere algo que esas otras disciplinas no necesariamente requieren: creatividad y ... fantasía . La capacidad de "imaginar cosas en el trabajo". Personalmente, encontré que tal requisito está más presente (por supuesto, con todas las excepciones debidas) de personas que vienen de la escuela técnica (electrónica y electromecánica en particular: tienen que "imaginar los flujos eléctricos y cómo se controlan entre sí", ya que no pueden ¡Véalos!) que de la "ciencia pura" (donde todo parece cambiar las matemáticas).
Para estos últimos casos, la "cognición visual" debe ser ayudada. Es importante no solo centrarse en la noción y el texto (el tipo -> compilar -> mirar los errores no puede funcionar si no puede "leer" los errores) sino proporcionar una forma de visualizar las cosas, ya sea en tiempo de diseño ( simulando lo que pasa en la máquina: prepárese con una pizarra blanca y un juego de post-it de color) y en el momento de la ejecución.
Para que esta última parte tenga éxito, debe darse una noción esencial de los sistemas operativos y "cómo los programas se ejecutan en una máquina" (y qué es esa máquina en realidad). Y se debe dar un IDE no intimidante. Normalmente tengo un "Bloque de código personalizado" con muchas cosas eliminadas para "no distraer". La noción de proyecto hecho de fuentes para generar objetos para vincular con la biblioteca debe darse ANTES de comenzar a hablar sobre un lenguaje.
El hello world tradicional de C ++ requiere un punto de entrada y un dispositivo de salida. El estudiante ya debe estar familiarizado con eso. El éxito de este tipo de cursos depende de los primeros días. Debe estimular una visualización de lo que sucede dentro de una computadora para que puedan comprender qué es la programación.
El resto es sintaxis (ciencia) y abstracción (fantasía).
fuente