La base di qualsiasi programmazione è… nei puzzle

Salve, utenti di Habr!

In questo articolo voglio condividere la mia esperienza come insegnante di programmazione in C++ presso un collegio universitario tecnico. È stata un'esperienza unica nella vita, che mi ha insegnato molto. Quando si parla di fatti interessanti del passato personale, questo episodio della mia vita è uno dei primi che mi viene in mente.
Andiamo.

Cominciamo con un po' di me.
Nel 2016 mi sono laureato con il massimo dei voti in 'Sicurezza delle informazioni nei sistemi automatizzati'. Durante gli studi ho avuto diverse opportunità di esprimere il mio potenziale scrivendo articoli scientifici, partecipando a concorsi e bandi. Nel 2015 ho avuto l'onore di vincere un concorso nazionale per giovani scienziati chiamato 'UMNIK'. Nel 2016, prima della fine degli studi, sono stato assunto in una grande organizzazione della città come 'Specialista in sicurezza delle informazioni, crittografia e cifratura'.
In breve, è più o meno così. Si può immaginare che avessi, tutto sommato, una certa conoscenza della programmazione.

Ed ecco che siamo nel 2017. Dottorato. Mi hanno chiesto di insegnare C++ al college per un semestre, promettendomi buoni bonus per alleviare il peso del dottorato e nient'altro.

A dire il vero, ero sinceramente interessato a provare a mettermi alla prova in questa credenza.

La prima lezione
Settembre. La prima settimana di scuola. Sono arrivati gli studenti. "Il gruppo più difficile" - così li chiamavano.
23 persone. "Programmiatori".

Come da prassi, mi sono presentato. Ho raccontato loro in modo conciso il contenuto della parte "Iniziamo con un po' su di me"...
Poi è iniziato l'orrore. Alla domanda "Cosa sapete fare?" gli studenti (chiameremo così da ora in poi) hanno risposto che sapevano fare poco più di nulla (significava che alcuni di loro sapevano come appariva MS VS e potevano creare un progetto "Hello world")... Programmatore. Ultimo anno...

Poi hanno spiegato dettagliatamente, "a colori", che non avevano imparato nulla e che si erano delusi della programmazione...

Quasi tutti i giorni fino alla lezione successiva sono passati così:
La base di qualsiasi programmazione è… nei puzzle

… ma un giorno prima è emersa l'idea di concentrarsi sul miglioramento della situazione nelle menti e nelle coscienze di questi giovani. E così «Ostap ha preso il volo».

Introduzione alla programmazione
Per la lezione successiva ho portato… un puzzle.
Sì-sì. Un puzzle. «Come addestrare un drago». Le regole erano semplici. Il gruppo è stato diviso in 3 squadre. Ogni squadra assemblava la propria parte. Alcuni — la foresta, altri — la terra, altri ancora — il drago al centro dell'immagine. Mentre tutti insieme assemblavano il puzzle, io spiegavo che assemblare un puzzle è anch'esso programmazione, che i programmatori spesso usano codice di altri, che in ogni progetto ci sono diversi team, funzionalità, moduli…
Pian piano anche gli studenti più svogliati si sono uniti al processo.
Quando ho finito di spiegare l'idea della programmazione nei concetti di business, processi e… puzzle, è arrivato il momento di stabilire le regole di apprendimento.
Per ogni lezione, ogni studente doveva annotare nel quaderno 10 termini IT. Qualsiasi. Ognuno i propri. Il senso era che io prendevo il quaderno di uno studente, trovavo tra tutti i termini il più applicabile possibile e chiedeva a un altro studente. Quando l'altro studente dice "Non ho scritto questo termine", non era punibile (per buon senso), ma quello studente doveva annotare i termini "mancanti" (come tutti coloro che non li avevano) e trovare i loro significati per la lezione successiva.

È proprio quello che abbiamo fatto. Ogni lezione iniziava con un vivace sorteggio di due o tre studenti. I ragazzi si impegnavano con entusiasmo in questo processo.

Argomenti delle lezioni
Iniziare l'apprendimento è molto importante fornire agli studenti una buona letteratura. Secondo me, il libro ideale è stato:
La base di qualsiasi programmazione è… nei puzzle

