Una delle tante attività che avrei voluto svolgere è quella di docente, funzione che ho svolto più volte da ufficiale (oltre che da giovane studente delle superiori per aiutare amici anche di altre tipologie di scuole), ma è sempre stato un incarico secondario rispetto ai miei “titoli principali”. Del resto, quella di insegnante, quando fatta bene, oltre ad essere una professione “di pubblica utilità” nel formare i futuri cittadini e professionisti (sempre che non si vada lì parcheggiati solo per obbligo), è un po’ una missione, soprattutto in nazioni come l’Italia, dove la figura del “prof” è spesso denigrata ed irrisa al contempo da studenti e genitori – qui si intende studenti non tanto come participio presente indicante colui/colei che studia, quanto nell’accezione di “chi va a scuola”, a prescindere se poi effettivamente con l’intento di imparare ed esprimere qualcosa. E, senza falsa retorica, resa poco appetibile per questioni anche econmiche e di (non-)carriera, ne ho parlato nel mio articolo precedente.
Quella che segue, continuando quanto iniziato a più alto livello nell’articolo precedente Articolazioni… mobili? Veloce analisi di una scuola superiore italiana, è l’occasione per vedere il programma di una materia di insegnamento del triennio di specializzazione della mia categoria preferita di scuola superiore, un istituto tecnico (anche in questo caso, ne ho parlato nell’articolo precedente di questo blog).
Prima di iniziare, approfitto per ricordare che occorre stare attenti ai due estremi che ho spesso osservato lavorando per tanti anni in posti dove la media di permanenza era di tre anni, ma a volte addirittura di un solo anno, proprio “by design”, con relativi pro e contro.
Quello che ho osservato è che molti “nuovi arrivati” sentono l’urgenza di cambiare qualcosa, sia perché si credono stoca**o (come se tutti i predecessori fossero meno capaci), sia perché ritengono che alcune direttive siano invecchiate male rispetto al contesto esterno (anche se è più raro di quanto si possa immaginare), sia perché il bias di (sovra)intervento è spinto dal fatto che i superiori solitamente premiano cambiamenti anche nei casi in cui magari sarebbe stato molto meglio continuare sulla stessa linea tracciata da chi c’era prima, magari solo con dei piccoli aggiustamenti, senza stravolgere nulla. Ho addirittura subìto dei casi in cui superiori insistevano nel voler cambiare procedure senza neppure aver capito o anche solo osservato le procedure correnti.
C’è poi il caso opposto, di chi lascia tutto com’è, sia per fiducia negli altri (o sfiducia in se stessi, a ragione o meno), sia per pigrizia, sia per il bias dello status quo per cui meglio non toccare ciò che, bene o male, ha funzionato. E tutte le sfumature comprese tra questi due estremi.
Si può chiedere consiglio ai nostri predecessori, appunto, ma anche ad altri colleghi in situazioni analoghe, ma ora (da decenni) anche la potenza dell’Internet, in cui trovare esperti e, quando possibile, interagire con loro nel chiedere pareri.
Sistemi
Reputo fondamentale questa materia, che, anche tralasciando le comunque utili applicazioni pratiche, ha contribuito alla forma mentis e al modus operandi che porto ancora dopo tanti anni, campando di rendita. Che sia durante l’acquisizione di nuova conoscenza o durante lo sviluppo e applicazione, l’aver costruito un “core” importante e una visione d’insieme (“di sistema”, appunto) è un vantaggio competitivo enorme e, anche vedendolo da un punto di vista “stand alone”, una grandissima soddisfazione nell’esplorare e capire la realtà, non solo di sistemi tecnici. Tanto per fare un esempio, Kurt Lewin, il famoso psicologo della gestalt, aveva abbozzato un’idea di sistema nell’interazione tra essere umano e ambiente nella sua Field theory, che è poi ripresa da tanti altri, come si può vedere anche nel corso “Child Development” di cui ho parlato qui, ma di esempi di applicazione dei concetti di sistemi in ambito non informatico potrei davvero farne migliaia.
Ciascuno dei tre anni è suddiviso in macroargomenti, ricordando che la materia è incredibilmente vasta: per ogni singolo argomento trattato in qualche ora di lezione, esistono spesso interi corsi universitari, arrivando poi all’approfondimento e all’applicazione di singoli dettagli che possono occupare interi gruppi di ricercatori e sviluppatori, in ambito accademico o nell’industria privata.
Terzo anno
La parte introduttiva è fortunatamente la stessa da decenni, mi consola vedere che almeno i fondamentali restano stabili, senza farsi tentare dalle mode del momento. La parte di definizione e presentazione di sistemi, modelli e automi è fondamentale in qualunque ambito tecnico, ma soprattutto (non me ne vogliano gli pseudo-filosofi del classico) aiuta a interpretare la realtà molto meglio di quanto possano fare tante chiacchiere da umanisti. Consiglio, a tal riguardo, la lettura dei miei tre articoli in cui riassumo ed estendo il contenuto dei tre bellissimi libri sui modelli mentali (1, 2 e 3). Sarebbe importante almeno accennare, quando si studiano i sistemi, che nel mondo reale esistono poi ovviamente anche sistemi non lineari, tempo varianti e così via, che spesso sono ingranaggi di sistema più complesso – che sia un ICS/SCADA o una rete neurale (idee sparse di esempi che mi vengono in questo momento: Reinforcement learning, Funzione di attivazione, ma anche l’Adversarial ML che concettualmente può ricordare un sistema a retroazione). Magari accennare a tal proposito, anche solo un’oretta, all’intelligenza artificiale, ai vari layer che la compongono (es.: nel deep learning).
La seconda parte riguarda l’architettura dei sistemi di elaborazione, altro grande pezzo fondamentale che, una volta appreso correttamente, permette non solo di capire il funzionamento di un calcolatore, ma persino di estendere come similitudine il modello ad altri settori (classico l’esempio quello di spiegare il funzionamento della memoria umana facendo un parallelo con cache, RAM, HD e così via). Qui ovviamente c’è un mondo, per ogni singolo componente si potrebbe finire in rabbithole che non basterebbe una vita intera per essere esplorato, non è assolutamente un’esagerazione.
La terza parte è forse la più difficile, ma al contempo – se studiata e approfondita – una che dà tanta soddisfazione: a livello teorico, il processore 8086 e lo stack; a livello pratico: l’assembly. Qui mi preme ricordare che “il padre del microprocessore” è il fisico italiano Federico Faggin (noto per essere la mente dietro Zilog Z80, Intel 4004, Intel 8008, Intel 8080, oltre che per i suoi contributi al touchscreen ed altro).
Esistono anche animazioni e divulgazioni anche su Youtube (ad esempio, sulla CPU – nello stesso spettacolare canale esistono anche video su come funziona il rendering nell’animazione 3D, un capolavoro per addetti e profani).
Anche nel caso in cui si utilizzi un diverso tipo di microprocessore, i concetti alla base restano gli stessi, anche perché eventuali funzioni avanzate che possono variare tra un processore e l’altro (mi vengono in mente operazioni di calcolo parallelo introdotte con i Pentium MMX nell’ormai lontano 1997) vanno ben oltre lo studio standard, oltre al fatto che generalmente possono essere scomposte in operazioni elementari, allo stesso modo in cui una moltiplicazione può ad esempio essere scomposta in un ciclo di addizioni (la moltiplicazione AxB si può eseguire impostando un contatore al valore B ed eseguendo su un registro la somma del valore A per ogni ciclo). Del resto, imparando le funzioni elementari, è interessante vedere quali “trucchi” e “stratagemmi” si possono utilizzare per risolvere problemi complessi, sfruttando shift-registers, complementi bit a bit e così via – il mondo dello sviluppo dei videogiochi è pieno di affascinanti aneddoti in tal senso, ad esempio: questo escamotage per eseguire velocemente un calcolo complesso, ma anche questi esempi per la rappresentazione 3D; l’informatica è una miniera di meraviglie, di come l’ingegno umano riesca a risolvere problemi di diversa natura. Ancora una volta, un perito tecnico, così come un ingegnere, non è quella figura semianalfabeta che molti umanisti invidiosi e ignoranti (nel senso stretto di ignoranti in materia) dipingono: al contrario, c’è tanto spazio per la creatività nella risoluzioni di problemi piccoli e grandi, a volte anche “out of the box” (quello che alcuni chiamano “lateral thinking“); dove molti vedono limitazioni e crisi, altri vedono soluzioni e opportunità.
L’assembly in particolare non ha un mero fine didattico, ma è utilissimo in tanti casi, anche quando non è menzionato esplicitamente: non solo in fasi avanzate di debugging a basso livello, ma anche perché, come scherzavo tempo fa con alcuni colleghi, saper leggere assembly significa vedere ogni software come potenzialmente open source.
Ciò che aggiungerei, quindi, è almeno un accenno di come un programma scritto a più alto livello (es.: in C, compilato in modo base) possa poi essere visto in assembly. E, per i più appassionati, lasciare un accenno di come l’assembly permetta di capire come eventualmente “exploitare” una vulnerabilità come il buffer overflow (spoiler: guardando il registro EIP).
Nel laboratorio, leggo esercitazioni sul prompt dei comandi di Windows. Come base minima ci sta, ma direi di aggiungere un po’ di Powershell e bash Linux, comandi su interfacce di sistemi embedded e così via.
Quarto anno
L’intero programma verte su un altro aspetto fondamentale dell’informatica: le reti di comunicazione. In un’epoca in cui tutti utilizzano Internet e nessuno sa cosa ci sia nella “nuvola” (il simbolo utilizzato nella topologia per indicare appunto Internet in una schema di rete) è indispensabile che alcuni “saggi” (come descritto nella trilogia della fondazione di Isaac Asimov) abbiano cognizione di come funzionino le cose e di come si possano manipolare. Esistono persino persone (e non poche) che pensano che social network come Facebook non usino Internet, perché identificano “Internet” con l’icona dell’app del browser, non avendo una minima idea di cosa accada quando si pigia un tasto o quando si scambiano messaggi. E anche la connessione WiFi resta per molti qualcosa di esoterico, di energia mistica. Chiaro che l’astrazione porti ad una “trasparenza” dei livelli sottostanti, ma siamo andati forse troppo oltre, rispetto ai tempi in cui si aveva almeno vaga contezza teorica della comunicazione tra il telefono (a filo) di casa propria e quello del chiamato.
La prima parte del programma di reti parte da definizioni e topologie di rete, per poi passare all’arcinota pila ISO-OSI a 7 livelli (da comparare col modello più flessibile/snello TCP-IP) e ai protocolli utilizzati nei diversi livelli. Qui eviterei di andare troppo in dettaglio su ogni possibile campo nella specifica dei pacchetti IP, ad esempio, ma assicurarmi che gli studenti capiscano le basi. Nel mondo reale, può capitare di dimenticarsi il significato di un flag specifico, non è un dramma, ma l’importante è avere una visione d’insieme e sapere in quale contesto ci si sta muovendo.
Bene la parte di reti Ethernet, sottoreti (“classiche” e CIDR), router e routing, mi auguro si parli anche di IPv6. Volendo ci sarebbe anche la parte specifica mobile, ma potrebbe richiedere troppo tempo.
Sulla parte di progetto di un sistema di reti, totalmente d’accordo, dalla ricerca su Internet per la parte di architettura e componenti in base alle specifiche fino all’implementazione pratica. Sarebbe interessante anche prevedere dei moduli opzionali per studenti particolarmente volenterosi, andando ad accennare reti mesh, satellitari, dispositivi IoT e così via (casi reali come il monitoraggio di mucche al pascolo libero con protocollo LoRa).
Qui ci aggiungerei anche una panoramica dei più comuni tipi di attacco (es.: tipi di possibili DDoS, ma anche di esfiltrazione) e possibili contromisure/mitigazioni.
Ci aggiungerei inoltre la parte in laboratorio con Wireshark, sia live collegato all’interfaccia di rete, sia in una veloce analisi di un piccolo PCAP.
Come anche mostrare brevemente applicativi nativi (es.: netstat -pano) o sysinterals (ed equivalenti per Linux) per verificare socket.
E magari far vedere anche giusto per conoscenza che esistono poi i vari Cisco OS ed altri sistemi operativi per apparati di rete.
Quinto anno
Si inizia col livello applicazioni. Per l’HTTP(s) ci sarebbe tantissimo da dire, ottima la parte pratica di configurazione di un web server (almeno si va un po’ più a fondo rispetto ad installare un CMS senza capire cosa ci sia sotto). Qui sarebbe anche utile vedere la parte “verbosa” (usata per debugging) presente nei browser, magari mostrare anche cURL (browser da riga di comando). Anche qui, raccomanderei fortemente di accennare alle più comuni vulnerabilità web (si può partire vedendo la top10 OWASP, per esempio), magari facendo proprio mettere mano agli studenti in ambiente controllato (laboratorio), del resto esistono anche tantissime possibilità “già pronte” online, i più appassionati possono provare con i vari HackTheBox e simili. Sulla parte di DNS, spero si studi bene a livello teorico di gerarchia e “ordine di risoluzione”, sia nel significato di campi/record e concetti di sottdomini “interni” e pubblici (v. AXFR).
Il modulo sulla crittografia parla di crittografia simmetrica e asimmetrica, suggerirei di mostrare nel caso pratico come funziona la generazione di chiavi e la cifratura e firma digitale, oltre a esempi pratici di come utilizzare l’hash di un file.
Vengono trattati virtualizzazione e cloud, sempre più importanti (ormai da diversi anni), nel programma leggo anche la parte pratica sulle VMs, ma potrebbe essere interessante anche mostrare nel caso pratico come funziona una risorsa su cloud (sarebbe però da vedere cosa si può fare gratuitamente).
Il modulo di sicurezza, dove si parla di VPN (ci aggiungerei anche TOR), backup, firewall e GDPR, ma potrebbe essere esteso all’infinito, qui non è affatto banale trovare un compromesso su cosa scegliere e cosa tagliare, ricordando che si tratta comunque di una materia che prende 4h settimanali (di cui 3 di laboratorio). Suggerirei una panoramica di framework come il MITRE ATT&CK e Cyber Kill Chain, accennando alle varie figure impiegate nella sicurezza: non dimentichiamo che unno degli importati obiettivo dell’ITIS è quello di formare professionisti “pronti all’uso”, ma anche di presentare una panoramica delle possibili professioni nel vastissimo mondo ICT; compito di un docente non è tanto quello di riempire la testa degli studenti di nozioni buone per una chiacchierata al bar o per rispondere ad un quiz televisivo, nè di limitarsi a copia-incollare procedure su come installare e configurare un apparato (per quello, esistono gli innumerevoli tutorial su Internet o, per chi è vecchio stile, i manuali), ma piuttosto quello di lanciare semi di curiosità che possono germogliare nello studente che improvvisamente scopre qualcosa di cui ignorava completamente l’esistenza o che conosceva solo superficialmente e magari in maniera distorta.
Conclusione
Questa analisi dettagliata è stata per me interessante, magari potrei valutare una carriera come “consigliatore per i programmi” dei docenti 😀
Spero comunque che tutti gli insegnanti provvedano ad una revisione periodica o su base di importanti cambiamenti nel settore di interesse (ancora una volta: le modifiche non sono indispensabili ad ogni nuova moda o ad ogni cambio di docente, vanno ponderate ed implementate cum grano salis).
Sarebbe poi bellissimo se gran parte dei docenti faccesse sistema (non solo quelli di sistemi, pun intended) e si confrontasse con i propri omologhi in altri istituti, ad esempio in un forum dedicato, sia per ottimizzare gli sforzi di preparazione lezione (anziché continuare tutti a sforzarsi in compartimenti stagni, ognuno nella sua isolata parrocchietta) sia per scambiare idee e rispondere ad eventuali dubbi.
Buono studio!
