← Torna al Blog

Come migliorare
la didattica dell'Informatica

Dopo mesi di lavoro, ritorno a scrivere.

Ritorno partendo dalla domanda che mi ero posto all'inizio del precedente blog post:

Perché, nel 2025, non siamo ancora in grado di garantire un accesso libero e scalabile alle informazioni di base della materia informatica?

Le ragioni sono tante, dietro a questo Perché, e non mi sento di essere particolarmente illuminato o saggio da poterle catturare tutte quante. Mi sento però una persona che vuole portare un cambiamento significativo al modo in cui insegniamo l'informatica. Raggiungere questo obiettivo è per me una vera e propria ragion d'essere, che mi ha permesso in questi anni, e specialmente in quesi mesi, di lavorare tanto tempo, cercando di catturare qualcosa. Qualcosa di diverso. Qualcosa di più indipendente.

Perché si, è proprio nell'indipendenza dell'individuo che questo progetto ha senso di esistere. Cosa rende diverso questo progetto da tanti altri progetti di formazione? È che molti contesti di insegnamento perdono il loro significato nel momento in cui le metriche diventano più importante della comprensione. Nella estrema burocratizzazione delle logiche interne. Nel potere, senza precedenti, che un insegnante ha nei confronti degli studenti. Questo progetto nasce da una forte indipendenza mentale che ho sviluppato nel corso degli anni per un interessante insieme di vicissitudini e vuole incentivare lo sviluppo di una simile indipendenza in chi ascolta, osserva e legge gli artefatti del mio lavoro.

Perché voglio più indipendenza? Questo è un tema di discussione profondo ed importante da portare avanti, ma preferisco farlo in futuro. L'obiettivo di questo blog post è descrivere, tecnicamente parlando, come voglio implementare il mio progetto. Ho già descritto il mio desiderio. È bene dunque descrivere come intendo onorarlo.

E quindi, come si migliora la didattica dell'Informatica?

Il mio tentativo riesce ad essere al tempo stesso banale ma anche importante e significativo, quindi non banale. È forse questo un paradosso? No, non lo è. La vita è piena di queste apparenti contraddizioni, la cui radice è, probabilmente, la nostra incapacità di valutare cosa sia effettivamente banale. Perché è banale parlare, anche della cosa più difficile. Ma è non banale fare, anche la cosa più facile.

La Piattaforma

È banale perché si tratta di utilizzare una piattaforma online, on-demand, a cui è possibile accedere quando si vuole, 24/7, da qualsiasi posto, a prescindere da tutta una serie di caratteristiche culturali e fisiche quali età, sesso biologico, religione, e via dicendo. È un ritorno alla rete per ciò che è stata fatta: condividere informazioni. Da questo punto di vista, nulla di nuovo, tecnicamente parlando.

Eppure avere un posto del genere non è poi così banale. Perché? Perché attualmente un posto del genere non esiste in Italia. Io, almeno, non lo conosco. Voi? Esistono pure delle università online, sì, esistono delle università che caricano le loro lezioni in servizi online, sì, ma non esiste un luogo che tratta il contenuto informatico nel modo in cui lo voglio trattare io. Ci metto molto della mia personalità in questo, è vero. Potrebbe non piacere a tutti, ma è un punto importante da menzionare. Ho un forte bisogno di esprimere determinate idee in determinati modi, i modi che penso siano i più utili. I modi che effettivamente riescono a far visualizzare e comprendere i concetti. La mia è una spinta che nasce da dentro, da luoghi a cui neanche io ho accesso diretto. Un qualcosa di molto potente da avere, da insegnante.

Non esiste un posto che è solamente concentrato sul materiale, sulla conoscenza e che fa della qualità il proprio punto di forza. Non ci sono certificazioni. Non ci sono formalità. Solo conoscenza e voglia di condividere. Un luogo che permetta di tramandare quelle conoscenze informatiche fondamentali che sono sempre di più messe in pericolo da un mondo che sta decidendo che l'unica cosa che conta è la velocità di produzione. La comprensione? non è poi così importante. La qualità? Non serve, finché si continua a vendere. Io dico invece: la comprensione non è solo importante, la comprensione è tutto, e il mio progetto vuole spingersi proprio nella direzione della comprensione profonda.

Tecnicamente parlando, piuttosto che implementarmi una piattaforma da zero, ho deciso di iniziare questo progetto con una piattaforma open-source già implementata. La piattaforma si chiama Open-Edx, ed è stata sviluppata da una collaborazione tra Harvard e l'MIT proprio per supportare l'apprendimento online strutturato e scalabile.

https://openedx.org/

In questi mesi, dalla scrittura del primo blog post, ho effettuato un deployment della piattaforma, che attualmente è disponibile su https://learn.esadecimale.it

Il mio deployment

