Come conseguenza della metodologia utilizzata, il materiale è abbastanza modulare, e consente di organizzare moduli didattici di vario impegno. Nel seguito sono riportati alcuni esempi:
Un modulo di 3 crediti didattici (contenuti: introduzione, elementi di base, stringhe, strutture di controllo, semplici tecniche algoritmiche, sintassi e semantica del C++)
Un modulo di 6 crediti didattici (contenuti: introduzione, elementi di base, stringhe, strutture di controllo, sottoprogrammi, cenni di programmazione modulare, tipi strutturati, sintassi e semantica del C++ e del FORTRAN)
Un modulo di 9 crediti didattici (contenuti: introduzione, elementi di base, stringhe, strutture di controllo, sottoprogrammi, programmazione modulare, tipi strutturati, strutture di dati, fondamenti di programmazione, tecniche di test e verifica, gestione della memoria, sintassi e semantica del C++, del FORTRAN e del C)
Il materiale è basato su una metodologia didattica da me sperimentata nel corso degli ultimi anni. La metodologia ha vari aspetti, che vengono descritti nel seguito:
come gran parte del materiale messo a disposizione su questo sito, anche questo materiale è basato sulla cosiddetta didattica a strati". Invece che organizzare le lezioni in modo lineare, trattando dall'inizio alla fine tutti gli aspetti di un certo argomento, gli argomenti vengono trattati a piu' livelli. (a) Per cominciare vengono presentati i "Concetti Fondamentali", ovvero tutto quello che (a mio giudizio) e' essenziale capire di un argomento; in questa prima parte, l'obiettivo fondamentale dovrebbe essere quello di mettere in grado lo studente di capire i concetti; (b) Poi, vengono presentati "Dettagli e Approfondimenti" sull'argomento, ovvero tutti quegli aspetti che (a mio giudizio) non sono centrali per la comprensione dell'argomento ma sono utili nell'utilizzo concreto della tecnologia; (c) Infine, in alcuni casi, vengono presentati i "Concetti Avanzati", ovvero tutti quegli aspetti di un argomento che tipicamente risultano di piu' difficile comprensione per gli studenti, e che puo' essere opportuno isolare per dedicargli lo spazio adeguato
inoltre, la presentazione degli argomenti è centrata sul codice: per ciascun argomento, vengono sviluppati degli esempi guida - via via più complessi e per quanto possibile corrispondenti a problemi concreti; si tratta difatto di mini-progetti che servono ad illustrare i concetti del corso con riferimento ad un contesto applicativo credibile, piuttosto che in astratto; la mia esperienza mi dice che questo approccio è particolarmente utile nei corsi di programmazione; normalmente, all'inizio di un argomento il codice dei progetti viene illustrato superficialmente, eseguendolo sulla macchina e mettendone in luce le caratteristiche salienti, senza però entrare nei dettagli; successivamente, nel corso delle lezioni vengono sviscerati i vari aspetti della sintassi, della semantica e del metodo utilizzato, fino a condurre gli studenti ad una comprensione completa degli esempi proposti
infine, il corso utilizza il paradigma della doppia tecnologia, per cui i concetti vengono illustrati non con riferimento ad un unico linguaggio di programmazione, ma a due - il frammento procedurale del C++ e il FORTRAN in questo caso. Dei due linguaggi uno viene adottato come linguaggio principale - il C++ - l'altro viene presentato per differenza. L'obiettivo è rendere maggiormente chiaro agli studenti che il corso non riguarda esclusivamente la sintassi e la semantica di uno specifico linguaggio, ma un complesso di concetti comuni a tutti i linguaggi della famiglia della programmazione procedurale.
Di conseguenza, la tipica impostazione di un argomento con il materiale in questione e' la seguente:
La prima lezione di ciascun argomento è una lezione di introduzione, in cui vengono illustrate le motivazioni alla base dello studio dell'argomento, e vengono introdotti gli esempi utilizzati come filo conduttore, mostrandone il funzionamento e discutendone le caratteristiche principali, senza scendere nei dettagli
seguono varie lezioni che affrontano i concetti fondamentali dell'argomento in questione, cercando di renderli chiari e per quanto possibile omettendo in questa sede dettagli inutili che possono ostacolare la comprensione degli aspetti davvero importanti
una lezione di conclusioni riassume una prima volta le nozioni presentate, ridiscutendo in dettaglio gli esempi proposti; questa lezione ha tra l'altro il compito di mettere in luce particolari tecniche algoritmiche utilizzate negli esempi, e di discutere gli stessi concetti precedentemente presentati con riferimento al linguaggio principale nel linguaggio secondario del corso
infine, tipicamente nel corso di una seconda iterazione sugli argomenti del corso, è possibile affrontare gli eventuali dettagli e approfondimenti, ovvero tutti quegli aspetti importanti ma non centrali per la comprensione dell'argomento, e gli eventuali concetti avanzati, chiarendo esplicitamente agli studenti che si tratta di aspetti relativamente piu' complessi dell'argomento trattato.
Esistono eccezioni a questa regola. Alcuni argomenti hanno uno svolgimento lineare tradizionale e vengono tipicamente presentati nel corso di un'unica lezione.
Vista la struttura, il materiale è particolarmente efficace se viene utilizzato in condizioni opportune; in particolare, si suppone: (a) che la lezione sia svolta mostrando il materiale didattico con l'ausilio di un videoproiettore; (b) che il docente alterni la discussione delle trasparenze alla discussione del codice mostrato direttamente attraverso lo schermo del calcolatore.
Nelle trasparenze sono contenuti frequenti richiami a file contenenti il codice sorgente degli esempi utilizzati (nella forma >> <nomefile> . I richiami segnalano che è il momento di sospendere la presentazione delle trasparenze e passare alla discussione del codice. Richiami del tipo >>> (scrittura del codice) suggeriscono viceversa di interrompere la lezione e procedere direttamente alla scrittura del codice per l'esempio.
Per una descrizione più dettagliata della didattica a strati è possibile consultare l'articolo: