Appunti di System Thinking

II parte: Cosa è il pensiero sistemico e come applicarlodi

Introduzione

Nella puntata precedente avevamo preso come spunto una citazione dal libro La quinta disciplina [5] che riportiamo anche qui:

Le nuvole si ammassano, il cielo si rabbuia, le foglie si alzano verso l’alto: sappiamo che pioverà. Sappiamo anche che dopo il temporale la pioggia andrà ad immettersi nella falda freatica a chilometri di distanza e che domani il cielo sarà chiaro. Tutti questi eventi sono lontani nel tempo e nello spazio, eppure sono tutti collegati nell’ambito dello stesso sistema. Ognuno di essi ha influenza sul resto, un’influenza che normalmente è nascosta alla vista. Si può comprendere il sistema di un temporale soltanto contemplando l’intero, non una qualsiasi singola parte di esso.

A tal proposito, osservavamo che le organizzazioni che apprendono si creano solo a partire da una visione sistemica che sappia guardare al tutto, all’intero, al globale, visto che fermarsi all’analisi disconnessa dei singoli segnali o delle parti elementari di un sistema spesso non ci conduce a una comprensione reale dei problemi e a ricercare adeguate soluzioni.

Il concetto di sistema

Buona parte del lavoro di Peter Senge, è incentrata intorno al concetto di sistema e dell’importanza di adottare strumenti che forniscano un approccio sistemico al contesto entro il quale ci muoviamo.

In tal senso è sicuramente condivisibile la scelta di Peter Senge che fa del System Thinking lo strumento più utile per avere una visione completasistemica appunto — di un sistema o un dominio, abilitandone il processo di apprendimento.

Apprendimento nelle organizzazioni e System Thinking sono quindi strettamente legati fra loro: nella puntata precedente abbiamo parlato di ciò che può impedire la creazione di una organizzazione che apprende; in questa, vediamo invece cosa può abilitarla o quantomeno facilitarla.

 

Il concetto di “sistema”

Probabilmente il modo migliore e più efficace per iniziare a comprendere il pensiero sistemico è partire dalla definizione di sistema: nella definizione più semplice, un sistema è un gruppo di elementi che interagiscono fra loro e che sono interdipendenti, interconnessi in modo da formare un tutt’uno che ha uno scopo specifico.

Interconnessione e interazione sono le caratteristiche chiave che differenziano una collezione di elementi da un sistema. Un sistema ha naturalmente uno scopo o è stato progettato per raggiungere un obiettivo: che sia un sistema vivente — p.e. una famiglia di api che interagiscono fra loro in modo complesso per sopravvivere e riprodursi — o un macchinario — p.e. un velivolo in cui le diverse parti sono unite e funzionano insieme con l’obiettivo di volare — tutte le parti costituenti collaborano.

Nel caso delle api la collaborazione è attiva sulla base dell’iniziativa delle singole api; nell’aeroplano i vari meccanismi funzionano in modo interconnesso sulla base di un progetto tecnologico. Ma in ogni caso le cose funzionano in quel modo per il raggiungimento dello scopo del sistema: le api devono sopravvivere e creare nuove colonie, l’aereo deve decollare, volare e atterrare in sicurezza.

Sistemi e feedback

Ovviamente, affinché il sistema funzioni al suo meglio, le varie parti costituenti devono essere organizzate secondo uno schema progettuale, come nel caso dei componenti dell’aereo, o operativo, come nel caso delle api che hanno compiti e ruoli ben precisi nell’alveare.

Un sistema si mantiene in funzionamento, ossia è stabile, tramite una serie di segnali di feedback interno: un sensore segnala al manometro che la temperatura/pressione dell’acqua è troppo alta e mette in funzione la ventola che raffredda il circuito. Quando la temperatura raggiunge la temperatura corretta, il sistema di raffreddamento ausiliario smette di funzionare. In tutto ciò la temperatura dell’acqua rimane all’interno di un intervallo predefinito.

Un sistema meccanico tipicamente non muta il suo scopo, né la sua organizzazione, mentre i sistemi viventi spesso evolvono sia nella organizzazione che spesso nello scopo ultimo. Definire lo scopo di un sistema è una operazione molto importante che consente di comprenderne le dinamiche interne in modo più completo.

System Thinking

