CLASSE TERZA Ore 6(3)

OBIETTIVI
Impostare problemi, anche da un punto di vista non procedurale.
Risolvere problemi, indipendentemente da un linguaggio di programmazione.
Verificare la correttezza di una soluzione.
Leggere ed interpretare descrizioni sintattiche, in più notazioni.
Leggere ed interpretare programmi, in più linguaggi.
Applicare corretti stili di programmazione.
Usare il linguaggio di comando di un sistema operativo. con proprietà un linguaggio imperativo.
Usare almeno un linguaggio non-imperativo.
Documentare software, a livello elementare.
Analizzare criticamente le conoscenze pregresse di informatica.

CONTENUTI
L’Informatica come scienza e come tecnologia
Concetto e ruoli dell’informazione.
Origini matematiche e tecnologiche dell’informatica.
Ramificazioni principali dell’informatica.
Ambienti e figure professionali.
Previsioni tecnologiche e di mercato a breve e medio termine.

Elementi di sintassi dei linguaggi
Simbolo, alfabeto, stringa, linguaggio.
Definizioni intuitive di sintassi (in un linguaggio) e semantica (in un ambiente operativo).
Concetti di riconoscimento e di generazione di un linguaggio.
Grammatiche e loro rappresentazioni, con particolare attenzione a quelle libere dal contesto.

La produzione del software
Ciclo di vita del software.
Fattori di qualità del software.
Tecniche di testing.
Metodologie di sviluppo top-down e bottom-up.
Documentazione del software: tecniche elementari.

Problemi e programmi
Il mondo dei problemi: classificazioni e generalizzazioni.
Intersezioni con temi introduttivi di Intelligenza Artificiale (problemi di pianificazione,
spazi di ricerca, euristica,...).
Distinzione e ruolo dei linguaggi: naturali, di progetto, di programmazione.
Confronto fra programmazione procedurale e non-procedurale.
La ricorsione come schema concettuale.
Concetto di algoritmo come soluzione di un problema parametrico.
Dati, risultati; azioni, processi, stato di un processo; esecutori.
Traccia dell’esecuzione di un algoritmo.

Introduzione alla programmazione imperativa
Modello esecutivo: il modello classico di Von Neumann. Ruolo del Sistema Operativo. Variabili, espressioni, assegnazione, tipi elementari (intero, booleano, carattere, reale, stringa). Strutture di controllo e programmazione strutturata.
Sottoprogrammi:
- funzioni e procedure;
- tecniche di passaggio dei parametri, ambiente locale e non-locale (regole di visibilità);
- effetti collaterali.
Programmazione ricorsiva. Arrav e loro elaborazioni classiche (ricerca, ordinamento, fusione...).

Elementi di programmazione non-procedurale
Caratteristiche generali, origini e motivazioni.
Paradigma funzionale:
- caratteristiche e metodi di controllo;
- liste ed operazioni relative;
- rappresentazioni delle espressioni (prefissa, postfissa, prefissa a liste,...);
- traccia di programmi funzionali;
- applicazioni significative;
- relazioni con altri paradigmi.
Paradigma logico:
- elementi di logica del primo ordine;
- variabili, costanti e termini;
- le clausole di Horn;
- l’unificazione;
- interpretazione procedurale e dichiarativa;
- traccia di programmi logici;
- applicazioni significative;
- relazioni con altri paradigmi.

LABORATORIO
Uso e studio elementare del linguaggio di comando di un Sistema Operativo. Risoluzione di semplici problemi di natura numerica, simbolica e grafica con un linguag-gio imperativo strutturato.
Costruzione di semplici ambienti di interazione uomo-macchina.
Uso e studio di almeno un linguaggio non-procedurale applicato alla risoluzione di problemi di natura simbolica.

