Documento di lavoro per il Consiglio dei Corsi di Studio in Informatica
13 aprile 2000
M. Bellia, G. Ferrari, G. Leoni, F. Luccio, D. Pedreschi, A. Starita, M. Vanneschi
La commissione syllabus, incaricata dal CCSI del 20.12.99 di elaborare una proposta di syllabus per la futura laurea triennale in Informatica, e dei relativi crediti formativi universitari, è pervenuta ad un primo stadio di tale elaborazione, che intende sottoporre al consiglio prima di procedere ulteriormente. I lavori della commissione, documentati nella pagina web della segreteria didattica, si sono basati in questa prima fase sull’input da parte delle aree di algoritmi, architetture/sistemi e linguaggi, sull’impostazione del documento di lavoro del 16.12.99, ed hanno tratto utili spunti e conferme dal recente documento draft “Computing Curricula 2001” del gruppo di lavoro congiunto ACM/IEEE.
Questo breve documento espone le raccomandazioni della commissione al consiglio.
1. Quale laurea per quale figura professionale
I lavori della commissione hanno confermato la bontà dell’approccio di fondo, di progettare una laurea triennale in Informatica, rivolta a formare una figura di tecnico informatico
· capace di progettare e sviluppare sistemi informatici per la soluzione di problemi,
· adeguata ai fabbisogni del mondo del lavoro,
· capace di adeguarsi al rapido evolvere della tecnologia informatica,
· capace di proseguire negli studi universitari di livello successivo al primo.
Tale figura, in considerazione della quantità di tempo della formazione di primo livello e degli obiettivi formativi ambiziosi, non potrà necessariamente presentare eccessive specializzazioni in particolari ambiti professionali o scientifici. Si ritiene altresì opportuno garantire un livello ragionevole di flessibilità per orientare, in una qualche misura, il curriculum verso determinate scelte professionali o di ulteriore specializzazione o studio. Si ritiene inoltre opportuno accreditare in toto i percorsi della laurea di primo livello ai fini del proseguimento verso il livello successivo. Infine, si ritiene che l’orientamento verso una sola laurea di primo livello in informatica non escluda l’attivazione di eventuali altre lauree di primo livello della stessa classe di Scienze e tecnologie informatiche, orientate a figure professionali di ponte fra l’informatica ed altri settori, quali l’economia o le scienze umane.
2. Syllabus accreditato per il core del curriculum
Il metodo di lavoro seguito è stato quello di definire in primo luogo il nucleo, o core, della laurea triennale, limitatamente alle attività formative caratterizzanti (tipologia (b) – informatica) e le attività formative affini o integrative (tipologia (c) – tutti i settori tranne informatica). In quest’ultimo caso la commissione ha ritenuto di limitare per il momento l’attenzione ai soli contenuti di matematica computazionale e ricerca operativa.
Il syllabus accreditato va inteso come un insieme di contenuti delle attività formative necessarie a formare le competenze e le conoscenze della figura professionale identificata, pesati con i crediti che ne misurano il carico di apprendimento. Pertanto, tale syllabus non va intepretato direttamente in termini di insegnamenti e relativi esami.
La tabella seguente riporta la proposta di syllabus del core per le attività di tipo (b). La commissione ha ritenuto di limitare a 76 il numero dei crediti del core per informatica, ovvero oltre la soglia minima di 50 prevista dal decreto di area, ma ben al di sotto della quota di 102 prevista nel documento di lavoro del 20.12.99.
I contenuti del syllabus sono strumentalmente raggruppati nelle categorie laboratorio, algoritmi, architetture/sistemi e programmazione/linguaggi, anche se la convergenza fra le diverse aree sui contenuti riportati è stata molto larga.
Tra parentesi è riportato il numero di crediti formativi universitari (CFU). La proposta di dettaglio del syllabus dei laboratori, che è in stato di maggiore avanzamento rispetto al resto grazie al lavoro di Corradini, Brogi, Danelutto, Ferrari e Grossi, è riportata nella sezione 5.
Laboratorio (totale CFU: 24)
Algoritmi (totale CFU: 8)
Architetture e sistemi (totale CFU: 20)
sistemi a livelli
principi di parallelismo e cooperazione (validi a tutti i livelli), prestazioni
processi, spazi di indirizzamento, primi elementi di nucleo minimo
processori, gerarchie di memorie, comunicazioni, dispositivi
strutturazione firmware e comunicazioni
architettura uniprocessor, gestione I/O
caching e pipelining
multiprocessor a memoria condivisa
strutturazione, nucleo, chiamate di sistema
gestione memoria e dispositivi
gestione file in ambiente centralizzato e distribuito
elementi di sistemi operativi distribuiti, client e/o server
supporti di trasmissione, protocolli di basso livello
protocolli TCP/IP e simili
supporti e servizi per applicazioni di rete
programmazione di applicazioni interoperanti
paradigmi per la programmazione remota
Programmazione e linguaggi (totale CFU: 24)
algoritmi e problem-solving
elementi di sintassi e semantica dei linguaggi di programmazione
costrutti di base di programmazione
strutture di dati e gestione della memoria
ricorsione e strategie di calcolo basate sulla ricorsione
elementi di traduzione e supporto dei linguaggi
tipi di dato astratto e tecniche di visibilità
programmazione object-oriented, event-driven e concorrente
analisi e specifica
progettazione e realizzazione
verifica e validazione
processi di supporto (versionamento, configurazione, misurazione)
sistemi per basi di dati
modello concettuale dei dati, modello relazionale dei dati
progettazione di basi di dati
linguaggi di interrogazione di basi dati
Tecniche di ragionamento e di rappresentazione della conoscenza
Metodi di ricerca e ottimizzazione
La tabella seguente riporta la proposta di syllabus del core per le attività di tipo (c), limitatamente ai contenuti di matematica computazionale e ricerca operativa.
rappresentazione dei numeri reali, analisi dell’errore, complessità numerica
metodi numerici per l’algebra lineare
metodi iterativi per equazioni e sistemi non lineari
approssimazione, interpolazione
strutture ed algoritmi di base per grafi e reti
algoritmi di programmazione matematica
ottimizzazione su reti di flusso
3. Oltre il core per le attività caratterizzanti (tipologia (b): informatica)
Per il completamento del core relativamente ai contenuti di informatica, la commissione suggerisce di integrare il ragionamento per contenuti con quello per insegnamenti, e trovare un bilanciamento fra:
1) la quota di crediti rimanenti destinata a contenuti di insegnamenti complementari/opzionali, e
2) la quota di crediti rimanenti destinata ad integrare i contenuti già presenti nel core per formare insegnamenti fondamentali.
Un corretto bilanciamento fra (1) e (2) consente infatti da un lato di garantire una certa flessibilità del curriculum, e dall’altro di non frammentare eccessivamente gli insegnamenti ed i relativi esami.
Una proposta in questa direzione prevede la seguente aggregazione dei contenuti del core in insegnamenti, con il relativo numero di crediti fra parentesi, e l’indicazione dell’incremento rispetto al core:
Laboratorio 1: Introduzione alla programmazione (4)
Laboratorio 2: Programmazione di strutture di dati (4)
Laboratorio 3: Programmazione concorrente (4)
Laboratorio 4: Programmazione di sistema (6)
Laboratorio 5: Programmazione di rete (6)
Algoritmi (9) (+1 rispetto al core)
Fondamenti di sistemi (6) (+2 rispetto al core)
Architettura degli elaboratori (8) (+3 rispetto al core)
Sistemi operativi (6) (+1 rispetto al core)
Reti di calcolatori + Programmazione di rete (6)
Fondamenti di programmazione (9) (+2 rispetto al core)
Metodologie di programmazione (6) (+1 rispetto al core)
Ingegneria del software (6)
Basi di dati (3 +3?)
Sistemi basati sulla conoscenza (3 +3?)
La commissione non ha raggiunto un opinione definita nei due ultimi casi. Pertanto:
Totale crediti del core: 76
Infine, si ritiene di proporre i seguenti:
Crediti per insegnamenti complementari/opzionali: 18 (pari a circa 3 unità didattiche convenzionali)
4. Quali requisiti per le attività di base (tipologia (a): matematica e fisica)
La commissione non ha ancora potuto completare una ricognizione completa dei requisiti verso la matematica (discreta e del continuo) posti dai contenuti di informatica del core. Tale ricognizione potrà essere definita appena consolidato il syllabus per informatica. La commissione ritiene comunque che nella definizione del syllabus e dei crediti per delle attività formative di base si dovrà attentamente distinguere fra i contenuti strettamente necessari a supportare le conoscenze e le competenze della figura professionale in uscita, e quei contenuti che vorranno essere inseriti nel curriculum a scopo di corredo scientifico/culturale.
5. Dettaglio del syllabus dei laboratori (a cura di A. Corradini, A. Brogi, M. Danelutto, G. Ferrari e R. Grossi)
5.1 Considerazioni generali
I corsi di laboratorio sono considerati, in questa proposta, come corsi
del tutto autonomi da altri corsi, quindi non solo con obiettivi e
contenuti definiti indipendentemente, come gia' ora avviene, ma anche
con una propria valutazione (non necessariamente in treentesimi).
Pertanto i laborotori forniscono contenuti,
anche propri, ma sempre fortemente collegati con i contenuti di altri corsi
svolti in parallelo.
L'organizzazione del laboratorio deve essere parte integrante del syllabus
dei laboratori. In particolare l'organizzazione dei laboratori iniziali
(gli attuali laboratorio I e II)dovrebbe ispirarsi alla sperimentazione portata avanti a partire dal
secondo semestre 98-99, e che continua quest'anno con il passaggio a Java.
Gli aspetti caratterizzanti di questa organizzazione comprendono
- esercitazioni individuali in aula su strumenti e tecniche introdotte,
-
valutazione
continua basata su interazioni durante le esercitazioni,
e sulla correzione del codice prodotto.
La rilevanza delle esercitazioni individuali e' massima per i primi due laboratori
(gli attuali Laboratorio I e II), quando molti studenti vengono avviati alla
programmazione, e decresce progressivamente nei laboratori seguenti.
Questo, comunque, verrebbe compensato con il progetto finale.
2. Syllabus Laboratori
Laboratorio I: Introduzione alla programmazione (4 Crediti)
Obiettivi:
- Familiarizzazione con un ambiente di programmazione
- Progetto, codifica, compilazione ed esecuzione di programmi
elementari
Contenuti:
Strumenti: Linguaggio di programmazione, ambiente di sviluppo,
debugger [Java, JDK, Emacs JDE]
Tecniche: Iterazione, Ricorsione, Definizione di classi e tipi di dato,
Creazione e manipolazione di oggetti, Polimorfismo.
Organizzazione:
- esercitazioni individuali in aula su strumenti e tecniche introdotte.
-
valutazione
continua basata su interazioni durante le esercitazioni
e sulla correzione del codice prodotto.
Laboratorio II: programmazione di strutture dati (4 Crediti)
Obiettivi: Progetto, codifica, compilazione ed esecuzione di programmi
che realizzano semplici algoritmi su strutture dati dinamiche .
Contenuti
Strumenti: Linguaggio di programmazione, ambiente di sviluppo,
debugger [Java, JDK, Emacs JDE, Java Collections API]
Tecniche: Ereditarieta', Ricorsione, Gestione eccezioni,
Polimorfismo con ereditarieta'.
Organizzazione:
- esercitazioni individuali in aula su strumenti e tecniche introdotte.
- valutazione continua basata su interazioni durante le esercitazioni e sulla correzione del codice prodotto.
Laboratorio III: Programmazione Concorrente (4 Crediti)
Obiettivi: Sviluppare le competenze per il progetto e lo sviluppo di
sistemi multithread e sistemi a processi che operano su risorse condivise.
Contenuti
Strumenti: Linguaggio di programmazione, ambiente di sviluppo,
debugger [Java, Emacs, JDE, Java Threads, Java API per primitive
scambio messaggi]
Tecniche: Sincronizzazione su risorse condivise (metodi synchronized),
scambio di messaggi tramite librerie per la comunicazione di processi.
Organizzazione:
- esercitazioni individuali in aula su strumenti e tecniche introdotte.
- progetto finale.
Laboratorio IV: Programmazione di Sistema (6 Crediti)
Obiettivi: Sviluppare le compentenze necessarie per
la progettazione e la realizzazione di applicazioni in cui
diversi servizi (moduli software o risorse fisiche) sono coordinati
ed integrati assieme.
Contenuti
Strumenti: Programmazione in C con chiamate alle utilities di sistema operativo
Tecniche:
Programmazione con chiamate di sistema (fork, exec, wait, pipe, segnali).
Organizzazione:
- esercitazioni individuali in aula su strumenti e tecniche introdotte.
progetto finale .
Laboratorio 5: Programmazione di Rete (6 Crediti)
Obiettivi:
Sviluppare le competenze necessarie per la progettazione di
applicazioni di rete.
Contenuti
Utilizzo di protocolli di rete nello sviluppo di applicazioni,
programmazione con sockets e con oggetti remoti.
Tecniche:
Socket e comunicazioni in ambiente TCP/IP
Servizi di rete e applicazioni di rete (Kerberos,Dns,Smtp,Pop,Cgi,File
server, LDAP, NIS), sistemi client-server con Java RMI o Corba
Organizzazione:
- esercitazioni individuali in aula su strumenti e tecniche introdotte.
- progetto finale
5.3 Considerazioni
Il sistema dei crediti
Riteniamo che non sia applicabile ai corsi di laboratorio l'equazione
1 credito = 27 h
[4 h di lezione + 3 h di esercitazione + 20 h di studio individuale]
utilizzata per gli altri corsi, poiche' la quasi totalita'
dell'attivita' di laboratorio avviene in aula. Questa considerazione ci ha portato
a definire una diversa misura dei crediti associati ai laboratori.
Programmazione in C
Si ritiene fondamentale che a un qualche livello nei laboratori si presenti il
C, di fatto il linguaggio maggiormente usato per la programmazione di sistema e/o
di sistemi operativi.