12 gennaio 2018

AlgoMOOC: Algoritmi quotidiani

Questo corso, che chiameremo AlgoMOOC, parla soprattutto di cose che sapete già, o che sapete già fare. Ed è qui la sua forza.

Infatti parla di algoritmi, che non sono altro che procedimenti costruttivi per ottenere risultati e realizzare idee. Dietro a quasi tutto quello che facciamo c’è un algoritmo. Questo corso svela gli algoritmi quotidiani che applichiamo inconsapevolmente quando calcoliamo una somma, quando cerchiamo la pagina in un libro, quando mettiamo in ordine degli oggetti, quando facciamo un disegno o quando cerchiamo la strada per raggiungere un luogo.

Ma oltre ad essere strumenti quotidiani, gli algoritmi sono una delle massime espressioni dell’intelligenza umana, un elemento fondamentale del nostro patrimonio culturale e una base solida su cui costruire il futuro. Un problema per cui esista una soluzione algoritmica non è più degno di essere chiamato tale. Così chi trova un algoritmo per risolvere un problema aperto lo risolve per sempre. Persino la complessità che attribuiamo ad un problema non è una sua proprietà intrinseca, ma è data dall’algoritmo che adottiamo per risolverlo. Quindi chi trova un algoritmo più veloce per fare qualcosa rende tutto un po’ più semplice, per sempre.

Conoscere gli algoritmi ci consente non solo di applicarli alla soluzione dei problemi, ma anche di comprendere gli aspetti computazionali della realtà che ci circonda e di dare vita alle nostre idee.

In questo corso impareremo a riconoscere gli algoritmi, a comprenderli e ad usarli. Vedremo quanto sia importante la rappresentazione dei dati di un problema per riuscire a risolverlo.

Potremmo parlare di tutto questo anche senza usare un computer, perché gli algoritmi hanno a che fare con il ragionamento, non con la tecnologia. Ma impareremo anche ad usare JavaScript per rappresentare i nostri algoritmi in modo talmente rigoroso da poterne affidare l’esecuzione a un computer.

A chi non fosse interessato a JavaScript e volesse invece approfondire gli aspetti concettuali e didattici degli algoritmi, suggerisco il corso gemello per insegnanti AlgoMOOCt (Algorithms in Your Classroom, Now!).

[brochure in formato pdf]

Modalità di partecipazione

Il corso è aperto a tutti e gratuito ed è rivolto soprattutto agli studenti delle scuole superiori e agli studenti universitari che non hanno la programmazione nel proprio piano di studi. Al termine del corso tutti i partecipanti riceveranno un attestato di completamento rilasciato dall’Università di Urbino in forma di open badge.

Faccio lezione in diretta, ma tutti i contenuti restano fruibili on domand. Non ci sono scadenze. Potete iscrivervi quando volete. Troverete dei compiti da svolgere. Se li consegnerete entro le scadenze indicate parteciperete al meccanismo di valutazione tra pari per usufruire del confronto costruttivo con i colleghi, ma se seguirete on demand potrete consegnarli quando vorrete ottenendo comunque l’attestato di completamento.

Attestati

Completando il MOOC ottenete attestati di completamento rilasciati dall’Università di Urbino in forma di Open Badge e di certificati Pdf stampabile, che documentano un impegno complessivo di 40 ore. La certificazione è suddivisa in due parti, alle quali corrispondono due Open Badge con relativi certificati pdf:

  1. AlgoMOOC, Open Badge che certifica il completamento delle 26 ore di attività didattica dedicata alla comprensione degli algoritmi
  2. AlgoMOOCj, Open Badge che certifica il completamento delle 14 ore di attività didattica dedicata a JavaScript, indicate con [j] nel programma.

Obiettivi

Gli obiettivi di studio sono i seguenti:

  • Svelare la natura algoritmica dei procedimenti quotidiani
  • Offrire consapevolezza degli aspetti computazionali della realtà
  • Comprendere la relazione tra problema e algoritmo
  • Introdurre i concetti di complessità e correttezza
  • Introdurre le principali forme di rappresentazione dei dati
  • Introdurre e sperimentare i principi base della programmazione
  • Introdurre le principali strutture dati
  • Avviare alla programmazione in JavaScript
  • Fornire esempi pratici di algoritmi, guidando i corsisti alla loro comprensione e implementazione in JavaScript

