La base de cualquier programación está en… rompecabezas

¡Saludos, Habreros!

En este artículo, quiero compartir mi experiencia como docente de programación en C++ en un colegio asociado a una universidad técnica. Fue una experiencia única en la vida que me enseñó mucho. Cuando se trata de hechos interesantes de mi pasado personal, este fragmento de mi vida es uno de los primeros que viene a la mente.
Vamos.

Primero un poco sobre mí.
En 2016, me gradué de la universidad con honores en la especialidad de "Seguridad de la Información en Sistemas Automatizados". Durante mis estudios, tuve numerosas oportunidades para potencializar mi capacidad en la redacción de artículos científicos, participación en concursos y becas. En 2015, fui un afortunado ganador del concurso nacional para jóvenes científicos "UMNIK". En 2016, antes de finalizar mis estudios, ya había conseguido un empleo en una gran organización de la ciudad como "Especialista en Seguridad de la Información, Criptografía y Cifrado".
En resumen, así fue. Se puede imaginar que tenía algo de idea sobre programación.

Y aquí está el año 2017. Doctorado. Me pidieron que enseñara C++ en el colegio durante un semestre, a cambio de buenos incentivos para aliviar la carga del doctorado y nada más.

Sinceramente, estaba genuinamente interesado en probarme en este compromiso.

La primera clase
Septiembre. La primera semana de clases. Los estudiantes vinieron a mí. "El grupo más travieso" — así los llamaban.
23 personas. "Programadores".

Como es habitual, primero me presenté. Les conté con modestia el contenido de la parte "Primero un poco sobre mí"...
Luego comenzó lo aterrador. A la pregunta "¿Qué saben hacer?" los estudiantes (a partir de ahora los llamaremos así) respondieron que sabían poco más que nada (bueno, eso significaba que algunos de ellos sabían cómo era MS VS y podían crear un proyecto "Hola mundo")... Programadores. Último año...

Luego explicaron detalladamente, "en colores", que no les habían enseñado nada y que estaban realmente decepcionados con la programación...

Casi todos los días hasta la siguiente clase fueron así:
La base de cualquier programación está en… rompecabezas

... pero un día antes de la lección, se me ocurrió aplicar esfuerzos para corregir la situación en las mentes y conciencias de esta juventud. Y entonces "Ostap se dejó llevar".

Introducción a la programación
A la siguiente clase, traje... un rompecabezas.
Sí, sí. Un rompecabezas. "Cómo entrenar a tu dragón". Las reglas eran simples. El grupo se dividió en 3 equipos. Cada equipo armaba su parte. Algunos — el bosque, otros — la tierra, y el tercero — el dragón en el centro de la imagen. Mientras ellos pasaban el tiempo armando el rompecabezas, yo les contaba que armar un rompecabezas también es programación, que los programadores a menudo utilizan código de otros, que en cada proyecto hay varios equipos, características, módulos...
Poco a poco, los estudiantes más apáticos también se fueron sumando al proceso.
Cuando terminé de explicar la idea de la programación en el contexto de negocios, procesos y… rompecabezas, llegó el momento de establecer las reglas de aprendizaje.
Para cada clase, cada estudiante debía escribir en su cuaderno 10 términos de TI. Cualquiera. Cada uno tenía los suyos. La idea era que yo tomaba el cuaderno de un estudiante, encontraba entre todos los términos los más aplicables y le preguntaba a otro estudiante sobre ellos. Cuando el otro estudiante decía "No anoté ese término", eso no era castigable (por sentido común), pero ese estudiante debía escribir los términos "faltantes" (al igual que todos los que no los tenían) y buscar sus definiciones para la próxima clase.

Así lo hicimos. Cada clase comenzaba con un animado sorteo sobre dos o tres estudiantes. Los chicos estaban entusiasmados con este proceso.

Temas de las clases
Al comenzar la enseñanza, es muy importante proporcionar a los estudiantes buena literatura. En mi opinión, el material ideal fue el libro:
La base de cualquier programación está en… rompecabezas

