Un corso di programmazione un po’ speciale

Dopo un po’ di anni in cui mi sono occupato di formazione online, ora ho finalmente deciso di proporre un corso di programmazione che esemplifichi la mia idea in tal senso.

Fruibile dal proprio desktop, laptop, palmare, o telefono cellulare, questo corso si propone di presentare una introduzione alla programmazione orientata agli oggetti utilizzando il linguaggio di programmazione Java.

Non ci sono particolari prerequisiti, se non la voglia di imparare e l’impegno nell’investire circa 40 ore complessive nello studio dei materiali e nello svolgimento dei test e degli esercizi.

Il corso, organizzato in 9 capitoli, comprende:

– 33 lezioni teoriche di una pagina ciascuna contenenti le informazioni essenziali.

– 8 quiz di verifica e un quiz finale per testare le competenze teoriche.

– Un caso di studio per esercitare la capacità di programmare organizzato in 8 parti. Ogni parte comprende una descrizione del problema e la possibilità di  inserire codice in un semplice ambiente di sviluppo integrato nel browser. Le soluzioni del caso di studio sono inviate ad un elaboratore remoto che le controlla per segnalare eventuali errori sintattici, e ne verifica l’esecuzione eseguendo una serie di test predefiniti. Lo studente vedrà i risultati e potrà riprovare finché non passerà tutti i test.  

E’ proprio quest’ultima parte, gli esercizi che sono validati automaticamente su di un elaboratore remoto, la caratteristica che rende questo corso “un po’ speciale” e a mio avviso interessante soprattutto, ma non solo, per chi vuole imparare a programmare in autonomia. Per ottenere ciò ho utilizzato un ambiente che due miei ex-colleghi del Politecnico di Zurigo (ETH), Christian Estler e Martin Nordio, hanno sviluppato qualche anno fa e che e’ stato già validato con migliaia di studenti in tutto il mondo: Codeboard.

Infine, il corso è offerto gratuitamente, e’ accessibile da una sezione separata di questo sito. Per avere accesso, basta che facciate una richiesta tramite l’email disponibile nell’area contatti di questo sito indicando il vostro nome e cognome ed io vi creerò una utenza con la quale cominciare a lavorare.

In cambio vi chiedo la cortesia di farmi sapere se incontrate problemi, se non capite qualcosa, o semplicemente la vostra opinione sul corso.

Buon corso a tutti!

Testing black box, Meridiani Energetici, Teoria della Complessità, e Medicina

Figura anatomica in avorio, Giappone, 1800-1920

Data una applicazione software, possiamo pensare ad essa come ad una entità in grado di fornire, a fronte di determinati dati iniziali che noi inseriamo (input), un determinato risultato (output). Quello che in questo caso ci interessa non è il “come” questa entità produca i risultati, cioè l’analisi della tipologia e collocazione delle sue istruzioni interne, ma semplicemente il “cosa” , ovvero i risultati prodotti. Il testing black box di una applicazione prevede appunto di fornire determinati input all’applicazione e stare a vedere come si comporta, non potendo osservare dentro la “scatola nera” quello che succede. Se i risultati prodotti coincidono con i risultati attesi il test si considera superato, mentre se non coincidono, siamo ragionevolmente sicuri che vi è un errore nell’applicazione.

I meridiani energetici, secondo la medicina tradizionale cinese, sono dei canali di energia che scorrono lungo tutto il corpo umano formando un sistema organico coerente che si può paragonare ai sistemi sanguigno o linfatico, comprendendo anche parte di essi. I punti utilizzati dall’agopuntura e da tecniche di digitopressione come lo Shiatsu sono collocati appunto sui meridiani. L’idea è che in un corpo sano l’energia fluisce liberamente, mentre se si creano dei punti di accumulo o di carenza di energia si generano degli scompensi che vanno sanati riportando il flusso alla normalità, pena la malattia. A prescindere da ciò che pensiamo della medicina tradizionale cinese, e a prescindere dal fatto che con i moderni mezzi di indagine diagnostica si stanno iniziando a raccogliere delle evidenze interessanti sull’esistenza dei meridiani [1][2], è interessante notare l’approccio che i medici cinesi hanno escogitato per ovviare al fatto che, sembra, per lunghi periodi storici non sia stato loro concesso di sezionare i cadaveri per analizzarne l’anatomia. Analogamente a ciò che viene fatto con le applicazioni software, i medici cinesi hanno trattato il corpo umano come una black box, osservando che a fronte di un input consistente nella stimolazione di certi punti, corrispondeva un certo output in termini di salute dell’individuo. Non se ne comprendevano le ragioni, ma di fatto l’approccio ha dato risultati tangibili, attingendo alla capacità di auto-guarigione del corpo umano.

