Metodi
Idee sparse da approfondire
Indice |
Come motivare gli studenti
- no al puro formalismo, ci vuole una motivazione. Ovviamente cambia in funzione del tipo di scuola dove andrete ad insegnare. Videogiochi, Robot, sensori per la fisica? Sage e le applicazioni alla matematica?
Quale Linguaggio insegnare a scuola?
quale linguaggio di programmazione? Pascal e' ormai defunto. C, Java, Javascript, Python? pro e contro. (leggi "why pascal is not my favourite language/why C is not my favourite language")
Python
Penso che oggi sia fra le scelte piu' sensate. Python ha un basso impatto, potendo funzionare anche in modo interattivo consente di fare esperimenti col linguaggio per arrivare poi alla costruzione di programmi.
- ha una sintassi "minimale" (niente begin/end parentesi graffe, le variabili vengono definite con l'uso, garbage collection automatica)
- le variabili hanno un tipo inferito dal dato memorizzato
- le funzioni operano automaticamente come template, non sono legate al tipo dei parametri ma funzionano per ogni tipo per il quale sono definiti gli operatori o le ulteriori funzioni utilizzati
- educa alla scrittura ordinata del codice (l'indentazione fa parte della sintassi
- lo stesso linguaggio si usa in programmazione procedurale imperativa, a oggetti e funzionale.
- ha un uso amplissimo (non e' il pascal che fuori dalla scuola non usa nessuno o il C che e' un linguaggio "per soli adulti" dove si possono scrivere cose efficientissime ma incomprensibili). E' uno dei linguaggi maggiormente utilizzati in Google!
- funziona sui cellulari, sul raspberry pi...
- ha le "batterie incluse", esistono vagonate di librerie che consentono in poche righe per esempio di create servizi web, accendere led etc.
- e' interpretato e compilato, si puo' sperimentare il singolo statement con una semplice interfaccia testuale del linguaggio e copiare/incollare lo statement in un programma piu' ampio
- le librerie hanno autocompilazione, le librerie si autocompilano al primo utilizzo o quando viene modificato il loro sorgente
- e' molto piu' portabile del java
- Esistono ottimi libri interattivi liberi online (in lingua inglese).
PRO: linguaggio semplice, non richiede la definizione delle variabili, signature polimorfe, tipizzazione degli argomenti a run-time, sintassi minimale, educazione all'indentazione, e' un linguaggio a oggetti ma non obbligatoriamente a oggetti, ha overloading degli operatori, linguaggio realmente usato, funziona su tutto (telefonini, computer etc),
CONTRO: non e' velocissimo (usa un suo bytecode).
Javascript
Sintassi simile a C per i blocchi (Python usa l'indentazione). Si integra con lo sviluppo web ed motiva gli studenti che riescono a fare pagine web attive.
C
E' il mio linguaggio preferito ma lo ritengo inadatto alla didattica in una scuola secondaria. Di solito dico che e' un linguaggio per soli adulti. Il C infatti consente una grande liberta' ed e' molto efficiente, ma consente di scrivere programmi illeggibili e non manutenibili.
PRO: e' un linguaggio molto usato, e' molto veloce ed ha ottimizzatori efficienti, consente operazioni a basso livello
CONTRO: non educa ad una programmazione ordinata (si possono scrivere programmi illeggibili), non e' ad oggetti, tutte le variabili vanno dichiarate (tipi statici)
Java
Scheme
In un corso universitario scheme puo' servire per riorganizzare le conoscenze degli studenti in una visione piu' ampia (gli studenti che hanno pregressi corsi di programmazione e quelli di licei tradizionali ripartono ad armi pari). Ci vuole tanto coraggio per proporlo in una scuola secondaria... non penso che tanta astrazione possa essere compresa.
Prolog
Il prolog e' defunto con il mito della quinta generazione giapponese e con i sistemi esperti. L'idea di indicare solo fatti e regole e di delegare ad un motore generale di risoluzione la ricerca del risultato (mediante ricerca esaustiva) e' inefficiente sia come metodo di calcolo sia come processo educativo.
PRO: Fornisce una visione non usuale sulla programmazione
CONTRO: La programmazione logica e' usata molto raramente in casi reali,
C++
Pascal
A mio avviso e' da evitare. La pagina di Wikipedia List of educational programming languages lo mette nella categoria "Linguaggi Storici", e li' e' giusto che stia. Non e' piu' usato se non da alcuni docenti che non hanno saputo aggiornarsi.
PRO: Ordinato
CONTRO: Sintassi pesante, non e' ad oggetti, le variabili devono sempre essere definite, non si controlla totalmente l'esecuzione (si sono controlli automaticamente inseriti nel codice e costi per la scansione dei frame pointer per le variabili automatiche).
Linguaggi per applicazioni specifiche
- bash
- i linguaggi per l'approccio LAMP (Linux/Apache/MySQL/php)