En su momento, tuve que leerlo sigilosamente abrazado a Microsoft Visual Studio. Entonces pude entender la programación prácticamente desde cero. La opción ideal.

Te acercas modestamente a los estudiantes y dices: "Para convertirte en programador, solo necesitas leer y probar todo lo que hay en este libro", y dejas el libro sobre la mesa. Lo principal es no confundir los libros en tu mochila...

Antes de cada tema, por supuesto, tenía que prepararme a fondo. Leí a Lafore y algunas otras fuentes interesantes de la red.
Tenía que explicar desde lo más básico. Además, deducir dónde estaban los vacíos en los conocimientos básicos de los estudiantes era necesario.
Arreglos -> Trabajo con memoria (constructores) -> Enlaces -> Cómo funciona la memoria -> Almacenamiento -> Qué es un dispositivo de almacenamiento físico -> Representación binaria de datos…
La base de cualquier programación está en… rompecabezas

Una prueba de conocimientos fundamentales sobre programación bastante intensa. Ya no soy programador, ¡soy historiador!

Y así, se llevan a cabo batallas históricas varias parejas seguidas. Un día, entra en nuestro despacho la secretaria del departamento y, al ver al grupo, se queda boquiabierta, mira fijamente y cierra la puerta. Más tarde me informaron que estaba en estado de shock porque ESTE grupo estaba tan callado y prestando tanta atención a lo que decía… Tch, fácil.

Trabajos de laboratorio
Los primeros datos aplicados — los primeros "laboratorios". Durante el semestre, el grupo entregó 10 trabajos de laboratorio. En los primeros, realizaban las más simples consolas a+b, y en los últimos — escribieron, aunque fueran aplicaciones de consola, bastante interesantes, como el cálculo del valor de la integral de una función arbitraria dada utilizando uno de los tres métodos — tareas similares estaban en la evaluación final — el trabajo de curso.

Sin embargo, el enfoque de recepción no era habitual. Durante toda mi vida estudiantil en la universidad me di cuenta de que ser inteligente y saber entregar informes — no es lo mismo. Eso me molestaba profundamente.

— Chicos, he pensado. Vamos a establecer relaciones "conceptuales". Si alguno de ustedes cree que la programación no le interesa — la puerta está ahí. Les enseño de forma gratuita. Quiero ver aquí solo a curiosos, entusiastas apasionados. A los demás les pido que no gasten el tiempo común — dije el primer día de recepción de trabajos de laboratorio. Después de eso, 5 personas dejaron de asistir a las clases de inmediato. Era lógico y predecible. Con el resto, era posible intentar hacer algo plausible.

— … no me interesa ver cómo alguien hizo el trabajo, solo para entregarlo. Ustedes pueden no ser programadores, pero como personas tendrán que serlo pensará.

Así es como se veía:

case estudiante sobresaliente

Un estudiante se sienta conmigo para entregar el trabajo.
— ¿Lo hiciste tú mismo?
— Sí.
— ¿Qué es esto?
— *responde correctamente*.
*Pregunto sobre un par de cosas más. Responde correctamente*
— aceptado. Excelente.

case charlatán

— ¿Lo hiciste tú mismo?
— Sí.
— ¿Qué es esto?
— *responde INCORRECTAMENTE / no responde*.
*Pregunto sobre un par de cosas más. Mismo resultado*
— NO aceptado. NO APROBADO. Espero en la recuperación.

case estudiante bueno

— ¿Lo hiciste tú mismo?
— Sí.
— ¿Qué es esto?
— *responde correctamente, pero no con seguridad, está confuso*.
*Pregunto sobre un par de cosas más. Mismo resultado*
— aceptado. Bien.

case estudiante promedio

— ¿Lo hiciste tú mismo?
— No.
— ¿Por qué?
— Es difícil. Me ayudó… *nombra honestamente a un estudiante sobresaliente del grupo*
— ¿Te has aclarado?
— Sí, casi todo lo entendí.

— ¿Qué es esto?
— *responde correctamente*.
*Sigo preguntando sobre un par de cosas. Responde más o menos correctamente, a veces totalmente fuera de lugar, aunque sea 50-50 entre correcto e incorrecto*
— aceptado. Bien.