Un problema che ho riscontrato è sicuramente la complessità della piattaforma. Offre tante possibilità diverse, e questo porta con se una certa complessità tecnologica. Tecnicamente parlando abbiamo 12 docker container diversi. Alcuni sono utilizzati per l'aspetto dei dati, altri per le applicazioni web con cui interagisce l'utente e l'insegnante. La piattaforma poi ha avuto varie evoluzioni nel tempo, quindi si porta con se un certo debito tecnico, ad esempio nella gestione del frontend. Detto questo, penso sia stata comunque una buona scelta, e più imparo ad utilizzarla più sono in grado di customizzarla per offrire l'esperienza di qualità che sto cercando.

In futurò sarà mio interesse parlare pubblicamente delle sfide che ho avuto nella configurazione della piattaforma e di come si comporta quando viene utilizzata dagli studenti. Prima di fare questo però voglio acquisire ancora ulteriori esperienze e soprattutto voglio vedere come si comporta in un ambiente di production.

Per quanto riguarda l'accesso, la piattaforma può essere utilizzata effettuando una iscrizione mensile o annuale. L'iscrizione mensile ha un costo di 9.99 EUR, mentre quella annuale di 99.99 EUR. Per le prime 100 persone che supporteranno il progetto e la mia visione c'é uno sconto lifetime a 4.99 EUR mensile o 49.99 EUR annuale. Per implementare la gestione dei pagamenti ho utilizzato il gateway di pagamento Stripe e ho scritto uno script in Clojure, una delle più moderne implementazioni di Lisp, per gestire l'integrazione con le API di Stripe. È stato molto interessante da implementare, ed in futuro voglio descrivere cosa ho imparato nel processo. Anche qui però preferisco aspettare un po' per acquisire ancora più esperienza sul campo. Prima di insegnare bisogna sporcarsi le mani.

