Nuova ricerca

Mauro LEONCINI

Professore Ordinario
Dipartimento di Scienze Fisiche, Informatiche e Matematiche sede ex-Matematica

Insegnamento: Informatica

Chimica (D.M.270/04) (Offerta formativa 2022)

Obiettivi formativi

L’insegnamento si propone di fornire le conoscenze di base della programmazione e dell’uso del computer per la risoluzione di (semplici) problemi di natura scientifica mediante lo sviluppo e la sperimentazione di algoritmi scritti in inguaggio Python.
L’insegnamento si pone pure un obiettivo di natura più squisitamente culturale, alla luce della pervasività delle tecnologie informatiche e della loro relativa facilità di utilizzo. Si tratta proprio di gettare un po’ di luce su “ciò che sta sotto” il cofano della miriade di app e delle altre modalità con cui oggi si fruisce di servizi ormai essenziali, ma la cui reale complessità è inversamente proporzionale proprio alla semplicità di utilizzo.
Al termine del percorso lo studente avrà sviluppato fondamentali capacità di problem solving, traducibili in una solida metodologia che comprende:
- analisi del problema e dei requisiti richiesti alla soluzione software da sviluppare
- rappresentazione delle varie istanze del problema in termini di strutture dati astratte
- scelta o sviluppo di un algoritmo in grado di risolvere il problema posto
- traduzione dei dati astratti e dell’algoritmo in programma Python
- sperimentazione e valutazione del soddisfacimento degli eventuali requisiti di efficienza
- visualizzazione e analisi dei risultati
Per quanto possibile, gli esempi concreti utilizzati riguarderanno problemi computaizonali di natura scientifica.

Prerequisiti

Non ci sono requisiti formali anche se un certo grado di maturità matematica rende più agevole il percorso di apprendimento. Da un punto di vista pratico, è utile una certa familiarità con l'uso del calcolatore: accensione/spegnimento, archiviazione di file, stampa, uso delle principali funzionalità di un word processor, navigazione sul Web.

Programma del corso

L'insegnamento si svolge nel II semestre del I anno, per un totale di 48 ore di didattica frontale che si svolgerà interamente in laboratorio informatico (salvo prescrizioni contrarie dipendenti dalla situazione sanitaria). La scansione dei contenuti sotto riportati, in termini di ore, è da intendere come puramente indicativa. Essa può infatti subire modifiche nel corso dell’insegnamento alla luce dei riscontri e della partecipazione degli studenti.

- Introduzione agli obiettivi e ai metodi dell'Informatica. Elementi introduttivi del linguaggio Python, operazioni primitive, tipi di dato elementari e variabili Python. Istruzioni condizionali, corretto allineamento (indent) di istruzioni, cicli e strutture iterative Python. (5h)

- Astrazione funzionale, funzioni Python e loro utilizzo, scope (visibilità) delle variabili, funzioni come parametri. Dati semplici (scalari) e dati composti, tuple e liste, concetti di mutabilità e immutabilità, iterazione sulle liste, inserimento e rimozione di elementi da una lista, altre operazioni, aliasing. Effetti collaterali. (4h)

- Programmazione orientata agli oggetti, classi e oggetti, creazione e inizializzazione di oggetti. Attributi e metodi. Il concetto di ereditarietà e suo utilizzo in termini di “economia concettuale” e per il riuso del software. Alcuni metodi magici in Python. Sviluppo di numerosi esempi (8h)

- Problemi di ricerca e ordinamento in collezioni di elementi. Approccio “brute-force”, ricerca con bisezione, ordinamento a bolle. Ricorsione e ordinamento per immersione. (6h)

- Problemi di ottimizzazione, problema dello zaino, risoluzione esatta (metodo brute-force) e risoluzione aprossimata mediante metodo greedy, esempio della composizione di una dieta. Algoritmi di scheduling. (6h)

