
Il mio lavoro principale è legato ai dati e alla programmazione in R, ma in questo articolo voglio parlare della mia passione, che addirittura genera un certo reddito. Sono sempre stato interessato a raccontare e spiegare qualcosa a amici, compagni di classe e compagni di corso. Inoltre, ho sempre trovato facile comunicare con i bambini, non so perché. In generale, considero l'educazione e l'insegnamento dei bambini come una delle attività più importanti, e mia moglie è un'insegnante. Circa un anno fa ho pubblicato un annuncio in un gruppo locale su Facebook, ho formato un gruppo e ho iniziato a insegnare Scratch e Python una volta a settimana. Ora ho cinque gruppi, la mia classe a casa e lezioni individuali. Come sono arrivato a questo punto e come insegno ai bambini, lo racconterò in questo articolo.
Vivo in Canada, nella città di Calgary, provincia di Alberta, quindi alcuni aspetti saranno legati alle specificità locali.
Spazio
La disponibilità di un luogo per le lezioni è stata fin dall'inizio un problema principale. Ho cercato uffici e aule da affittare a ore, ma senza successo. La nostra università e il SAIT - l'analogo locale del MIT - affittano aule con e senza computer. I prezzi si sono rivelati non molto accessibili e alla fine ho scoperto che l'università non accetta minorenni, mentre il SAIT affitta solo ai propri studenti. Quindi, questa opzione è stata scartata. Ci sono molti centri uffici che affittano stanze per riunioni e uffici a ore, ci sono aziende intere che offrono un sacco di opzioni, da aule complete a stanzette per quattro persone. Avevo delle speranze, dato che l'Alberta è una provincia petrolifera, stiamo attraversando una crisi lenta dal 2014, e molti spazi commerciali sono vuoti. Ho sperato invano, i prezzi erano così esorbitanti che inizialmente non ci credevo. Ai proprietari è più semplice tenere uffici vuoti e coprire i costi, piuttosto che abbassare i prezzi.
In quel momento mi sono ricordato che pago regolarmente le tasse e che ci fosse qualcosa nel nostro caro stato, più precisamente nella città di Calgary. A quanto pare, c'è eccome. La città ha arene per giocare a hockey e per il pattinaggio artistico, e in queste arene ci sono stanze dove severi guerrieri del ghiaccio discutono strategie per future battaglie. Insomma, ad ogni arena ci sono un paio di stanze con tavoli, sedie, una lavagna e persino un lavandino con un bollitore. Il prezzo è abbastanza ragionevole: 25 dollari canadesi l'ora. Avevo inizialmente deciso di fare le lezioni della durata di un'ora e mezza, quindi ho fissato il prezzo a $35 a testa per un gruppo di cinque persone, per compensare l'affitto e mettere qualcosa in tasca. In generale, mi è piaciuto svolgere lezioni nelle arene, perché risolveva uno dei problemi: la maggior parte dei russofoni vive a sud, mentre io abito a nord della città, quindi ho scelto un'arena più o meno a metà strada. Tuttavia, ci sono stati anche dei disagi. La burocrazia canadese è buona e cordiale, ma, per dirla in modo delicato, a volte può essere un po' lenta. Non ci sono problemi quando ci si abitua al ritmo e si pianifica in anticipo, ma a volte si verificano momenti scomodi. Ad esempio, sul sito della città è possibile scegliere comodamente orario e luogo, prenotare una stanza, ma non si può pagare, in alcun modo. Sono loro a chiamarti e a prendere il pagamento con carta. Si può andare in ufficio e pagare in contante. È successo un momento divertente ma non molto piacevole, quando aspettavo la loro telefonata per pagare la seconda lezione, non sono riuscito a riceverla, e in ufficio sono arrivato in ritardo di quindici minuti l'ultimo giorno. Sono dovuto andare con aria spavalda alla sicurezza e mentire dicendo che la stanza era prenotata. Noi canadesi crediamo sulla parola, mi hanno lasciato passare tranquillamente senza controllare nulla, ma non sarei andato così lontano se le persone non fossero già in viaggio per la lezione.
Così ho lavorato durante l'inverno e la primavera, e poi ci sono stati cambiamenti che sono stati l'ultima goccia. Prima di tutto, l'ufficio è stato chiuso ai visitatori e hanno iniziato a offrire la possibilità di effettuare pagamenti per telefono dietro l'angolo. Ho passato almeno mezz'ora in attesa, prima di riuscire a contattare qualcuno. In secondo luogo, prima una gentile signora si occupava del mio pagamento per un'ora e mezza, ma poi ha risposto al telefono una ragazza che ha affermato che il pagamento era solo per un'ora. A quel momento, il mio gruppo era di tre o due persone, e quei $12.5 in più erano tutto fuorché superflui. Certo, sono appassionato del mio lavoro, ma se mia moglie mi manda in strada, non avrò più nessuno a cui insegnare. All'epoca ero ancora disoccupato.
E ho deciso di andare in biblioteca. Le biblioteche affittano ottime stanze completamente gratis, ma c'è un ma: non è possibile svolgere attività commerciali. Anche le organizzazioni benefiche non hanno il diritto di raccogliere soldi lì. Mi hanno detto che non è particolarmente controllato, l'importante è non prendere soldi all'ingresso, ma io non amo affatto violare le regole. Un altro problema è che le stanze sono spesso occupate e risulta difficile tenere le lezioni secondo il programma in un solo luogo. Ho insegnato nelle biblioteche d'estate e all'inizio dell'inverno, dovevo scegliere quelle che avevano spazio, alla fine ne ho cambiate cinque o sei. Poi ho iniziato a prenotare il posto due mesi prima, e comunque sono riuscito a farlo solo in una piccola biblioteca, nelle altre non c'era mai posto al momento giusto. Così ho deciso di allestire una classe informatica a casa. Ho attaccato una lavagna, comprato un secondo tavolo e un paio di monitor usati. Per lavoro la mia azienda mi ha comprato un nuovo potente laptop, perché sul mio computer l'analisi richiedeva quasi 24 ore. In totale, avevo un nuovo vecchio computer, un vecchio vecchio computer, un laptop il cui schermo è stato schiacciato da mio figlio e un vecchio netbook, il cui schermo ho schiacciato io stesso. Li ho tutti collegati ai monitor e ho installato Linux Mint ovunque, tranne nel netbook, dove ho installato una distribuzione molto leggera, credo si chiami Puppy. Ho anche un vecchio nuovo laptop, acquistato per 200 dollari, e l'ho collegato alla TV. Inoltre, cosa non da poco, il nostro padrone di casa ci ha recentemente cambiato le finestre, e nella stanza ora ci sono nuove cornici bianche al posto del terribile obbrobrio. Il soggiorno, la cucina e la seconda camera da letto sono dedicate all'asilo, quindi l'intero piano è diventato puramente educativo. Quindi, ora per quanto riguarda gli spazi va tutto bene, passiamo all'insegnamento.
Scratch
Inizio a dare le basi della programmazione con il linguaggio Scratch. È un linguaggio che utilizza blocchi predefiniti, inventato qualche tempo fa al MIT. La maggior parte dei bambini ha già visto Scratch a scuola, quindi si apprende abbastanza rapidamente. Ci sono programmi pronti e piani di lezione, ma non mi piacciono affatto. Alcuni sono strani: crea la tua storia, per esempio. L'intero programma è composto da innumerevoli blocchi. say '' for 2 secondsÈ evidente che sia stato creato da persone molto creative, ma con questo approccio si può insegnare a scrivere un classico codice spaghetti indiano. Io invece, fin dall'inizio, parlo dei principi come il D.R.Y. Alcune altre raccolte di esercizi sono piuttosto buone, ma i bambini comprendono rapidamente il concetto e iniziano a farli come se fossero sparati da una mitragliatrice. Alla fine, in un'ora fanno ciò che avrebbero dovuto fare in cinque. La ricerca e la selezione degli esercizi richiede molto tempo personale. In generale, Scratch assomiglia più a un IDE che a un linguaggio, dove devi semplicemente ricordare dove cliccare e dove cercare. Non appena gli studenti si ambientano, cerco di passarli a Python. Ho anche una bambina di sette anni che scrive programmi semplici in Python. In Scratch vedo un utilizzo utile: ci sono concetti di base che vengono appresi in modo ludico. Per qualche motivo, è molto difficile per chiunque capire l'idea di variabile. All'inizio trattavo questo argomento rapidamente e andavo oltre, finché non mi sono trovato di fronte al fatto che non sapevano affatto cosa fare con questo. Ora dedico molto tempo alle variabili e ci ritorno costantemente. Devo lavorare su queste in modo impegnativo. Sullo schermo cambio diverse variabili e le costringono a dichiarare il loro valore. Inoltre, in Scratch ci sono strutture di controllo e verifiche dei valori, come while, per o if in Python. Vengono presentati in modo abbastanza semplice, solo con i cicli nidificati ci sono problemi. Cerco di dare alcuni compiti con cicli nidificati, in modo che l'azione sia evidente. Dopo questo passo alle funzioni. Anche per gli adulti, il concetto di funzione può essere poco chiaro, e per i bambini ancora di più. Mi dilungo a spiegare cos'è una funzione, parlo di una fabbrica che riceve degli oggetti e restituisce dei prodotti, di un cuoco che prepara cibo a partire da ingredienti crudi. Poi realizziamo insieme un programma
Python
Con Python è tutto più semplice. C'è un buon libro, Python for Kids, e io insegnando seguo quello. Tutto è standard: stringhe, ordine delle operazioni, print(), input() E così via. Scritto in un linguaggio semplice, con umorismo, ai bambini piace. Ha un difetto comune a molti libri di programmazione. Come nella nota barzelletta — come disegnare un gufo. Ovale — cerchio — gufo. La transizione da concetti molto semplici a concetti abbastanza complessi è troppo brusca. Mi ci vogliono diverse lezioni per spiegare che un oggetto si connette a un metodo con un punto. D'altra parte, non ho fretta, ripeto lo stesso in vari modi finché non si forma almeno un quadro. Inizio dalle variabili e le ripetiamo, già in Python. Le variabili sono una sorta di maledizione.
Uno studente sveglio, che qualche mese fa maneggiava abilmente le variabili su Scratch, guarda come un ovino verso un nuovo cancello e non riesce a sommare x con y, che è chiaramente scritto sulla lavagna poco sopra. Ripetiamo! Cosa ha una variabile? Nome e valore! Cosa significa il segno di uguale? Assegnazione! E come verifichiamo l'uguaglianza? Doppio segno di uguale! E così ripetiamo ancora e ancora, fino al pieno chiarimento. Poi passiamo alle funzioni, dove ci vuole molto tempo per spiegare gli argomenti. Argomenti nominati, in base alle posizioni, per impostazione predefinita e così via. Non siamo ancora arrivati ai classi in nessun gruppo. Oltre a Python dal libro, studiamo algoritmi popolari, di questo parleremo più avanti.
In sostanza, formazione
La mia lezione è strutturata così: per mezz'ora do teoria, controllo le conoscenze, rinforzo quanto appreso. Un'ora — laboratori. Spesso mi lascio prendere e parlo fino a un'ora, e così restano solo mezz'ora per la pratica. Quando ho studiato Python, ho seguito un corso Algoritmi e Strutture Dati Khiryanova del MIPT. Mi è piaciuta molto la sua esposizione e la struttura delle lezioni. La sua idea è che i framework, la sintassi e le librerie diventano obsoleti. L'architettura, il lavoro di squadra e i sistemi di controllo delle versioni sono ancora prematuri. Alla fine rimangono algoritmi e strutture dati, che sono noti da tempo e saranno sempre simili. Io stesso ricordo solo gli interi del Pascal universitario. Poiché i miei allievi sono per lo più giovani, tra i sette e i quindici anni, credo sia più importante per il loro futuro gettare le basi piuttosto che scrivere in fretta un platformer in Python. Anche se, a loro piacerebbe di più un platformer, e li capisco. Gli algoritmi che insegno sono semplici: ordinamento a bolle, ricerca binaria in un elenco ordinato, notazione polacca inversa usando uno stack, ma ogni concetto lo analizziamo molto dettagliatamente. È emerso che i bambini moderni non sanno nemmeno come funziona un computer, e lo spiego anche. Cerco di collegare diversi concetti in ogni lezione. Ad esempio, computer — memoria / CPU — memoria di celle (faccio tenere un modulo di memoria, indovinate quante celle ci sono) — ogni cella come una lampadina — ci sono due stati — true / false — and / or — binario / decimale — 8 bit = 1 byte — byte = 256 varianti — tipo di dato logico su un bit — numeri interi su un byte — float su due byte — string su un byte — il numero più grande su 64 bit — lista e tupla dei tipi precedenti. Sottolineo che in un computer reale è tutto un po' diverso e ci sono quantità diverse di memoria per questi tipi di dato, ma la cosa importante è che noi stessi creiamo tipi di dato più complessi da quelli più semplici. I tipi di dato sono, a mio parere, la cosa più difficile da memorizzare. Quindi, ogni lezione inizio con un rapido riscaldamento — un allievo menziona un tipo di dato, il successivo fornisce due esempi, e così via. Alla fine sono riuscito a far sì che anche i bambini più giovani gridino con entusiasmo — float! boolean! sette, cinque! pizza, auto! Durante la lezione continuo a tirare a sorte uno o l'altro, altrimenti iniziano rapidamente a grattarsi il naso e a guardare in alto. E devo anche controllare il livello di conoscenze di ciascuno di loro nel frattempo.
I miei allievi non smettono di sorprendermi sia con la loro stupidità che con la loro sorprendente intelligenza. Fortunatamente, spesso con l'intelligenza.
Volevo scrivere di più, ma è già venuta fuori una lunghissima risposta. Risponderò volentieri a tutte le domande. Accolgo qualsiasi critica, ma chiedo solo di essere più tolleranti l'uno verso l'altro nei commenti. È un articolo gentile.
Fonte: habr.com