(defn stripe-create-checkout-session [request]
  "Creates a Stripe checkout page and redirects the user to it.
   ...
  "

  (let [raw-query-string (:query-string request)
        params-map (codec/form-decode raw-query-string)
        keyword-params (keywordize-keys params-map)
        success-url "https://learn.esadecimale.it/login?next=%2Fcourses"
        cancel-url "https://esadecimale.it"
        ]
  ;; ...

A questo punto qualcuno penserà sicuramente: ma come, se vuoi cambiare la didattica dell'informatica, perché per accedere al contenuto devi pagare? La tua piattaforma è un'altra scusa per fare business!

La mia risposta a queste osservazioni è semplice: mi serve tempo e fatica per creare il materiale didattico che voglio creare. La mia forte indipendenza, che per me è un grande valore, porta con se, ovviamente, dei limiti e dei vincoli: non sono economicamente supportato da nessuno. Non ho grandi investitori alle spalle. Non ho un cuscinetto di supporto economico che mi permette di lavorare anni senza guadagnare. Guadagno solamente lavorando e con il valore che genero da lavoratore indipendente. Devo quindi catturare parte del valore generato, altrimenti il mio progetto non è sostenibile ed è destinato a scomparire. E credo ci sia anche del valore nel creare il proprio di valore, senza far affidamento a investitori già esistenti, che potrebbero manomettere il significato del progetto per portarlo in direzioni sbagliate. In generale, non credo nell'idea del sacrificarsi per il "bene comune". Credo che il bene comune sia un qualcosa che possiamo, e dobbiamo, raggiungere e costruire assieme, senza sacrifici da parte di nessun individuo. È giusto creare valore, ed è giusto catturare una piccola parte del valore creato, in modo da poterlo fare in modo sostenibile nel tempo.

Tolgo l'occasione per dire un'altra cosa: se ho delle critiche nei confronti delle università non è nel fatto che devono essere economicamente sostenibili. Strutturarsi e diventare in parte un business è sempre e comunque necessario per questioni di sostenibilità. Anche fare un profitto non è sbagliato, anzi, potenzialmente è una cosa molto positiva, in quanto permette di reinvestire nell'attività in questione. Credo ci siano molte correlazioni tra questo aspetto della cultura Italiana ed il fatto che gli stipendi in Italia non crescono da anni. La mia critica è specifica: quando la necessità di far continuare il business diventa talmente eccessiva e aggressiva che oltrepassa un confine (molto difficile da definire in modo oggettivo) e va a peggiorare e di molto la qualità della didattica. La mia critica è che la forte natura politica dei ruoli di potere nelle università portano queste ultime a fare scelte non basate sulla qualità dei ruoli e delle figure, ma su altro. Su cose che compromettono la qualità dell'insegnamento.

È dunque tempo di parlare di contenuto.

Il Contenuto

La piattaforma parte con quattro corsi, due dei quali sono finiti, e due dei quali devono essere terminati. I corsi sono i seguenti:

  • Introduzione al Pensiero Computazionale
  • Introduzione Pratica al Self-Hosting (da finire)
  • Introduzione Pratica alla Sicurezza Informatica
  • Sviluppo Kernel per RISC-V in C (da finire)

Ogni corso è principalmente composto di video. Ogni video ha un contenuto testuale, in forma di file di testo o di slide. Sto anche iniziando ad integrare degli esercizi interattivi, ed in futuro voglio sviluppare dei progetti utili da accompagnare al corso. Per questi progetti non fornirò una soluzione al problema, ma sarà compito degli studenti sviluppare il progetto. Perché per quanto le video lezioni sono utili, il vero apprendimento avviene quando ci troviamo di fronte ad un problema nuovo e dobbiamo utilizzare i concetti imparati per affrontare quel problema. È nella lenta ma continua applicazione che impariamo.

Per quanto riguarda lo sviluppo di materiale non mi voglio vincolare in modo troppo strutturato. Questo significa che col passare dei giorni, delle settimane, dei mesi e degli anni continuerò a caricare materiale su materiale su materiale. L'obiettivo è coprire un corso di triennale di informatica per poi andare oltre. Ho in mente ad esempio i seguenti corsi, ma questi rappresentano solo una piccola parte di ciò che voglio insegnare:

  • Sviluppo emulatore CHIP-8 in C
  • Programmare in C
  • Programmare in Python
  • Programmare in LISP
  • Programmare Applicazioni Web
  • Active Directory Enumeration & Exploitation
  • Secure Code Review
  • Programmazione Videogiochi in C con Raylib
  • La matematica necessaria per l'Informatica

Per ciascun corso andrò a prepare slide, codice, video, esercizi e progetti. È proprio nel contenuto che mi voglio caratterizzare il più possibile.

Introduzione al Pensiero Computazionale

Voglio mostrare la bellezza dell'informatica, e voglio far capire che moltissime cose sono raggiungibili da tante persone, non bisogna avere doti naturali particolari. Bisogna "solo" essere curiosi e avere il coraggio di aprirsi al mondo delle idee e delle tecniche. L'obiettivo è dare gli strumenti per riuscire a vedere l'essenza dell'informatica in modo poi da procedere per conto proprio, imparando qualsiasi cosa si vuole imparare.

Comunicare le idee informatiche utilizzando esempi del mondo

Piani per il Futuro

Il lancio della piattaforma è un grande passo avanti per l'indipendenza e la sostenibilità del progetto Esadecimale. Sono nato su YouTube, e continuerò ad esistere su YouTube, ma era tempo di crearsi un proprio spazio nel web con una propria identità. E sono molto soddisfatto del risultato. Ma questo è solo un inizio. Per il futuro mi pongo tre grandi obiettivi, tutti di uguale importanza.

Il primo obiettivo ha a che fare con il contenuto didattico. La piattaforma infatti ha senso solo se il contenuto è di alta qualità. Solo se il contenuto permette di comunicare in modo utile le idee che voglio comunicare. Un grande obiettivo per il futuro quindi è la continua creazione di contenuto di alta qualità. Tanto tempo e tante fatiche saranno investite per questo obiettivo. Le mie corde vocali mi dovranno perdonare, perché le dovrò utilizzare ancora un bel po.

Il secondo obiettivo ha a che fare con l'aspetto di esercizi e progetti. In parte è legato al primo, ma in parte differisce dal primo in tutte quelle situazioni in cui, al fine di supportare gli studenti, dovrò sviluppare delle piccole estensioni alla piattaforma principale per poter offrire esercizi e progetti interessanti. Per tutti coloro interessati ad imparare la sicurezza informatica infatti sarà necessario creare e offrire laboratori custom, anche questi accessibili 24/7 esattamente come il contenuto. Mettere in sicurezza una infrastruttura del genere richiederà del tempo ma è uno step importante nell'evoluzione del progetto.

Il terzo obiettivo ha a che fare con l'aspetto di community. Voglio creare dei luoghi di scambio all'interno del progetto. Luoghi che non utilizzano piattaforme Social centralizzate come YouTube, Instagram, TikTok, X, Discord e via dicendo. Voglio creare dei luoghi di scambio utilizzando tecnologia open-source per incentivare e condividere la conoscenza informatica in modo indipendente. Questo terzo obiettivo è forse quello più difficile, perché lo sappiamo tutti che gli esseri umani sono esseri complessi. Queste tematiche saranno approfondite in futuro.

In Conclusione

Questo è quanto. Il piano è facile. L'esecuzione non è per niente facile. L'obiettivo finale? Essere una piccola ma significativa forza culturale che spinge verso la direzione della comprensione. Non possiamo più limitarci ad essere utilizzatori della tecnologia. Abbiamo bisogno di comprendere la tecnologia, perché è nell'ignoranza che gli esseri umani perdono la loro indipendenza ed il loro potere.

La mia paura non è un futuro controllato da macchine. La mia paura è un futuro controllato dai pochi che controllano le macchine. E credo che la strada che porta ad altro deve necessariamente andare nella direzione della comprensione.

Muad'Dib ha imparato rapidamente perché il suo primo addestramento era su come imparare. E la prima lezione di tutte era la fiducia di base che poteva imparare. È scioccante scoprire quante persone non credono di poter imparare, e quante altre credono che imparare sia difficile.

Dune (1965), Frank Herbert.