lunedì 17 settembre 2012

Imparare a programmare o imparare a pensare?

Disclaimer: scrivo codice per passione, presto lo scriverò per lavoro e ho una forma mentis da tecnico. Più che scrivere codice mi piace risolvere il problema, magari usando _anche_ del codice.

Non è certo una novità, la discussione sull'insegnamento della programmazione a tutte le età.
Oggi ho visto, nella redazione distribuita di Digitalia, ho visto un interessante tweet, che riportava la notizia di corsi di programmazione nelle scuole estoni.
[...] L'idea del progetto, infatti, è cambiare radicalmente l'atteggiamento dei bambini nei confronti dei computer e dell'informatica, dando loro le prime competenze perché acquisiscano un rapporto "padrone" e consapevole con la tecnologia. Per farlo, secondo Lauringson, l'unico modo è cominciare il più presto possibile a capire come funzionano le cose. [...]

In un articolo “correlato” su Forbes si dice
For the youngest students, the new courses  won’t be strictly focused on learning programming languages like Java, Perl and C++. Rather they’ll ease kids into the necessary skills for coding like logic, which has the benefit of some overlap with subjects like math and potentially, robotics.
Certo, l'idea di insegnare a programmare non è nuova. Probabilmente nessuno si ricorda dell'interessante progetto Colobot, un piccolo progetto polacco precursore di tutte le iniziative per “imparare a programmare”, partendo dal famoso CodeYear all'economica scheda programmabile Raspberry Pi per finire al ProgeTiiger di cui stiamo parlando ora.

Siamo sicuri di aver necessità di imparare a programmare? O dovremmo forse imparare a pensare?
Ben vengano iniziative che permettano di migliorare capacità come il ragionamento logico e critico, ma non è corretto insegnare ai bambini a scrivere codice: non è ciò che serve.

Il codice è un mezzo, non il fine. Se serve a migliorare le capacità di modellizzazione e problem solving sono favorevole, ma è inutile, se non dannoso, dire "per domani voglio 30 righe di codice in [[linguaggio]]". Inoltre, bisogna considerare il non poco importante problema della "scrittura a casaccio di codice", senza effettivamente capire come funzionano le cose e comprendere i problemi, la scomposizione in sottoproblemi, il tempo di esecuzione, l'uso corretto delle strutture dati... tante cose importanti che distinguono un buon programmatore da un code monkey.

"Il mondo è stato cambiato da persone che sanno programmare, dobbiamo insegnare come programmare ai giovani di domani", potreste dire. No, il mondo ora ha prodotti tecnologici di altissimo valore semplicemente perché degli appassionati hanno creato ciò che gli serviva o gli è venuto in mente. Il lavoro di programmatore è un lavoro che richiede passione, molto più di altri lavori: non è una passione trasmissibile a tutti; e soprattutto non tutti possono essere programmatori: possono mancare le capacità, la voglia, lo stimolo... è inutile forzare l'insegnamento di qualcosa che non applicheranno in pratica.

Ripeto: più di concentrarci sulla capacità di scrivere codice, bisognerebbe preoccuparci di ragionare. Sembra una stupidaggine, ma non tutti sfruttano il potente calcolatore all'interno del cranio nel migliore dei modi. Imparare a pensare, a ragionare, porsi dubbi, cercare soluzioni, applicare le conoscenze e sfruttarle per risolvere problemi. Competenze.
Programmando si possono assumere diverse competenze - per esempio scomporre i problemi in sottoproblemi o formalizzare in maniera chiara delle soluzioni - ma sono abilità che si possono apprendere indipendentemente dalla programmazione. Basta solo pensare, rimuginare, analizzare, tentare di capire.

Spero di essere stato chiaro, se volete rispondere al post scrivete un commento o (se avete bisogno di più spazio) scrivete sul vostro blog/tumblr e fatemelo sapere. Stay updated!

venerdì 14 settembre 2012

Test valutazione SMFN: analisi dei punteggi

Ciao a tutti!
Il 12 ho fatto il test di valutazione delle competenze a Pisa, e sono passato :D
Mi è venuta una curiosità: quante persone hanno passato il test? E com'è andata negli anni precedenti? (Sì, sono un nerd, mi piace fare analisi, leggere grafici e cose di questo tipo  :D)

Nota sul test: l'attuale prova di valutazione delle competenze è uguale a livello nazionale, dato che è redatta da un ente statale (nel famoso "Progetto Lauree Scientifiche") che le fornisce alla maggior parte delle facoltà SMFN italiane. Quest'analisi è redatta sui dati forniti dalla facoltà SMFN dell'Università di Pisa, ma si potrebbero fare delle valutazioni sui dati di altri atenei per poter fare statistiche locali e valutare la preparazione dei matricolandi per regione o per università di appartenenza.

andamento del punteggio dal 2009 al 2012
Sul sito della facoltà si possono ottenere i dati "sfusi", ovvero delle lunghissime liste di codici fiscali e punteggi. E chi ha voglia di mettersi a contare? Io l'ho fatto fare al mio caro pitone, e ho messo su un foglio di calcolo per fare grafici ed ulteriori analisi.

A quanto pare, il test quest'anno è superato da 58.92% dei partecipanti, con punteggio medio 14.94 (~15) e deviazione standard 3.93 (~4 punti). Poteva andare meglio. E' sicuramente meglio dell'anno precedente ma decisamente peggio rispetto ai risultati 2009/2010.

% di persone che hanno superato il test
Mentre analizzavo le statistiche, mi è venuto in mente un'interessante post di rik0 sulla distribuzione delle capacità umane. Perché allora non analizzare anche la distribuzione dei punteggi?

Analizzando il grafico (e gli altri nel foglio di calcolo) si può vedere che, col passare del tempo, si sono ridotti i picchi e si sta regredendo ad un andamento gaussiano. L'andamento gaussiano è basato sulla media e sullo scarto quadratico medio calcolato dai dati stessi, non è una curva gaussiana interpolante.

Il significato che posso dare alle osservazioni? Posso dire che la preparazione è nella media degli anni precedenti, e l'abbassamento dei picchi indica che non esistono più gruppetti di studenti più o meno capaci e gruppetti più o meno incapaci, ma che stanno diventando un unico gruppo dove le conoscenze di matematica di base sono più o meno comprese da tutti.
C'è da notare il progressivo abbassamento del punteggio medio, passato dal 15.75 del 2010 al 14.94 del 2012, che non è un segnale di maggiori conoscenze/competenze, sebbene la percentuale di persone che hanno superato il test sia nella media.
Se considerassimo le considerazioni di rik0 potremmo dire che i test sono "facili": in effetti non è niente di fantascientifico, sono domande abbastanza semplici su matematica delle superiori (sul sito del CINECA potete trovare il syllabus e delle prove con soluzione, per valutare da voi la difficoltà)
Riassumendo: la scuola dà ai matricolandi le conoscenze per superare i test, ma i matricolandi risolvono, in media, correttamente meno problemi nel tempo proposto.

Tutti i dati (dati sfusi su TXT, script Python e foglio di calcolo) sono stati compressi in un archivio ZIP, il link per il download è disponibile su tagfil.es, un nuovo servizio online che permette di etichettare tutti i dati caricati nei propri account di servizi di file hosting.

Spero di non aver annoiato e magari di avervi fatto conoscere qualcosa di interessante. Ovviamente fatemi sapere se ritenete che ci siano errori, problemi o che stia comparando mele e pere.
Stay tuned!