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!

3 commenti:

  1. Interessante questo punto di vista, che aiuta davvero a focalizzare i processi cognitivi. A questo proposito, avrei un'opinione da chiedere. Ha già sentito parlare del Human Language Code? il sito ufficiale http://www.leonardo-hlc.it/ ne parla come un ambiente in grado di programmare utilizzando proprio la lingua parlata. Il che sarebbe una rivoluzione! Che ne pensa? Francesco

    RispondiElimina
    Risposte
    1. Ciao Francesco, scusa se rispondo con un pò di ritardo. Su Leonardo HLC... se funziona bene è un miracolo. Il linguaggio naturale non è una cosa semplice da interpretare, proprio perché la grammatica è molto complessa ed è possibile creare più frasi, sintatticamente diverse, che hanno il solito significato. Infatti fanno notare che "bisogna imparare delle semplici regole" --> "abbiamo limitato le possibili frasi che il sistema può riconoscere".

      Sono curioso di vedere questo sistema all'opera, ma non mi aspetto che funzioni bene con input considerati _non standard_ (esempio: nell'esempio del controllo email, modificare "valido" con "corretto" o "non scorretto"). Notare anche la profondità con cui si deve definire un'operazione, che ricorda (troppo) da vicino la scrittura di codice in linguaggi artificiali.

      Per dirla tutta, non mi è piaciuta questa frase, presa dalle FAQ (sono un programmatore professionista [...]?) " [...] Queste caratteristiche, permettono ai professionisti di sviluppare più applicazioni a parità di tempo, **eliminando completamente il tempo dedicato al debug del codice** e quindi migliora i risultati ed incrementa le entrate economiche. ": io non mi fiderei, non esiste un sistema bug-free o senza errori, soprattutto un motore semantico che genera codice. Ovviamente il marketing è marketing, ma quando è troppo...

      In conclusione, dopo aver girato il sito: l'utente che si avvicina a questo tipo di sistemi è un utente non "casual user", è difficile che "il venditore di dischi sotto casa" pensi autonomamente di crearsi i propri strumenti, non sa nemmeno che esiste la possibilità! Se proprio creasse in maniera autonoma i tool per il suo lavoro, utilizzerebbe qualcosa tipo Access o Excel, che sono soluzioni decisamente più note e visuali. In pratica: chi si butta su queste soluzioni impara un linguaggio di programmazione classico, è mooolto difficile che approcci un sistema come Leonardo. Auguro molta fortuna al progetto, ma... non so quanto velocemente si diffonderà.

      Elimina
  2. Io l'ho prenotato ma ora che dici così copio il tuo commento allo staff e mi faccio dare spiegazioni..io proprio volevo usarlo per unire processi fra access e excel nel mio lavoro!!!!

    RispondiElimina