giovedì 29 aprile 2010

Imparare a programmare: quale futuro?

Dalle scuole di oggi escono i lavoratori (precari) di domani. Da istituti tecnici, licei sperimentali e anche università possono uscire futuri programmatori, o persone con capacità logico-matematiche utili alla programmazione. Ma il tallone di Achille è sempre l'insegnante il cui primo requisito non è, paradossalmente, quello di sapere bene la materia, quanto quello di saperla comunicare...

Questo in teoria. In pratica è parimenti importante che l'insegnante sappia ciò che insegna, è diciamo il requisito sine qua non dovrebbe nemmeno ritrovarsi ad insegnare.


Dal girovagare in quei siti che permettono agli utenti di fare domande e ad altri utenti di rispondere, o nei forum, ho spesso toccato con mano quanta ignoranza informatica c'è nel nostro paese. Non è una questione di non sapere le cose — si parlerebbe allora solo di un problema nozionistico. Il guaio è proprio l'incapacità di apprendere dalle risposte date. Tale incapacità di apprendere può essere il sintomo di un disinteresse per l'argomento (per la serie lo faccio perché mi costringono a scuola), ma talvolta mi pare invece una manifestazione di un problema più grande.

In molti anni da girovago per siti della tipologia su detta ho maturato diverse conclusioni, ma nessuna mi ha mai soddisfatto. In ogni caso è sempre più facile cercare una causa esterna e concentrarsi su questa. Una di queste cause esterne è proprio l'insegnante. Se fosse una causa prima e unica, ci aspetteremmo omogeneità tra gli studenti di uno stesso insegnante; così invece non è e dunque ci sono mille altri fattori da considerare, come appare logico e politically correct.

È tanto difficile attribuire a questo importante e difficile ruolo la colpa di non aver risvegliato negli studenti le innate capacità di astrazione e generalizzazione (e chissà quante altre) proprie della specie umana, quanto difficile è dire che tali capacità possano mancare totalmente in un essere umano. Per evitare difficoltà mi limito a considerare invece nozioni, e non passaggi logici errati o totalmente mancati.

Prima ho accennato all'ignoranza informatica italica. L'ignoranza informatica non è solo italiana ovviamente; ma considerando soltanto campione di utenti che interagiscono con i siti della tipologia su detta, si nota una preponderanza di assurdità su quelli italiani; siti "internazionali" (lingua franca: inglese), sebbene siano in numero maggiore, contengono molte meno assurdità (che comunque non sono assenti, come ovvio).

Quando una nazione (per esagerare) manifesta una spiccata ignoranza su certi argomenti, cosa si dovrebbe fare? Formare insegnanti che sappiano bene ciò di cui si sta parlando e che sappiano insegnare (ma questo importante punto, come detto prima, lo trascuriamo e guardiamo l'insegnamento come se fosse solo un passaggio di nozioni).

Ma quale futuro c'è per il panorama "informatico" italiano se i molti ragazzi che imparano la programmazione a scuola la imparano da insegnanti che hanno nozioni errate o non del tutto corrette sulla programmazione? Eppure secondo me c'è un crescente interesse verso la programmazione, forse alimentato dal web o da prodezze tecniche (ben pubblicizzate sul web o nei film o telefilm) che i neofiti poi sperano di replicare in poco tempo conoscendo pochi comandi (si parte da una terminologia bizzarra e inesatta!) del loro linguaggio scelto.

Una cosa che non smette mai di sconvolgermi è come molti neofiti programmatori C/C++ non sappiano assolutamente niente della console, riga di comando, "terminale" o come volete chiamarlo... insomma non sappiano che può esistere una interfaccia non grafica, ma semplicemente testuale. La cosa peggiore però è che, una volta spiegato questo misterioso strumento, rimanga in loro l'idea che "le cose vere" sono quelle con l'interfaccia grafica: ciò che un programma fa è in pratica l'interfaccia... quando dunque gli dovesse venir dato il problema di fare, per dire, un automa cellulare, la loro prima domanda non sarebbe come memorizzare lo stato dell'automa, ma come rappresentarlo — e poiché nei corsi "base" non si insegna a fare interfacce grafiche, si ritrovano in altomare!

E l'insegnante non insegna loro ad eseguire un programma che fa solo I/O testuale dalla console. No! L'insegnante insegna come mettere una pausa alla fine del programma, in modo che rimanga aperta la finestra che il sistema operativo apre apposta per consentire l'I/O da tastiera. Nella peggiore delle ipotesi la tecnica usata per mettere questa pausa è il tristissimo system("pause") (sto pensando al C/C++ ovviamente).

Altra cosa stranissima: parlare di linguaggio Dev-C++, invece di C++... che poi spesso e volentieri è invece C. Nel primo caso confondono l'IDE con il linguaggio. Nel secondo caso confondono due linguaggi diversi (anche se hanno tratti in comune). L'insegnante cosa dice? Cosa ha detto per far loro credere che Dev-C++ sia il "nome" del linguaggio e che è C++ il codice che scrivono, quando invece è C? Possibile che non gli abbia mai parlato di compilatori, linker, file di inclusioni, opzioni di compilazione, librerie di funzioni...? Possibile che non sia aggiornato agli standard C o C++ più recenti?

Immagino il primo giorno di lezione sulla programmazione C.

Bene ragazzi, il compilatore che serve per poter scrivere i programmi in C si installa eseguendo questo punto exe che si scarica dal link che vi ho dato. Il programma che usiamo è Dev-C++... scriviamo il nostro primo programma... clicchiamo "Compila ed Esegui" e vedremo il nostro "Ciao Mondo"... il system("pause"); in fondo è messo per impedire che la finestra si chiuda da sola troppo velocemente.


Come saranno i programmatori del futuro? Penseranno tutti che "dietro le cose" ci siano interfacce grafiche e che senza non è possibile fare nulla? Certo, era più facile capire certe cose ai tempi in cui il computer "personale" aveva come interfaccia un cursore lampeggiante che aspettava comandi di un BASIC. Allora diventava chiaro il concetto che il computer è una macchina che va programmata e che se non siamo noi a farlo, è solo perché l'ha fatto qualcun altro (inseriamo la cassetta, digitiamo l'opportuno LOAD, avviamo il nastro... ... ...)

Colgo l'occasione per mettere un bel link a un mio corso di linguaggio C. Non è aggiornatissimo (mi pare che non parlo correttamente del C99) e precisissimo, ma è altamente superiore a tutti quelli che ho visto, con poche eccezioni (in inglese, è ovvio).

Corso C (sponsorizzato da Capo Nord), in italiano; penultima revisione (solo tipografica), dicembre 2009; revisione, correzioni e altro, agosto 2014.

Nessun commento:

Posta un commento

Sii educato, costruisci con cura le frasi, rifletti prima di pubblicare, evita parolacce e offese dirette, non uscire dal tema, cerca di non omettere la punteggiatura, evita errori ortografici, rileggi quel che hai scritto.