In modo perlopiù ignaro, praticamente tutti potrebbero avere quotidianamente interagito con Java. Effettuando operazioni bancarie online, acquistando biglietti aerei o ferroviari, usufruendo di servizi di streaming e persino giocando a Minecraft (beninteso nella sua “Java Edition”) spesso si sfrutta senza saperlo il potenziale del linguaggio di programmazione, che nel maggio del 2025 compirà trent’anni. Questo traguardo sarà sottolineato e celebrato con tutti i crismi ai Voxxed Days Ticino 2025, previsti il 16 e il 17 gennaio a Lugano. Un’occasione per ripercorrere tre decadi di storia della programmazione, iniziati ufficialmente con l’annuncio della sua uscita il 23 maggio 1995 da parte della Sun Microsystems, azienda californiana acquistata nel 2010 dalla Oracle Corporation per 7.4 miliardi di dollari.
La storia di Java risale a qualche anno prima, quando un gruppo di sviluppatori capitanati da James Gosling creò il linguaggio Oak, divenuto in seguito Java per ragioni di diritto d’autore. Ci sono varie versioni su come si sia giunti a questo nome. Le più accreditate fanno riferimento a una varietà di caffè indonesiano o al nome del bar in cui Gosling e i suoi colleghi discutevano del progetto e in cui verosimilmente veniva servito quel tipo di caffè (da cui il logo con la tazza fumante).
Aneddoti che testimoniano anche un certo affetto per un linguaggio di programmazione che per lungo tempo fu il più gettonato fra gli sviluppatori. I motivi del suo successo e i cambiamenti profondi introdotti da Java nel mondo della programmazione ci vengono illustrati da Tiziano Leidi, direttore dell’Istituto sistemi informativi e networking della SUPSI e membro del comitato organizzativo dei Voxxed Days Ticino.
Tiziano Leidi, direttore dell'Istituto sistemi informativi e networking della SUPSI. Nello schermo il logo di Java.
Che novità portò con sé Java trent’anni fa?
“Per farsi un’idea generale è opportuno parafrasare la definizione che venne data all’epoca: Java è un linguaggio di programmazione orientato agli oggetti, semplice, robusto, sicuro, portabile e progettato per essere indipendente dalla piattaforma. Di certo Java si presentò come un linguaggio che riusciva a consolidare dei concetti che fino a quel momento non avevano trovato una forma pura e ampiamente utilizzata, ma erano piuttosto soluzioni embrionali e di nicchia o estensioni di linguaggi esistenti. Mi riferisco soprattutto alla programmazione a oggetti”.
Spendiamo due parole sulla programmazione a oggetti.
“Rispetto alla programmazione procedurale, nella programmazione a oggetti si struttura il programma in moduli, chiamati appunto ‘oggetti’, che concettualmente riflettono un oggetto nel mondo reale. Tipicamente ogni oggetto viene definito nelle sue caratteristiche principali. A ciascuno di essi sono associati metodi, che ne specificano il comportamento. Il programma si compone di questi oggetti che interagiscono in vari modi fra di loro. Il suo sviluppo si avvicina molto al pensiero umano, facilitando lo sviluppatore: è una soluzione che consente di commettere meno errori, ma soprattutto permette di essere più rapidi, grazie al riutilizzo di codici preesistenti”.
“Parte del successo di Java è derivato anche da strumenti come il garbage collector e la virtual machine che semplificarono molto il lavoro degli sviluppatori. Il primo identifica e distrugge automaticamente gli oggetti inutilizzati che si creano nell’esecuzione di un programma, liberando memoria. Senza di esso bisognerebbe setacciare il codice ed eliminarli capillarmente. Inoltre, Java è stato uno dei primi linguaggi ad eseguire codice con una virtual machine: il codice sorgente viene compilato in un secondo codice – bytecode – che viene interpretato a sua volta. Questo permette di isolare l’esecuzione di un programma dal sistemo operativo. In altre parole: se scrivo un programma per Windows, grazie alla virtual machine potrà funzionare anche su Linux. Senza di essa andrebbe almeno parzialmente riscritto e compilato in forma specifica per il sistema operativo di destinazione. Non a caso uno dei motti di Java è ‘Write once, run anywhere’. Questi strumenti hanno permesso a Java di ritagliarsi uno spazio importante fra gli sviluppatori”.
Detto di aspetti tecnici, in cosa fu dirompente?
“L’aspetto forse più rilevante è stato che Java ha reso più accessibili delle soluzioni produttive efficaci. Potremmo paragonarlo a un’automobile: Java non è tanto l’auto da corsa che gira in un circuito, o un 4x4 che riesce ad arrampicarsi su sentieri montani. È un’auto comoda, uno strumento trasversale, in grado di affrontare molte sfide con parecchia facilità. Java ha avuto il pregio di innovarsi continuamente, ritagliandosi uno spazio rilevante nello sviluppo di grossi sistemi informatici. Nel settore bancario è diventato il flagship environment per la programmazione e la gestione di programmi in ambienti distribuiti: i classici ambienti web con struttura molto ampia che devono supportare l’esecuzione di transazioni complesse, ma anche avere capacità di sostenere un maggior carico in risposta all’aumento degli utenti”.
“Un altro elemento importante è la comunità di sviluppatori che è cresciuta attorno a Java. Sebbene grosse realtà come Oracle l’abbiano sempre tenuto sotto la propria ala, contribuendo in modo marcato al suo sviluppo, Java è rimasto open source, offrendo alla community l’opportunità di contribuire al suo costante aggiornamento. Questo gli ha permesso di guadagnare in popolarità, entrando nelle università affermandosi come linguaggio per l’apprendimento, più semplice da imparare rispetto ad altri. Va però detto che il suo successo non fu immediato: le prime versioni erano poco performanti, soprattutto nell’interfaccia utente, e si dovettero introdurre rapidamente delle migliorie per renderle efficace”.
Oggi dove lo si può trovare? Qual è un tipico esempio del suo utilizzo?
“Il più delle volte ignoriamo che c’è Java dietro le quinte. Buona parte dei sistemi a cui accediamo, dai servizi multimedia, a quelli bancari, passando per piattaforme di prenotazione o i marketplace, ricorre in qualche misura a questo linguaggio. Quando c’è una parte server importante e numerosi utenti che si collegano contemporaneamente è probabile che lo facciano a una struttura sviluppata in Java. Viene spesso definito server-side development. Non è l’unico linguaggio utilizzato per queste operazioni, ma rimane una soluzione privilegiata proprio perché garantisce una robustezza molto confortante per chi deve mantenere attivi grossi portali, che devono fornire continuità e che non possono soffrire di disservizi. Non bisogna poi dimenticare che Java è stato il primo linguaggio di programmazione ufficialmente supportato per lo sviluppo di applicazioni Android, anche se oggi gli viene preferito Kotlin”.
Sente i suoi 30 anni e la concorrenza di altri linguaggi? Spesso si parla di Python.
“Sono due linguaggi diversi con applicazioni diverse. Java è strong typed: per ogni variabile ne va definito il tipo. Ad esempio: se parlo di un numero devo specificare che sto parlando di un numero. Questo ovviamente rende la programmazione un po’ più macchinosa rispetto a Python che, essendo più flessibile nella scrittura, è meno prolisso di Java. D’altro canto, la necessità di definire ogni variabile non concede errori. L'assenza di verifica dei tipi in Python rende più probabile l'introduzione di bug difficili da individuare. Infine, Java è molto più elegante nella programmazione a oggetti”.
“Oggi si parla molto di Python sia per la rapidità e la facilità di scrittura che per il suo utilizzo nello sviluppo di metodi di machine learning e nella data science. Sono ambiti in cui c’è la necessità di descrivere ed eseguire un algoritmo. Java, come detto, gioca un ruolo più importante nei grossi sistemi che gestiscono database e innumerevoli transizioni contemporanee. Va anche detto che Python si sta affacciando a questo mondo, viceversa Java all’intelligenza artificiale. I linguaggi evolvono e, malgrado il suo essere prolisso, Java continua a difendersi bene e rimane un buon compromesso capace di coprire trasversalmente svariate esigenze di sviluppo”.
L'evoluzione della popolarità dei linguaggi di programmazione secondo il TIOBE Programming Community Index. In verde la traiettoria di Java. (Fonte: https://www.tiobe.com/tiobe-index/)
“La vera sfida per tutti i linguaggi di programmazione è legata ai Large Language Models (LLM) che iniziano ad avere capacità di programmazione di codice sorgente. È possibile che in futuro avremo strumenti estremamente flessibili che consentiranno di sviluppare in modo molto più dichiarativo, ovvero senza la necessità di specificare ogni operazione, ma indicando semplicemente al LLM ciò che il programma deve fare. Non siamo ancora arrivati a questo punto, ma la direzione verosimilmente sarà questa”.
I Voxxed Days sono nati come un evento Java, cosa farete per celebrare il suo anniversario?
“In effetti sin dagli albori i Voxxed Days hanno avuto una forte identità legata a Java e alla sua community, ma è chiaro che con il passare degli anni l’evento ha accolto contributi su altri linguaggi. Riflette il mondo della programmazione: oggi gli sviluppatori sono poliglotti. In Ticino è sempre un momento molto apprezzato e ha permesso di allargare la rete e di proporre contributi che hanno portato nuovi sguardi su questo mondo. Il 17 gennaio, con qualche mese d’anticipo, ne approfitteremo per volgere uno sguardo al passato e ricordarci cosa ha rappresentato Java per lo sviluppo di software. È evidente che guarderemo anche al suo futuro, interrogandoci su come potrà esserci continuità in termini di innovazione”.
“Avvertiamo già un bel fermento. Abbiamo ricevuto più di duecento proposte di contributi, un record! Non sarà facile scegliere, visto che ci sono a disposizione solo una trentina di momenti per gli speech. La community di sviluppatori risponde sempre ‘presente’ e ha voglia di conoscere le più recenti evoluzioni. Fra gli argomenti caldi ci sono l’utilizzo di Java per l’integrazione di Large Language Models e i Virtual Threads, introdotti in Java 19”.
Ma come si festeggia un linguaggio di programmazione? Simbolicamente farete un brindisi con una tazza di caffè indonesiano?
“Al termine dei Voxxed Days c’è sempre un ultimo brindisi collettivo. Di certo quest’anno lo dedicheremo a Java e alle opportunità che ha creato negli anni, con la speranza che rimanga un linguaggio di riferimento ancora a lungo. Stiamo pensando ad altri momenti simbolici e in generale vogliamo che sia un Voxxed Days memorabile, con speaker di grande rilievo e contenuti che non lasceranno indifferenti”.