- Grafi come modello astratto per la rappresentazione di problemi. Rappresentazione di grafi in Python, il problema del calcolo del percorso più breve tra due vertici di un grafo orientato e pesato, algoritmo di ricerca in ampiezza (BFS). Cenni al funzionamento dei motori di ricerca (6h)

- Probabilità e modelli stocastici, modelli stocastici per l’indagine di fenomeni, primitive “stocastiche” in Python, semplici processi casuali (lancio, di una moneta e di un dado) e loro analisi, eventi indipendenti, il paradosso del compleanno, simulazione in Python. Cammini casuali (random walks), simulazione del moto di particelle, semplice uso di pylab per la rappresentazione grafica di funzioni e istogrammi. (8h)

- Matrici e vettori. Risoluzione di sistemi di equazioni. (5h)

Metodi didattici

La didattica è basata escusivamente su lezioni/esercitazioni da svolgere in laboratorio informatico. In questo modo, i concetti teorici vengono immediatamente tradotti in sperimentazioni effettuate dagli studenti sotto la quida del docente. È naturale, in tale contesto dove viene fortemente privilegiato l’obiettivo del “saper fare”, che domande e interventi degli studenti siano non solo ammessi ma incoraggiati.
La frequenza non è obbligatoria, ma fortemente consigliata.
Il corso è erogato in lingua italiana.
Tutte le informazioni tecniche e organizzative sull'insegnamento saranno caricate su piattaforma moodle.unimore.it. Si invita lo studente ad iscriversi ed a consultare tale piattaforma con regolarità. Si fa però presente che il materiale didattico aggiuntivo fornito dal docente sarà caricato su altra piattaforma (le indicazioni saranni però sempre su moodle.unimore.it).

Testi di riferimento

Guttag, John. Introduction to Computation and Programming Using Python: With Application to Understanding Data. 2nd ed. MIT Press, 2016. ISBN: 9780262529624.

Altro materiale didattico (in particolare programmi python ed esercizi) verrà reso disponibile dal docente via Web.

Verifica dell'apprendimento

La verifica dell'apprendimento viene condotta mediante due prove, una pratica di laboratorio e una orale.
La prova pratica, della durata massima di 1h e 30m, consiste nella scrittura di un programma Python (o di una parte di programma, da inserire in un "semi-lavorato" proposto dal docente) volta a verificare la conoscenza del linguaggio e la capacità di utilizzarlo concretamente per la risoluzione di un semplice problema.
La prova orale consiste in un colloquio di circa 30 minuti in cui il docente, partendo dall’analisi dell’elaborato presentato dallo studente, potrà porre domande sulle scelte effettuate, le motivazioni sottostanti a tali scelte, le eventuali alternative che potevano essere considerate, l’efficienza complessiva del programma, oltre naturalmente a verificare quali lacune hanno (eventualmente) portato lo studente a commettere errori.

Risultati attesi

Al termine del corso lo studente conoscerà i concetti fondamentali e la terminologia dell'informatica moderna, i concetti chiave della programmazione e saprà sviluppare, a partire dal progetto algoritmico, semplici programmi Python per risolvere problemi di natura computazionale.

Lo studente saprà utilizzare le conoscenze per risolvere, o concorrere a risovere, problemi di interesse per la propria professione. Saprà in quali ambiti applicativi fare uso degli strumenti ICT e, in particolare, del progetto, sviluppo e implemetazione di algoritmi.

Autonomia di giudizio. Lo studente avrà la capacità di scegliere fra soluzioni alternative quella (o quelle) più adatta ai problemi di interesse..

Abilità comunicative. Lo studente avrà la capacità di presentare in modo appropriato ed esauriente dati e risultati attraverso gli strumenti informatici e la capacità di collaborare con altri studenti nella risoluzione dei problemi legati all'uso dei sistemi informatici.

Capacità di apprendimento: lo studente potrà imparare rapidamente ad utilizzare strumenti informatici simili a quelli visti nel corso, e ad apprendere altri linguaggi di programmazione.