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.