Programmazione
Java è un linguaggio di programmazione tra i più diffusi e utilizzati al mondo.
Cos’è Java?
Per rispondere correttamente alla domanda “perché è importante conoscere Java nel moderno mondo della programmazione?” e comprendere quindi a fondo le argomentazioni a favore di tale risposta, risulta prima obbligatorio analizzare nel dettaglio che cos’è di fatto Java, termine che si è fatto gradualmente strada nell’ecosistema informatico tanto da risultare in esso tuttora quasi onnipresente.
Quindi, come definiamo Java?
Alcuni sviluppatori risponderebbero asserendo che Java è semplicemente IL linguaggio di programmazione. Nato nel lontano 1991 dalle menti geniali di due sviluppatori geniali chiamati rispettivamente Patrick Naughton e James Gosling, allora team-leaders del gruppo di ingegneri della Sun Microsystems, Java è infatti un linguaggio di programmazione tra i più diffusi e utilizzati al mondo.
La loro idea iniziale era quella di progettare un linguaggio dedicato alla programmazione di apparecchi elettronici di piccole dimensioni, tra i quali le televisioni digitali, che inizialmente fu battezzato “linguaggio Oak” in onore all’imponente quercia che Gosling poteva ammirare quotidianamente dal suo studio.
Tuttavia, il mercato degli apparecchi elettronici non offriva l’ambiente ideale per la riuscita le caratteristiche del progetto, che rischiava di terminare sul nascere, ma l’acume dei fondatori rimodulò gli obiettivi sfruttando la potenza del linguaggio di loro creazione per offrire un supporto di sviluppo indipendente dalla piattaforma di utilizzo. Il progetto fu rinominato quindi in “Java”, derivando tale termine dall’omonima isola dell’Indonesia, grande esportatrice di caffè, di cui soprattutto Gosling era ghiotto. E’ proprio per questo motivo che il famoso logo di Java è identificato da una tazza di caffè fumante.
Fu così quindi, che nacque “l’ambiente di sviluppo Java”, con la sua versione 1.0 rilasciata nel 1996, utile alla realizzazione di una moltitudine di prodotti digitali, tra cui software, applicazioni web, applicazioni native e applicativi gestionali.
Linguaggio robusto, portabile, distribuito e appositamente progettato per essere il più possibile indipendente dal sistema operativo in uso, Java è scelto da più di nove milioni di sviluppatori in tutto il mondo, e risulta attivo su oltre tre miliardi di dispositivi. Recentemente, è stato celebrato il venticinquesimo anniversario del linguaggio, insieme alla release della potente versione 14.
A cosa serve Java?
Per usare un’etichetta tecnica, possiamo innanzitutto affermare, a conferma di quanto descritto nella descrizione relativa alla sua creazione, che Java è un linguaggio “multi-purpose”, il che significa che non è disegnato appositamente per raggiungere un unico obiettivo. Attraverso l’ambiente Java possiamo infatti agire in una moltitudine di contesti anche molto differenti tra loro.
Possiamo dedicarci alla costruzione di applicazioni mobile in ambiente Android, lavorare con i big-data (insieme di dati di mole così elevata da eccedere le capacità di salvataggio, gestione ed analisi dei comuni sistemi per la gestione di basi di dati relazionali, o più semplicemente, dei database) e manipolare tali strutture.
Possiamo progettare applicazioni decentralizzate e strutturate sul cloud, sviluppare algoritmi di intelligenza artificiale predittiva e machine learning, operare nell’ambito dei software gestionali e, certamente, sviluppare ogni singola caratteristica di un’applicazione web full-stack (che gestisca ovvero sia la parte visibile all’utente, sia l’architettura back-end dell’applicazione stessa).
In questo particolare ambito, vale la pena di sottolineare come Java eccella sia per la sicurezza che può garantire attraverso la robustezza del codice, sia sull’architettura dell’ecosistema in cui tale codice è definito.
Quindi, a differenza di linguaggi di programmazione come PHP o Javascript (una nota importante: nonostante, purtroppo, alcuni sviluppatori tendono ad utilizzare i due termini in maniera intercambiabile, talvolta per abbreviare le proprie esposizioni nel linguaggio parlato, ricordati, Java e Javascript NON sono assolutamente la stessa cosa e NON sono minimamente correlati tra loro), che agiscono principalmente all’interno di un unico ambito e con un unico grande obiettivo, possiamo utilizzare Java per costruire applicazioni di natura eterogenea.
Alcuni degli strumenti e delle librerie che possiamo utilizzare all’interno dei vari progetti Java varieranno a seconda del contesto in cui stiamo operando, ma la componentistica sintattica del linguaggio, la sua composizione fondamentale, i suoi paradigmi di programmazione e le sue regole rimarranno invariate. Questo significa che, una volta carpite le dinamiche di azione del linguaggio stesso, potrai agire e sviluppare in tutti questi contesti decisamente richiesti dal moderno mercato nazionale ed internazionale!
Novità importanti in casa Java
Java, come tutti i linguaggi di programmazione, è in continua evoluzione. Questo significa che ogni major release (versioni con numero privo di parte decimale, es versione 7, 8, 15 e cosi via) porta con sé importanti novità e caratteristiche che vanno a semplificare e potenziare le capacità della versione precedente. In particolare, una versione che ha contribuito enormemente all’evoluzione di Java è stata la versione 8, che ha introdotto importanti novità che sono state la colonna portante di tutte le successive versioni, come l’aumento delle capacità delle interfacce, ovvero particolari strutture che permettono di definire le caratteristiche comuni delle strutture dato del linguaggio, la possibilità di creare tipi di dato che possono avere valori “opzionali”, preziose migliorie nelle API (acronimo di Application Programming Interface, ovvero, un set di strumenti fornito dal linguaggio allo sviluppatore) interne, come la Stream API, ma soprattutto l’introduzione delle cosiddette “espressioni lambda” che hanno definitivamente aperto la porta alla programmazione funzionale in Java.
Devi sapere infatti, che all’interno di un particolare linguaggio di programmazione, puoi adottare più “stili” di scrittura di codice, ognuno con le sue potenzialità e caratteristiche vincenti, così come un artista può disegnare un quadro utilizzando svariate tecniche di pittura. Sebbene lo stile di programmazione (chiamato tecnicamente “paradigma di programmazione”) centrale di Java sia l’orientamento agli oggetti (OOP, acronimo di Object-Oriented Programming), dalla versione 8 in poi puoi utilizzare anche il paradigma funzionale, che ha rivoluzionato enormemente il modo di intendere e scrivere codice applicato alla programmazione.
Personalmente, trovo straordinariamente appagante scrivere cosi usando questa strategia. Sono un fervido amante della qualità del codice, della sua estetica e di tutte le tecniche che mi consentono di “scrivere meno ed ottenere di più”, e per questo motivo non posso non apprezzarla. Per avere un’idea di come la programmazione funzionale possa semplificarti la vita, e di come possa rendere esteticamente più piacevole anche una semplice iterazione (ciclo ripetuto su una collezione di dati sequenziali), prova a confrontare le seguenti linee di codice:
for(int i = 0; i < nomi.length; i++) {
System.out.println( nomi[i ); }
Paradigma funzionale (>= Java 8)
nomi.forEach( nome -> System.out.println(nome) );
Come puoi notare, oltre al risparmio quantitativo di codice, otteniamo anche una maggiore semantica del codice stesso, caratteristica che nel moderno mondo della programmazione e dell’informatica in generale, ha acquisito negli anni fondamentale importanza. Ricorda: più il tuo codice è eloquente, più la sua qualità è alta.
Perché è importante conoscere Java?
La risposta a questa domanda è già in parte racchiusa in quanto abbiamo affermato finora. Il fatto che con Java puoi operare in una moltitudine di ambienti di sviluppo, significa che con la sua conoscenza puoi lavorare in qualità di sviluppatore in tutti i più comuni ambiti di produzione informatica.
Java è un linguaggio realmente molto richiesto dal moderno mercato informatico, basta fare un giro su piattaforme come LinkedIn e StackOverflow per osservare la mole di richieste lavorative che targetizzano sviluppatori Java junior e senior, in tutto il territorio nazionale ed internazionale.
Posso darti un’altra argomentazione molto solida. Dato che, come abbiamo detto all’inizio, Java viene da molti considerato IL linguaggio di programmazione, imparare Java significa letteralmente imparare a programmare.
Java è un linguaggio la cui curva di apprendimento si colloca tra i linguaggi più a basso livello (come C e C++) e quelli il cui apprendimento è generalmente più semplice, come PHP, Python e Javascript.
Questo significa che imparando a programmare in Java, impari ad utilizzare tutti i costrutti fondamentali della programmazione, che ritroverai in tutti gli altri linguaggi. Anzi, con Java impari ancora di più, dato che non è detto che tutto ciò che trovi in Java lo trovi in altri contesti.
Mettila cosi: imparando Java, puoi programmare in tutti gli altri contesti in poco tempo, anche in modalità più malleabile, mentre non è possibile affermare il contrario. Inoltre, la curva di apprendimento più morbida di Java rispetto a C e C++, fa in modo che tu possa capire molto più a fondo quei linguaggi, padroneggiando i loro costrutti più complessi, perché sono già stati affrontati in Java in modalità più “umana”.
Se quindi i miei studenti mi chiedono: “come imparo a programmare?” io di solito rispondo: “impara Java”. Ma non è finita qua. Io sviluppo in molti ecosistemi di programmazione differenti, e li insegno tutti. Ti posso garantire che il paradigma (stile) di programmazione di Java è tra i più unici al mondo.
Java è un linguaggio molto “pignolo”, perché è fortemente tipizzato. Questo significa che devi essere super-preciso quando programmi in Java, altrimenti la tua applicazione non potrà essere “compilata” e quindi eseguita. Altri linguaggi di programmazione a tipizzazione dinamica (o debole) ti consentono invece di essere più malleabile e quindi meno preciso nella scrittura, ma questa caratteristica fa sì che alcuni errori di programmazione, detti “errori di run-time” possano scappare alla tua presa e quindi complicarti non poco la vita in fase di debugging dell’applicazione stessa.
Questo è uno dei motivi per cui, ad esempio, la Microsoft ha creato TypeScript, un super-set di Javascript che permette di utilizzare una sintassi maggiormente Java-like quando programmi in Javascript. Pensa a Java come ad un linguaggio molto molto esigente: se scrivi codice corretto, la compilazione e l’esecuzione del software vanno a buon fine. Se scrivi codice incorretto, non puoi arrivare ad ottenere questo risultato.
La precisione e la maniacalità verso i dettagli che acquisisci rispettando le regole di Java è dunque estremamente utile in tutti gli altri contesti di programmazione, e ti permette di scrivere un codice robusto, flessibile, rispettoso di alti standard di qualità e moderno. Quindi, per rispondere in modo riassuntivo alla domanda iniziale, posso garantirti che la conoscenza di Java ti consente di essere richiesto sul mercato del lavoro e ti consente inoltre di essere potenzialmente attivo anche in altri ecosistemi di sviluppo. Davvero un’ottima combo, non trovi?
Se ti sta venendo voglia di imparare a programmare in Java, voglio dirti che sebbene ce la stia mettendo tutta, non riuscirò a comprimere in questo articolo tutta l’importanza di questa tecnologia per la tua carriera da sviluppatore, quindi posso affermare che ancora non hai “visto nulla”.
Java è una tecnologia che difficilmente userai da sola. Imparare Java significa, oltre a tutto quanto ho descritto, anche agire all’interno di un ecosistema di sviluppo molto vasto e articolato. Uno sviluppatore Java che si rispetti non solo possiede skills relative al puro linguaggio, ma sa padroneggiare anche altri potenti strumenti correlati, come Maven, Spring, Hibernate e SQL.
Analizziamoli brevemente.
Maven è un tool che ti permette di gestire e installare all’interno del tuo ambiente tutte le dipendenze (API, package, codici che vengono utilizzati al suo interno, anche prodotti da terze parti) della tua applicazione. Spring è un framework (set di strumenti e codici organizzati secondo un’architettura definita) che ti permette di creare un’applicazione web full-stack utilizzando un’architettura MVC (Model-View-Controller), dove la logica, la presentazione e la gestione delle richieste e dei responsi HTTP sono gestiti in maniera completa e professionale e sono opportunamente separati. Hibernate, che lavora spesso spalla a spalla con Spring, è un altro framework (categorizzato come operatore ORM, Object Relational Mapping) che consente di mappare strutture dati orientate agli oggetti e scritte in Java su un database relazionale, e quindi rendere persistenti i dati Java. Infine, SQL, è una tecnologia che ti consente di manipolare un database, e che lavorando in combinazione con Java ti permette di salvare i tuoi dati su un supporto persistente. Come puoi osservare quindi, un programmatore back-end Java è un programmatore che possiede davvero molte skills, che si intrecciano formando una qualità totale che è certamente superiore alla somma delle singole parti.
Come Java ha rivoluzionato la vita professionale di due persone
Voglio raccontarti le esperienze di due persone che, entrando in contatto con l’ecosistema Java, hanno ottenuto una rivoluzione nella loro carriera professionale. Sto parlando di me, e di una mia allieva, Laura.
La mia esperienza relativa all’universo Java è singolare. Ho imparato il linguaggio Java molto tempo dopo avere studiato la programmazione web full-stack (front-end e back-end) in chiave PHP e Javascript. Questo significa che quando ho appreso il linguaggio di casa Oracle, avevo già un grosso background sul mondo della programmazione, sia in ambito di sviluppo, sia in ambito di docenze.
Il mio percorso di studi di Java, mi ha permesso, non solo di specializzarmi anche nella realizzazione di software gestionali non basati sul web, ma anche di comprendere molto più a fondo tutte le tecnologie che già conoscevo. È stata una sensazione davvero molto liberatoria portare la “mentalità Java” all’interno di altri ecosistemi, e agire nel contesto dei software che richiedevano ambienti desktop. Grazie allo studio ed all’analisi dei sistemi di sicurezza implementati tramite Java e strumenti affini, ho potuto migliorare drasticamente le misure di protezione e controllo anche all’interno di ambienti web.
Inoltre, sono tornato allo studio di linguaggi di basso livello, come C e C++ (miei vecchi “pallini”) per richieste lavorative, e questo ha confermato quanto ho espresso precedentemente: la conoscenza approfondita e pregressa di Java consente di capire quei linguaggi più vicini al cosiddetto ambiente macchina in una modalità drasticamente semplificata.
Tutto ciò si è tradotto anche in un ampiamento delle collaborazioni lavorative e nella partecipazione a progetti di realizzazione che non avrei immaginato possibili solo qualche anno prima.
Il secondo scenario degno di nota riguarda una mia allieva, Laura. Arrivata al corso di formazione senza esperienze pregresse nel mondo della programmazione, in cerca di una collocazione lavorativa nel meraviglioso mondo dello sviluppo web, Laura è riuscita in tempi relativamente brevi, anche grazie ad un impegno profuso nello studio che definirei impeccabile, a comprendere le dinamiche più profonde del linguaggio e specializzarsi nella realizzazione di architetture web MVC sfruttando il framework Spring. E’ stato davvero interessante vedere il piano di crescita di una donna, che comunemente negli ambienti di sviluppo di produzione, è solita agire all’interno della sfera front-end e portare il classico “tocco femminile” relativo a layout, gusto estetico e impaginazione, specializzarsi all’interno di dinamiche back-end (e quindi di programmazione pura, algoritmica) anche molto complessi, e applicare quello stesso gusto estetico, comune nel panorama femminile, alla qualità del codice, alle componentistiche di sicurezza ed alle meccaniche server-side.
Ora Laura è una Senior Back-End developer per una multinazionale che produce software gestionali web-based realizzati in chiave Java.
Come iniziare con il piede giusto con Java?
Uno sviluppatore novizio che vuole intraprendere il cammino della conoscenza Java, deve certamente armarsi di molto impegno e passione.
Come ho detto, Java non è un linguaggio oggettivamente semplice da imparare, e racchiude in sé moltissimi costrutti della programmazione universale. Questo significa che se vuoi intraprendere questo percorso, devi essere pronto a ricevere una conoscenza a 360 gradi sulla programmazione, che ti renderà un vero sviluppatore, completo e competitivo sul mercato moderno. Non solo codice di qualità, quindi, ma anche studio sulle architetture back-end più moderne e delle tecniche di debugging (test dell’applicazione e rilevazione di eventuali bug e problematiche da risolvere) più efficaci.
Ovviamente, la presenza di un docente esperto e qualificato, e di un percorso di formazione creato ad hoc, semplifica questo lavoro del 70% se hai già programmato in qualche altro linguaggio a livello basilare, e del 100% se non hai altre competenze di programmazione pregresse. Il percorso deve focalizzarsi non solo sui dettami del linguaggio, ma anche sulle competenze richieste realmente dal mercato del lavoro, in modo da evitare di produrre uno sviluppatore “teorico”, ma piuttosto deve costruire una figura completa e pronta agli scenari che andrà ad affrontare in produzione e concretamente utile alle aziende, quindi molto competitiva.
Nel corso della mia carriera ho avuto il piacere di collaborare direttamente con sviluppatori che non potrei descrivere semplicemente come esperti, dato che hanno cambiato universalmente il modo di intendere il web e programmare sul web. Parlo di Zeev Suraski, il diretto co-creatore del linguaggio back-end PHP, e di John Resig, il realizzatore originale della leggendaria libreria Javascript chiamata jQuery.
Vedendo e studiando le loro produzioni ho potuto apprendere il significato più profondo di ogni singola riga di codice, il suo obiettivo specifico, la sua importanza a livello globale. Ho compreso perché un’architettura di programmazione veniva costruita in un dato modo, il motivo per cui un particolare design pattern (termine tecnico che indica una particolare tecnica di programmazione implementata costantemente dagli sviluppatori e indipendente dal linguaggio) veniva utilizzato in uno specifico contesto, e come la qualità del codice sia di importanza fondamentale nelle applicazioni di medie-grandi dimensioni.
Tutto questo è stato possibile anche grazie alla loro vicinanza e ai loro insegnamenti. La presenza di un “master” che tramandi passione e tecniche di programmazione di alto livello, che seguono un percorso di integrazione graduale ai meccanismi fondamentali della tecnologia di programmazione specifica, è di importanza vitale per la carriera di uno sviluppatore. Ecco perché la scelta di un percorso di formazione che offra queste caratteristiche possiede la medesima importanza. Ma ricorda, tutto questo deve essere condito e coadiuvato dalla tua passione e dal tuo impegno, oltre che ovviamente dal tuo talento personale, che, se utilizzati con le giuste dosi, ti porteranno a padroneggiare le tecnologie di programmazione e a raggiungere enormi soddisfazioni sul piano professionale.
Un’ultima nota: per fonderti con l’universo Java devi essere pronto alla sua “grammatica estesa”, quasi prolissa, che consente di definire ogni singolo dettaglio di quanto sta accadendo in ogni singola riga della tua applicazione, in maniera estremamente eloquente. Confronta il seguente codice scritto in linguaggio PHP per generare un messaggio di benvenuto:
<?php $message = “Benvenuto nell’applicazione!”;
echo $message; ?>
con il seguente codice Java che compie la medesima operazione:
class Welcome {
private final static String message = “Benvenuto nell’applicazione!”;
public static void main(String[] args) {
System.out.println( message );
}
}
Con lo studio di Java avrai ai tuoi comandi l’intero paradigma Object-Oriented.
Sei pronto per padroneggiarlo?