
Ricopri il ruolo di CTO per oltre 20 anni. Puoi portarci indietro agli inizi? Cosa ti ha ispirato a intraprendere una carriera nel mondo della tecnologia e dell’informatica?
Primo ProgettoLa mia carriera professionale, a oggi, è lunga 30 anni, 32 per la precisione: i primi 10 anni sono stati di libera professione, mi occupavo principalmente di sviluppo di soluzioni software nel mondo dell’industria. Poi ho intrapreso la carriera imprenditoriale e, con altri soci, ho fondato l’azienda (una software house) dove tuttora lavoro. Sin dalla fondazione di tale azienda, per i miei skill e il mio mindset, era naturale che io facessi il CTO. Adesso l’azienda è di proprietà di una multinazionale con base in Germania e io sono sempre lì a fare (anche) il CTO. Dico “anche” perché oltre ad essere il CTO sono pure il CISO dell’azienda e team leader di un gruppo interno di sviluppo dedicato a sviluppi software speciali.
Mi chiedi dei miei inizi: posso dire che nemmeno quei 10 anni di libera professione sono gli inizi; ho scritto il mio primo programma a 13 anni su un VIC 20 della Commodore, poi penso che la mentalità dell’informatico io l’abbia realmente formata tra i 14 e i 18 anni sul Commodore 64 programmando in BASIC prima e linguaggio macchina poi. A 19 anni ho frequentato l’università di Scienze dell’Informazione a Pisa per 4 anni (più uno per la tesi) e la partita IVA l’ho aperta quando ero ancora studente del terzo anno. Non ho quindi scelto esplicitamente di fare carriera nell’IT, ci sono scivolato dentro naturalmente.
Ricordi il tuo primo progetto realizzato? Quali linguaggi o strumenti hai utilizzato e quali sfide hai affrontato in quei primi passi?
Evoluzione del ruolo CTOTralasciando il software scritto in gioventù sui Commodore, il primo progetto professionale realizzato è stato un generatore di file PostScript scritto in C++ su SCO Unix, correva l’anno 1992, si trattava di un modulo di un prodotto software nell’area applicativa del medicale. In questo primo progetto scrissi il mio primo parser, usando lex e yacc. Ero ancora studente del terzo anno dell’università, avevo skill in C++ e PostScript oltre che in grammatiche formali, risposi a un annuncio di una azienda fiorentina che faceva capolino sulla bacheca degli annunci della facoltà, feci il colloquio, mi presero, aprii la partiva IVA e iniziò così ufficialmente la mia carriera.
Come è cambiato il ruolo del CTO negli anni? Quali nuove sfide sono emerse con l’avvento di tecnologie come il cloud computing, l’intelligenza artificiale e i modelli linguistici di grandi dimensioni (LLM)?
Approccio alla progettazione softwareIl ruolo del CTO è cambiato tantissimo. Intanto è bene precisare che il ruolo del CTO dentro una software house è diverso dal medesimo ruolo in un’azienda che non produce software, ma considera il software un asset. Nel rispondere a questa domanda mi riferirò solo al ruolo del CTO in una software house.
20 anni fa il CTO era principalmente responsabile della supervisione tecnica dello sviluppo del software, si concentrava sull’adozione delle tecnologie più adatte al ciclo di vita del prodotto e gran parte del lavoro era legato al codice, ai linguaggi di programmazione e alle architetture dei sistemi. Era il punto di riferimento per i team di sviluppatori, garantendo che i prodotti fossero tecnicamente solidi e ben progettati; sebbene l’innovazione fosse importante, il focus era spesso sulla consegna puntuale dei prodotti e sulla stabilità tecnica, più che sull’anticipare le tendenze di mercato.
Oggi è diverso. Il CTO è una figura chiave nella definizione della roadmap tecnologica e del posizionamento strategico dell’azienda, collabora con CEO, COO, CPO e altre figure dirigenziali per identificare opportunità di mercato e guidare l’azienda verso nuovi trend tecnologici. In una software house moderna, il CTO promuove una cultura aziendale basata sull’innovazione, sulla collaborazione e sull’apprendimento continuo, guida l’adozione di metodologie nuove (agili, DevOps, processi CI/CD, ecc) per accelerare il time-to-market, si occupa di garantire che i prodotti e le piattaforme siano scalabili e ottimizzati per i mercati globali ed è responsabile anche di garantire che il software rispetti standard tecnologici, etici, normativi e di sicurezza, protezione dei dati e impatti ambientali.
E ora vi è l’AI che avanza in modo pervasivo e gli LLM sono, a oggi, la falange più avanzata (o quantomeno quella che fa parlare più di sé) e questo richiede un nuovo mindset per i CTO di oggi e domani.
Sei esperto in programmazione web, ad esempio AngularJS e React.js. Come scegli quale framework o tecnologia utilizzare per un determinato progetto?
Scalabilità & efficienzaLa scelta dei framework è sempre una decisione delicata in azienda perché una volta presa poi diventa, per anni, standard aziendale; l’azienda investe in formazione prima e poi tanto nuovo codice viene scritto usando quel framework e non si può poi cambiare da un giorno all’altro quando c’è qualcosa di migliore a disposizione. La scelta di un framework è una scelta condivisa con gli altri attori aziendali coinvolti nella tecnologia, si valutano pregi e difetti, si valuta il ToC (total cost of ownership), si valutano gli skill già presenti in azienda, si compila la matrice Pro/Cons e alla fine si decide.
Quali sono le migliori pratiche che segui per garantire scalabilità ed efficienza nello sviluppo e nella gestione di sistemi software moderni?
Machine Learning & LLMPer la scalabilità, secondo me, a oggi la migliore strategia è progettare applicazioni multi-tenant su cloud pubblico e distribuirle ai clienti in modalità SaaS. Per l’efficienza, il discorso è complesso, le tecniche sono tante, comunque in primis è seguire i pattern standard architetturali e usare strumenti disponibili oggi sul cloud, ad esempio database no-sql (anziché andare per abitudine sui database relazionali) e utilizzare quanto più possibile approcci serverless (anziché le classiche macchine virtuali installate a mano). Per la gestione dei sistemi sicuramente il paradigma e la cultura DevOps sono fondamentali, i rilasci manuali oramai sono ingestibili, il deploy dei sistemi e delle applicazioni deve essere fatto in modo scriptabile. Infine l’analisi statica del codice e i test automatici devono essere attività ineludibili che devono essere perfettamente integrati nelle pipeline CI/CD.
el tuo blog [ettoremessina.tech], nel tuo sito web [computationalmindset.com] e su GitHub [github.com/ettoremessina] dai grande importanza alle reti neurali e all’intelligenza artificiale. Cosa ti entusiasma di più riguardo al futuro dei modelli linguistici di grandi dimensioni (LLM)?
Machine Learning & LLMCome CTO di una azienda ovviamente non posso divulgare, nemmeno parzialmente, gli artefatti prodotti al lavoro. Però io credo nella cultura della condivisione, mi sono sentito eticamente obbligato a condividere alcune cose che ho costruito o che ho imparato nelle mie attività informatiche svolte al di fuori del contesto lavorativo. computationalmindset.com è un sito web verticalizzato in cui condivido frammenti di codice nel mondo delle reti neurali, della computazione quantistica, della matematica sottostante (calcolo differenziale e integrale multivariato, equazioni differenziali, trasformate di Fourier) e mostro l’uso di questa matematica nel contesto del machine learning dell’AI pre-generativa.
Invece ettoremessina.tech è un blog meno verticalizzato, dove condivido altri aspetti dell’informatica senza un format ben preciso; lì si spazia dalla cybersecurity al disassembler del malware, dall’AI generativa all’high performance computing e presto ci saranno post sugli LLM, ma soprattutto sui loro usi applicativi. Nel mio sito web e nel mio blog evito di ripetere informazioni che sono già disponibili in rete, mi sforzo di contribuire in modo originale. Su github.com/ettoremessina ci sono i sorgenti degli artefatti originali da me prodotti nelle mie attività personali.
Come vedi l’evoluzione degli LLM negli ultimi anni? Quali progressi ritieni più significativi?
Machine Learning & LLMSecondo me bisogna distinguere due ere: quella dell’AI pre-generativa e quella dell’AI generativa. Per essere precisi l’AI generativa esisteva già da tempo (le GAN sono nate del 2014, i transformers sono del 2017), ma io qui intendo il momento spartiacque in cui l’AI generativa è diventata usabile da tutti; diciamo che considero l’uscita di ChatGPT 3.5, nel novembre 2022, il momento il cui l’AI generativa è diventata di dominio pubblico. Da quel momento tante cose sono cambiate.
L’AI pre-generativa è fondamentale per realizzare task quali la classificazione, la regressione (ovverosia l’equivalente della classificazione ma su variabili continue), il clustering, ecc, ma non impone un cambio di mentalità, offre strumenti potentissimi che si affiancano al normale sviluppo applicativo classico. Diciamo (semplificando tantissimo) che lo sviluppo classico copre i casi d’uso in cui serve determinismo e i requisiti sono ben definiti mentre l’AI pre-generativa copre quei casi d’uso in cui i requisiti non sono fortemente definibili e una certa dose di non determinismo è accettabile, se non addirittura auspicabile.
L’AI generativa invece impone un cambio di prospettiva perché va a coprire casi d’uso nuovi: il futuro degli LLM non sarà un nuovo chatbot ancora più potente degli esistenti (che comunque arriverà), il futuro dei prossimi 2 o 3 anni degli LLM sono gli agent: componenti software che interpretando il linguaggio naturale svolgono azioni applicative complesse, dialogando con altre applicazioni tramite API. Ad esempio un agent potrebbe emettere ordini di acquisto in automatico analizzando in autonomia le scorte di magazzino e chiamando le API delle varie applicazioni coinvolte per emettere gli ordini, controllare poi il tracking della merce ordinata (chiamando le API dei corrieri) e lanciare alert in caso di problemi nella consegna (interagendo con le app di messaggistica) al responsabile di magazzino, proponendo anche soluzioni per gestire i problemi. Si tratta di un cambio di paradigma in quanto oggi le applicazioni rispondono agli umani ed eventuali automatismi oggi presenti sono comunque deterministici (eseguono azioni basate su un sistema di regole), domani invece gli agent possono “comprendere” cosa stia avvenendo nei sistemi e intervenire operativamente. Sentiremo prestissimo parlare di RAG, di knowledgement base, di applicazioni “agentiche”, di fine-tuning e refinement di LLM. Tutto ciò è il progresso più significativo che gli LLM stanno portando in dote.
Gli LLM sollevano numerosi dilemmi etici, come la gestione dei bias nei dati. Come pensi che possano essere affrontati questi problemi?
Applicazioni pratiche per LLMDomanda difficilissima. Avrei tante possibili risposte e nessuna soddisfacente. Sono un tecnico, non sono né un filosofo, né un sociologo né un futurologo. Rischierei di dire cose troppo banali se provassi ad articolare una risposta alla tua domanda. Non è scortesia non rispondere, è che c’è troppa gente che non sa niente di AI però pretende di dire la sua sull’eticità dell’AI. Conosco l’AI dal punto di vista tecnico, sugli impatti etici dell’AI ne posso vedere i pericoli, e anche le potenzialità, ma non mi sento di dire la mia sull’argomento dell’eticità dell’AI, non voglio aggiungermi alla schiera di chi parla senza avere le giuste qualificazioni sullo specifico argomento.
Secondo te, quali sono oggi le applicazioni reali più promettenti degli LLM e come pensi che influenzeranno le industrie nei prossimi 5-10 anni?
LeadershipCome accennato sopra, le applicazioni reali più promettenti sono gli agent. Ci saranno vari tipi di agent, implementati in svariati modi sul cloud, sull’edge, on premise. Si parla anche di AI fisica, ci saranno degli agent che gireranno a bordo di supercomputer che gireranno dentro il robot stesso. Non bisognerà aspettare tanto tempo, tra pochi mesi ci sarà in commercio un supercomputer in miniatura a costi simili a quelli di un buon laptop.
C’è anche un’altra evoluzione degli LLM: gli LCM, acronimo di Large Concept Model, che sono dei modelli che lavorano con intere frasi anziché con parti di parola (i c.d. token) come avviene per gli LLM.
Agent e LCM saranno il prossimo futuro che influenzeranno le industrie nei prossimi 5 anni.
Come CTO, qual è la tua filosofia quando si tratta di guidare team tecnici? Come stimoli l’innovazione e mantieni alta la motivazione del tuo team?
TrendsLa “T” di CTO ovviamente mi porterebbe a massimizzare il risultato tecnico, ma la “C” e la “O” mi portano a considerare altri aspetti, quali i costi, il rispetto delle normative, l’utilità commerciale. Invito quindi i team a considerare il fatto che non si vive solo di tecnologia, ma che nella vita aziendale vi deve essere un equilibrio. Solo sulla sicurezza non faccio sconti perché la sicurezza è un aspetto non derogabile, mentre l’adozione immediata dell’ultimo grido della tecnologia non è un must. Stimolo l’innovazione mostrando che non si deve restare sempre nella propria zona di confort ma nemmeno bisogna sempre saltare al volo sull’ultimo treno tecnologico appena partito.
Il mondo tecnologico è in continua evoluzione. Come resti aggiornato sulle nuove tendenze e decidi su quali investire o implementare?
Il ruolo della curiositàUso al massimo tutto quello che la tecnologia oggi offre a livello formativo e informativo: ebook, paper, forum specializzati, abbonamenti a riviste online, podcast, corsi online, ecc. La cosa più importante, per me, resta la sperimentazione: fare esperimenti, fare prototipi, esercizi. Sperimentare senza supporto teorico non va bene, si perde tantissimo tempo e si procede a tentoni, ma limitarsi ad ascoltare passivamente la divulgazione è troppo poco. Se la sperimentazione rientra nel contesto lavorativo, ovviamente la svolgo in azienda con strumenti aziendali; se invece riguarda la sfera extra-lavorativa, svolgo i miei studi e i miei esperimenti dopo cena e, quando ha senso, li condivido su https://ettoremessina.tech/, su https://computationalmindset.com/ e su https://github.com/ettoremessina/.
Cosa alimenta la tua curiosità in campi come il calcolo quantistico e il reverse engineering?
Bilanciare lavoro e passioneAlcuni tecnici informatici sono troppo verticalizzati, hanno forti skill su un solo argomento e trascurano gli altri. Io, per mia mentalità, preferisco avere skill a “T”, ovvero avere una conoscenza ampia su molti settori e poi verticalizzare su quei 4 o 5 (mai uno solo) argomenti con cui si ha una certa affinità. Ad esempio il calcolo quantistico mi attira (anche se a oggi i casi d’uso pratici sono limitatissimi) perché la matematica è sempre stata la mia materia preferita al liceo, ho avuto modo di approfondire molto la matematica all’università (e anche dopo); la programmazione quantistica richiede, ad oggi, una necessaria conoscenza di una certa matematica avanzata che conosco e che amo poterla applicare in contesti informatici pratici.
Riguardo al reverse engineering, questo deriva dal lontano passato, da quando da ragazzo programmavo in assembly sul 6510 (la CPU del Commodore 64) e poi intorno ai 20 anni in assembler sulle CPU x86 (facevo driver per MSDOS e per le prime versioni di Windows). Da lì poi ho sempre seguito le evoluzioni dell’assembly, sia x64 che ARM che delle GPU. Naturalmente ora non uso l’assembly per sviluppare, però ho imparato l’arte (dell’assembly) e l’ho messa da parte, e adesso l’ho tirata fuori e la uso per il reverse engineering anti malware.
Con una gamma così ampia di interessi, come riesci a bilanciare le tue responsabilità professionali con i progetti personali e il blogging?
Competenze chiavePer me è un must, tengo fortemente separati gli ambiti lavorativi dagli ambiti personali. Nel mio blog, nel mio GitHub, nel mio sito non c’è mai niente che riguarda gli artefatti prodotti al lavoro, la cui proprietà intellettuale è dell’azienda. Vale anche il viceversa: al lavoro non utilizzo mai artefatti personali che ho condiviso su Internet. Uso anche computer diversi, i computer che uso al lavoro non sono quelli che uso per i progetti personali. Anche le licenze software che ho in azienda non le uso per i progetti personali e quando mi servono personalmente le compro con il mio account personale.
È chiaro che poi la mente è una sola e se imparo una cosa in un ambito poi non posso far finta di non saperla nell’altro; però per deontologia professionale sto molto attento a separare i due ambiti e direi che vi riesco molto bene.
Quali qualità consideri essenziali per chi vuole intraprendere una carriera nel settore IT e distinguersi in un ambiente tecnologico sempre più competitivo?
Impatto della tecnologiaLa qualità che considero essenziale è avere la capacità di formarsi skill a “T”: quindi avere curiosità e voglia di conoscere tutti i vari aspetti dell’IT e di conoscerne gli scopi, i confini e le evoluzioni (e anche un po’ di storia). Dopodiché scegliere 4 o 5 argomenti (anche 2 o 3 a limite, ma mai uno soltanto) e approfondire questi a livello professionale; ed essere sempre pronti poi ad abbandonarne qualcuno a favore di qualche altro argomento più attuale. Secondo me se si intraprende la carriera IT specializzandosi solo su un argomento si rischia l’obsolescenza professionale già a 30 anni.
Qual è la cosa principale che vorresti che più persone comprendessero riguardo alla tecnologia e al suo impatto sul mondo?
Futuro professionaleBasterebbe leggersi l’“EU Cyber Resilience Act” o l’“EU AI Act” o il “GDPR” per capire l’impatto della tecnologia sul mondo. Ovviamente chi dirige un’azienda ne è a conoscenza, ma sarebbe bello che tutti gli attori coinvolti avessero contezza dei danni che si possono involontariamente provocare con l’informatica per superficialità o irresponsabilità…
Puoi darci un’anteprima di ciò che ti aspetta nella tua carriera o nei tuoi progetti personali?
Sicuramente un forte impegno sugli agent LLM (quindi RAG, fine tuning, knowledgement base, ecc). Questo impegno è già in essere e avrà implicazioni sia sulla mia carriera professionale che sui progetti personali (ovviamente sempre tenendo distinti gli ambiti). Sui progetti personali prevedo inoltre studi sull’high performance computing (anche in vista dell’uscita di un supercomputer miniaturizzato tra pochi mesi) e in particolare la programmazione CUDA in C/C++. E sulla sicurezza, oltre al reverse engineering su ARM, prevedo esperimenti nel mondo degli IDS (intrusion detection system). Quest’ultima cosa degli IDS potrebbe avere anche applicazioni al lavoro nello svolgimento dei mio ruolo di CISO.