Programmazione nella Scuola Primaria – 1

kindergarten

Ieri uno scambio di cinguettii su un argomento che mi piace. Tanto che conto di scriverci un paio di post, subito mentre è ancora d’attualità.
Si tratta dell’inserimento di elementi di programmazione nella scuola primaria, quella che ai miei tempi si chiamava elementare. E sono stati definiti anche i linguaggi: Python e C++.
Intanto concordo sia sull’idea che sulle scelte fatte, quasi completamente. Come attuare tutta la cosa? Pensa che ti ripensa sono arrivato a una proposta, un abbozzo, che adesso provo a raccontarvi.
Devo però fare due precisazioni, doverose quanto mai:

  • esistono diversi programmi per l’insegnamento ai bambini, se serve posso fornire un elenco (ma arriverebbe da Google, magari c’è qualche esperto che ne sa qualcosa e ci fa sapere);
  • le cose che dirò le sto ripetendo da quasi quarant’anni ormai, forse non sono attualissime.

Intanto l’idea di usare Python è ottima: è un linguaggio usatissimo perché facile da scrivere e modificare quello che si è scritto e c’è su tutti i computer, gratuito. Inoltre trovate parecchie cose già fatte, pronte per essere utilizzate (in gergo si chiamano librerie, cattiva traduzione dall’inglese, si dovrebbe dire biblioteche). Per contro è lento in esecuzione; ecco il motivo per cui quando il gioco si fa duro si passa a altri linguaggi, come –appunto– il C++.

Ma cominciamo a vedere Python, in modalità interattiva; quello che scrivo io sarà in neretto:


: psp $ python
Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 3 + 5
8
>>> 12
12
>>> 11 - 3
8
>>> 

come si vede Python aspetta qualcosa e risponde appena si preme Invio. Tutto normale per l’addizione e la sottrazione. Per la moltiplicazione usiamo il carattere *:


>>> 3 * 4
12
>>> 6 * 8
48
>>> 37 * 73
2701
>>> 

Adesso viene una cosa sempre facilissima ma un po’ più complicata: la divisione. Non so se si usa ancora come quando ero scolaro io ma forse sì perché Python fa esattamente così. Per la divisione usiamo il simbolo / e il resto ce lo da %:


>>> 11 / 3
3
>>> 11 % 3
2
>>> 8 / 2
4
>>> 8 % 2
0
>>> 

Ma un bel giorno la Maestra Giovanna viene in classe e ci dice: “oggi parliamo dei numeri con la virgola”. Panico? No, niente panico, adesso mi spiego.

Seguendo Python dobbiamo prendere la cosa un po’ alla lunga, introdurre i tipi (ma niente panico!).
I numeri che abbiamo usato finora sono gli interi, Python concorda:


>>> type(5)
<type 'int'>
>>> type(-3)
<type 'int'>
>>> type(2701)
<type 'int'>
>>> 

type è una funzione, le vedremo prossimamente, ci dice che 5, 2701, -8 e così via sono interi che in inglese si dice integer ma è troppo lungo e da sempre si dice int. Invece i numeri con la virgola sono un’altra cosa. Intanto dobbiamo adattarci a come fanno inglesi e americani e scriverli non con la virgola ma con il punto; quindi tre mezzi lo scriveremo 1.5 e non 1,5.


>>> type(1.5)
<type 'float'>
>>> type(-3.88)
<type 'float'>
>>> 

ecco, li chiama float, dire floating point number (numero a virgola mobile) sarebbe troppo lungo. Vengono spesso chiamati anche real (reali) ma i matematici non sono d’accordo (e non vogliamo metterci a discutere con quelli vero? Noi la matematica la usiamo per quel che ci serve).


>>> type(1,23)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: type() takes 1 or 3 arguments
>>> 

se per caso uno si sbaglia e usa la virgola: niente panico! Python capisce.

Oltre ai numeri ci sono parecchi altri tipi, vediamone un paio: le stringhe, cioè le frasi composte di caratteri:


>>> type("Ciao a tutti!")
<type 'str'>
>>> type('Buongiorno Signora Maestra')
<type 'str'>
>>>

le stringhe (string, str) si devono scrivere tra virgolette, semplici o doppie.

Ancora un tipo e poi basta, per oggi:


>>> 3 > 2
True
>>> 3 > 5
False
>>> type(3 > 2)
<type 'bool'>;
>>> 

il segno > sta per maggiore, più grande ed è un operatore logico, o booleano come dicono gli informatici. Un dato booleano (bool) può avere solo due valori: True (vero) e False (falso).

