DISCLIC Facoltà di Lingue e Letterature Straniere Giornata di studio a conclusione del ciclo di incontri sul gioco applicato alla didattica delle lingue e alla tecnologia Didattica 2.gioc0 GIOCO E PROGRAMMAZIONE Università degli Studi di Genova – DIST ing. Lidia Stanganelli Sommario Introduzione Programmazione e gioco: quale comune denominatore? Comparazione di alcuni linguaggi di programmazione: l’istruzione C=A+B Affinità tra linguaggi dichiarativi e gioco. Un esempio: il prolog Conclusioni Introduzione Esistono in rete una moltitudine di giochi didattici per l’apprendimento di diverse discipline (matematica, lingue etc.) Giochi per imparare i linguaggi di programmazione? In questo lavoro si vuole realizzare uno studio su come si possa trasmettere la conoscenza relativa alla programmazione attraverso una attività “ludica” come quella del gioco. Programmazione e gioco: il Logo È possibile pensare a diversi linguaggi di programmazione per avvicinarsi al mondo dei computers, non solo da semplici utenti ma da “progettisti” in grado di realizzare tools (giochi) Negli ultimi cinquant’anni per trasmettere la disciplina della programmazione in modo semplice sono stati utilizzati linguaggi come il Logo. Logo è un linguaggio di programmazione per l’insegnamento di molte discipline, dalla matematica alla logica, dalla musica al disegno e naturalmente la programmazione stessa. Programmazione e gioco: il Prolog Un linguaggio che si pone ad un alto livello di espressività logico-matematico è il Prolog. È un linguaggio al quale possono avvicinarsi tutti gli individui che abbiano le capacità logicomatematiche di descrizione dei problemi. Infatti al contrario dei linguaggi procedurali (come Pascal, Fortran, C, etc.), e dei linguaggi ad oggetti (C++, Java, Ruby etc.), Prolog è un linguaggio di alto livello più vicino al modo di pensare di un essere umano. ha l'enorme vantaggio di essere sintetico, e fortemente espressivo. Che relazione c’è tra gioco e programmazione? In realtà i linguaggi di programmazione e le attività di un gioco sono molto simili, intanto perché entrambe le attività sono costituite da un algoritmo (una sequenza di azioni elementari eseguite allo scopo di raggiungere un determinato obiettivo) ed anche per il risvolto di gratificazione psicologica che anche la programmazione, al pari del gioco, fornisce: chi scrive un buon programma e lo vede funzionare è gratificato allo stesso modo con il quale si sente soddisfatto dopo aver superato un livello di un gioco di abilità! Sia in gioco che la programmazione sono processi vicini anche perché hanno entrambi l’obiettivo di risolvere i problemi e di usare un linguaggio diverso da quello naturale. Quale linguaggio scegliere? Disseminare i concetti piuttosto che uno o più linguaggi di programmazione. Comparare diversi linguaggi è un lavoro impegnativo, per cui prendiamo una semplice istruzione e vediamo come viene rappresentata nei vari linguaggi. Useremo un approccio pragmatico Un approccio comparato (1) Istruzione C=A+B Obiettivo: scegliere il linguaggio più espressivo Concetti da spiegare, pro e contro: Basic: n.ri linee, variabili. Semplice, vecchio, carenti costrutti linguistici C: direttive processore…, per programmatori esperti Un approccio comparato (2) Istruzione C=A+B Obiettivo: scegliere il linguaggio più espressivo Concetti da spiegare, pro e contro: Java: classi e molto altro. Vasta libreria di classi….scoraggiante Prolog: è il miglior linguaggio a livello concettuale …in definitiva Un esempio: il prolog (1) Un semplice esempio di funzionamento di tale linguaggio, e come per gioco l’apprendimento delle potenzialità e dei primi rudimenti. Scriviamo un programma Prolog che simuli l’imbarco delle carrozze di un treno su di un traghetto per superare lo Stretto di Messina Il programma deve dare la possibilità di effettuare le seguenti operazioni mediante opportuni predicati: Inserimento di una o più carrozze Estrazione di una o più carrozze Ricerca della carrozza più vecchia Calcolo del numero medio di posti a sedere Le informazioni relative alla singola carrozza sono: un codice seriale il numero di posti a sedere l’anno di costruzione Un esempio: il prolog (2) Si consideri il traghetto come una pila, nella quale le carrozze entrano ed escono dallo stesso varco, quindi la politica di inserimento ed estrazione delle carrozze è LIFO (last in first out). La carrozza viene rappresentata con un fatto prolog del tipo: carrozza(Cod ,Posti, Anno) Di seguito si mostrano le soluzioni dei quattro punti suddetti. L’operazione di inserimento di una o più carrozze viene effettuata dal predicato: push(Lista1, Lista2, Lista3). L’operazione di estrazione di una o più carrozze viene effettuata dal predicato: pop(N, Lista1, Lista2). Questa operazione permette di estrarre N elementi dalla testa della pila Lista1. Lista2, conterrà il risultato della chiamata pop, cioè la lista di carrozze estratte da Lista1. L’operazione che ricerca la carrozza con l’anno di costruzione più vecchio è eseguita dal predicato: search(Lista, CarrVecchia) Questa operazione permette di inserire gli elementi della Lista1 in testa alla Lista2. Lista3, conterrà il risultato della chiamata push. Questa operazione effettua la scansione di tutta la Lista confrontando gli anni di costruzione di ogni elemento carrozza(Cod ,Posti, Anno) e scrivendo nella variabile di uscita CarrVecchia quella con l’anno di costruzione più piccolo. L’operazione che calcola il numero medio di posti a sedere tra le carrozze del traghetto è: seats_average(Lista,Media) Questa operazione effettua la divisione tra il numero dato dalla somma di tutti i posti di tutte le carrozze e il numero di carrozze presenti nell’argomento Lista. Il risultato è restituito nella variabile Media. Un esempio: il prolog (3) La lista è una metafora di come si potrebbe simulare un gioco costruttivo nel quale si tratta di comporre oggetti complessi a partire da oggetti semplici (nell’esempio il concetto di carrozza è l’elemento semplice il concetto di treno è l’elemento complesso). Inoltre agli studenti può essere insegnato il meccanismo del comporre e scomporre il treno attraverso delle operazioni elementari (inserisci in lista ed estrai dalla lista che corrisponde a stacca e attacca la carrozza). Una volta progettata l’interfaccia di tale gioco gli studenti potranno comprendere strutture del linguaggio anche complesse. Un gioco di composizione un po’ come quello del Lego. Conclusioni Qualcuno ha detto "se tutto quello che hai è un martello allora ogni problema ti sembrerà un chiodo". L’obiettivo è quello di ampliare il repertorio di strumenti a disposizione per costruire programmi di qualità e che quindi si ha bisogno di conoscere più linguaggi, ma da dove cominciare? Ovviamente a partire dal martello e cioè da un linguaggio semplice. Spesso la prima scelta, quella più alla moda, è sui linguaggi imperativi. Questi sono importanti per insegnare concetti e per le classi di problemi che risolvono. Complicazione in termini di concetti da insegnare e di tempo, inoltre gli studenti devono mostrare un profondo radicamento nella conoscenza del linguaggio prima di poter scrivere qualcosa senza errori. La seconda scelta, meno frequente, potrebbe essere un linguaggio di scripting , ma non a studenti alle prime armi n quanto non sono buoni linguaggi dal punto di vista della "pulizia" delle strutture logiche. La migliore scelta è utilizzare un linguaggio dichiarativo, in quanto conserviamo lo stesso livello di astrazione del modo in cui pensiamo il concetto: la somma in questo caso ed impariamo giocando. Un linguaggio che preservi l'astrazione concettuale, è il Prolog. Esso è realmente uno strumento potente per la risoluzione dei problemi Grazie per l’attenzione Didattica 2.gioc0 Any Questions ?