A suo tempo, ho dovuto leggerlo con attenzione abbracciato a Microsoft Visual Studio. Allora sono riuscito a capire la programmazione praticamente da zero. Un'opzione ideale.

Entro con modestia dai ragazzi e dico: "Per diventare programmatori, dovete solo leggere e provare tutto ciò che c'è in questo libro", e lascio il libro sul tavolo. L'importante è non confondere i libri nello zaino...

Prima di ogni tema, mi preparavo sempre con attenzione. Leggevo lo stesso Lafore e altre fonti interessanti da Internet.
Spiegare è stato quasi come partire dalle basi. Ed era necessario dedurre dove si trovassero le lacune nelle conoscenze di base degli studenti.
Array -> Gestione della memoria (costruttori) -> Riferimenti -> Come funziona la memoria -> Dispositivi di archiviazione -> Cos'è un'unità fisica di archiviazione -> Rappresentazione binaria dei dati...
La base di qualsiasi programmazione è… nei puzzle

Un test di crash non da poco sulle conoscenze fondamentali della programmazione. Non sono più un programmatore, sono un storico!

E così, si svolgono battaglie storiche per diverse coppie di fila. Un giorno, entra in aula la segretaria del dipartimento e, vedendo il gruppo, spalanca gli occhi e chiude la porta. Come mi hanno riferito poi, era in shock che QUESTA classe fosse così silenziosa e attenta nell'ascoltarmi… Che facile.

Lavori di laboratorio
Le prime informazioni applicate — i primi "laboratori". In un solo semestre, il gruppo ha completato 10 lavori di laboratorio. Nei primi, hanno realizzato semplici applicazioni da console. a+b, e negli ultimi abbiamo scritto, anche se solo in console, ma applicazioni piuttosto interessanti, come il calcolo del valore di un integrale di una funzione arbitrariamente definita con uno dei tre metodi — problemi simili sono stati presenti nell'attestazione finale — nel lavoro di corso.

Solo che l'approccio all'accettazione non era consueto. Durante tutto il mio percorso universitario ho constatato che essere intelligenti e saper presentare i lavori di report non sono affatto la stessa cosa. Questa situazione mi infastidiva profondamente.

— Ragazzi, ho pensato. Costruiamo relazioni “concettuali”. Se qualcuno di voi crede che la programmazione non gli serva — la porta è là. Io insegno gratuitamente. Voglio vedere qui solo persone curiose, appassionate e interessate. Tutti gli altri vi prego di non sprecare tempo comune — ho detto il primo giorno di accettazione dei lavori di laboratorio. Dopo questo, 5 persone hanno smesso di venire alle lezioni. Era logico e prevedibile. Con gli altri, tentare di fare qualcosa di ragionevole era possibile.

— ... non mi interessa vedere come qualcun altro ha fatto il vostro lavoro, giusto per consegnarlo. Non dovete essere programmatori, ma in aula dovete essere delle persone. dovrai.

È sembrato così:

case eccellente

Un studente si siede con me per consegnare il lavoro.
— L'hai fatto da solo?
— Sì.
— Che cos'è questo?
— *risponde correttamente*.
*Chiedo ancora su un paio di punti. Risponde giustamente*
— accettato. Ottimo.

case chiacchierone

— L'hai fatto da solo?
— Sì.
— Che cos'è questo?
— *risponde ERRONEAMENTE / non risponde*.
*Chiedo ancora su un paio di punti. Stesso risultato*
— NON accettato. NON IDONEO. Aspetto la ripetizione.

case studente buono

— L'hai fatto da solo?
— Sì.
— Che cos'è questo?
— *risponde correttamente, ma non con sicurezza, è incerto*.
*Chiedo ancora su un paio di punti. Stesso risultato*
— accettato. Bene.

case studente sufficiente

— L'hai fatto da solo?
— No.
— Perché?
— Difficile. Mi ha aiutato… *nomina onestamente un studente con voti eccellenti dal gruppo*
— Hai capito?
— Sì, ho capito quasi tutto.

— Che cos'è questo?
— *risponde correttamente*.
*Chiedo ancora su un paio di punti. Risponde più o meno correttamente, a volte completamente fuori, anche se ci sono 50 e 50 risposte giuste e sbagliate*
— accettato. Bene.

