Attenzione: Da lunedì 22 ottobre siamo in G21

.

Introduzione

Il nuovo corso di programmazione per informatica musicale e informatica per la comunicazione digitale verrà erogato con modalità simili (a parte, ovviamente, gli orari) al corso di programmazione per informatica. In particolare, verrà utilizzato il linguaggio Go, e fino a luglio 2019 compreso gli studenti degli anni accademici precedenti al 2018/19 che non avessero ancora sostenuto l'esame saranno autorizzati a sostenere gli appelli (prova di laboratorio, scritto e orale) in Java.

Programma di massima

Il corso di programmazione è un corso di 12 crediti finalizzato all'insegnamento della programmazione. Trattandosi di un corso di base, non richiede alcuna conoscenza specifica pregressa; obiettivo del corso è formare gli studenti alla programmazione in senso tradizionale, mediante l'uso di un linguaggio imperativo; il linguaggio insegnato nel corso sarà Go.

Il corso si compone di due moduli, svolti in parallelo: teoria e laboratorio. Questa pagina descrive solo il modulo di programmazione (teoria), mentre il laboratorio di programmazione è tenuto da quattro diversi docenti in parallelo. Per informazioni/chiarimenti, dopo avere letto alcune indicazioni di base potete scrivere al docente (Sebastiano Vigna).

Orario

Gli studenti sono divisi in quattro turni di laboratorio sulla base del corso di laurea e delle prime lettere del cognome.

Informatica musicale

Prima lezione: 15 ottobre.

Informatica per la comunicazione digitale

Prima lezione: 17 ottobre.

Orario e aule delle lezioni di teoria e dei laboratori sono disponibili qui (il modo più semplice è cercare per docente: “Sebastiano Vigna” per la teoria, o il nome del vostro docente di laboratorio).

Libri di testo consigliati

I testo consigliati per il corso sono:

Per la prima parte si farà riferimento a

Letture avanzate

Contenuti del corso

Il programma di massima del corso è il seguente (TWG=The Way to Go):

  1. Introduzione al corso. Architettura del calcolatore. Che cos'è l'informatica. Linguaggi di programmazione (macchina, assembly, alto livello). Il calcolatore come macchina programmabile.
  2. La macchina di von Neumann. Informazione (bit, byte,...). Caricamento in RAM del programma, fetch-decode-execute. Architettura della CPU: ALU e CU. Un esempio di CPU con relativo linguaggio assembly.
  3. Ciclo di vita del software. Strumenti per la programmazione. Storia di go. Il primo programma in go [TWG4]. Il go tool. Compilazione. Esecuzione. Formattazione. Documentazione. [TWG3]
  4. Discussione degli aspetti lessicali e sintattici. Commenti [TWG4]. Struttura generale di un programma go: programma, pacchetti, sorgenti. La libreria standard. [TWG4]
  5. Variabili: nome, tipo, valore, scope. Tipi. Classificazione dei tipi (tipi di base, tipi composti, interfacce). Dichiarazione, assegnamenti e assegnamenti multipli, short-assignment. [TWG4]
  6. I/O di base: fmt.Println, fmt.Print, fmt.Scan. Tipi di base numerici (int, float64). Espressioni numeriche. Conversioni. Variabili inutilizzate e blank variable. [TWG4]
  7. Selezione binaria (if). Il tipo bool e gli operatori booleani. Esercizi. [TWG5]
  8. Ancora sull'if: variabili locali all'if (locali ai blocchi; locali al costrutto). Esempi.
  9. Il ciclo (for): versione unaria, ternaria, zeraria. Esercizi. [TWG5]
  10. Esercizi con i cicli semplici. Istruzioni break e continue. [TWG5]
  11. Rappresentazione dell'informazione. Notazione posizionale. Rappresentazione degli interi negativi. Range di rappresentazione, overflow. Tipi interi a lunghezza fissa. [Dispense, TWG4]
  12. Esercizi con i cicli annidati.
  13. Cenni alla rappresentazione dei reali: virgola fissa e mobile (standard IEEE 754). Cenni al tipo complex. I caratteri (ASCII, Unicode, UTF-8). Tipo rune. [Dispense, TWG4, TWG5]
  14. Tipo string: differenze fra raw e UTF-8. Funzione len. Quarta forma del ciclo for (range).
  15. Selezione multiaria (switch). [TWG5]
  16. Funzioni: parametri, segnatura argomenti. Passaggio per valore. Valori restituiti. Valori restituiti con nome. [TWG6]
  17. Esercizi. Pacchetto strconv e pacchetto strings. [TWG]
  18. Puntatori: operatori * e &. La funzione new. [TWG4]
  19. Type: alias e definizioni. Struct. Esercizi con puntatori e struct.
  20. Array e slice. Inizializzatori. Applicazione dei for range. Funzione append. [TWG7]
  21. Esercizi. Subslicing. fmt.Printf. Argomenti da riga di comando.
  22. Generazione numeri pseudocasuali. Pacchetto math. Esercizi.
  23. Mappe. Applicazione dei for range. Conversione di string a []rune. Esercizi. [TWG8]
  24. Ricorsione. Stack di esecuzione. [TWG6]
  25. Esercizi sulla ricorsione.
  26. Grafica con il pacchetto github.com/holizz/terrapin. Esempio semplice. Frattali e curva di Koch.
  27. Pacchetti e struttura. Visibilità. Documentare un pacchetto. [TWG9 (cenni)]
  28. Esempio: un pacchetto per le liste concatenate semplici di stringhe.
  29. Argomenti avanzati: metodi e interfacce (cenni). [TWG10, TWG11]
  30. I/O avanzato. File, istruzione defer. [TWG6, TWG12]
  31. Esercitazione: lettura di un file di testo con formato prestabilito, espressioni regolari, gestione degli errori di I/O e di parsing.
  32. Testing unitario e funzionale. (E2E) [TWG13]
  33. Tipi funzione. L'esempio dell'integrazione numerica (metodo dei trapezoidi e metodo Monte-Carlo). [TWG6]
  34. Il linguaggio C. Il gcc. Differenze sintattiche: punto-e-virgola, parentesi nelle strutture di controllo, dichiarazioni di variabili, tipi e funzioni. Differenze nelle strutture di controllo del flusso (switch, while, do-while). Uso di istruzioni semplici nelle strutture di controllo. Inclusione vs. importazione.
  35. Assenza di stringhe, slice, mappe. Uso dei char[] per le stringhe. Tipi elementari e dipendenza dal compilatore; uso di tipi specifici (stdint.h, bool.h). Cast impliciti. Definizione di macro. Funzioni di libreria. Parametri da riga di comando.
  36. Puntatori, aritmetica dei puntatori. Gestione della memoria: malloc, free.