In tal senso il System Thinking o pensiero sistemico è uno strumento con il quale è possibile descrivere un sistema nella sua globalità, evidenziandone la natura dinamica e l’interazione che si instaura fra gli elementi del sistema.

 

Il modello dell’iceberg

Un sistema, però, quasi mai è isolato ma “vive” inserito all’interno di un sistema più grande — il contesto — con il quale interagisce. I confini del sistema, la sua natura stessa sono funzione di come noi lo interpretiamo. Un interessante modello è quello dell’iceberg [6] che classifica il modo in cui vediamo la realtà che ci circonda su differenti livelli (figura 1, ripresa da [6]).

Livello degli eventi

Il livello degli eventi è quello più immediato, quello della percezione del mondo in maniera più diretta. Una mattina ci svegliamo e ci accorgiamo di avere il raffreddore: prendiamo qualche un blando farmaco e ci copriamo bene, e il raffreddore passerà.

I problemi che osserviamo al livello degli eventi possono essere spesso affrontati con un semplice “riaggiustamento” delle cose ma il nostro “modello a iceberg” dovrebbe farci pensare che probabilmente c’è altro e che non tutti i problemi possono essere affrontati semplicemente curando i sintomi.

Livello dei “pattern”

Se diamo uno sguardo appena più in basso rispetto al livello degli eventi, spesso notiamo degli schemi ricorrenti, dei pattern: eventi simili si sono ripetuti nel tempo, spesso in seguito a condizioni simili. Per esempio, notiamo che in molti casi ci è venuto il raffreddore quando il nostro organismo era sotto stress per mancanza di sufficiente riposo.

Un’osservazione attenta a questi schemi ricorrenti può consentirci di prevedere e prevenire certi eventi.

Livello della struttura

Scendendo ancora più in profondità, scopriamo il livello della struttura. Nel momento in cui ci interroghiamo sulle ragioni che causano i pattern che osserviamo, finiamo per individuare una determinata struttura, ossia un insieme complesso e, appunto, strutturato di elementi che causano gli schemi ricorrenti.

Continuando con il nostro esempio del raffreddore, lo stress e la mancanza di sufficiente riposo potrebbero essere stati causati da tensioni al lavoro, cattiva alimentazione per fretta o trascuratezza e così via.

Quando parliamo di strutture lo facciamo in senso generico, ma è possibile individuare meglio ciò che intendiamo: strutture fisiche (macchine, strade, terreno, edifici etc.), strutture organizzative (aziende, amministrazioni, scuole etc.), strutture “politiche” (leggi, normative, schemi di tassazione etc.), strutture “rituali” (comportamenti abituali e introiettati a tal punto da non essere più vissuti in maniera consapevole, ma solo come ripetizione inconsapevole).

Livello del modello mentale

Scendiamo ancora un po’ nel nostro iceberg e incontriao i modelli mentali. I modelli mentali sono costituiti da atteggiamenti, credenze, convinzioni morali, aspettative e valori che consentono alle strutture di continuare a funzionare così come hanno sempre funzionato.

Si tratta di quelle convinzioni che spesso apprendiamo in maniera subconscia dalla società e dalla famiglia in cui cresciamo e di cui siamo spesso inconsapevoli, nel senso che le diamo per scontate e non conduciamo una riflessione esplicita su di esse.

Tornando al nostro esempio del raffreddore: ci siamo presi il raffreddore per tutto quanto detto sopra, magari perché abbiamo un modello mentale in cui la carriera lavorativa viene prima del riposo, e in cui il tempo dedicato a scegliere e preparare alimenti sani e nutrienti per una dieta equilibrata è tempo sottratto alla produttivita.

Figura 1 – Uno schema sintetico del modello interpretativo dell’Iceberg.

Figura 1 – Uno schema sintetico del modello interpretativo dell’Iceberg.

 

Modelli mentali e pensiero sistemico

Facendo riferimento al modello dell’iceberg, nella nostra vita quotidiana sperimentiamo direttamente gli eventi e riusciamo spesso a capire gli schemi ricorrenti che sono sotto di essi. Centinaia di migliaia di anni di evoluzione hanno modellato una parte del nostro cervello a svolgere molto bene questo compito: l’uomo preistorico che vive nella savana vede un leone e sa che deve girare al largo e scappare da quell’incontro. In un suo libro [3], Daniel Kahneman definisce questa parte del cervello come quella dei pensieri veloci spiegando come questo schema venga ricomposto in modo quasi istintivo: siamo un sistema pensante modellato secondo un approccio a eventi. Il nostro linguaggio è event-oriented.