Risultati

I corsisti acquisiranno consapevolezza degli aspetti computazionali della realtà e strumenti adatti a descriverli e comprenderli. Comprenderanno il legame tra problemi e algoritmi, dando significato ai concetti di complessità e correttezza. Comprenderanno l’importanza della rappresentazione dei dati al fine dell’individuazione di soluzioni algoritmiche. Conosceranno algoritmi esemplificativi che operano su numeri e su strutture dati quali array, alberi e grafi.

I corsisti apprenderanno i principi base della programmazione (istruzioni, sequenze, ripetizioni, selezioni, procedure, funzioni, ricorsione) e faranno esperienza di programmazione in JavaScript. Questo consentirà loro di comprendere anche la relazione che esiste tra un algoritmo e la sua implementazione in un linguaggio di programmazione e sperimenteranno l’importanza del debugging come passo fondamentale dello sviluppo di un programma.

Programma

  1. Introduzione
    • Webinar introduttivo
    • Organizzazione del corso
    • Assignment: L’ultimo algoritmo che ho incontrato
  2. JavaScript
    • La scelta del linguaggio [j]
    • Primi passi in JavaScript [j]
    • Assignment: il mio certificato HoC
    • Scatole cinesi in JavaScript [j]
    • Personalizzazione [j]
    • Assignment: il mio compleanno in AppLab [j]
  3. Rappresentazioni
    • Rappresentazione di algoritmi
    • Rappresentazione dei dati
  4. Lavoriamo con pochi dati, che chiamiamo per nome
    • Uno più uno
    • Due per due
    • Dalle dita a JavaScript [j]
    • Tanti numeri da pochi dati
    • Anche i numeri rimbalzano [j]
  5. Complessità e correttezza
    • La complessità di un algoritmo
    • La grande O
    • Dignità di algoritmo
  6. Lavoriamo con tanti dati, ma tutti in fila
    • Tutti in fila, si cerca!
    • Mettiamo in ordine
    • Ordinamento in JavaScript [j]
    • Il suono degli algoritmi
    • Il bandolo della matassa
    • Liste in JavaScript [j]
    • Liste di oggetti in JavaScript [j]
    • Tutti in coda, magari in cerchio
  7. Alberi e grafi
    • Gli alberi
    • La strada nel grafo
    • Cammini minimi in Internet e per strada
    • Eulero, Hamilton e il commesso viaggiatore
  8. Conclusioni
    • Wrap up
    • Assignment: Ti racconto quando ho usato un array
    • Assignment: Ti racconto quando ho incontrato un albero e un grafo
    • Assignment: Il mio username in ordine
    • Assignment: il tuo nome sull’attestato finale
    • Assignment: il consenso al trattamento dei dati

La [j] denota i punti del programma dedicati a JavaScript, il cui completamento è certificato da AlgoMOOCj.

Alternanza scuola-lavoro

L’Università di Urbino invita le scuole ad utilizzare il corso liberamente nell’ambito dei propri percorsi di alternanza scuola-lavoro. Esplicita autorizzazione può essere richiesta gratuitamente compilando questo modulo online.

Embedding

Le scuole possono inserire il corso direttamente nel proprio sito web per favorirne la fruizione da parte dei propri studenti, secondo le modalità descritte in questa pagina.

Educazione Civica Digitale

Il MOOC è tra le risorse selezionate dal MIUR a supporto del nuovo curriculum in Educazione Civica Digitale.

Algoritmi come patrimonio immateriale dell’umanità

In occasione di Europe Code Week è stata lanciata una petizione internazionale per estendere agli algoritmi la convezione UNESCO per la tutela del patrimonio culturale immateriale. La petizione può essere letta e firmata seguendo questo link.

Maki

Maki è lo pseudonimo adottato da un’artista che segue il corso e ha deciso di commentare ogni video-lezione con un proprio autoritratto che ci permette di osservarla da dentro lo schermo. I suoi disegni offrono un riscontro insolito e irriverente.