INDICAZIONI METODOLOGICHE
Compito principale del terzo anno è introdurre l’alunno alla programmazione ed ai concetti che ne stanno al “contorno”. In particolare l’esistenza di modi diversi di inten-dere la programmazione dovrebbe essere comunicata mediante lo studio di almeno due paradigmi di programmazione.
Uno è quello imperativo classico (il paradigma degli oggetti può essere accennato), af-frontato a livello più approfondito degli altri.
Il secondo dovrebbe essere di tipo non-procedurale, scelto tra quello funzionale e quello logico; sarebbe ideale affrontarli entrambi.
In un corso dall’impostazione più prudente lo studio dei paradigmi non-procedurali potrebbe anche limitarsi all’uso dei relativi ambienti di sviluppo per risolvere qualche problema esemplare, e quindi ad obiettivi di familiarizzazione operativa. Laddove invece la situazione didattica e logistica non sia troppo sfavorevole ci si attende che si imposti un corso decisamente innovativo nel quale i diversi paradigmi siano armoniosamente sviluppati dedicandovi risorse comparabili.
Le strategie che appaiono possibili sono:
1) imperativo -> [funzionale] -> logico;
2) funzionale -> imperativo -> [logico];
3) funzionale -> [logico] -> imperativo;
4) logico -> [funzionale] -> imperativo.

La prima è forse la più spontanea ma ha, rispetto alla seconda e alla terza, lo svantaggio di esporre gli alunni ad un confronto iniziale sulle loro conoscenze pregresse di program-mazione. La quarta strategia è interessante ma forse, per l’approccio troppo astratto, potrebbe emarginare severamente molti alunni della classe.
L’alunno dovrebbe rendersi conto, alla fine dell’anno, di quali siano pregi e difetti d:
ciascun paradigma: per favorire questo confronto si provi a risolvere uno stesso problema secondo paradigmi diversi.
Appaiono probabili molte interazioni con il corso di Matematica, specie se si affronta il paradigma logico, ed è quindi indispensabile qualche forma di coordinamento didattico. Il tema introduttivo “L’informatica come scienza e come tecnologia”, pur essendo collo-cato fra i contenuti del terzo anno, va inteso come tema di fondo che si presta ad essere sviluppato in ogni momento del triennio in cui se ne ravvisi l’opportunità. In particolare. conviene discutere di previsioni e di aspetti tecnologici solo al quinto anno. Questo tema (come altri) può essere validamente sostenuto con una “antologia di classici”, opportu-namente selezionati, in tutti i casi in cui si goda di un buon coordinamento con il corso di lingua Inglese.
Il tema “La produzione del software” è anch’esso di fondo, e viene articolato nei tre anni per livelli di approfondimento crescente. Si noti tuttavia che, per indurre le auspicate “corrette abitudini” fin dall’inizio e prima che se ne instaurino di scorrette, non sembra-no sufficienti né dichiarazioni di principio né attività formali ridotte entro il laboratorio di questo corso, ma appare indispensabile un sostegno logistico e di coordinamento didattico. almeno per quanto riguarda “Testing”, “Metodologie di sviluppo” e “Documentazione’. In particolare si auspica che in laboratorio gli alunni possano usare fin dal primo giorno semplici strumenti software che li aiutino a produrre i loro elaborati, (un Outliner per le ‘scalette’ dei lavori di Lettere, un Flowcharter per i diagrammi di transizione di Sistemi,...). e che l’opportunità di rispettare gli elementari standard formali e metodologici illustrati nel laboratorio di Informatica venga fatta propria e sostenuta dai docenti delle altre materie.
L’attività di laboratorio è prevalentemente costituita da progetti (piccoli, ma molto diver-sificati) con l’obiettivo di orientare gli alunni a scegliere il paradigma più adatto alla natura del problema.
Tra le applicazioni delle liste è opportuno annoverare l’uso di liste per rappresentare alberi, in modo da anticipare alcune tematiche della classe quarta.
Anche se il carico di lavoro può sembrare eccessivo per una terza classe, si tenga presente che si sta generalizzando l’introduzione di elementi di informatica nei nuovi programmi del biennio e che è possibile usare linguaggi che sostengono più di un paradigma, evi-tando la necessità di familiarizzare con più ambienti di sviluppo, ottenendo notevoli economie di tempo e di impegno cognitivo.