Introduzione

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), che viene svolto da tre docenti in parallelo, mentre il laboratorio di programmazione è tenuto da sei 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 turni di laboratorio sulla base del corso di laurea e delle prime lettere del cognome. La divisione, l'orario e aule delle lezioni di teoria e dei laboratori sono disponibili qui.

Telegram

Per comunicazioni urgenti verrà utilizzato un canale Telegram.

Libri di testo consigliati

I testo consigliati per il corso sono:

Per la prima parte si farà riferimento a

Letture avanzate

Visualizzazione interattiva

Conferenze e podcast

Esempi

Esempi di programmazione concorrente (fuori programma)

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, visibilità (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. I caratteri (ASCII, Unicode, UTF-8). Tipo rune. Tipo string: differenze fra raw e UTF-8. Funzione len. Quarta forma del ciclo for (range). [TWG4]
  11. Funzioni: parametri, segnatura argomenti. Passaggio per valore. Valori restituiti. Valori restituiti con nome. [TWG6]
  12. Esercizi con i cicli semplici e funzioni. Istruzioni break e continue. [TWG5]
  13. Esercizi con i cicli annidati.
  14. Rappresentazione dell'informazione. Notazione posizionale. Rappresentazione degli interi negativi. Range di rappresentazione, overflow. Tipi interi a lunghezza fissa. Cenni alla rappresentazione dei reali: virgola fissa e mobile (standard IEEE 754). Cenni al tipo complex. [Dispense, TWG4, TWG5]
  15. Selezione multiaria (switch). [TWG5]
  16. Esercizi. Pacchetto strconv e pacchetto strings. [TWG]
  17. Puntatori: operatori * e &. La funzione new. [TWG4]
  18. Type: alias e definizioni. Struct. Esercizi con puntatori e struct.
  19. Array e slice. Inizializzatori. Applicazione dei for range. Funzione append. [TWG7]
  20. Esercizi. Subslicing. fmt.Printf. Argomenti da riga di comando.
  21. Generazione numeri pseudocasuali. Pacchetto math. Esercizi.
  22. Mappe. Applicazione dei for range. Conversione di string a []rune. Esercizi. [TWG8]
  23. Ricorsione. Stack di esecuzione. [TWG6]
  24. Esercizi sulla ricorsione.
  25. Metodi. Interfacce (cenni). Esempi: Stringer, Reader, Writer. [TWG10, TWG11 (cenni)]
  26. Grafica con il pacchetto github.com/holizz/terrapin. Esempio semplice. Frattali e curva di Koch. Un motore di ricerca.
  27. Tipi funzione e chiusure (cenni). Esempi dalle librerie (ordinamento, shuffling, ricerca in stringhe). L'esempio dell'integrazione numerica (metodo Monte–Carlo). [TWG6]
  28. Ordinamento e ricerca tramite funzioni di libreria. I/O di base. [TWG6, TWG12, TWG13]
  29. I/O avanzato. File, panic, defer e recover. [TWG6, TWG12, TWG13]
  30. Pacchetti e struttura. Visibilità. Documentare un pacchetto.
  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. 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.
  34. 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.
  35. Puntatori, aritmetica dei puntatori. Gestione della memoria: malloc, free.
  36. Goroutine e canali.

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 superano il filtro non saranno ulteriormente valutati; la data della prova è la data ufficiale dell'appello sul SIFA.
    • Una prova orale in cui lo studente scrive e discute un breve frammento di codice su repl.it, che poi fa da spunto per domande ulteriori sul programma. Gli orali avvengono qualche giorno dopo la prova di laboratorio, per dare tempo ai docenti di correggere gli elaborati.

    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 all'orale dovrà sostenere nuovamente l'esame.

  2. 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). Fate attenzione a iscrivervi all'edizione corretta per il vostro cognome.

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.