Didattica dell'informatica — Dario Malchiodi

Come introdurre la programmazione?

  • Scelta del linguaggio
  • Scelta dei problemi

Assunzione di base

Fare breccia negli studenti è difficile

Punti su cui ci focalizzeremo

  • scelta del linguaggio
  • scelta dei problemi

Scelta del linguaggio

Scelta del linugaggio

Nella fase iniziale di apprendimento di un linguaggio va ridotta al minimo la quantità di sintassi da introdurre.

  • Nonostante ciò... scaffolding: a seconda del linguaggio scelto vi sono più o meno costrutti sintattici che è impossibile eliminare, pena il non poter compilare e eseguire un programma.
  • Di conseguenza... leap of faith: non c'è altro modo di introdurre questi costrutti se non chiedendo di impararne a memoria la sintassi e rimandando più avanti nel corso una spiegazione della loro semantica.

Per esempio, in C



#include <stdio.h>

int main() {

    printf("Hello world!\n");

}
          

È necessario

  • includere una libreria (di sistema)
  • dichiarare il prototipo di una funzione
  • utilizzare il tipo int
  • inserire una coppia di parentesi che non contiene nulla
  • far digerire delle parentesi quadre e un punto e virgola
  • ma anche dei doppi apici e una sequenza di escape

Peggio ancora, in Java


class HelloWorld {

    public static void main(String args[]) {

        System.out.println("Hello world!");

    }

}
          

È necessario

  • definire una classe
  • dichiarare il prototipo di una funzione pubblica, statica e void
  • che ha come argomento un array di oggetti della classe String
  • che usa la classe System invocando il metodo di un suo campo statico

Non sarebbe meglio...

  • print 'Hello world'
  • e basta?

per esempio...

Python

  • Introdotto a partire dal 1991
  • Fortemente tipizzato, con type checking a run time
  • Compilato in bytecode ma eseguibile in modo interattivo tramite console
  • Ispirato al Monty Python's Flying Circus

Python

  • Si tratta di software floss, disponibile per i principali sistemi operativi (http://www.python.org)
  • Due versioni disponibili: 2.7.X e 3.8.X (meglio fare riferimento alla seconda)
  • Sono disponibili utility che automatizzano l'installazione di package che aggiungono funzionalità al linguaggio
  • Esistono front-end grafici (in particolar modo, jupyter)

Una nota sui sistemi operativi

L'uso di sistemi operativi che permettono all'utente di interagire in modo proficuo tramite un terminale è da preferirsi, in quanto permette allo studente

  • di avere più controllo sul file system e in ultima analisi su tutti i file che vengono prodotti nel processo di creazione–compilazione–esecuzione
  • di essere a conoscenza dell'effettivo output di editor, compilatori e altri strumenti
  • di rendersi conto di che cosa succede a un livello relativamente basso del sistema operativo

In particolare le distribuzioni Linux permettono di non gravare sul bilancio degli istituti e tra esse ve ne sono di specificamente pensate per non richiedere hardware altamente performante

Alcuni riferimenti bibliografici

Scelta dei problemi

Scelta dei problemi

Approccio tipico

Ti insegno a scrivere un programma che stampa i primi dieci valori della sequenza di Fibonacci


$ ./fibo
1 1 2 3 5 8 13 21 34 55
$
          

Che reazione ci possiamo aspettare?

  • A che cosa mi serve?
  • Non faccio prima a calcolare a mente e scrivere su carta?

Scelta dei problemi

  • Sottolineare che il valore cardine dell'approccio informatico è legato all'automatizzazione della soluzione dei problemi
  • Cercare ove possibile di far lavorare gli studenti in contesti pratici e alla loro portata, considerando problemi
    • dei quali è loro chiaro il valore della soluzione
    • che non sanno affrontare o automatizzare
    • che richiedono l'uso di un elaboratore per delle istanze del mondo reale

All'inizio...

...è difficile partire da problemi cool su grandi moli di dati.

Se questo non è possibile

Stringere un patto formativo con gli studenti

Per esempio: arriveremo a produrre una mappa di tweet geolocalizzati con un particolare hashtag