Si potrebbe dire, quindi, che abbiamo una innata propensione a limitare la nostra attenzione ai primi due livelli dell’iceberg; più difficile è passare a considerare quelli sottostanti — le strutture e i modelli mentali — che offrono una visione sistemica. Ma fermarsi ai soli primi due livelli ci fornisce una visione limitata di quello che accade, e non ci fa comprendere il perché di determinati eventi.

Decisioni a razionalità limitata

In una serie di articoli pubblicata in passato [4], si è parlato dei “decisori a razionalità limitata”: è quel fenomeno che sperimentiamo quando ci troviamo a dover decidere o valutare limitando l’osservazione del contesto solo su una parte ristretta, quella che ci troviamo davanti al naso, quella che viviamo direttamente, ma perdendo di vista il sistema nella sua completezza. È quel particolare atteggiamento che ci porta a fare ottimizzazioni locali, senza pensare al tutto il processo.

Un modo molto efficace per non cadere nella trappola della razionalità limitata è provare a elencare tutte le componenti del sistema e le implicazioni delle dinamiche interne: se aumenta qualcosa, cosa succede alle altre parti? Ci sono implicazioni nascoste o impreviste? L’approccio del System Thinking può essere particolarmente utile in tale contesto.

Approccio sistemico lineare

Un primo modo per fotografare la realtà in modo meno limitativo è quello di provare a mettere in fila una serie di eventi: Succede A, quindi accade B e via in cascata C e D.

Figura 2 – Mettere in fila una serie di eventi è già un primo modo per fotografare la realtà, per quanto abbia dei limiti concettuali.

Figura 2 – Mettere in fila una serie di eventi è già un primo modo per fotografare la realtà, per quanto abbia dei limiti concettuali.

 

Questo schema a cascata offre già una prima evoluzione rispetto alla semplice osservazione puntuale, dato che cerca di collegare gli eventi che ci circondano, anche se si basa su un presupposto raramente riscontrabile nella realtà, ossia che la catena degli eventi sia lineare e semplice. Ogni evento è causa o è causato da un altro e non sono quindi previste interazioni multiple fra i vari eventi né feedback di alcun tipo (vedi sotto).

Il concetto di feedback e i circuiti con loop

Una visione più realistica è quella che introduce il concetto di feedback (figura 3).

Figura 3 – Il loop ben sintetizza il concetto di feedback o retroazione.

Figura 3 – Il loop ben sintetizza il concetto di feedback o retroazione.

 

Prendiamo un esempio più articolato rispetto a quello lineare di prima: si immagini il ciclo di vita di una applicazione web con un sistema di analisi statistica del traffico sui social. Possiamo immaginare che, se gli utenti della app diminuiscono, il team di sviluppo si impegni nell’implementazione di nuove funzionalità e nella promozione tramite pubblicità, per rilanciare la app.

Supponendo che tale mossa incontri i favori degli utenti, aumenterà il numero di utilizzatori. Più utenti vuol dire però che ci saranno più richieste di assistenza o di risoluzione di problemi, correzione di bug, necessità di ulteriori nuove funzionalità. Maggior lavoro quindi, che porta a un aumento del backlog delle cose da fare e quindi a un allungamento dei tempi di rilascio, se lo staff non cresce. Questo potrebbe scontentare la clientela che potrebbe abbandonare il prodotto in favore di altri. E si ritornerebbe nuovamente a una diminuzione degli utenti.

Questa catena di eventi può essere efficacemente rappresentata con l’esempio di schema di System Thinking rappresentato in figura 4.

Figura 4 – Un diagramma di System Thinking, relativo alle azioni concatenate di rilancio di una applicazione web e alle conseguenze collegate.

Figura 4 – Un diagramma di System Thinking, relativo alle azioni concatenate di rilancio di una applicazione web e alle conseguenze collegate.

Ulteriori notazioni

Volendo arricchire ulteriormente la grammatica di un diagramma di System Thinking, possiamo introdurre alcune notazioni che consentono di specificare meglio le interazioni fra i vari elementi del sistema. La figura 5 e la sua didascalia mostrano come è possibile ottenere una notazione efficace e relativamente semplice da comprendere.