Bon. Oggi finisce la prima lezione, facile vero? O ci sono domande?
E chissà cosa ne pensano maestra Rosy, Marco Fulvio, Sandro e Moreno (sbaglio o “moreno” vuol dire “maestro”?). Adesso, appena pubblico il post, gli twitto di andare a vederlo. Chissà che ne pensano; la continuazione dipende da loro.

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • robitex  Il 4 settembre 2014 alle 14:00

    Ciao Juhan.
    Argomento molto bello e interessente.
    Io penso che alla scuola elemetare, ops, primaria, la programmazione sia utile a:
    * dare un’idea di come funzionano i dispositivi informatici
    * allenare la mente con argomenti logici e di espressione linguistica
    * far risolvere in concreto problemi con un programma appositamente scritto
    * che i bambini possano scoprire le loro doti matematiche e logiche e scientifiche
    Tuttavia serve una scelta accurata del linguaggio, delle competenze degli insegnanti e delle attrezzature.
    Come linguaggio proporrei Lua perché Python non mi sta a genio 🙂 mentre per il resto mi offro come insegnante ai bambini o come insegnante agli insegnanti. La scuola dovrebbe a breve rifiorire.
    Grazie per aver toccato l’argomento.
    R.

    • juhan  Il 4 settembre 2014 alle 14:25

      Mi sembra di aver capito che siano stati scelti Python e C++. Da verificare se ho capito bene.
      Su Lua hai parecchio ragione ma credo Python sia molto più diffuso.
      Ho qualche dubbio sul C++ (arriverò a “Hello World!” per far vedere la compilazione). Io proporrei qualcosa di meno incasinato, p.es. Go. Rust è ancora troppo giovane.
      Verifico intanto se la scelta è già stata decisa per intanto.
      Seguirà post, forse 😉

      • robitex  Il 4 settembre 2014 alle 15:27

        Meglio Rust di C++, la sintassi è molto più pulita e non sarebbe proprio così vero che è troppo giovane. Dissento.
        Questi linguaggi sono molto complessi e non li introdurrei solo per far compilare un hello world. A che serve il basso livello?

        Lua è minimale e più semplice e pratico da utilzzare di Python. Conterebbe questo e non la diffusione, mica si preparano sviluppatori e librerie complesse per l’accesso a database e al multithreading.
        Se esiste un linguaggio più minimale di Lua sviluppato in modo aperto…
        R.

  • Marco  Il 4 settembre 2014 alle 21:35

    @juhan
    tu lo sai che io lo vado dicendo da tempo, quindi son ben felice se finalmente la cosa si concretizza.
    Riguardo ai programmi per insegnare ai bambini (ma anche agli adulti ☺), sul Tamburo qualcuno l’avevo indicato.
    Sulla scelta dei linguaggi:
    concordo con @robitex, C++ non lo vedo adatto per iniziare, mentre Python potrebbe anche andare, ma ho paura che sia stata fatta una scelta più legata alla diffusione del linguaggio che alla struttura realmente “didattica”.
    Poi ci sono aspetti molti importanti che almeno io non sottovaluterei: il gioco e la logica soprattutto. Insegnare a ragionare divertendosi; che siamo alle elementari e l’obiettivo non è certo quello di formare dei programmatori. non bisogna correre il rischio di far diventare la programmazione una seconda matematica che la maggio parte degli studenti non sopporta.
    Insomma, una bella sfida. se la si imposta nel modo giusto è un investimento per il futuro.

    PS:
    ma solo io penso che IL linguaggio, oggi, sia quello del web e ancora di più lo sarà nel futuro? Perché continuiamo a rimanere legati al desktop? I programmi futuri (ma già anche oggi) dovranno girare sul web. E allora perché non fare un pensiero concreto (per iniziare) ad HTML, CSS e JavaScript (in seguito PHP o ASP.NET).
    Se andiamo a vedere, quasi tutti i programmi per insegnare ai bambini che ho linkato, danno la possibilità di “tirare giù codice” dopo aver giocato. E indovina un po’ di che codice si tratta.
    Lo so, non si tratta di “linguaggi di programmazione”, ma forse è proprio questo (se c’è) l’errore d’approccio: ai bambini delle elementari non va insegnato un linguaggio di programmazione, va insegnato a programmare prima di tutto con la testa e poi verificare con gli occhi, perché sono convinto che se non “vedono” i risultati in modo immediato tenderanno a scoraggiarsi e quindi a non applicarsi.
    Bisogna pensare a qualcosa che gli permetta di rendere “reali” le loro idee e/o le soluzioni dei diversi problemi. E reale oggi è “vedere”.
    Dopo, passate le elementari e magari alla fine delle medie, si può pensare ad un “vero linguaggio”.

    • juhan  Il 5 settembre 2014 alle 08:03

      Hai ragione, parecchia. Avevo pensato di coinvolgerti ma non so quali sono i tuoi impegni presenti.
      Ho chiesto chiarimenti (non ancora arrivati) ma mi sembra che la scelta sia già stata fatta: Python e C++.
      Tu mi dici del Web (quello che diventerà) ma lì hai ragione solo in parte. La logica della programmazione la vedi se fai cose molto elementari, per esempio scrivere la tabellina del 7 o fizz-bum (contare da 1 a 20 dicendo fizz ogni multiplo di 3 e bum ogni multiplo di 5). O trovare i numeri primi o …
      Quindi OK per JavaScript (ma c’è Dart all’orizzonte), OK per l’HTML (ci mettiamo anche la famiglia TeX, vero che alla primaria non si producono paperi ma poi si cresce), sì con rierva sui CSS. PHP credo farà la fine del Basic e NO per ASP (proprietario).
      Se hai tempo e voglia fammelo sapere. Servirebbero anche cose molto elementari, come vedrai nel post che sto preparando.

  • izzy  Il 5 settembre 2014 alle 23:23

    Io sono pro python per la didattica e contrario alle altre proposte.
    Cioè, per insegnare hello world, davvero vuoi metterti a spiegare tipi e gestione della memoria, o ancora peggio trovarti a dover dire “sì, ok, c’è scritta quella cosa ma voi fate finta di non vederla ve la spiego fra qualche anno”?
    Oppure trovarti a spiegare la gestione del contest di js? E il dom? Magari pensando che sia fico il poter aprire il browser per studiare il js di un sito insieme agli alunni, per poi renderti conto che come l’80% del js è scritto da cani? Quindi “sì, ecco, qui c’è scritta questa cosa ma si deve fare diversamente. Funziona solo perché il browser è nammerda e accetta anche sto schifo”.
    Lua mi piace abbastanza, ma che scopo c’è ad usarlo per la didattica? Non è manco un linguaggio ad oggetti…
    Html? Css? Noiosi, inutili, e privi di logica. Sono poesie da imparare a memoria, le impari e fine, ben poco di guadagnato.

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.