No tiene sentido describir todos los demás casos. Sí, un "bueno" puede sentirse molesto porque un "regular" recibe la misma calificación, aprovechándose de la honestidad. En ese momento, todo depende del estado de ánimo. O le pido al "bueno" que mire al suelo, porque "ahora voy a dar una pizca de sabiduría", y luego le explico la esencia del enfoque, describo que en la vida hay cosas de mayor valor y aclaro que fue mucho más difícil para el "regular" presentar que para él, el "bueno", etc.
… o, como en su momento, dibujaré un pequeño diente en la casilla del diario frente a este descontento y la próxima vez lo suplementaré personalmente con el trabajo de laboratorio. Simplemente porque sí. Para que no "apaguen" a sus compañeros.

La base de cualquier programación está en… rompecabezas

Calificaciones
El proceso educativo, como todo el mundo, está literalmente empapado en precios y calificaciones.
Los estudiantes también son personas, sin embargo, las "líneas", en mi opinión, deberían haberse "movido" aquí.
Durante el semestre, se dio a todos una tarea adicional. Registrarse en github.com, subir allí un proyecto vacío en C++, hacer 2 actualizaciones, hacer commit y push. Por estas acciones se otorgaron 15 puntos. Sí, sí, no 4, no 5, sino 15. Tres se aclararon. El tipo psicológico del estudiante fue comprensible, sin embargo, luego hubo otro caso.
Una vez, nuestra clase se trasladó de tal manera que se convirtió en la última, además de través de una ventana de clase. Sin embargo, aún así, 15 personas asistieron. No quería explicar un nuevo tema en honor a tal heroísmo, ya que habíamos progresado bastante bien en los temas + el siguiente tema no era muy fácil para los cerebros cansados (los míos y los de los estudiantes). Entonces decidí hablar de filosofía.

— Declaro un espectáculo de generosidad sin precedentes. Todos me dicen qué calificación ponerle por la clase de hoy.
Todos querían un "cinco".
— consideren que ya hay uno, — dije. Todos se alegraron.
Silencio.
— ¿por qué nadie quiso 7-una o 10-una?
Todos abrieron los ojos y comenzaron a sonreír estúpidamente.
— ¿Es que lo pondrás? ¿En el diario?! — se escuchó una voz desde el fondo de la clase.
— ¡Claro que sí! — dije, — declaro un blitz sobre términos, quien responda a 10 de mis preguntas — le pongo 20 puntos en el diario, sin trampas, quien no responda — le -10 (menos diez).

«El equipo se animó, comenzó el debate», todos tenían calificaciones ganadas honestamente. Dos se ofrecieron. Con algunos errores, se turnaron para responder 10 preguntas sobre pilas, colas, constructores, destructores, recolectores de basura, encapsulamiento, polimorfismo, funciones hash…
A cada uno se le dibujó en el cuaderno 20… pero la importancia del cuaderno y las calificaciones disminuyó a los ojos de todos. Ahora me arrepiento de no haber preguntado si querían «compartir» su calificación con alguien. Creo que habrían compartido… De ahora en adelante, cada uno entregaba la «práctica» con conocimiento y honestidad.

A partir de este momento, apareció un nuevo tipo de entrega de la práctica:


caso sinceramenteNoÉlPeroÉlIntentó

— ¿Lo hiciste tú mismo?
— No.
— ¿Por qué?
— Es difícil. Me ayudó… *nombra honestamente a un estudiante sobresaliente del grupo*
— ¿Te has aclarado?
— Sergey Nikolaevich, la verdad — no entiendo nada, he escrito mis comentarios al lado de cada línea — no es lo mío, seré tractorista.
— ¿Qué es esto?
— *lee el comentario al lado de la línea*.
— …
— …
— ¿Qué diferencia hay entre el Belarús MTZ, el Don 500 y el K700?
— ??!.. El primero es un tractor de ruedas de producción de Minsk, usado frecuentemente en tipos de producción agrícola ligera y media. Tiene ruedas pequeñas al frente y grandes atrás. El Don 500 es, principalmente, una cosechadora, y el K-700 'Kirovec' es un tractor de ruedas soviético de múltiples propósitos con alta maniobrabilidad, clase de tracción 5.
— aceptado. Bien (!!!).
— ¡Gracias, Sergey Nikolaevich!!!

En mi patria, hablar sobre tractores es casi como aquí sobre SOLID.

Genio
Tuve un genio en mi grupo. Un estudiante que llegó muy tarde a la primera clase y no se unió a todos para ensamblar el rompecabezas. Entonces le pedí que hiciera lo que planeé para todos en la siguiente clase: escribir en una hoja sobre sí mismo, qué le interesa, qué le gusta. Como resultado, el 'genio' tuvo 2-3 líneas: algo así como 'comprendo la futilidad de la existencia'…

… Oh Dios, en mi grupo hay una sola persona que es simultáneamente el segundo Laozi y Kojima…
La base de cualquier programación está en… rompecabezas

Para mi sorpresa, en las primeras dos clases realmente respondió brillantemente a preguntas sobre términos, sin embargo, el efecto no duró mucho. El 'genio' dejó de asistir a clases y solo apareció en la siguiente vez para entregar la primera práctica, que exitosamente no aprobó por razones objetivas. Luego, debido a las ausencias, acumuló deudas, que, como él creía, yo estaba simplemente obligado a considerarlas, por así decirlo, «hermanamente»..
La ausencia a las clases y el ego elevado contradijeron los principios establecidos para asistir a mis clases. Solo había dos salidas para 'El Genio' — rehabilitarse (el camino esperado) o ignorar las clases y esperar una 'satisfactoria' que le otorgara la facultad para deshacerse del perezoso.
Bueno, es 'El Genio'... aquí había que actuar de manera 'genial'. Este joven no encontró nada mejor que escribir en un diálogo general en VK (donde estaba yo y todos los estudiantes de este grupo) un ardiente alegato lleno de insultos y ofensas hacia mí.

Vaya... Desilusión.
Lo que más me sorprendió fue que, justo antes de que concluyera el proceso de operación punitiva por parte de la gestión del colegio, decidió disculparse conmigo. ¿Por qué? — realmente no lo entiendo. Para ese momento, ya había estado mucho tiempo independiente de críticas, sobre todo de una tan, francamente, absurda. Mi personalidad no resultó afectada, pero los procesos son procesos, como profesor no podía dejar de informar sobre esto. Resultó que, durante su tiempo de estudio, ya había acumulado tantas quejas que este caso fue el último. Fue expulsado. Desde el último curso de la escuela técnica del colegio.
Tal vez ya me está observando con el punto de mira de un rifle de francotirador, pero, para ser honesto, me da igual.
Ah, genialidad, eres tan insensible...

Epílogo
Para mí, la experiencia de enseñar fue una de las más educativas. Me ayudó a afianzar los conocimientos fundamentales de programación tras mis estudios en la universidad. Sentí confianza en la especialidad que elegí (el espectro de especialidades disponibles). Lo que tiene especial importancia es que 'el grupo más indisciplinado' me mostró respeto y amabilidad — eso vale mucho. Logré encontrar el camino hacia sus innovadores internos, intenté inculcar la realidad, no esas prioridades cliché. Lamentablemente, no llegamos a hacer 'puzzles' en la codificación — cuando cada uno debía hacer parte del código y, al unir todas las partes, obtuviéramos un gran programa funcional...
Espero que algún día cada uno de ellos sienta esto... mientras tanto, aquí abajo se recopilan capturas de pantalla con comentarios de algunos estudiantes después de 2 años.

La base de cualquier programación está en… rompecabezas

Sacar conclusiones sobre el éxito de la carrera de programador de cualquiera de ellos es prematuro, ya que ahora la mayor parte de este grupo está estudiando en la universidad. El tiempo lo dirá.

Espero que el artículo haya sido útil. ¡Gracias por su atención!
¡Éxitos creativos y buen ánimo, colegas!

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster