Estaré asesorando a un equipo de estudiantes de secundaria para la PRIMERA Competencia de Robótica, la mayoría de los equipos aquí desarrollan [su software de robot usando C ++. Para muchos de los estudiantes del equipo, esta será su primera introducción a la programación. No hubiera elegido C ++ para enseñar programación a estudiantes de secundaria (por ejemplo, Python o Javascript habría sido más fácil), pero la elección está establecida.
Quiero enseñarles C ++ adecuado (es decir, evitar un dialecto mixto C / C ++, es decir C +) pero tampoco quiero asustarlos con una complejidad innecesaria. Para esa materia:
- ¿Debo comenzar a usar STL desde el primer día?
vector
o simplemente seguir con las matrices estándar? Las matrices son más fáciles de introducir, pero los errores de puntero pueden ser más difíciles de detectar. - Para E / S, ¿debería seguir
cout
, etc. o creeprintf
que sería más fácil de aprender? - ¿Hay algún recurso en línea para C ++ que sea adecuado para estudiantes jóvenes?
¡Gracias!
EDITAR : Gracias por tantas excelentes respuestas. Además de C ++ acelerado , que es sugerido por muchas personas, he encontrado que C ++ para todos es un texto excelente.
Respuestas:
Creo que debería comenzar con los tipos de datos que el lenguaje ha incorporado, como matrices y punteros, y cuando sus estudiantes los comprendan, pase a clases y OO, luego el STL.
La razón es que puede enseñar a las personas a comprender las matrices sin comprender mucho más que las variables y la arquitectura de la computadora subyacente, pero no puede enseñarles a comprender
vector
sin enseñarles primero las clases. Si usa el STL desde el principio, sus estudiantes tendrán que vivir sin tener ni idea de cómovector
funciona exactamente. Y luego, cuando llegues a ese punto, no tendrán una comprensión suficiente de punteros y matrices y cosas que obtienes de hacer cosas como escribir tu propia clase de vectores, escribir tu propia clase de lista vinculada, etc. que será necesario para apreciar y explotar sus características. Me molesta cuando los estudiantes dicen "¿qué es eso?" y los maestros dicen "simplemente ignóralo, lo aprenderás más tarde".Y como Demian señaló en los comentarios, descifrar los mensajes relativamente crípticos que recibe de los errores de plantilla es significativamente más difícil que comprender los errores que puede obtener de matrices / construcciones que no son de plantilla.
No siento lo mismo por
cout
yprintf
. Ninguno de los dos tiene un nivel más bajo que el otro, excepto quecout
usa sobrecarga del operador.Esto puede parecer estúpido, pero soy absolutamente fanático de que la gente entienda los componentes básicos de todo antes de pasar a las abstracciones. No debe usar punteros inteligentes hasta que sea competente con punteros sin procesar, sin vectores antes de las matrices, ese tipo de cosas.
A menudo digo esto, pero lo diré de nuevo: es mejor enseñar a los estudiantes la división larga primero y luego dejar que usen una calculadora que dejar que usen una calculadora y luego enseñarles la división larga después.
En cuanto a los libros para enseñar a los principiantes, vea la lista maestra de buenos libros de C ++ .
fuente
vector
over arrays. Estoy desgarradostd::string
ystd::vector
? ¿Son los programadores de 32 C los que votan? He estado enseñando C ++ durante una década, a principiantes de programación, a estudiantes que tuvieron un año de Java y a profesionales de programación. Yo usostd::string
ystd::vector
desde el primer día. Son fáciles de usar, sin importar sus entrañas. (¿No rehuirías enseñar la secuencia de VB porque es demasiado compleja por dentro?)std::vector
para poder usarlo. Y las clases son una parte extremadamente básica de C ++. Lo que no es básico es depurar todos los errores que van a obtener utilizando matrices y punteros nativos.new
palabra clave, vuelve a la memoria de gestión de memoria. Y muchas veces las bibliotecas piden punteros y usted debe preguntarse, "¿eso va a tomar posesión? ¿O todavía necesito limpiarlo?". Fundación mi pie. Más como un clavo o calafateo o algo así.Esta es mi propia experiencia. Tómelo por lo que sea que valga.
Mirando hacia atrás cuando comencé a programar, realmente desearía haber aprendido sobre memoria primero . No, no es emocionante. Te hará deslumbrar. Pero es un concepto ridículamente fácil de enseñar. Simplemente muestre una tabla 1-D y haga que pasen por algunos ejercicios mentales:
etcétera Una vez que tienes memoria básica baja, todo lo demás es pastel. Son los estudiantes pobres quienes asumen que el compilador está haciendo algo mágico (o que nunca tienen que pensar en el manejo de la memoria) quienes tienden a tener más dificultades. Y C ++ enturbia las aguas porque algunas cosas se limpian automáticamente (es decir, un vector normal) mientras que otras no (es decir, un vector asignado usando "nuevo"). Y ni siquiera me hagas comenzar con las cadenas (char * vs. std :: string - intenta explicarlo sin conocimiento del puntero).
No sé a qué plataforma se dirigirá su competencia de robots, pero si se trata de un entorno de memoria limitada, las habilidades de gestión de la memoria son cruciales.
EDITAR
Una vez que les haya enseñado los fundamentos, entonces sí, digo que vaya C ++ hasta el final. Técnicamente son solo bibliotecas diferentes, pero sí, no tiene sentido confundirlas con más de un paradigma. Dales herramientas C ++ (que incluyen punteros y matrices).
fuente
definitivamente entrar directamente en el uso de tipos de biblioteca estándar. a
std::string
ostd::vector
es lo que deberían usar a menudo y (la gran mayoría de las implementaciones de) estos tipos ofrecen alguna forma de detección de errores y manejo de errores, al tiempo que abstraen muchas de las complejidades de los estudiantes.puede pasar una buena cantidad de tiempo enseñando a los estudiantes cómo está estructurada la memoria y cómo administrar la memoria (estilo C), o puede ir directamente al trabajo utilizando los tipos idiomáticos del lenguaje y luego explicar los detalles de implementación si es necesario (y cuando tienen un mejor comprensión de qué es una matriz y dónde se usan).
La sintaxis de
std::vector
(crear / leer / escribir) no es mucho más complicada que la de una matriz C. en comparación, la gestión manual de la memoria y todos los errores comunes que los nuevos alumnos cometen con las matrices C son mucho más difíciles de aprender, enseñar y usar.cout
. personalmente, creo quecout
es más fácil de aprender. quizás lo más importante, debe elegircout
porque es más seguro, versátil y le permite definir cómo se imprime un objeto, lo que significa que ya tiene funcionalidades integradas y seguridad de tipos utilizando algunos tipos de biblioteca estándar. por último, que acaba de terminar con los programas mixtos cuando se da cuenta de que también pueden necesitar para aprendercout
, además deprintf
.de hecho, creo que deberías leer Accelerated C ++, de Koenig y Moo, y posiblemente usarlo como instrucción (respondiendo la pregunta 3 indirectamente). en el libro, se presentan
std::cout
justo antesreturn
(página 3), y guardan punteros y matrices hasta el capítulo 10. Si pudiera copiar y pegar el prefacio de ese libro como respuesta a su pregunta, lo haría. (nota: te recomiendo que lo leas por la perspectiva de enseñar c ++).Editar aquí es el prefacio
Si no desea utilizar C ++ acelerado (que asume algunos antecedentes con la programación en general), entonces tal vez le gustaría el pensamiento de Eckel en C ++ . No lo he leído, pero es un texto de introducción de C ++ distribuido libremente.
fuente
std::cout
de la presentación, se introducen llaves =) (es una simple disección del omnipresente "Hello, World")Una cosa a tener en cuenta es que en el código FIRST típico, las estructuras de datos de cualquier forma (estructuras, clases, matrices, vectores, listas) juegan un papel muy pequeño. Por lo general, maneja una cantidad muy pequeña de datos del sensor y la usa para decidir una cantidad muy pequeña de movimientos del actuador.
Pero lo que sí juega un papel importante y puede ser muy difícil de entender son todas las diferentes formas de control que tienen lugar.
Así que puse mucho énfasis en el control. Comience con lo básico:
if
,for
,while
. Haga que practiquen mucho eso. Haz que los conozcan bien ...... pero luego se vuelve más difícil. Cualquier código de robot de tamaño moderado finalmente llega a algunos patrones de control más complicados:
Gran bucle "principal", que lo llama todo
Máquinas de estado (se muestran mucho)
Guardar valores anteriores / ejecutar contador (como para PID)
Estos son difíciles de entender para los principiantes. Pensar en cómo un programa se mueve a través de un código como este es confuso, es posible que no se dé cuenta ahora, pero lo es. Les dará a sus estudiantes muchos más problemas que el idioma en sí.
Además, ¡buena suerte! Espero que la temporada vaya bien.
fuente
El problema con las matrices es que cualquier cosa, excepto ejemplos simples de libros de texto, requerirán matrices de tamaño dinámico, y en el momento en que necesite matrices de tamaño dinámico,
std::vector
es mucho más fácil. Además, la única forma de manejar de forma segura las matrices de tamaño dinámico es envolverlas en su propia clase, lo que sería unastd::vector
estafa pobre .Contrariamente a la creencia inexplicablemente popular, los estudiantes pueden usar características que requieren la implementación de mecanismos complejos sin saber cómo implementar esas bestias por sí mismos. Como he dicho en un comentario: ni siquiera pensarías en considerar no enseñar cadenas en otros idiomas, solo porque su implementación es compleja, ¿verdad?
¿Por qué un conjunto de convenciones de cadenas de formato arcaico que hacen que su programa explote en el techo en el momento en que algo sale mal (que sucede en el momento en que cambia un
typedef
encabezado aparentemente no relacionado) sería preferible a la seguridad de tipostd::cout
?La mayoría de los recursos de C ++, en línea o no, son malos. Y no estoy hablando de usar fuentes o lenguaje difíciles de leer. Estoy hablando de errores de hechos evidentemente obvios. Hay muy pocos recursos buenos de C ++, en su mayoría una o dos docenas de libros . El único que conozco está en línea es Thinking in C ++ de Bruce Eckel .
Durante una década, he enseñado C ++ a estudiantes con antecedentes muy diferentes utilizando C ++ Acelerado de Koenig / Moo como base. Mi curso ha cambiado mucho en esa década, ahora no está cerca del libro, excepto por el principio subyacente: usar los modismos modernos, correctos y seguros desde el principio. No enseñe a sus alumnos cómo manipular manualmente la memoria, solo para que luego desaprendan eso a favor de expresiones idiomáticas más seguras. Como puede ver en algunas de las respuestas proporcionadas aquí, esto no funciona: aquellos que alguna vez aprendieron las formas manuales primero rara vez entenderán la ventaja de usar expresiones idiomáticas modernas y seguras.
fuente
Si desea enseñar C ++, comenzaría directamente con las construcciones de C ++ como vector y cout, en lugar del subconjunto de C como printf.
fuente
Sí. El uso de matrices nativas en C ++ es propenso a errores y simplemente es una mala práctica el 99% del tiempo.
Sí.
No son tan jóvenes. Aprender a programar no requiere sabiduría, solo motivación y una mente abierta. No puedo pensar en nada de lo que se haya enseñado en los últimos dos años de la escuela secundaria que pueda preparar mejor a un estudiante para aprender a programar. ¿Has mirado el pensamiento de Bruce Eckel en C ++ ? Está disponible para descarga gratuita y muy bien revisado. Evite el popular pero horrible C ++: Cómo programar y todos los libros de Sam's Teach Yourself C ++ ...
fuente
Me enseñaron C ++ en la escuela secundaria como primer lenguaje de programación, aunque era más como "C +", ahora que lo mencionas; solíamos
cout
escribir texto en la consola y los archivos, pero también algunas funciones C (getch()
era mi favorito).Creo que la forma más efectiva (y posiblemente divertida) de enseñar los conceptos básicos es usar un plan de estudios orientado a objetivos: comenzar mostrando cómo generar cosas, luego ingresar el teclado, luego E / S de archivos simples, etc. Progresar a un texto simple. juego basado (o el equivalente en robótica). Luego, cuando preguntan: "¿Cómo hago X?", Puedes desglosar X en términos de ejemplos que ya han visto, por ejemplo, "Primero tendrás que obtener la entrada del usuario como lo hicimos en Z, luego ..."(obviamente no es tan fácil en la práctica, ya que X es probable que sea algo que necesitan un conocimiento adicional con el fin de hacerlo, por ejemplo, 'gráficos en 3D', pero aún se podía explicar cómo sería trabajar en un alto nivel camino).
Los ejemplos que les muestres comenzarán como magia copiada en recuadro negro, cuyos misterios se descifran a medida que las piezas del rompecabezas de programación se descifran lentamente. Por ejemplo, sus alumnos aprenderán los conceptos básicos de
if
s con bastante rapidez, pero probablemente no se darán cuenta de que una expresión booleana no se limita exclusivamente al uso dentro de unaif
condición (que conduce alif (blah) return true; else return false;
código clásico ).Las sutilezas de si elige una matriz o un vector como contenedor parecerán irrelevantes para los estudiantes al principio. Un vector / matriz simplemente será una forma de tener muchas variables como una variable, accesible a través de un índice. Cíñete a uno donde puedas. Los punteros no se entenderán hasta más tarde tampoco. Eso no quiere decir que no debas explicar las cosas; solo que no puedes explicar todo de una vez, y las cosas que explicas no serán completamente absorbidas. Los humanos aprenden orgánicamente, no linealmente. ¡Lo había estado usando
cout
durante un par de años antes de entender correctamente qué era la sobrecarga del operador!Ah, y no tengas miedo a la repetición. "Esto es como el programa Hello World que hicimos. ¿Recuerdas cómo escribimos el texto en la consola?" (no ...) "Hagámoslo de nuevo solo para asegurarnos". ... y hacer preguntas! Mantenga a los estudiantes interesados con ejemplos divertidos y mucha interacción.
C ++ es un lenguaje complejo, y no importa lo que haga, una cantidad significativa de esa complejidad (y la del oficio de programación en general) se perderá en sus estudiantes. Todo lo que les muestres será nuevo para ellos; la mayor parte no se hundirá en un nivel profundo de comprensión (al menos, no de inmediato). Cómo funciona la memoria, cómo interactúan los componentes de una PC, cuáles son la pila y el montón, los punteros, las clases, incluso los bucles y las cadenas if-else no serán entendidas adecuadamente por la mayoría. ¡Esto esta bien! No es necesario que se entiendan para usarlos: se puede escribir una increíble cantidad de programas geniales con funciones súper feas de 1000 líneas con
if
s redundantes quíntuples y 43 variables con nombres similaresx_2r
. Lo importante es que los estudiantes están constantemente aprendiendo y mejorando. Las cajas negras están bien siempre que se vuelvan transparentes (o al menos gris translúcido) a la larga. Al final del curso, es posible que no sepan qué son los patrones de diseño, pero deberían poder volver a mirar los programas que escribieron en las primeras semanas y encogerse por su código. Deben entender con un nivel de detalle significativo cómo funciona realmente el primer programa que escribieron (mientras que cuando lo escribieron no tenían idea). Pero no lo sabrán todo ... todavía .fuente
He tomado un montón de clases de programación en mi vida desde la escuela secundaria hasta la universidad. Puedo decir que realmente no aprendí demasiado de mi primera clase de c ++ aparte de cómo imprimir cosas en una secuencia.
Mi consejo, como joven estudiante, que solo en los últimos años ha tenido un verdadero trabajo como desarrollador, es que no les haga tonterías. Dígales lo que están haciendo y cómo funciona hasta el nivel del sistema operativo (no es necesario entrar en comp eng IMO).
Creo que enseñarles C es una mejor manera de hacerlo (casi siempre se compilará como C ++, como saben). Enseñándoles qué es realmente el terminal, cómo interactúa su programa con él, que una cadena es una matriz de caracteres terminados con un \ 0 en la memoria, qué es malloc y cómo C ++ lo abstrae, cómo se almacenan un char y un int en la memoria , ect ... Estas cosas son las que hacen que alguien realmente sepa cómo resolver un problema cuando lo encuentra en desarrollo.
No puedo enfatizar la importancia de dejar que los niños programen y estar allí principalmente para responder preguntas. En mi experiencia, aprendes un idioma al usarlo. Los libros y las lecciones pueden ser útiles y son necesarios para comenzar, pero al final, les doy un archivo C / C ++ y digo: Este es un ejemplo de X, me gustaría que hicieras Y (que se puede hacer pirateando X). Muéstreles cómo usar las páginas man (si están usando * NIX) o muéstreles cplusplus.com y permítales explorar las bibliotecas estándar para resolver las cosas por su cuenta.
TL; DR Deje que los niños se enseñen solos. Esté allí para proporcionar estructura y responder preguntas.
También: ¡Las listas enlazadas son la verdad!
fuente
No les está enseñando a programar de manera general, les está enseñando una especie de programación integrada usando Robots y demás. Si entendí correctamente.
Primero, creo que deberías verificar qué bibliotecas vas a usar y qué necesitas.
Si tiene una biblioteca de C para usar o un C-like con muchos punteros y matrices de C, entonces creo que necesitaría una forma de enseñarles cómo usarla o por qué la usa.
Pero, puede mostrarles algunos códigos simples para que comiencen con cadenas y vectores, así es como funciona C ++. Eso no significa que no puedas enseñarles consejos.
Tal vez debería dejar en claro las diferencias entre el C ++ de bajo nivel (que se parece a C) y el C ++ de alto nivel con el STL. Una de las cosas más difíciles en C ++ para principiantes es ver qué es C, qué es C ++ y cuáles son las diferentes API del sistema.
Como el objetivo aquí no es aprender programación general sino participar en una competencia de robots, había orientado la enseñanza de esta manera.
fuente
Comencé a enseñar a los estudiantes C ++ a fines del año pasado y este verano también para nuestro equipo FIRST Robotics.
Estamos utilizando la programación de Stroustrup : principios y práctica con C ++ . He encontrado que el libro es accesible, legible y bien organizado. Hemos tenido a unos 6 estudiantes leyendo los capítulos por su cuenta. Estoy allí para ayudarlos con terminología y preguntas. Hacen todos los ejercicios del libro.
Hice que los estudiantes trabajaran hasta el capítulo 14. Omitir los capítulos en las transmisiones (no es útil para la programación FRC). A través del capítulo 14 es útil porque reciben una introducción a las subclases. Sin embargo, probablemente necesiten ir más lejos en el libro para comprender mejor los constructores y destructores relacionados con las subclases.
No subestimes a tus alumnos. Los estudiantes están felices de tener el libro, leer, aprender y hacer los ejercicios; y esto fue durante el verano en su propio tiempo! Hay muchos estudiantes que no entienden. Deberían pasar a otra cosa; No todos entienden la programación.
La barrera más grande no es el idioma o el libro; Es el entorno de desarrollo. Visual Studio Express puede ser desalentador para los usuarios nuevos. Puede ser valioso para ayudar a los estudiantes a enfocarse en la programación en lugar del entorno. Sin embargo, aprender el entorno es valioso ya que los programadores pasan mucho tiempo adaptándose a los nuevos sistemas de desarrollo.
Buena suerte.
fuente
Dices que quieres enseñarles C ++ pero no enseñarles ninguna construcción de C, pero la mayoría de las construcciones de programación que necesitarán saber primero son comunes a todos los lenguajes y las versiones de C ++ tienen sus raíces en C:
Así es como se hace un programa [int main (..) {return 0; }]. Ofrezca una descripción general básica del entorno de programación que desea que prueben también. Necesitarán saber cómo hacer un proyecto y realmente compilarlo / ejecutarlo.
Esta es una variable. Las variables pueden almacenar datos (int, char, float, etc.).
Cadenas (las de C ++ son más fáciles de usar con cin).
Así es como se leen y escriben datos (cin, cout). "Hola,% s!"
Condicionales (las computadoras necesitan tomar decisiones).
Bucles (las computadoras son buenas para hacer lo mismo una y otra vez). Mostrar while y for loops.
Eso debería tomar alrededor de dos lecciones de una hora cada una. Asegúrese de preparar un conjunto conciso de notas a las que puedan referirse en el componente práctico. No estás tratando de hacerlos programadores brillantes, así que da ejemplos de cómo leer desde la consola, crear estructuras y todo lo que tendrían que hacer. Utilice solo funciones compatibles con el idioma, no bibliotecas de utilidades personalizadas. Solo los confundirás más.
Desde el principio, lidere con el ejemplo y muéstreles ejemplos de código bien diseñado. Las sangrías deben ser correctas, arriostradas y paréntesis consistentes en el estilo con el que se sienta más cómodo. Los nombres de las variables deben ser significativos. Si muestra slop como ejemplo, aprenderán que slop es aceptable. Es un mal punto de partida. Subraye la importancia de corregir la sangría: descubrí que cuando el lote que enseñé sangraba su código de manera consistente, podían ver más fácilmente dónde iban mal. Eso se debía a que la mayoría de sus errores eran un alcance incorrecto para las operaciones (poner operaciones en bucles / condicionales que no estaban destinados a ser, o lo contrario).
Luego pasar al trabajo práctico. La mejor manera de aprender algo es romperlo y descubrir por qué. Deberá asegurarse de que tengan un entorno fácil de usar para compilar su código. Documéntelo con capturas de pantalla en sus folletos.
Un buen ejemplo que me ayudó a entender algunos de los conceptos fue construir una máquina de Coca-Cola:
Después de eso, puede pasar a construcciones de C ++; no quieres sumergirte demasiado antes de que al menos puedan hacer un programa básico.
Y, sobre todo, tenga mucho tiempo libre y paciencia para dedicar a las preguntas. Habrá muchos, y la mayoría de ellos te harán estremecer porque son tan triviales que la respuesta es obvia para ti.
fuente
Creo que no debería enseñar cosas desde el punto de vista de C ++ ("C ++ hello world"), sino desde el punto de vista del dominio del problema, en este caso, la robótica. Entonces, tu hola mundo estaría parpadeando o conduciendo un motor.
Por supuesto, podría / debería descomponer cada pequeña tarea de robótica en un subconjunto de acciones de C ++ cada vez más significativas conceptualmente, que involucran tipos, funciones y operaciones de E / S.
En cuanto a mí, no soy un programador profesional e intenté aprender Java, C ++ y Python. Realmente comencé a lograr algo (Python) cuando tenía problemas reales (simples) que resolver. Eso me llevó al grano, evitando la atención excesiva a los detalles de implementación incidentales del lenguaje en sí.
Por lo tanto, le aconsejaría: no lea el manual de un idioma, sino que aprenda a hacer las cosas con el idioma que elija. Eso es lo que mantiene a la gente motivada, creo.
fuente
Enseñaría estricto C ++. ¿Sabes cómo cuando escribes printf y lo das a pequeños parámetros o al tipo incorrecto sucede algo extraño? y si usas punteros inválidos, ¿pueden ocurrir cosas malas? NO ENSEÑES ESO
Desde el primer día, enseñaría cómo usar referencias, STL y diría que PERDIÓ MARCAS por usar punteros. Tampoco enseñe punteros inteligentes. La única vez que noto que uso punteros es cuando hago GUI y los objetos (como un cuadro de imagen) deben existir y ser una imagen válida o nula. Para la programación de la consola, no he usado punteros (inteligentes o sin formato) en mucho tiempo.
En resumen, no les enseñe nada que pueda causarles problemas. Enseñe iostreams, estructuras, dígales que también pierden marcas en la conversión tipográfica y no intente enseñar diseño. No quieres que nadie se convierta en un profesional experimentado
fuente
No es una serie de conferencias en C ++, pero COMP1917 de Richard Buckland es una serie de conferencias excelentemente realizada sobre programación en C (seguida de COMP1927 , estructuras de datos).
En mi opinión, C ++ es demasiada complejidad para los nuevos estudiantes, pero C es mucho más simple y proporciona una buena base en la programación de sistemas que los nuevos programadores de C ++ carecen con demasiada frecuencia.
fuente
Comenzaría con trozos significativos de código repetitivo, los ayudaría a "hacer algo genial" con la programación de inmediato y perfeccionaría su comprensión de cómo funcionan las cosas con el tiempo. No necesitan apreciar o comprender todas las complejidades de C ++ para hacer que un LED parpadee. Solo necesitan saber "si pones este código allí, hará que el LED parpadee". Y luego "oye, hablemos de lo que es un bucle ahora, si escribes un bucle, puedes hacer que el LED parpadee 50 veces sin tener que escribir 50 líneas de código, ¿no es genial?" Ahora hablemos de condicionales, cuando el usuario presiona el botón A en la caja de control, queremos activar la neumática para levantar una bandera, así es como agregaríamos código para hacerlo. O si el interruptor 2 de nuestra caja de control se activa, activamos el motor de perforación en reversa en lugar de avanzar.
Si mantienes las cosas enfocadas en enseñarles "lo suficiente" para resolver los problemas que les interesan, las cosas serán mucho menos abrumadoras y más accesibles. Si están realmente interesados y quieren comprender las complejidades, probablemente regresarán y leerán un libro completo sobre programación o tomarán un curso de escuela de verano en el JC local.
Haga una lista de las "cosas que quieren poder controlar" en su robot y convierta cada una en una lección ... ¿qué es lo menos que necesitan saber para ...?
Me apegaría a enseñar las construcciones que son más infalibles, como enseñaría cout sobre printf, porque los especificadores de formato son muy fáciles de mezclar y un especificador incorrecto es a menudo una receta automática para bloquear su programa. Del mismo modo, el vector ofusca algunas de las complejidades de la gestión de la memoria. No se preocupe por cada detalle sobre cómo funcionan las cosas, o qué es la biblioteca STL, solo lo menos que necesitan saber para lograr X (lo que podría requerir el uso de una estructura de datos de la biblioteca STL, por ejemplo)
fuente
Use Cómo programar C ++ de Deitel y Deitel. EXCELENTE libro de texto en mi opinión.
Parece que estás tratando de enseñar a los principiantes cómo programar y luego hacer que programen en algún nivel avanzado al mismo tiempo. Si desea darles un poco de mono, vea fragmentos de codificación de mono sin comprender que está condenado al fracaso.
Manténgase alejado de STL para una clase de principiante.
Si ya tiene una solución de codificación para su robot, o una IDEA MUY BUENA de cómo se verá, entonces quizás pueda "asignar" las lecciones del libro de texto a las tareas de codificación del robot. Pero deje que el libro de texto impulse el aprendizaje.
Si alimentas a la fuerza la codificación, dándoles a los estudiantes lecciones muy limitadas y exposición al idioma, entonces creo que a medida que el océano de código que escribes se hace más y más grande, será como haber aprendido a remar y te ahogarás porque nadas REAL es requerido.
No se trata de "¿deberían aprender cout o printf?" Se trata de aprender lo suficiente como para tener una idea de cómo escribir código para resolver tareas de programación de robots.
Si se tratara de una tarea de lectura, ¿cuáles serían los resultados si lo único que supieran fueran oraciones simples de sujeto-verbo y solo se requerirá la mitad del vocabulario que SABES ?
fuente