INFORMATICA I
Anno accademico 2019/2020 - 1° annoCrediti: 6
Organizzazione didattica: 150 ore d'impegno totale, 103 di studio individuale, 35 di lezione frontale, 12 di esercitazione
Semestre: 2°
Obiettivi formativi
Descrizione generale sintetica
Il corso presenta i fondamenti di programmazione degli elaboratori adottando Python come linguaggio di riferimento.
Sono presentati i concetti base della programmazione imperativa senza tralasciare l'impiego di librerie specifiche per il calcolo scientifico. In particolare il discente è condotto verso l'acquisizione degli strumenti concettuali classici della programmazione strutturata mediante la descrizione e l'utilizzo delle strutture predefinite per l'elaborazione dei dati (liste, tuple, dizionari), la codifica di algoritmi notevoli e l'impiego della tecnica della ricorsione. Durante tutto il corso si farà uso di un ambiente di sviluppo professionale per il linguaggio Python.
Obiettivi formativi generali dell'insegnamento in termini di risultati di apprendimento attesi
- Conoscenza e capacità di comprensione (knowledge and understanding): l'obiettivo primario del corso è individuato nell’acquisizione da parte degli studenti della “filosofia” della programmazione strutturata, oltre che nella conoscenza dettagliata della sintassi e della semantica del linguaggio di programmazione Python.
Il corso rivolge una particolare attenzione allo sviluppo di codice ben scritto e ben strutturato utilizzando le tecniche di base per lo sviluppo di software nel paradigma imperativo. - Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): si intende fornire gli strumenti per conseguire le seguenti abilità pratiche e professionali:
- Analizzare problemi computazionali e tradurre in codice idee algoritmiche per la loro risoluzione;
- Progettare, descrivere, implementare e debuggare programmi in Python con tools professionali;
- Utilizzare strutture dati predefinite per la gestione dei dati nel calcolo scientifico;
- Comprendere semplici algoritmi ricorsivi;
- Utilizzare librerie specifiche per il calcolo scientifico;
- Leggere, comprendere ed analizzare codice Python di terze parti anche in termini di efficienza;
- Orientarsi nella documentazione delle librerie. - Autonomia di giudizio (making judgements): attraverso l'esame di numerosi esempi di codice ed una consistente componente pratica che prevede lo svolgimento di esercizi all'elaboratore, il discente sarà in grado, sia in forma autonoma che in forma cooperativa, di analizzare problemi e progettare ed implementare le relative soluzioni software.
- Abilità comunicative (communication skills): lo studente acquisirà le necessarie abilità comunicative e di appropriatezza espressiva nell'impiego del linguaggio verbale tecnico nell'ambito della programmazione degli elaboratori.
- Capacità di apprendimento (learning skills): il corso intende fornire al discente le necessarie metodologie teoriche e pratiche da mettere in campo in contesti professionali e, in particolare, la capacità di formulare ed implementare algoritmi ad-hoc per la risoluzione di nuovi problemi computazionali oltre alla possibilità di acquisire facilmente ed in breve tempo altri linguaggi di programmazione.
Modalità di svolgimento dell'insegnamento
Le lezioni frontali sono tenute in aula con l'ausilio del videoproiettore.
Tutto il materiale presentato (slide e frammenti di codice) è messo a disposizione degli studenti nel portale Studium.
Le slide non intendono sostituire i testi di riferimento ma rappresentano una guida puntuale agli argomenti del corso.
Al fine di perseguire gli obiettivi formativi del corso esposti nei descrittori 2) Applying knowledge and understanding e 3) Making judgements:
- molte lezioni saranno svolte in modalità interattiva docente-discenti;
- sono previste delle esercitazioni pratiche in aula atte a familiarizzare i discenti con la stesura di codice Python;
- saranno discussi alcuni casi di studio nell'ambito della progettazione di software di piccole dimensioni.
Prerequisiti richiesti
Nessun prerequisito.
Frequenza lezioni
Le lezioni frontali sono erogate in modalità fortemente interattiva docente-discenti pertanto la frequenza è consigliata. Il calendario delle lezioni è pubblicato in www.dmi.unict.it
Contenuti del corso
- Introduzione alla programmazione
- Problemi ed Algoritmi. Variabili, Espressioni ed Assegnazioni.
- Diagrammi di flusso, Notazione lineare strutturata, Teorema di Böhm-Jacopini.
- Codifica dell'informazione: numeri interi ed a virgola mobile, caratteri, stringhe, immagini e suoni (cenni).
- Linguaggi di programmazione
- Linguaggi di programmazione: macchina, assembly e di alto livello.
- Problema della traduzione : compilazione ed interpretazione.
- Installazione dell'ambiente di sviluppo per il linguaggio Python. Primo programma: Editing, Running, Debugging.
- Costrutti del linguaggio Python
- Sintassi di base, Tipi di dato, Operatori predefiniti, Gestione dell’I/O.
- Numeri e funzioni matematiche.
- Controllo del flusso: costrutti di selezione ed iterativi.
- Funzioni.
- Strutture dati predefinite in Python
- Stringhe.
- Liste, Tuple, Dizionari.
- Argomenti avanzati
- Algoritmi notevoli: Ricerca, Ordinamento, Fusione. Cenni di complessità computazionale.
- Funzioni ricorsive.
- Moduli. Cenni alle librerie matematiche NumPy e SciPy ed alla libreria grafica PlotPy.
Testi di riferimento
1) A.Downey, Think Python, 2nd Ed., Grean Tea Press (disponibile online).
2) C.Horstmann - R.Necaise, Concetti di Informatica e fondamenti di Python, 2nd. Ed., Maggioli Editore.
3) M.Lutz, Learning Python, 4th Ed., O'Reilly (disponibile online).
4) D.Pine, Introduction to Python for Science and Engineering, SMTEBooks - CRC Press (disponibile online).
I singoli testi sopraindicati sono idonei al conseguimento degli obiettivi dell'apprendimento. Tuttavia si tenga presente che:
- il libro (2) è consigliato ai principianti in quanto introduttivo alla programmazione e con una grande quantità di esercizi presenti in esso;
- il libro (3) è di livello avanzato ed è consigliato a chi è già nota la programmazione.
Programmazione del corso
Argomenti | Riferimenti testi | |
---|---|---|
1 | Introduzione alla programmazione e codifica dell'informazione | 2 |
2 | Ambiente di sviluppo Python | 1..4 |
3 | Costrutti del linguaggio Python | 1..4 |
4 | Strutture dati predefinite in Python | 1..4 |
5 | Algoritmi notevoli (ricerca, ordinamento, fusione) | 2 |
6 | Ricorsione | 2 |
7 | Librerie NumPy, SciPy, PlotPy | 4 |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L’esame consiste nella verifica degli obiettivi preposti per il corso e cioè:
- la capacità di descrivere ed implementare semplici procedimenti algoritmici,
- la conoscenza dettagliata del linguaggio di programmazione Python,
- la capacità di applicare il paradigma imperativo allo sviluppo di software per il calcolo scientifico.
L'esame è composto da due prove indipendenti atte a verificare gli obiettivi dell'apprendimento e si intende superato quando tutte e due le prove saranno valutate sufficientemente:
(1) prova scritta (due esercizi di codifica, verifica gli obiettivi (a) e (b)),
(2) prova orale (discussione di un progetto software assegnato, verifica gli obiettivi (a), (b) e (c)).
La prova (1) consiste in un compito scritto assegnato in aula che consiste di due semplici esercizi di stesura di codice Python. Il tempo assegnato per tale prova è un'ora. La valutazione di tale prova V1 è espressa in trentesimi.
La prova (2) consiste in un colloquio orale durante il quale sarà discusso un progetto software presentato dal discente. Il progetto può essere svolto da un gruppo di studenti (da uno a tre) e deve essere concordato con largo anticipo con il docente. Al momento del colloquio il discente dovrà presentare il codice Python, il manuale utente e la documentazione progettuale. Nel caso di gruppi di studenti la valutazione deve avvenire contemporaneamente. La durata media del colloquio è mezz'ora. La valutazione V2 di tale prova è espressa in trentesimi.
La valutazione complessiva dell'esame è data dalla media di V1 e V2.
La prova (1) è da considerarsi propedeutica alla (2). Le varie prove possono essere superate in momenti differenti, pertanto ad ogni appello gli studenti potranno sostenere una o entrambe le prove. La sufficienza conseguita in una certa prova sarà considerata valida per tutto l’anno solare (fino a Dicembre successivo al corso di riferimento).
Per accedere alla prova (1) lo studente deve risultare prenotato nel portale studenti, la prova (2) non necessita di prenotazione.
Esempi di domande e/o esercizi frequenti
Alcune tipiche questioni per la prova scritta (1) sono le seguenti:
- Descrivere l'algoritmo InsertionSort.
- Eseguire una ricerca all'interno di una lista senza utilizzare funzioni predefinite.
- Implementare una matrice ed eseguire una certa operazione in una colonna di essa.
Alcune tipiche domande per la prova orale (2) sono le seguenti:
- Quali strutture dati sono state utilizzate nel progetto?
- Qual è l'algoritmo numerico più importante presente nel progetto?
- Qual è l'algoritmo computazionalmente meno efficiente presente nel progetto?