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.