Figura 5 – Ulteriori notazioni per i diagrammi di System Thinking. La freccia da A a B indica che, se si verifica una variazione (in più o meno) allora varia anche B. O significa che la variazione è nello stesso verso: se aumenta (o diminuisce) A, allora aumenta (o diminuisce) anche B. Infine S denota una variazione inversa: se aumenta (o diminuisce) A, allora diminuisce (o aumenta) anche B.

Figura 5 – Ulteriori notazioni per i diagrammi di System Thinking. La freccia da A a B indica che, se si verifica una variazione (in più o meno) allora varia anche B. O significa che la variazione è nello stesso verso: se aumenta (o diminuisce) A, allora aumenta (o diminuisce) anche B. Infine S denota una variazione inversa: se aumenta (o diminuisce) A, allora diminuisce (o aumenta) anche B.

 

Processi evolutivi di un sistema

Ora che abbiamo presentato la notazione base di un diagramma System Thinking, possiamo passare a introdurre gli elementi fondamentali di uno schema di questo tipo: il sistema a crescita costante e il sistema a bilanciamento. Questi due meccanismi possono considerarsi i mattoni fondamentali con cui costruire i modelli più complicati.

Sistema a crescita costante

Il primo, il trend di di crescita, noto anche come processo di rinforzo, si basa su un meccanismo di feedback rientrante positivo: in questo caso una variazione da A a B prevede un ritorno inverso sempre dello stesso segno che si somma con quello iniziale, in una sorta di crescita costante e inarrestabile.

Un esempio tipico è quello del passaparola; torniamo all’esempio della app che aveva necessità di crescere e che abbiamo visto prima, ed eliminiamo la parte di aumento del carico di lavoro. Quando sempre più utenti provano l’applicazione e ne restano ben impressionati, ne parlano con altre persone e questo porta a un processo di crescita costante in cui gli utenti che arrivano si aggiungono a quelli già esistenti.

Figura 6 – Un diagramma System Thinking che descrive un processo di rinforzo, in cui il feedback rientrante positivo porta a un aumento costante del valore delle variabili prese in esame. In questo caso si parla del classico passaparola che può far aumentare le vendite di un determinato prodotto. Più aumentano le vendite, più utenti lo usano, più persone lo consigliano ad altre persone.

Figura 6 – Un diagramma System Thinking che descrive un processo di rinforzo, in cui il feedback rientrante positivo porta a un aumento costante del valore delle variabili prese in esame. In questo caso si parla del classico passaparola che può far aumentare le vendite di un determinato prodotto. Più aumentano le vendite, più utenti lo usano, più persone lo consigliano ad altre persone.

 

il trend a rinforzo può essere visto come la spiegazione del circolo virtuoso: più una cosa funziona, più siamo invogliati a usarla. Il tipo di meccanismo è perfettamente identico, ma cambiato di segno, di un classico circolo vizioso. In alcuni casi, quando il trend di crescita è particolarmente impetuoso, si parla di “effetto valanga”.

    Figura 7 – Diagramma cartesiano espressione delle variabili in gioco, per esempio il numero di clienti con il passaparola, in un circolo virtuoso con un trend in costante crescita.

Figura 7 – Diagramma cartesiano espressione delle variabili in gioco, per esempio il numero di clienti con il passaparola, in un circolo virtuoso con un trend in costante crescita.

Sistema a bilanciamento

L’altro meccanismo fondamentale è quello a bilanciamento o a stabilizzazione. In questo caso si parte dal presupposto che ogni sistema in regime di stabilità, se non “pietrificato” — raggiunge tale equilibrio proprio grazie all’azione opposta di due effetti: uno di crescita e l’altro di diminuzione, o viceversa. In questo caso si crea un loop di bilanciamento che porta il sistema ad un livello di stabilità costantemente alimentato. Per questo si parla spesso di effetto feedback negativo.

Figura 8 – Il sistema a bilianciamento è il frutto dell’azione opposta di due effetti, uno di crescita e l’altro di diminuzione.

Figura 8 – Il sistema a bilianciamento è il frutto dell’azione opposta di due effetti, uno di crescita e l’altro di diminuzione.

 

Purtroppo a complicare le cose si intromette la fallacia della nostra percezione della realtà: valore atteso e valore reale sono tutt’altro che oggettivi e la misurazione del gap è spesso affetta da errori e interpretazioni.