Modalità d'esame

Le modalità d'esame qui indicate sono da ritenersi al momento provvisorie.

  1. Struttura degli appelli: ogni appello prevede
    • una prova di programmazione individuale in laboratorio; la prova contiene un esercizio di filtro: gli studenti che non superino il filtro non saranno ulteriormente valutati;
    • una prova scritta;
    • a chi supera entrambe le prove viene proposto un voto (ottenuto come media dei voti delle due prove; il bonus, di al massimo due punti, è usufruibile solo negli appelli di gennaio e febbraio 2019);
    • gli studenti con voto proposto compreso fra 21 e 27, possono decidere se verbalizzare il voto proposto o rifiutarlo, sostenendo di nuovo l'esame in uno degli appelli successivi; gli studenti con voto proposto inferiore a 21 devono sostenere un esame orale per verificare le loro effettive competenze; gli studenti con voto superiore a 27 possono verbalizzare il voto proposto oppure sostenere un esame orale (finalizzato a migliorare il voto). Resta inteso che sostenendo l'orale lo studente può terminare con un voto superiore, uguale o inferiore a quello inizialmente proposto, oppure può addirittura essere considerato insufficiente.
    Le varie parti da cui l'esame è composto vanno necessariamente sostenute nello stesso appello, e in particolare chi pur avendone la possibilità decide di non presentarsi alle verbalizzazioni dovrà sostenere nuovamente l'esame.
  2. Salto di appello: chi risulta gravemente insufficiente negli appelli di gennaio o giugno non potrà sostenere gli appelli di febbraio e luglio, rispettivamente. Si ritiene che siano gravemente insufficienti (e quindi passibili di salto d'appello):
    • Le persone iscritte all'appello che non si presentino alla prova di laboratorio; chi si fosse iscritto ma avesse deciso di non presentarsi può, per non incorrere nel salto d'appello, disiscriversi oppure (quando siano scaduti i termini per disiscriversi) mandare un'email al docente del turno di laboratorio almeno il giorno prima della prova.
    • Le persone che partecipano alla prova di laboratorio ma non superano l'esercizio filtro.
    • Le persone che pur superando l'esercizio filtro consegnino nella prova di laboratorio esercizi contenenti errori che evidenzino gravi lacune.
    • Non sono viceversa soggetti al salto d'appello gli studenti che, in qualunque momento della prova (di laboratorio o scritta), decidano di ritirarsi.
  3. Iscrizione agli appelli: gli studenti che vogliano sostenere l'esame a un dato appello devono iscriversi al SIFA (tramite il @SIFA online, o recandosi presso gli appositi chioschi). Questo vale per tutti gli appelli, compresi quelli di gennaio e febbraio.

Ricevimento studenti

Il docente riceve nel suo studio di via Celoria 18 (quinto piano, stanza 5014) su appuntamento. Un appuntamento può essere fissato a lezione, oppure inviando un'email al docente e attendendo una risposta di conferma.

Esami per studenti degli anni accademici precedenti

Gli studenti degli anni accademici precedenti al 2018/19 che non avessero ancora sostenuto l'esame saranno autorizzati a sostenere gli appelli (prova di laboratorio, scritto e orale) in Java fino all'appello di luglio 2019 compreso: ciò significa che nella parte di laboratorio potranno usare Java (invece di Go) per risolvere gli esercizi, mentre allo scritto ci saranno due testi diversi (uno per gli studenti nuovi e uno per quelli vecchi). Da settembre 2019 l'esame sarà esclusivamente con il programma nuovo.

Per gli studenti che hanno ottenuto un credito parziale con il Prof. Mereghetti negli anni precedenti, il credito guadagnato (laboratorio o scritto) rimarrà valido fino a luglio 2019. Da settembre 2019 dovranno sostenere l'esame in Go.

Gli studenti di anni accademici in cui non esisteva la prova di laboratorio, o che non hanno crediti parziali dagli anni precedenti, devono effettuare l'esame nelle modalità standard, cioè in Java o Go fino a luglio 2019, e solo in Go in seguito, passando nella stessa sessione la prova di laboratorio, lo scritto e l'orale.