Introduzione al corso¶
Tenendo conto di quanto riportato in Preludio , la moderna professione del costruttore di software implica che:
occore elevare il livello da ‘programmatore’ a Ingegnere del software di sistema, che si concentra maggiormente sulla validazione, sulla logica di business e sull’integrazione dei sistemi, piuttosto che sulla scrittura diretta di codice.
L’IA non sarà più un semplice correttore ortografico, ma un collaboratore che suggerisce pattern di design e genera test
Occorre superare l’idea che il software sia solo codice¶
Il ruolo del costruttore umano di software rimane però centrale, richiedendo una profonda comprensione dei principi di progettazione, delle architetture software e delle metodologie di sviluppo oltre a una capacità di adattamento continuo alle nuove tecnologie e ai nuovi paradigmi emergenti
Infatti, il settore del software non è solo un campo tecnico, ma una stratificazione di astrazioni.
La pratica senza teoria …¶
“La pratica senza una base teorica è come un marinaio che sale su una nave senza timone e bussola, e che non ha mai la certezza di dove stia andando.” (Leonardo da Vinci)
“La pratica senza una base teorica è cieca, così come la teoria senza la pratica è un mero esercizio intellettuale.”
“La pratica senza una base teorica è puro tentativo ed errore (trial and error) destinato a non scalare.”
L’IA è bravissima nella “pratica” (generare codice che gira), ma non possiede la “teoria” (non capisce il perché profondo di una scelta architetturale). Quando sorge un problema, solo chi possiede la teoria sa dove mettere le mani.
Cosa fare?¶
In questo quadro, il corso prevede una stretta interazione tra la parte teorica e la parte pratica di laboratorio e lo sviluppo cooperativo (docente.studente e studente-studente) di casi di studio concreti.
L’attività di laboratorio è volta a sviluppare abilità teorico/pratiche nell’analisi, progettazione e costruzione di sistemi software.
Come ogni ogni attività umana, anche l’attività di costruzione del software si svolge in un contesto di riferimento, sia di tipo culturale, sia relativo agli obiettivi che si intendono raggiungere.
Per meglio definire questo contesto (in continua evoluzione nel campo del software) è disponibile un testo, scritto con l’obiettivo di introdurre un percorso incrememtale (teorico/pratico) di transizione dalla ‘tradizional’ programmazione ad oggetti alla costruzione di sistemi basati su componenti software distribuiti che comunicano mediante protocolli di rete.
Lo scenario applicativo di riferimento è quello dei Sistemi a Microservizi (di cui parleremo) e dei Sistemi Embedded/IoT.
L’intento è di dimostrare come l’ingegnere del software possa affrontare la costruzione di sistemi eterogenei, in domini applicativi diversi, avvendosi di un insieme di concetti volti a supeerare L’Abstraction gap tra gli obiettivi di alto livello che si intendono raggiungere e i dettagli di basso livello legati alle tecnologie software e hardware disponibili.
Si vuole dimostrare come sia possibile costruire non solo prodotti finali, ma anche opportuni insiemi ‘custom’ di strumenti di supporto alla progettazione e allo sviluppo, avvalendosi di tecniche tipiche dei Domain-Specific Languages .
Il ruolo del testo di riferimento¶
Il Testo di riferimento :
conviene sia aperto con il browser Firefox
contiene informazioni che ogni costruttore di software dovrebbe avere nel proprio bagaglio culturale
Leggere il testo
Il testo dovrebbe essere letto in modo sequenziale almemo fino al Capitolo6:
PRELUDIO Forse c’è ancora lavoro …
COSA SI INTENDE PER SISTEMA tanti tipi diversi, ma a noi interessano solo sistemi basati sul concettto di ‘calcolo’ …
COSA VUOL DIRE COMPUTARE il concetto di ‘computazione’ ha subito una notevole evoluzione, ma in ogni caso a noi occorrono solo ‘linguaggi di programmazione’ …
I LINGUAGGI sono fondati su modelli formalii di computazione e fungono sia come ali sia come catene … ed evolvono in continuazione
SISTEMI SOFTWARE possono appartenere ai semplici, complicati e anche ai conplessi (ma, si spera, mai caotici)
introduce un percorso incrememtale di transizione dalla programmazione ad oggetti alla costruzione di sistemi software distribuiti e di Sistemi a Microservizi, con una visione prospettica sui Sistemi software complessi (si consiglia la visione del video Il Sorprendente Segreto della Sincronizzazione)
Consultare il testo
Dal Capitolo6 in avanti, il Testo riporta contenuti specificatamente orientati al CorsoISS2026
La parte più orientata al corso:
introduce librerie che realizzano l’idea astratta di Interconnessione (di cui parleremo) tra componenti software distribuiti che comunicano mediante protocolli di rete quali TCP, MQTT, CoAP, etc.
introduce all’uso del paradigma computazionele ad attori paradigma computazionele ad attori
Organizzazione del corso¶
Parte A: Dai programmi ai Sistemi a Microservizi
Parte B: Sviluppo di applicazioni distribuite e sperimentazione di Sistemi IOT
Parte C: Dai requisiti al prodotto mediante Processi di sviluppo agili e incrementali basati su modelli
Nelle tre fasi, faremo riferimento a un Filo conduttore costituito dal Game of Life di Conway che implica
un sistema semplice da capire e da costruire nel concentrato
un sistema conmplicato nel distribuito
un sistema complesso dal punto dei vista dei risultati che presenta
comportamenti caotici
Per un esempio di comportamento caotico si veda: Mappa Logistica.
Organizzazione delle attività¶
Modalità di (auto)valutazione¶
Si veda anche La (auto)valutazione