Perché imparare a programmare? Per la stessa ragione per cui si dovrebbe imparare l’inglese o un’altra lingua straniera. A parte vantaggi evidenti di apertura mentale e culturale, può persino tornare utile un domani.
Come per l’inglese, più importante che diventare madrelingua conta sapersela cavare, partire da qualunque livello purché diverso da zero. Per il perfezionamento si possono attendere le scelte di vita.
Python è un buon linguaggio per la fascia, diciamo, adolescenziale di persone che è bene acquisicano i rudimenti della programmazione. Imparare a programmare con Python è il libro Apogeo appena uscito a firma di Maurizio Boscaini, che qui intervistiamo in proposito.
Apogeonline: Sei già coautore di Imparare a programmare con Scratch, per pubblico dai nove anni in su. Questo libro si propone per programmatori dai tredici anni. Com’è il cambiamento, passando da Scratch a Python? Dalle “elementari” alle “medie” della programmazione?
Maurizio Boscaini: Scratch è un ottimo strumento per l’approccio iniziale alla programmazione. Python può essere un ottimo proseguimento. Infatti, pur cercando di essere semplice, permette di saltare nella programmazione vera. Dal visuale, che ha grande forza di attrazione e si basa sull’intuito, si passa con Python e la maggior parte dei linguaggi professionali al testuale, dove si richiedono più logica e concentrazione.
Questo è un salto logico ed espressivo non da poco, che richiede un confronto con aspetti della programmazione che i blocchi di Scratch fanno fatica a rappresentare (e del resto non è il loro scopo).
Come cambia l’insegnamento, il supporto agli studenti? Come si lavora con una classe Scratch e invece con una classe Python?
Continuando il discorso iniziato con la domanda precedente, il punto fondamentale di forza e nel contempo la limitazione maggiore di Scratch (oltre che degli altri ambienti a blocchi definiti da alcuni, in maniera un po’ sprezzante e a mio parere decisamente riduttiva, programmazione giocattolo) è la semplificazione: Scratch rende la curva di apprendimento meno ripida, ma non risolve il fatto che capire come trovare e codificare un algoritmo a soluzione di un problema è un compito difficile (e può portare a illudere che non sia così).
In Scratch puoi provare intuitivamente (o anche del tutto a caso) a scrivere codice collegando tra loro i blocchi e non hai errori di sintassi o a runtime. Con Python questo non è possibile, per cui didatticamente devi fare uno sforzo che, in parte, è quello che si ha nell’insegnare a scrivere a bambini che sanno disegnare: devi pensare di più a quello che scrivi e soprattutto a come scrivi.
Qual è la cosa che ti piace più in Python? E, per quanto hai visto finora, ai tuoi ragazzi? Dove stanno invece i punti critici?
Di Python apprezzo in particolare due cose:
- La concisione e la chiarezza: nel libro i programmi più lunghi hanno meno di 85 linee di codice, sono (abbastanza) comprensibili e riescono a produrre un risultato di calcolo e grafico non banale.
- La fantastica community che ruota attorno al linguaggio.
Tra i punti critici direi IDLE, incluso nell’installazione standard, che sarebbe bello vedere più professionale; e alcuni aspetti del linguaggio, come per esempio __main__ che è un po’ criptico con quel doppio underscore iniziale e finale.
Adolescenti uguale affezione anche esagerata per i cellulari. Sei riuscito a fare lavorare in Python qualche studente sopra il suo smartphone? E a te è capitato?
Finora ho fatto solo qualche semplicissimo esperimento con Kivy. L’impressione iniziale è molto buona ma devo ancora approfondirlo. È uno dei prossimi punti nella mia lista della spesa.
È tempo di grande attenzione alla diffusione della cultura informatica in pari grado a ragazzi e ragazze. Com’è la tua esperienza concreta in materia?
C’è davvero un fermento incredibile. Sono stato chiamato a tenere corsi di formazione per docenti soprattutto nella provincia di Mantova, oltre che a Verona dove vivo. Devo ammettere che lo storytelling del Ministero dell’Istruzione attorno ai termini coding (che io prima avevo sempre e solo chiamato programmazione) e pensiero computazionale ha colpito nel segno con docenti e studenti, anche se soprattutto con questi ultimi la battaglia contro la ipersemplificazione dei dispositivi per il cui uso serve sempre meno pensare è una sfida non semplice.
Molti studenti si divertono a programmare (e Scratch e i Coderdojo sono veicoli fantastici per questo) ma la maggior parte semplicemente si dedica solo al videogioco passivo.
Oltre che procurarsi il tuo libro, hai un consiglio da dare all’autodidatta che volesse scoprire Python?
Esistono progetti, siti e tutorial notevoli disponibili in rete su ogni settore scientifico e tecnologico. Si può per esempio scrivere Python più un’altra parola che identifichi un settore o un’applicazione d’interesse per trovare con buona probabilità materiale già pronto.
Segnalo due progetti che, per ragioni di spazio, non hanno trovato posto nel libro come Graphviz e VPython, per creare rispettivamente grafici e rappresentazioni e simulazioni 3D. Infine ricordo, come ho fatto a fine libro, per chi ama la grafica e l’animazione 3D la possibilità di fare scripting Python dentro Blender e per chi ama i videogiochi Pygame.
Quanto tempo occorre ragionevolmente per arrivare a completare il percorso che descrivi, dalla scoperta di Python alla realizzazione dei primi giochi?
Questa è un’ottima domanda alla quale purtroppo non so dare una risposta precisa, poichè le variabili in gioco sono moltissime. Comunque ci provo. Considerando un/una quattordicenne appassionato/a di logica e matematica posso azzardare una cinquantina di ore.
Una volta presa confidenza con il linguaggio, che direzioni di sviluppo consigli di provare a un aspirante programmatore?
Mi ripeto un po’ con Kivy, Pygame, VPython… e poi sicuramente la programmazione di rete e la programmazione web lato server, per esempio con Django.
Ci sono progetti open source basati su Python che vorresti indicare a programmatori ansiosi di far vedere quanto valgono?
Alcuni progetti si possono trovare elencati su GitHub e su Hackersome.