Non ha senso descrivere gli altri casi. Sì, "studente buono" potrebbe essere scontento che "studente sufficiente" riceve lo stesso voto, uscendo dall'onestà. Allora tutto dipende dall'umore. O chiedo allo "studente buono" di guardare il pavimento, perché "ora darò un pizzico di saggezza", e poi spiegherò il succo dell'approccio, descriverò cosa ha maggiore valore nella vita e chiarirò che per "studente sufficiente" è stato molto più difficile passare rispetto a lui, "studente buono", ecc...
… oppure, come una volta, il mio insegnante, disegnerò un piccolo dente nella casella del diario di fronte a questo scontento e la prossima volta completerò personalmente il lavoro di laboratorio per lui. Così, tanto per fare. Per non "sfavorire" i compagni.

La base di qualsiasi programmazione è… nei puzzle

Voti
Il processo educativo, proprio come il resto del mondo, è letteralmente sommerso da prezzi e voti.
Gli studenti sono persone anche loro, tuttavia, i "confini", a mio avviso, andrebbero "scossi" anche qui.
Durante il semestre, a tutti è stato assegnato un compito bonus. Registrarsi su github.com, caricare lì un progetto vuoto in C++, fare 2 aggiornamenti, impegnarli e pusharli. Per queste azioni sono stati assegnati 15 punti. Sì, non 4, non 5, ma 15. Tre ci sono riusciti. Per il tipo psicologico dello studente questo era in qualche modo comprensibile, tuttavia poi è emerso un altro caso.
Una volta, la nostra lezione è stata spostata in modo tale che è diventata l'ultima, e anche attraverso una pausa. Tuttavia, sono venute comunque 15 persone. Spiegare un nuovo argomento in onore di tale eroismo non mi ispirava, poiché avevamo già progredito abbastanza bene nei temi + il prossimo argomento non era molto semplice per le menti stanche (le mie e degli studenti). Così ho deciso di parlare di filosofia.

— Annuncio un'attrazione di generosità senza precedenti. Tutti mi chiedono che voto dare per la lezione di oggi.
Tutti volevano un 'cinque'.
— Contate, è già fatto, — dissi. Tutti si rallegrarono.
Silenzio.
— E perché nessuno ha voluto 7-la o 10-lo?
Tutti hanno spalancato gli occhi e hanno cominciato a sorridere stupidamente.
— E Lei non lo mette? Sul registro?! — si sentì una voce dal banco in fondo.
— Certamente! — dissi, — annuncio un blitz sui termini, chi risponde a 10 delle mie domande — metto una 20 nel registro, senza inganno; chi non risponde — avrà -10 (meno dieci).

«La classe si è animata, è iniziato un dibattito», tutti avevano voti onestamente guadagnati. Due si offrirono. Con alcune piccole imprecisioni, risposero a turno alle 10 domande su stack, coda, costruttore, distruttore, garbage collector, incapsulamento, polimorfismo, funzioni hash…
A ognuno nel registro fu disegnata una 20… ma l'importanza del registro e dei voti diminuì agli occhi di ciascuno. Ora mi dispiace di non aver chiesto se volessero 'condividere' il loro voto con qualcuno. Mi sembra che lo avrebbero fatto… Da quel momento, ciascuno sosteneva il 'laboratorio' con conoscenza e onestà.

Da questo momento, è apparso un altro tipo di consegna del laboratorio:


Caso onestamente non lo so ma ci ha provato

— L'hai fatto da solo?
— No.
— Perché?
— Difficile. Mi ha aiutato… *nomina onestamente un studente con voti eccellenti dal gruppo*
— Hai capito?
— Sergey Nikolaevich, francamente, non capisco nulla. Ho scritto i commenti accanto a ogni riga — non fa per me, voglio fare il trattore.
— Che cos'è questo?
— *legge il commento accanto alla riga*.
— …
— …
— In cosa si differenzia il Belarus MTZ dal Don 500 e dal K700?
— ??!.. Il primo è un trattore a ruote prodotto a Minsk, spesso usato in agricoltura su terreni leggeri e medi. Ha ruote piccole davanti e grandi dietro. Il Don 500 è principalmente una mietitrebbia, e il K-700 "Kirovec" è un trattore sovietico a ruote di uso generale, con alta capacità di superamento, classe di trazione 5.
— Accettato. Bene (!!!).
— Grazie, Sergey Nikolaevich!!!

