Programmazione
A.A. 2018/2019
Learning objectives
Obiettivo del corso è introdurre gli studenti alla programmazione imperativa e al problem solving in piccolo. Come linguaggio di riferimento verrà utilizzato Go, ma nell'ultima parte del corso si insegnerà anche C. Il laboratorio è parte integrante del corso destinata a fornire la necessaria e naturale controparte "pragmatica".
Expected learning outcomes
Obiettivi didattici
Il corso ha come scopo che lo studente acquisisca una serie di conoscenze, abilità e competenze, le principali delle quali sono:
Conoscenze
- Conoscere i concetti fondamentali della programmazione imperativa strutturata
- Conoscere gli elementi principali della sintassi e della semantica del linguaggio di programmazione Go
Abilità
- Riconoscere l'uso di un pattern all'interno di una porzione di codice
- Identificare porzioni di codice critiche in relazione ad un comportamento osservato
- Scegliere e applicare un opportuno pattern per automatizzare un compito semplice
- Tradurre in Go un semplice algoritmo descritto in linguaggio naturale
Competenze
- Interpretare e descrivere il comportamento di un programma semplice quando viene eseguito
- Comprendere che cosa fa un semplice programma e riconoscere come le varie parti di cui è composto contribuiscano al suo funzionamento
- Stabilire le cause di un malfunzionamento e intervenire su un programma semplice per correggerlo/modificarlo
- Scrivere e mettere a punto un programma per automatizzare un compito semplice
Il corso ha come scopo che lo studente acquisisca una serie di conoscenze, abilità e competenze, le principali delle quali sono:
Conoscenze
- Conoscere i concetti fondamentali della programmazione imperativa strutturata
- Conoscere gli elementi principali della sintassi e della semantica del linguaggio di programmazione Go
Abilità
- Riconoscere l'uso di un pattern all'interno di una porzione di codice
- Identificare porzioni di codice critiche in relazione ad un comportamento osservato
- Scegliere e applicare un opportuno pattern per automatizzare un compito semplice
- Tradurre in Go un semplice algoritmo descritto in linguaggio naturale
Competenze
- Interpretare e descrivere il comportamento di un programma semplice quando viene eseguito
- Comprendere che cosa fa un semplice programma e riconoscere come le varie parti di cui è composto contribuiscano al suo funzionamento
- Stabilire le cause di un malfunzionamento e intervenire su un programma semplice per correggerlo/modificarlo
- Scrivere e mettere a punto un programma per automatizzare un compito semplice
Periodo: Primo semestre
Modalità di valutazione: Esame
Giudizio di valutazione: voto verbalizzato in trentesimi
Corso singolo
Questo insegnamento non può essere seguito come corso singolo. Puoi trovare gli insegnamenti disponibili consultando il catalogo corsi singoli.
Course syllabus and organization
Linea Milano
Responsabile
Periodo
Primo semestre
STUDENTI FREQUENTANTI
Programma
SYLLABUS DI MASSIMA
[TWG=The Way to Go: A Thorough Introduction to the Go Programming Language by Ivo Balbaert]
- Introduzione al corso; Architettura del calcolatore; Che cos'è; l'informatica; Linguaggi di programmazione (macchina, assembly, alto livello); Il calcolatore come macchina programmabile
- 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
- 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]
- Discussione degli aspetti lessicali e sintattici. Commenti [TWG4]. Struttura generale di un programma go: programma, pacchetti, sorgenti. La libreria standard. [TWG4]
- Variabili: nome, tipo, valore, scope. Tipi. Classificazione dei tipi (tipi di base, tipi composti, interfacce). Dichiarazione, assegnamenti e assegnamenti multipli, short-assignment [TWG4]
- 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]
- Selezione binaria (if). Il tipo bool e gli operatori booleani. Esercizi [TWG5]
- Ancora sull'if: variabili locali all'if (locali ai blocchi; locali al costrutto). Esempi
- Il ciclo (for): versione unaria, ternaria, zeraria. Esercizi [TWG5]
- Esercizi con i cicli semplici. Istruzioni break e continue [TWG5]
- Rappresentazione dell'informazione. Notazione posizionale. Rappresentazione degli interi negativi. Range di rappresentazione, overflow. Tipi interi a lunghezza fissa [Dispense, TWG4]
- Esercizi con i cicli annidati.
- 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]
- Tipo string: differenze fra raw e utf-8. Funzione len. Quarta forma del ciclo for (range).
- Selezione multiaria (switch) [TWG5]
- Funzioni: parametri, segnatura argomenti. Passaggio per valore. Valori restituiti. Valori restituiti con nome. [TWG6]
- Esercizi. Pacchetto strconv e pacchetto strings [TWG]
- Puntatori: operatori * e &. La funzione new [TWG4]
- Type: alias e definizioni. Struct. Esercizi con puntatori e struct.
- Array e slice. Inizializzatori. Applicazione dei for range. Funzione append [TWG7]
- Esercizi. Subslicing. fmt.Printf. Argomenti da riga di comando.
- Generazione numeri pseudo-casuali. Pacchetto math. Esercizi
- Mappe. Applicazione dei for range. Conversione di string a []rune. Esercizi [TWG8]
- Ricorsione. Stack di esecuzione [TWG6]
- Esercizi sulla ricorsione
- Grafica con il pacchetto github.com/holizz/terrapin. Esempio semplice. Frattali e curva di Koch
- Pacchetti e struttura. Visibilità. Documentare un pacchetto [TWG9 (cenni)]
- Esempio: un pacchetto per le liste concatenate semplici di stringhe
- Argomenti avanzati: metodi e interfacce (cenni) [TWG10, TWG11]
- I/O avanzato. File, istruzione defer [TWG6, TWG12]
- Esercitazione: lettura di un file di testo con formato prestabilito, espressioni regolari, gestione degli errori di I/O e di parsing...
- Testing unitario e funzionale (E2E) [TWG13]
- Tipi funzione. L'esempio dell'integrazione numerica (metodo dei trapezoidi e metodo Monte-Carlo) [TWG6]
- 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.
- 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
- Puntatori, aritmetica dei puntatori. Gestione della memoria: malloc, free
[TWG=The Way to Go: A Thorough Introduction to the Go Programming Language by Ivo Balbaert]
- Introduzione al corso; Architettura del calcolatore; Che cos'è; l'informatica; Linguaggi di programmazione (macchina, assembly, alto livello); Il calcolatore come macchina programmabile
- 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
- 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]
- Discussione degli aspetti lessicali e sintattici. Commenti [TWG4]. Struttura generale di un programma go: programma, pacchetti, sorgenti. La libreria standard. [TWG4]
- Variabili: nome, tipo, valore, scope. Tipi. Classificazione dei tipi (tipi di base, tipi composti, interfacce). Dichiarazione, assegnamenti e assegnamenti multipli, short-assignment [TWG4]
- 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]
- Selezione binaria (if). Il tipo bool e gli operatori booleani. Esercizi [TWG5]
- Ancora sull'if: variabili locali all'if (locali ai blocchi; locali al costrutto). Esempi
- Il ciclo (for): versione unaria, ternaria, zeraria. Esercizi [TWG5]
- Esercizi con i cicli semplici. Istruzioni break e continue [TWG5]
- Rappresentazione dell'informazione. Notazione posizionale. Rappresentazione degli interi negativi. Range di rappresentazione, overflow. Tipi interi a lunghezza fissa [Dispense, TWG4]
- Esercizi con i cicli annidati.
- 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]
- Tipo string: differenze fra raw e utf-8. Funzione len. Quarta forma del ciclo for (range).
- Selezione multiaria (switch) [TWG5]
- Funzioni: parametri, segnatura argomenti. Passaggio per valore. Valori restituiti. Valori restituiti con nome. [TWG6]
- Esercizi. Pacchetto strconv e pacchetto strings [TWG]
- Puntatori: operatori * e &. La funzione new [TWG4]
- Type: alias e definizioni. Struct. Esercizi con puntatori e struct.
- Array e slice. Inizializzatori. Applicazione dei for range. Funzione append [TWG7]
- Esercizi. Subslicing. fmt.Printf. Argomenti da riga di comando.
- Generazione numeri pseudo-casuali. Pacchetto math. Esercizi
- Mappe. Applicazione dei for range. Conversione di string a []rune. Esercizi [TWG8]
- Ricorsione. Stack di esecuzione [TWG6]
- Esercizi sulla ricorsione
- Grafica con il pacchetto github.com/holizz/terrapin. Esempio semplice. Frattali e curva di Koch
- Pacchetti e struttura. Visibilità. Documentare un pacchetto [TWG9 (cenni)]
- Esempio: un pacchetto per le liste concatenate semplici di stringhe
- Argomenti avanzati: metodi e interfacce (cenni) [TWG10, TWG11]
- I/O avanzato. File, istruzione defer [TWG6, TWG12]
- Esercitazione: lettura di un file di testo con formato prestabilito, espressioni regolari, gestione degli errori di I/O e di parsing...
- Testing unitario e funzionale (E2E) [TWG13]
- Tipi funzione. L'esempio dell'integrazione numerica (metodo dei trapezoidi e metodo Monte-Carlo) [TWG6]
- 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.
- 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
- Puntatori, aritmetica dei puntatori. Gestione della memoria: malloc, free
Informazioni sul programma
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 imperativo; il linguaggio insegnato nel corso sarà Go.
Il corso si compone di due moduli, svolti in parallelo: questa pagina descrive solo il modulo di Programmazione (teoria), mentre il Laboratorio di programmazione è tenuto da tre diversi docenti in parallelo, e ciascuno ha una sua propria pagina web, cui vi preghiamo di fare riferimento per informazioni.
Il corso si compone di due moduli, svolti in parallelo: questa pagina descrive solo il modulo di Programmazione (teoria), mentre il Laboratorio di programmazione è tenuto da tre diversi docenti in parallelo, e ciascuno ha una sua propria pagina web, cui vi preghiamo di fare riferimento per informazioni.
Propedeuticità
-
Prerequisiti
-
Metodi didattici
Lezioni frontali + laboratori didattici
Materiale di riferimento
STUDENTI NON FREQUENTANTI
- The Way to Go: A Thorough Introduction to the Go Programming Language. Ivo Balbaert
- The Go Programming Language. Donovan, Kernighan
- The Go Programming Language. Donovan, Kernighan
Programma
-
Prerequisiti
-
Materiale di riferimento
-
INF/01 - INFORMATICA - CFU: 12
Laboratori: 48 ore
Lezioni: 72 ore
Lezioni: 72 ore
Turni:
Docente:
Boldi Paolo
Turno A
Docente:
Morpurgo Anna Chiara GiovannaTurno B
Docente:
Trentini Andrea MarioTurno C
Docente:
Capra LorenzoProfessor(s)
Ricevimento:
tutti i giorni su appuntamento
ufficio 5003 via Celoria 18
Ricevimento:
su appuntamento, chiedere via mail (meglio quella @atrent)
stanza 4007, via Celoria 18, MI