Figura 9 – Diagramma cartesiano in un circolo a bilanciamento.

Figura 9 – Diagramma cartesiano in un circolo a bilanciamento.

 

Complichiamo un po’ le cose… il ritardo nel feedback

Per rendere i nostri diagrammi ancora più realistici, possiamo aggiungere un ulteriore elemento di complessità: il ritardo. In linea di principio ogni collegamento da A a B può contenere un ritardo; in alcuni casi i ritardi sono impercettibilmente brevi, in altri talmente grandi da sembrare delle vere e proprie interruzioni.

Non tutti i ritardi sono uguali e impattano allo stesso modo; qualcuno [1] si è preso la briga di provare a classificarli, e di seguito vediamo cosa ne è emerso.

Ritardi fisici

I physical delays sono quelli dovuti al tempo necessario a un oggetto per spostarsi da uno stato a un altro: sono esempi di tali ritardi fisici la spedizione di un oggetto, o il deploy in produzione di un pacchetto software.

Ritardi relativi alle transazioni

I transactional delays sono quelli dovuti al tempo necessario per completare una transazione: per esempio, uno scambio commerciale, uno scambio di informazioni all’interno di una telefonata, la negoziazione di un contratto.

Ritardi relativi alle informazioni

Gli informational delays sono costituiti dal tempo necessario affinché un’informazione sia trasferita, per esempio fra due persone. Attenzione, qui non si sta parlando del tempo necessario per la comunicazione, ma del tempo richiesto affinché il significato contenuto nell’informazione sia realmente compreso ed effettivamente acquisito.

Ritardi relativi alla percezione

I perception delays sono la forma di ritardo più insidiosa, e rappresentano il tempo necessario affinché ci si renda conto di un cambiamento, di un passaggio di stato. Una persona spesso ha una percezione falsata della realtà a causa delle proprie convinzioni, delle proprie abitudini e dei propri pregiudizi cognitivi. Un’organizzazione — sia esso un piccolo team, un gruppo più ampio o un’intera azienda — potrebbe non rendersi conto di come il cambiamento del contesto di lavoro porti a un abbassamento di qualità: “Ma cosa c’è che non va? In fondo fino a ieri il nostro prodotto era di ottimo livello…”.

 

Di per sé, i ritardi non sono né buoni né cattivi: semplicemente (ci) sono. Il fatto di non considerarli o di sovra- o sottostimarli ci porta a creare una rappresentazione errata della realtà, rendendoci incomprensibili le reazioni del sistema ai nostri stimoli.

 

Combinare evoluzione e ritardi

Possiamo provare ora a creare qualche esempio in cui combinare i due processi evolutivi — crescita costante, stabilizzazionedelay e variazioni simmetriche/opposte.

Rinnovamento continuo

Un primo esempio, derivato da quello visto poco sopra, potrebbe essere il seguente: un team di sviluppo software deve produrre un prodotto destinato a evolvere nel tempo con una continua aggiunta di nuove funzionalità. L’idea è di rilasciare un prodotto “sempre nuovo” per contrastare la concorrenza.

Guardando le cose dal punto di vista della qualità del prodotto (numero di bug, funzionalità realmente utili, usabilità, etc.), lo schema visto in precedenza potrebbe diventare qualcosa di simile a quanto riportato in figura 10.

Figura 10 – Qualità del prodotto, richieste dei clienti per sempre nuove funzionalità e “pressione” sul gruppo illustrate in un diagramma di System Thinking. Manca, però, la notazione dei ritardi.

Figura 10 – Qualità del prodotto, richieste dei clienti per sempre nuove funzionalità e “pressione” sul gruppo illustrate in un diagramma di System Thinking. Manca, però, la notazione dei ritardi.

Introduzione di delay informativi e percettivi

In realtà, ogni freccia non è direttamente collegata allo stato successivo: a ben guadare, sarebbe meglio introdurre in ogni transazione un ritardo temporale. Sicuramente abbiamo un ritardo informativo quando il team deve raccogliere dal mercato un nuovo set di richieste; il delay che invece intercorre fra qualità e demand è spesso percettivo: i clienti erano abituati a un certo livello di qualità, comprando quasi a scatola chiusa il prodotto; ci vuole del tempo per rendersi conto e ammettere invece che il prodotto probabilmente non è all’altezza della fama precedente.