Nella mia patria, parlare di trattori è quasi come qui parlare di SOLID.

Genio
Avevo un genio nella mia classe. Uno studente che è arrivato molto in ritardo alla prima lezione e non ha voluto unirsi a noi per completare il puzzle. Allora gli ho chiesto di fare ciò che avevo pianificato per tutti nella prossima lezione — scrivere su un foglio di carta cosa gli piace e quali sono i suoi interessi. Alla fine, il "genio" aveva 2-3 righe: qualcosa tipo "sto scoprendo la vanità dell'esistenza"…

… Oh, Dio, ho in gruppo la replica di Lao Tzu e Kojima allo stesso tempo …
La base di qualsiasi programmazione è… nei puzzle

Con mia sorpresa, nelle prime due lezioni rispondeva davvero brillantemente alle domande sui termini, ma l'effetto non durò a lungo. Il 'genio' smise di partecipare alle lezioni e la prossima volta si presentò solo per il primo laboratorio, che superò con successo senza superare per motivi oggettivi. Successivamente, a causa delle assenze, accumulò naturalmente debiti che, come credeva, ero obbligato a considerare, per così dire, 'come un fratello'.
Le assenze + un ego sproporzionato contraddicevano i principi stabiliti per la partecipazione alle mie lezioni. Per il 'genio' c'erano solo due strade: riabilitarsi (la scelta attesa) o ignorare le lezioni e sperare in un 'tre', assegnato dalla facoltà, per liberarsi del perditempo.
Beh, questo è un 'genio'… doveva avere un'idea 'geniale'. Questo giovane non trovò nulla di meglio che scrivere in un dialogo generale su VK (dove c'ero io e tutti gli studenti di questo gruppo) un'accusa furiosa con insulti e oltraggi nei miei confronti.

Eh già… Delusione.
Mi ha colpito maggiormente che, prima di concludere il processo punitivo da parte dell'amministrazione del college, abbia deciso di scusarsi con me. Per cosa? — sinceramente non lo capisco. A quel punto ero già da tempo indipendente dalle critiche, tanto più da quelle che erano, a onor del vero, stupide. La mia personalità non era stata intaccata, ma i processi — sono processi, come docente non potevo non segnalarlo. Come si è rivelato, durante il suo percorso di studi si erano accumulate così tante lamentele, che quest'ultimo caso è stato decisivo. È stato espulso. Dall'ultimo anno dell'istituto tecnico del college.
Forse mi sta osservando da tempo nel mirino di un fucile di precisione, ma a dire il vero, non mi importa.
Ah, genialità, quanto sei insensibile...

Epilogo
Per me, l'insegnamento è stata un'esperienza tra le più istruttive. Mi ha aiutato a consolidare le conoscenze fondamentali di programmazione dopo gli studi universitari. Ho acquisito fiducia nella mia specializzazione (tra le molte disponibili). È particolarmente importante notare che "il gruppo più indisciplinato" mi ha rispettato e trattato con cordialità — è un valore inestimabile. Sono riuscito a trovare la via verso i loro innovatori interiori, cercando di instaurare una realtà piuttosto che i soliti schemi. Peccato che non siamo arrivati ai "puzzle" del coding — quando ognuno avrebbe dovuto scrivere una parte del codice, e unendo tutte le parti avremmo ottenuto un grande programma funzionante…
Spero che un giorno ognuno di loro possa provare questa sensazione… nel frattempo, qui sotto ci sono screenshot con i feedback di alcuni studenti dopo 2 anni.

La base di qualsiasi programmazione è… nei puzzle

È ancora presto per trarre conclusioni sulla carriera di programmatore di qualcuno di loro, poiché attualmente la maggior parte di questo gruppo sta studiando all'università. Solo il tempo dirà.

Spero che l'articolo sia stato utile. Grazie per l'attenzione!
Vi auguro successo creativo e un atteggiamento positivo, colleghi!

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster