LINGUAGGIO E LOGICA DELLE MACCHINE
Obiettivi formativi
Il corso fornisce le nozioni fondamentali per comprendere i principi di funzionamento delle moderne tecnologie digitali e permette agli studenti di sviluppare, tramite tecniche di programmazione, il pensiero computazionale, processo logico-creativo che permette di risolvere problemi complessi in maniera efficiente.
Prerequisiti
Nessun prerequisito.
Risultati di apprendimento attesi
Aspetti teorici: comprendere la rappresentazione dell’informazione nel calcolatore elettronico, mettendo in relazione il sistema di numerazione binario con le caratteristiche fisiche dei circuiti digitali (che rendono molto conveniente la gestione di due soli valori); comprendere l’algebra booleana (le cui variabili e funzioni possono assumere due soli valori) in relazione alla rappresentazione delle espressioni booleane in termini di circuiti logici; comprendere la struttura ed i principi di funzionamento di un calcolatore elettronico in termini di architettura hardware (componenti fisici) e software; comprendere il concetto di algoritmo e i principi della programmazione; comprendere le principali caratteristiche delle moderne reti di calcolatori, i protocolli di comunicazione e l’architettura del web; comprendere il concetto di database e le potenzialità dei Big Data come strumento di supporto alle decisioni; comprendere i concetti chiave della sicurezza informatica; essere consapevole dei rischi che derivano dall’uso di software malevolo e dall’esposizione di informazioni sensibili sia aziendali sia personali.
Aspetti pratici: portare avanti attività di programmazione di livello base, utili a sviluppare un approccio creativo ed efficiente alla risoluzione di problemi; comprendere tipi e strutture di dati; comprendere i concetti di costanti e variabili; saper scrivere semplici programmi secondo una logica sequenziale; saper scrivere programmi che prevedono flussi alternativi tramite uso di istruzioni condizionali; saper utilizzare istruzioni iterative per ripetere l’esecuzione di porzioni di codice. Theoretical aspects: understanding the representation of information in the electronic calculator, linking the binary numbering system with the physical characteristics of the digital circuits (which make managing only two values very convenient); understand Boolean algebra (whose variables and functions can take only two values) in relation to the representation of Boolean expressions in terms of logical circuits; understand the structure and operating principles of an electronic calculator in terms of hardware (physical components) and software architecture; understand the concept of algorithm and the principles of programming; understand the main features of modern computer networks, communication protocols and web architecture; understand the concept of database and the potential of Big Data as a decision support tool; understand the key concepts of cyber security; be aware of the risks deriving from the use of malicious software and from the exposure of sensitive corporate and personal information.
Practical aspects: carry out basic level programming activities, useful for developing a creative and efficient approach to solving problems; understand types and structures of data; understand the concepts of constants and variables; knowing how to write simple programs according to a sequential logic; know how to write programs that provide alternative flows through the use of conditional instructions; knowing how to use iterative instructions to repeat the execution of portions of code.
Contenuti Del Corso
Il programma è composto da una parte teorica (lezioni tradizionali) e da una parte pratica (esercitazioni in aula con linguaggio di programmazione Python). I contenuti di ciascuna parte sono descritti di seguito.
Parte teorica:
- Sistema binario e algebra di Boole.
- Architettura hardware e software.
- Reti, Internet, protocolli di comunicazione e servizi web.
- Database/DBMS e Big Data
- Crittografia, sicurezza delle informazioni e privacy.
Parte pratica:
- Introduzione a Python
- Tipi e strutture dati
- Costanti e variabili
- Strutture di controllo iterative.
- Strutture di controllo condizionali
Testi Di Riferimento
1) "Informatica di base" di D. Curtin, K. Foley, K. Sen, C. Morin, A. Marengo, A. Pagano, McGraw-Hill Education; 7a edizione
2) "Logica" di A. Varzi, J. Nolt, D. Rohatyn, ed. McGraw-Hill; 2a edizione
3) "A Whirlwind Tour of Python" di Jake VanderPlas, Ed.
O’Reilly Media Inc. (liberamente scaricabile dalla rete)
Metodologie Didattiche
Di seguito le metodologie didattiche utilizzate durante il corso:
- didattica ed esercitazioni frontale od online.
Modalità di verifica dell'apprendimento
L’esame consiste in un colloquio orale in cui lo studente dovrà dimostrare di conoscere e comprendere i principi basilari dell'informatica, della programmazione, del calcolo delle proposizioni e della logica matematica introdotti a lezione, e di aver conseguito il metodo di studio e la capacità di apprendimento necessari a proseguire anche in autonomia l’approfondimento della materia.
Ai fini dell’attribuzione del giudizio di idoneità si terrà conto dei seguenti criteri di valutazione: conoscenza e comprensione dei principi della materia e capacità di applicarli a casi concreti (65 %); proprietà lessicale e capacità di consultare e valutare le fonti rilevanti e acquisizione del metodo di studio (35 %).
Criteri per l’assegnazione dell’elaborato finale
L’esame consiste in un colloquio orale in cui lo studente dovrà dimostrare di conoscere e comprendere i principi basilari dell'informatica, della programmazione, del calcolo delle proposizioni e della logica matematica introdotti a lezione, e di aver conseguito il metodo di studio e la capacità di apprendimento necessari a proseguire anche in autonomia l’approfondimento della materia.
Ai fini dell’attribuzione del giudizio di idoneità si terrà conto dei seguenti criteri di valutazione: conoscenza e comprensione dei principi della materia e capacità di applicarli a casi concreti (65 %); proprietà lessicale e capacità di consultare e valutare le fonti rilevanti e acquisizione del metodo di studio (35 %).
Il syllabus affronta temi collegati alla sostenibilità?
No.
Settimana 1
Teoria
- Introduzione al corso.
- Sistema binario e algebra di Boole.
- Architettura
Settimana 2
Evoluzione delle macchine da calcolo.
Calcolatori analogici (abaco, regolo).
Calcolatori digitali.
Evoluzione storica dei calcolatori digitali
Architettura di Von Neumann.
L'unità centrale di elaborazione
Unità di controllo e Unità aritmetico-logica
Settimana 3
Introduzione alla logica formale.
Il calcolo delle proposizioni.
Proposizioni elementari.
Connettivi logici od operatori booleani.
Proposizioni composte.
Tabelle di verità.
La rappresentazione binaria dell'informazione.
Dall'algebra di Boole ai circuiti logici.
Porte logiche (gates) elementari.
Settimana 4
Rappresentazione dell'informazione.
Operazioni aritmetiche in complemento a due.
Equivalenza di proposizioni logiche.
Proprietà delle proposizioni.
Leggi di De Morgan.
Circuiti logici.
Semiaddizionatore.
Sommatore completo.
Addizionatore seriale.
Settimana 5
Introduzione alle reti di calcolatori.
Motivazioni tecniche ed economiche dei sistemi distribuiti. Concetti fondamentali.
Principali tipologie di rete informatica:
Reti locali
Reti metropolitane
Reti geografiche
La rete Ethernet
La Aloha Net (Additive Links On-line Hawaii Area)
Principio di funzionamento CSMA (Carrier Sense Multiple Access)
Rilevamento delle collisioni (collision detection): CSMA/CD
L'ether e i mezzi trasmissivi
Il formato dei dati: i frame Ethernet, intestazioni, carico pagante
Aspetti relativi alla riservatezza delle comunicazioni
Reti per applicazioni informatiche personali:
Desk Area Network
Personal Area Network
Reti su piccola scala:
Multi-processor systems
Multi-core processors
Reti logiche
Combinatorie
Sequenziali
Settimana 6
Introduzione a Internet.
La rete ArpaNet e la Defense Advanced Reasearch Project Agency
La nascita della rete Internet "commerciale" e aperta
Terminologia di Internet:
hosts
multihomed hosts
IP address
router
network
autonomous system
I protocolli di Internet
stratificazione dei protocolli (layering)
Architettura ISO/OSI
Protocolli TCP/IP
Formato dei dati e degli indirizzi
IP address
suddivisione in classi A, B, C
IPv6
assegnazione degli indirizzi
Indirizzi statici e dinamici. Aspetti relativi al tracciamento delle attività in rete.
Indirizzi pubblici, privati, riservati.
Traduzione dinamica degli indirizzi.
Settimana 7
Cos'è la crittologia
Crittografia e crittoanalisi
Importanza delle tecniche crittografiche
Sistemi di cifratura realmente sicuro e principio di Kerchoff
Sistemi di cifratura perfettamente sicuri
Claude Shannon, il cifrario di Vernam e le One Time Pad (OTP)
Esempi storici: il cifrario cesariano. Debolezza dei cifrari cesariani.
Algoritmi di cifratura simmetrici e loro caratteristiche fondamentali. Limiti della cifratura simmetrica.
Algoritmi di cifratura asimmetrici "a chiave pubblica". Vantaggi e svantaggi.
Crittografia ibrida.
Funzioni hash. Caratteristiche e finalità.
Firma digitale (digital signature) e sigilli elettronici (digital watermarking).
Settimana 8
Introduzione alla programmazione
Il linguaggio Python
Acquisizione e installazione del software
Uso dell'interfaccia IDLE
Utilizzo interattivo di Python
effetto di comandi elementari
valutazione di espressioni
stampa a video
Stringhe e commenti
Operatori aritmetici e matematici
Costanti e variabili
Valutazione delle espressioni aritmetiche
Tipi di dato
Funzione type()
Il mio primo programma Python
Salvataggio dei comandi in file eseguibili
Settimana 9
Elementi di stile in Python
Primi esempi di programmazione
Funzioni predefinite print(), round(), int(), eval()
La funzione input()
Tipi di dato in Python
La funzione type()
Numeri e operazioni aritmetiche
Precedenza degli operatori
Esempi di programmi con dati in ingresso
Il tipo di dato "stringa"
Operazioni tra stringhe
Il tipo di dato booleano
I costrutti condizionali "if", "if-else", "if-elif-else"
Operatori relazionali e di confronto
Operatori di appartenenza
Settimana 10
Tipi di dati lista
Operazioni tra liste.
Accesso agli items di una lista.
Costrutti iterativi:
iterazione determinata (costrutto for)
iterazione indeterminata (costrutto while)
Settimana 11
Librerie e moduli.
Funzioni e procedure.
Esempi di funzioni ricorsive.
Uso dei moduli e delle funzioni.
Altri tipi di dato:
tuple
dizionari
Settimana 12
Esercitazione di programmazione.