Infine, la teoria della complessità. Si è ormai capito che ci sono sistemi i cui comportamenti sono molto difficili da comprendere con un semplice approccio analitico. Fra i molteplici esempi di sistemi complessi abbiamo il sistema climatico, la crosta terrestre (di interesse anche per la previsione dei terremoti), i sistemi sociali ed economici, gli ecosistemi, e gli organismi viventi, tra i quali ovviamente ci interessa il corpo umano. In fisica un sistema complesso viene studiato in maniera olistica, cioè usando un approccio black box. La differenza rispetto al test di un programma deterministico, che restituisce sempre gli stessi valori a fronte dello stesso input, risiede nel fatto che i risultati prodotti potrebbero variare anche a fronte degli stessi input, perché le interazioni fra le varie parti di un sistema complesso non possono venire esaustivamente analizzate.

Nel caso del corpo umano, l’approccio tendenzialmente analitico e sostanzialmente lineare della medicina occidentale, del tipo “ti prescrivo il farmaco X perché lamenti un problema all’organo Y “, sta portando ad un eccesso nella prescrizione e nell’utilizzo dei farmaci. Mentre sarebbe un errore demonizzare la medicina occidentale, perché ci sono problematiche per cui rimane estremamente efficace, sarebbe a mio avviso auspicabile che l’approccio puramente analitico si evolva in un approccio più olistico che tenga conto del fatto che l’uomo è un sistema complesso. Per fare un esempio, i molti problemi specifici che sono causati dallo stress e conseguenti processi ossidativi, potrebbero essere a loro volta connessi a fattori psicologici che potrebbero essere curati senza ricorrere a farmaci, sfruttando le capacità di autoguarigione del corpo umano.

[1] CT Scans Reveal Acupuncture Points

[2] Bonghan Circulatory System as an Extension of Acupuncture Meridians

Il gioco del Go e l’inizio di una nuova era per l’Intelligenza Artificiale

Il Go è un gioco millenario, molto diffuso in Cina, dove veniva considerato una forma d’arte insieme alla pittura, alla musica e alla calligrafia. E’ molto popolare anche in Giappone e Corea, e ad oggi viene praticato da più di 40 milioni di persone in tutto il mondo.

Si gioca con una tavola su cui è tracciata una scacchiera con 19×19 caselle tutte uguali. Le regole sono poche e molto semplici, ma lo sviluppo del gioco è così complesso che le possibili configurazioni di pietre nel corso di una partita sono circa 10170, superando di molto il numero stimato di atomi nell’universo, 1080. Questo lo rende notevolmente più complesso degli scacchi, di cui parleremo in un altro articolo.

Per chi non conoscesse il gioco, il Go prevede due giocatori che si alternano nel collocare pietre (nere per un giocatore, bianche per l’altro) una alla volta sulle intersezioni della scacchiera, cercando di formare territori che racchiudono pietre avversarie al fine di eliminarle dal gioco. Alla fine, quando i giocatori non desiderano collocare ulteriori pietre, la partita finisce e avviene il conteggio delle pietre rimaste sulla scacchiera per stabilire il vincitore.

Vista la complessità del gioco, il suo fascino, dal punto di vista dell’intelligenza artificiale, è costituito dal fatto che un approccio che utilizzi la “forza bruta”, cioè che tenti di calcolare tutte le varianti possibili a partire da una certa mossa, è destinato a fallire, e questo è quanto puntualmente accaduto con i primi programmi che giocavano come dei principianti. I giocatori umani di Go che abbiano un po’ di esperienza utilizzano invece l’intuito nella scelta di una determinata mossa e non sono pienamente coscienti dei processi mentali che li hanno portati a tale scelta. E’ stato in realtà dimostrato che in questo caso “l’intuito” ha a che vedere con il riconoscimento di schemi visivi che si ripetono e dopo un po’ risultano familiari.

Quello che gli scienziati che lavorano alla DeepMind, una azienda britannica di ricerca sulle neuroscienze fondata nel 2010 e successivamente rilevata da Google nel 2014, hanno pensato, è di affrontare il problema di creare un programma in grado di giocare a Go utilizzando due reti neurali artificiali che collaborano tra di loro.