Questo schema è molto frequente nell’ambito della produzione di prodotti e servizi, in cui la qualità è funzione, tra le altre cose, dalla pressione del mercato. Un diagramma cartesiano come quello di figura 11 spiega in modo differente il trend delle due grandezze.

Figura 11 – Un diverso modo di illustrare le grandezze di qualità di prodotto e richiesta dei clienti attraverso un diagramma cartesiano.

Figura 11 – Un diverso modo di illustrare le grandezze di qualità di prodotto e richiesta dei clienti attraverso un diagramma cartesiano.

 

Investire o non investire?

Per rendere più realistico lo scenario precedente si potrebbe pensare di introdurre un ulteriore fattore, quello degli investimenti. In fondo se il mercato richiede “più prodotto” perché l’azienda non dovrebbe attrezzarsi per supportare questo incremento? Ma per mettersi all’altezza, l’azienda deve investire in nuove “risorse” (persone, macchinari, conoscenza). O forse no… potrebbe bastare ottimizzare il processo attuale?

Il dilemma “investire / non investire” spesso viene catalogato come uno degli archetipi ricorrenti in System Thinking. Degli archetipi parleremo diffusamente nella prossima puntata. Purtroppo la decisione non è semplice da prendere, dato che gli impatti di ogni iniziativa, o dell’inazione, non sono immediati, ma hanno anche loro dei ritardi che ci impediscono di vedere subito gli effetti delle nostre azioni.

Il diagramma System Thinking che descrive questa situazione potrebbe essere quello di figura 12.

Figura 12 – Un diagramma System Thinking che descrive l’archetipo “investire vs. non investire”.

Figura 12 – Un diagramma System Thinking che descrive l’archetipo “investire vs. non investire”.

 

Ogni imprenditore sa che, senza un adeguato piano di investimenti, il sistema rischia di impoverirsi tanto da risultare inizialmente meno concorrenziale e poi addirittura di non avere le risorse per poter investire in seguito.

Il trend a doppia oscillazione visto con diagramma cartesiano in figura 11 quindi potrebbe diventare ciò che è riportato in figura 13.

Figura 13 – Il diagramma a doppia oscillazione relativo al dilemma investire vs. non investire.

Figura 13 – Il diagramma a doppia oscillazione relativo al dilemma investire vs. non investire.

 

Conclusioni

In questa puntata della serie sul System Thinking abbiamo introdotto i primi elementi della “grammatica” di base di questo modello. Traendo ispirazione per le figure e gli esempi da quanto presente in letteratura [1], abbiamo visto come si crea un semplice diagramma che modella casi piuttosto elementari. Abbiamo introdotto il concetto di loop, di delay e composto queste cose insieme per realizzare scenari più complessi. Nella prossima puntata parleremo di archetipi sistemici, ossia di quegli schemi ricorrenti con i quali ci scontriamo nella nostra attività lavorativa e non solo.

 

Riferimenti

[1] Daniel Kim, Introduction to Systems Thinking. Systems Thinker

https://thesystemsthinker.com/introduction-to-systems-thinking/

 

[2] Barry Richmond, The Thinking” In Systems Thinking: How Can We Make It Easier To Master?. Systems Thinker

https://goo.gl/Z6xn6X

 

[3] Daniel Kahneman, Thinking, Fast and Slow. Farrar, Straus and Giroux, 2013

https://www.amazon.it/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374533555

 

[4] Giovanni Puliti, Lover’s beer game, una metafora per comprendere il Lean - I parte: Le dinamiche dei sistemi di produzione e la storiella di una birra. MokaByte 209, settembre 2015

http://www.mokabyte.it/2015/09/loversbeergame-1/

 

[5] Peter Senge, La Quinta Disciplina. L’arte e la pratica dell’apprendimento organizzativo, Sperling & Kupfer, 1992

 

[6] Il modello dell’iceberg

http://www.nwei.org/iceberg/

 

Condividi

Pubblicato nel numero
229 giugno 2017
Giovanni Puliti lavora come consulente nel settore dell’IT da oltre 20 anni. Nel 1996, insieme ad altri collaboratori crea MokaByte, la prima rivista italiana web dedicata a Java. Da allora ha svolto attività di formazione e consulenza su tecnologie JavaEE. Autore di numerosi articoli pubblicate sia su MokaByte.it che su…
Articoli nella stessa serie
Ti potrebbe interessare anche