Documento di lavoro per il Consiglio dei Corsi di Studio in Informatica

13 aprile 2000

 

Commissione Syllabus

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)

  1. Introduzione alla programmazione             (4)
  2. Programmazione di strutture di dati             (4)
  3. Programmazione concorrente                 (4)
  4. Programmazione di sistema                         (6)
  5. Programmazione di rete                 (6)

 

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

­        Incremento proposto rispetto al core: min 10 – max 16

 

Infine, si ritiene di proporre i seguenti:

 

­        Crediti per insegnamenti complementari/opzionali: 18 (pari a circa 3 unità didattiche convenzionali)

 

­        Totale crediti tipologia (b) - informatica: min 104 – max 110

 

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.