Possiamo semplicisticamente definire una rete neurale artificiale come una rappresentazione software estremamente semplificata di un insieme di neuroni del nostro cervello. In pratica una rete neurale è in grado di modificare la sua configurazione a seconda degli stimoli ricevuti dall’esterno, innescando in questo modo un processo di apprendimento.

Delle due reti neurali summenzionate, la prima è stata utilizzata per studiare centomila partite giocate da forti giocatori umani, cercando di individuare degli schemi, o pattern, di risposta a determinate configurazioni di pietre, o più precisamente le distribuzioni di probabilità delle varie mosse in una determinata posizione. La seconda rete neurale è stata utilizzata per assegnare dei numeri alle diverse mosse possibili in una certa posizione, permettendone una valutazione.

Utilizzando queste due reti neurali la DeepMind ha realizzato il programma AlphaGo, facendogli giocare trenta milioni di partite contro versioni precedenti di se stesso e sfruttando così un processo di autoapprendimento che lo ha portato a battere 4-1 il pluricampione del mondo, il coreano Lee Sedol, nel marzo 2016.

E non è finita qui: ad ottobre 2017 è stata presentata la più recente versione del programma, chiamata AlphaGo Zero, che senza neanche studiare le partite dei giocatori umani e iniziando a giocare in maniera completamente casuale ha sconfitto AlphaGo 100-0 solo giocando contro precedenti versioni di se stesso…

Perché nel titolo ho parlato di nuova era per l’intelligenza artificiale?

Il primo aspetto importante del lavoro degli scienziati alla DeepMind è l’implementazione di un efficace meccanismo di autoapprendimento, cioè il programma riesce a migliorarsi in maniera misurabile imparando dai propri errori, non dipendendo più da regole fisse codificate dai suoi programmatori.

Il secondo aspetto è la generalità dell’approccio, cioè lo stesso programma, se fornito di regole diverse come input, può risolvere problemi completamente differenti usando lo stesso meccanismo di autoapprendimento. Questo e’ fondamentalmente differente da quanto visto fino ad ora in questo ambito, dove ogni soluzione era fortemente dipendente dal problema che doveva tentare di risolvere.

I due aspetti descritti sono fondamentali per sviluppare applicazioni in ambiti completamente diversi, come il risparmio energetico, la sintesi vocale, e la medicina. Applicando di fatto  lo stesso approccio, ma con regole diverse, i centri di elaborazione dati di Google hanno risparmiato il 15% dell’energia elettrica che avrebbero consumato altrimenti, e WaveNet ha fatto compiere un balzo di qualità all’assistente vocale di Google.

Per quanto riguarda la medicina, la DeepMind sta partecipando a vari progetti, alcuni dei quali si focalizzano sull’interpretazione di immagini per aiutare la diagnosi di tumori al collo, al cervello, e al seno, e aiutano a prevedere la degenerazione maculare della retina.

Altri progetti aiuteranno a capire come le proteine si ripiegano su se stesse, requisito fondamentale per poter creare dei farmaci che contrastino l’accumulo di proteine “mal ripiegate”, come avviene in malattie neurodegenerative quali l’Alzheimer (proteina tau) e il Parkinson (alfa-sinucleina).

Infine, e questo avremmo dovuto prevederlo, la DeepMind  sta cercando di ricreare una versione software dell’ippocampo, quella parte del nostro cervello che ha a che fare con la memoria a breve termine e l’orientazione nello spazio.

Ce n’è abbastanza per giustificare il titolo dell’articolo, direi!

Un MOOC sulle metodologie agili di sviluppo software

E’ ora possibile registrarsi e partecipare alla seconda edizione del MOOC (Massive Open Online Course) “Agile Software Development”, proposto dal Politecnico di Zurigo (ETH) sulla piattaforma online edX.

La prima edizione ha avuto circa 15.000 studenti partecipanti ed ha ricevuto buone recensioni. La seconda edizione e’ stata interamente riveduta per quanto riguarda i quiz e l’esame finale.

Il docente, Bertrand Meyer, creatore del linguaggio di programmazione Eiffel e noto guru dell’informatica, non ha bisogno di presentazioni.

Io ho collaborato alla progettazione e all’implementazione del corso, ho creato i quiz e gli esami, e modererò il forum.

Il corso e’ in inglese ed e’ gratuito, previa registrazione sulla piattaforma edX. E’ possibile avere una certificazione dell’avvenuto superamento del corso ad un costo di 50 dollari.

Non ci sono prerequisiti particolari. Se la tematica e’ di interesse potrebbe essere una buona occasione per capire a che punto e’ oggi la formazione online.

Buon corso a tutti!