Di Jeff Elkner
Questo libro deve la sua esistenza alla collaborazione resa possibile da Internet e dal movimento free software. I suoi tre autori, un professore universitario, un docente di scuola superiore ed un programmatore professionista, non si sono ancora incontrati di persona, ma ciononostante sono riusciti a lavorare insieme a stretto contatto, aiutati da molte persone che hanno donato il proprio tempo e le loro energie per rendere questo libro migliore.
Noi pensiamo che questo libro rappresenti la testimonianza dei benefici e delle future possibilità di questo tipo di collaborazione, la cui struttura è stata creata da Richard Stallman e dalla Free Software Foundation.
Nel 1999 per la prima volta venne usato il linguaggio C++ per l'esame di informatica del College Board's Advanced Placement (AP). Come in molte scuole secondarie della nazione, la decisione di cambiare linguaggio ebbe un impatto diretto sul curriculum del corso di informatica alla Yorktown High School di Arlington, Virginia, dove insegno. Fino a quel momento il Pascal era stato il linguaggio di insegnamento sia per il primo anno che per i corsi AP. Per continuare con la tradizione di insegnare ai nostri studenti uno stesso linguaggio per due anni, decidemmo di passare al C++ con gli studenti del primo anno nel '97/'98 così da metterli al passo con il cambio nel corso AP dell'anno successivo.
Due anni più tardi io ero convinto che il C++ fosse una scelta non adeguata per introdurre gli studenti all'informatica: mentre da un lato il C++ è certamente un linguaggio molto potente, esso si dimostra tuttavia essere estremamente difficile da insegnare ed imparare. Mi trovavo costantemente alle prese con la difficile sintassi del C++ e stavo inoltre inutilmente perdendo molti dei miei studenti. Convinto che ci dovesse essere un linguaggio migliore per il nostro primo anno iniziai a cercare un'alternativa al C++.
Avevo bisogno di un linguaggio che potesse girare tanto sulle macchine Linux del nostro laboratorio quanto sui sistemi Windows e Macintosh che la maggior parte degli studenti aveva a casa. Lo volevo open-source, così che potesse essere usato dagli studenti indipendentemente dalle loro possibilità economiche. Cercavo un linguaggio che fosse usato da programmatori professionisti e che avesse un'attiva comunità di sviluppatori. Doveva supportare tanto la programmazione procedurale che quella orientata agli oggetti. Cosa più importante, doveva essere facile da insegnare ed imparare. Dopo avere vagliato le possibili alternative con questi obiettivi in mente, Python sembrò il migliore candidato.
Chiesi ad uno tra gli studenti più dotati di Yorktown, Matt Ahrens, di provare Python. In due mesi egli non solo imparò il linguaggio ma scrisse un'applicazione, chiamata pyTicket, che dava la possibilità al nostro staff di stendere report concernenti problemi tecnici via Web.
Sapevo che Matt non avrebbe potuto realizzare un'applicazione di tale portata in un tempo così breve in C++, ed il suo successo, insieme al suo giudizio positivo sul linguaggio, suggerirono che Python era la soluzione che andavo cercando.
Avendo deciso di usare Python nel corso introduttivo in entrambi i miei corsi di informatica l'anno successivo, la mancanza di un libro di testo si fece il problema più pressante.
Il materiale disponibile gratuitamente venne in mio aiuto. In precedenza, in quello stesso anno, Richard Stallman mi aveva fatto conoscere Allen Downey. Entrambi avevamo scritto a Richard esprimendo il nostro interesse nello sviluppare dei testi educativi gratuiti e Allen aveva già scritto un testo di informatica per il primo anno, How to Think Like a Computer Scientist. Quando lessi quel libro seppi immediatamente che volevo usarlo nelle mie lezioni. Era il testo di informatica più chiaro ed utile che avessi visto: il libro enfatizzava il processo di pensiero coinvolto nella programmazione piuttosto che le caratteristiche di un particolare linguaggio. Il solo fatto di leggerlo mi rese un insegnante migliore.
How to Think Like a Computer Scientist non solo era un libro eccellente, ma aveva la licenza pubblica GNU: questo significava che esso poteva essere usato liberamente e modificato per far fronte alle esigenze dei suoi utilizzatori. Deciso a usare Python, dovevo tradurre in questo linguaggio la versione originale basata su Java del testo di Allen. Mentre non sarei mai stato capace di scrivere un libro basandomi sulle mie sole forze, il fatto di avere il libro di Allen da usare come base mi rese possibile farlo, dimostrando nel contempo che il modello di sviluppo cooperativo usato così bene nel software poteva funzionare anche in ambito educativo.
Lavorare su questo libro negli ultimi due anni è stata una ricompensa sia per me che per i miei studenti, e proprio i miei studenti hanno giocato un ruolo importante nel processo. Dato che potevo modificare il testo non appena qualcuno trovava un errore o riteneva troppo difficile un passaggio, io li incoraggiai a cercare errori dando loro un punto aggiuntivo ogniqualvolta una loro osservazione comportava il cambiamento del testo. Questo aveva il doppio scopo di incoraggiarli a leggere il testo più attentamente e di passare il libro al vaglio dei suoi critici più severi: gli studenti impegnati ad imparare l'informatica.
Per la seconda parte del libro riguardante la programmazione ad oggetti, sapevo che sarebbe stato necessario trovare qualcuno con un'esperienza di programmazione reale più solida della mia. Il libro rimase incompiuto per buona parte dell'anno, finché la comunità open source ancora una volta fornì i mezzi per il suo completamento.
Ricevetti un'email da Chris Meyers che esprimeva interesse per il libro. Chris è un programmatore professionista che aveva iniziato a tenere un corso di programmazione con Python l'anno precedente presso il Lane Community College di Eugene, Oregon. La prospettiva di tenere il corso aveva portato il libro alla conoscenza di Chris, così che quest'ultimo cominciò ad aiutarci immediatamente. Prima della fine dell'anno aveva creato un progetto parallelo chiamato Python for Fun sul sito http://www.ibiblio.org/obp e stava lavorando con alcuni dei miei studenti più avanzati guidandoli dove io non avrei potuto portarli.
Il processo di traduzione e uso di How to Think Like a Computer Scientist nei due anni scorsi ha confermato che Python è adatto all'insegnamento agli studenti del primo anno. Python semplifica enormemente gli esempi di programmazione e rende più semplici le idee importanti.
Il primo esempio illustra bene il punto. È il tradizionale programma "hello, world", la cui versione C++ nel libro originale è la seguente:
#include <iostream.h> void main() { cout << "Hello, World!" << endl; }
Nella versione Python diventa:
print "Hello, World!"
I vantaggi di Python saltano subito all'occhio anche in questo esempio
banale. Il corso di informatica I a Yorktown non necessita di
prerequisiti, così molti studenti vedendo questo esempio stanno in
realtà guardando il loro primo programma. Qualcuno di loro è
sicuramente un po' nervoso, avendo saputo che la programmazione è
difficile da imparare. La versione in C++ mi ha sempre costretto a
scegliere tra due opzioni ugualmente insoddisfacenti: o spiegare le
istruzioni #include
, void main()
, { e },
rischiando di intimidire e mettere in confusione qualcuno degli
studenti già dall'inizio, o dire loro "Non preoccupatevi di questa
roba per adesso; ne parleremo più avanti" e rischiare di ottenere lo
stesso risultato. Gli obiettivi a questo punto del corso sono quelli
di introdurre gli studenti all'idea di istruzione di programma e di
portarli a scrivere il loro primo programma, così da introdurli
nell'ambiente della programmazione. Python ha esattamente ciò che è
necessario per fare questo e niente di più.
Confrontare il testo esplicativo del programma in ognuna delle due versioni del libro illustra ulteriormente ciò che questo significa per lo studente alle prime armi: ci sono tredici paragrafi nella spiegazione di "Hello, world!" nella versione C++ e solo due in quella Python. Da notare che gli undici paragrafi aggiuntivi non trattano delle "grandi idee" della programmazione, ma riguardano i particolari connessi alla sintassi del C++. Ho visto questo accadere lungo tutto il corso del libro, così che interi paragrafi semplicemente sono scomparsi dalla versione Python del testo perché la sintassi del linguaggio, molto più chiara, li ha resi inutili.
L'uso di un linguaggio di altissimo livello come Python permette all'insegnante di posporre la trattazione di dettagli di basso livello sino al momento in cui gli studenti non sono in possesso delle basi che permettono loro di comprenderli appieno. Ciò dà la possibilità di procedere con ordine. Uno degli esempi migliori è il modo in cui Python tratta le variabili. In C++ una variabile è un nome che identifica un posto che contiene qualcosa: le variabili devono essere dichiarate anticipatamente perché la grandezza del posto cui si riferiscono deve essere predeterminata tanto che l'idea di una variabile è legata all'hardware della macchina. Il concetto potente e fondamentale di variabile è già sufficientemente difficile per studenti alle prime armi (tanto in informatica che in algebra): byte e indirizzi non aiutano certo a comprendere l'argomento. In Python una variabile è un nome che fa riferimento ad una cosa. Questo è un concetto decisamente più intuitivo per gli studenti e molto più vicino a ciò che essi hanno imparato in matematica. Ho dovuto affrontare difficoltà molto minori nell'insegnare le variabili quest'anno che in passato e ho dovuto trascorrere meno tempo aiutando gli studenti a destreggiarsi con esse.
Un altro esempio di come Python aiuti tanto nell'insegnamento quanto nell'apprendimento della programmazione è la sua sintassi per le funzioni. I miei studenti hanno sempre avuto difficoltà a capire le funzioni: il problema verte sulla differenza tra la definizione di una funzione e la sua chiamata e la relativa distinzione tra un parametro ed un argomento.
Python viene in aiuto con una sintassi che non manca di eleganza. La definizione di una funzione inizia con def
, così dico ai miei studenti: "Quando definite una funzione iniziate con def
, seguito dal nome della funzione; quando volete chiamare la funzione basta inserire il suo nome." I parametri vanno con le definizioni, gli argomenti con le chiamate. Non ci sono tipi di ritorno, tipi del parametro, o riferimenti, così posso insegnare le funzioni in minor tempo e con una migliore comprensione.
L'uso di Python ha migliorato l'efficacia del nostro corso di informatica. Ottengo dai miei studenti un livello generale di successo più elevato ed un minore livello di frustrazione, rispetto al biennio in cui ho insegnato il C++. Mi muovo con maggior velocità e con migliori risultati. Un maggior numero di studenti terminano il corso con la capacità di creare programmi significativi e con un'attitudine positiva verso l'esperienza della programmazione.
Ho ricevuto email da tutto il mondo da gente che usa questo libro per imparare o insegnare la programmazione. Una comunità di utilizzatori ha iniziato ad emergere, e molte persone hanno contribuito al progetto spedendo materiale al sito http://www.thinkpython.com.
Con la pubblicazione del libro in forma stampata mi aspetto che la comunità di utilizzatori si espanda. La nascita di questa comunità e la possibilità che essa suggerisce riguardo collaborazioni tra insegnanti sono state le cose che più mi hanno coinvolto in questo progetto. Lavorando insieme possiamo migliorare la qualità del materiale disponibile e risparmiare tempo prezioso. Ti invito a unirti a noi e attendo di ricevere tue notizie: scrivi agli autori all'indirizzo feedback@thinkpython.com.
Jeffrey Elkner
Yorktown High School
Arlington, Virginia