La fisica del software

Posted on 2 February 2016 by Paolo Bernardi

L’ingegneria del software è una disciplina molto giovane, che può vantare solide basi scientifiche in alcune branche della matematica e in alcuni ambiti di conoscenze prettamente informatiche assai formalizzati e ben compresi (es. la teoria delle basi di dati relazionali e la teoria dei compilatori). Tuttavia l’intero settore è ancora in balia dei venditori di “olio di serpente”: di fronte ad un problema da risolvere è inevitabile trovare schiere di esperti (guru, santoni, ecc.) che promuovono le mode del momento come panacea d’ogni male.

Il confronto con le altre discipline ingegneristiche è spesso impietoso. Nelle opere di ingegneria civile, ad esempio, i materiali e le forme che essi assumono vengono (o dovrebbero essere) scelti sulla base di solide conoscenze scientifiche: si prendono in considerazione le sollecitazioni (forze) a cui si prevede che le strutture saranno sottoposte e le diverse proprietà dei materiali (es. elasticità), che descrivono il loro comportamento quando subiscono l’azione di tali forze. È meglio il ferro o una lega di ferro, carbonio e cromo? La risposta corretta è che la domanda è mal posta, dipende dal problema che si vuole risolvere! Tuttavia, provate a prendere un campione di praticanti (più o meno consapevoli) dell’ingegneria del software e chiedete loro: è meglio la programmazione funzionale o quella ad oggetti? È meglio Java o C#? State sicuri che riceverete quasi sempre risposte nette ed accorate: attualmente buona parte dell’ingegneria del software è poco più di un esercizio di retorica, laddove una discussione sul materiale e sulla forma da usare in una costruzione può essere risolta senza dibattiti infiniti, grazie all’uso puntuale della fisica e delle scienze dei materiali. Considerando la fisica di base, infatti, sarebbe ridicolo fare una casa interamente in vetro (così è più luminosa!) o interamente in mattoni (così è più solida!): a seconda del contesto si sceglie il materiale più adatto. Eppure, nello sviluppo di un software, spesso accade questo: si costruisce una “casa” interamente in “mattoni” o interamente in “vetro”.

Da diversi anni Carlo Pescio, un noto professionista italiano nel settore dell’ingegneria del software, sta cercando di creare una teoria di base che ha definito “fisica del software”: il software è visto come un materiale, mentre la progettazione del software (ad ogni livello) è vista come l’atto di dare al software/materiale la forma più adatta a risolvere un dato problema. Partendo da questo punto di vista, e cercando di fare un parallelo con le scienze dei materiali, bisogna chiedersi: quali sono le nostre conoscenze delle proprietà del software/materiale e delle “forze” a cui viene sottoposto? Non molte, finora. Nel corpus di conoscenze dell’ingegneria del software troviamo per lo più:

  • Principi e metodi: pratiche più o meno dogmatiche che vengono decontestualizzate e assurte al rango di principi, risultando perciò mal definite e ridondanti.
  • Pattern e architetture di riferimento: cataloghi di tecniche progettuali per risolvere determinati problemi.
  • Metriche: proprietà più o meno facilmente misurabili relative al software, che tuttavia non sono di immediata comprensione o di diretta utilità al processo di progettazione del software. A differenza delle proprietà dei materiali, non sono definite come risposta a delle sollecitazioni determinate da forze precise.
  • -ilità: affidabilità, scalabilità, manutenibilità ecc. A prima vista potrebbero sembrare delle proprietà, simili a quelle dei materiali fisici, tuttavia non lo sono in quanto definite troppo genericamente (anche qui manca la definizione delle sollecitazioni a cui si riferiscono) e per questo difficilmente misurabili. Dire che un software è “scalabile” è più simile a dire che una macchina è “sicura” piuttosto che a descrivere la resistenza di una lega metallica alla compressione.

In altre parole, sebbene il parallelo tra software e materiali e quello tra progettazione software e lavorazione dei materiali sia lampante, non abbiamo ancora alcuna conoscenza relativa alle proprietà del software e alle “forze” a cui viene sottoposto. L’opera di Carlo Pescio cerca di esplorare questi aspetti, definendo quella che effettivamente possiamo chiamare una “fisica di base” per il software: una teoria delle proprietà del software e delle forze a cui viene sottoposto.

Ovviamente la metafora non deve fuorviare, la natura del software è assai peculiare: il software è conoscenza eseguibile, fatta per essere interpretata sia dall’essere umano, che legge e scrive i programmi, sia dal computer, che deve eseguirli per ottenere il risultato desiderato. Perciò, nonostante la fisica dei materiali abbia fornito l’ispirazione per quest’opera, il modello delineato da Carlo Pescio ha finito per somigliare alla fisica quantistica, piuttosto che a quella dei materiali.

Attualmente il suo modello “fisico” per il software è incentrato su due concetti principali:

  1. La distinzione dei tre spazi in cui il software esiste: lo spazio delle decisioni, ovvero il prodotto della progettazione, lo spazio degli artefatti, ovvero il prodotto della scrittura del programma, e lo spazio dell’esecuzione, ovvero ciò che accade quando un programma viene eseguito da un computer.
  2. Il concetto di “entanglement”, mutuato direttamente dalla fisica quantistica. L’entanglement è un collegamento tra componenti che, con diverse modalità, caratterizza il software in tutti e tre gli spazi descritti al punto precedente.

Sulla base di questi e pochi altri concetti di base è possibile ricavare buona parte dei principi e dei pattern che costituiscono la tradizione scritta e orale che è attualmente alla base dell’ingegneria del software.

La ricerca di Carlo Pescio sulla “fisica del software” è raccolta sul sito www.physicsofsoftware.com. Da qualche tempo l’autore ha deciso di prendersi una pausa dalle pubblicazioni sull’argomento, anche a causa dello scarso appeal che le sue idee hanno avuto (e come potrebbero averne, in un mondo pieno del rumore di fondo generato guru e santoni, ricordate?). Tuttavia la sua ricerca è fondamentale per l’evoluzione dell’ingegneria del software: i risultati raccolti sul suo sito sono un ottimo punto di partenza per riflettere in profondità sulla natura della disciplina. Speriamo di leggerne presto il seguito!

Get in touch

Thank you for contacting me, I will be in touch with you as soon as possible.
There was an error while trying to send the comment, please try again later.