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. Gli obiettivi del corso possono quindi suddividersi in due categorie legate ad aspetti teorici o aspetti pratici, come descritti di seguito.
- Aspetti teorici: comprendere il concetto di algoritmo e i principi della programmazione; 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 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 e software; 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; comprendere i 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 i diversi 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; saper utilizzare e definire nuove funzioni.
Prerequisiti
Nessun prerequisito.
Risultati di apprendimento attesi
Conoscenza e comprensione:
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. Nella parte pratica del corso gli studenti avranno modo di comprendere il funzionamento di un programma software e saranno in grado di scrivere un semplice programma usando Python.
Capacità di applicare conoscenza e comprensione:
Gli studenti saranno in grado di:
• riconoscere ed analizzare le componenti principali di un'infrastruttura software
• identificare minacce e rischi nell'utilizzo delle reti come Internet
• progettare e creare semplici programmi software
• scrivere programmi che usano cicli per ripetere l'esecuzione di blocchi di codice
Autonomia di giudizio:
gli studenti matureranno capacità di analizzare i sistemi digitali e il modo in cui vengono utilizzati all'interno di un'organizzaione. Ci si aspetta siano in grado di discutere e valutare gli elementi essenziali di un'infrastruttura tecnologia e nella sicurezza di un computer e delle reti; saranno in grado di comprendere le minacce nell'uso del computer e nella navigazione in Internet.
Abilità comunicative: lo studente avrà maturato la capacità di comprendere e utilizzare i principali termini e concetti di sistemi digitali. Gli studenti saranno in grado di comunicare le proprie idee, proposte, analisi e ragionamenti critici legati alle tematiche del mondo digitale in modo più efficace e appropriato.
Capacità di apprendimento: questo corso contribuisce a potenziare le capacità di comprensione degli studenti fornendo loro gli strumenti per capire come funzionano i sistemi digitali, come funzionano i linguaggi di pogrammazione, sviluppare le capacità di problem solving cimentandosi nella risoluzione di semplici problemi utilizzando il linguaggio di programmazione Python.
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:
- Algoritmi.
- Sistema binario e algebra di Boole.
- Architetture 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 condizionali.
- Strutture di controllo iterative.
- Functions.
Testi Di Riferimento
Il materiale è reso disponibile sulla piattaforma di e-learning all’interno della quale gli studenti troveranno dispense e slide aggiornate e le indicazioni del testo di riferimento.
Metodologie Didattiche
Di seguito le metodologie didattiche utilizzate durante il corso:
- didattica frontale.
- esercitazioni in aula.
Modalità di verifica dell'apprendimento
La valutazione è basata su due test:
- Il test di teoria consiste in domande a risposta multipla
- Il test di pratica consiste in 2 problemi di programmazione da risolvere utilizzando Python. Il punteggio massimo è attribuito solo in caso il codice risolva correttamente il problema utilizzando i
concetti visti a lezione.
Gli studenti hanno a disposizione 30 minuti per ciascuna prova.
Il voto finale è la media aritmetica del punteggio ottenuto nei due test, ma per la sufficienza è necessario un risultato di almeno 12/30 in ognuna delle due prove (teoria e pratica)
Criteri per l’assegnazione dell’elaborato finale
L’elaborato finale sarà assegnato a tutti gli studenti, previa specifica richiesta inoltrata al docente, che dimostrano un serio e motivato interesse ad approfondire le tematiche affrontate dal programma del corso.
Il syllabus affronta temi collegati alla sostenibilità?
No
Settimana 1
Teoria
- Introduzione al corso.
- Cenni di storia dell'informatica
- Architetture hardware e software
Settimana 2
Pratica (usando il linguaggio Python)
- Introduzione al pensiero computazionale.
- Introduzione a Python (ed in generale ai linguaggi di programmazione).
- Concetti di costanti e variabili.
- Scrivere il primo programma (e.g., “Hello World!”).
Settimana 3
Teoria
- L’algebra di Boole
- Sistemi di numerazione
- La rappresentazione dei dati e l’aritmetica degli elaboratori
- Gli algoritmi
Settimana 4
Pratica (in Python)
- Concetti di tipi di dato (interi, numeri in virgola mobile, stringhe di caratteri).
- Operatori aritmetici in Python.
- Operatori su stringhe di caratteri in Python.
Esercizi in Python, e.g. (ma non limitati a):
- Effettuare conversione tra tipi di dato.
- Impiegare Python come una calcolatrice.
Settimana 5
Teoria
- Reti di calcolatori e Internet.
- Protocolli di comunicazione.
- il Web.
Settimana 6
Pratica (in Python)
- Introduzione del tipo logico o booleano in Python.
- Istruzioni condizionali (if, elif, else).
Esercizi in Python su espressioni booleane.
Esercizi in Python su istruzioni condizionali.
E.g., (ma non limitati a):
- Calcolo del massimo e del minimo di un insieme numerico
Settimana 7
Teoria
- Database/DBMS
- Big Data e analisi dati
Settimana 8
Pratica (in Python)
- Istruzioni iterative (for, while).
- Aver compreso le tre componenti di base degli algoritmi: sequenza, selezione, iterazione.
Esercizi in Python facenti uso di ciclo for e ciclo while. E.g. (ma non limitati a):
- Algoritmi di ordinamento (sorting) di un insieme numerico e di pattern matching.
Settimana 9
Teoria
- Sicurezza delle informazioni e privacy.
- Crittografia (simmetrica e asimmetrica).
- Firma Digitale.
Settimana 10
Pratica (in Python)
- Liste e dizionari in Python.
Esercizi in Python facenti uso di istruzioni iterative e liste. E.g. (ma non limitati a):
- Costruire gli anagrammi di una parola.
- Estrarre gli anagrammi di senso compiuto.
Settimana 11
Pratica (in Python)
- Definizione di Funzioni in Python.
Esercizi in Python che richiedono la definizione di nuove funzioni.
Settimana 12
Ripasso finale ed esercitazione conclusiva in cui si richiede agli studenti di risolvere esercizi che incorporano tutte le conoscenze acquisite.