Introduzione
Qualche tempo fa lessi velocemente un articolo [1] che mi colpì per l’approccio serenamente “positivista” all’annoso dibattito su quali linguaggi uno sviluppatore debba conoscere come base e quali debba imparare in questo particolare frangente storico.
In breve, l’articolo elencava tre linguaggi ben “assodati” — nell’ordine JavaScript, Java e Python — supportando questa lista ristretta con considerazioni di tipo tecnologico (caratteristiche del linguaggio e scenari di applicazione), didattico (facili o difficili da imparare, più o meno utili per impararne altri) e monetario (spendibilità sul mercato e possibilità di guadagno annuale).
Se, per quest’ultimo aspetto, il riferimento a un mercato come quello statunitense di sicuro giovava ad avere determinate certezze, mi era sembrato un po’ sbrigativo il modo in cui venivano liquidate le altre questioni.
Di certo, però, l’articolo aveva suscitato una serie di interrogativi cui solo adesso, a distanza un paio di mesi, cerco di rispondere su queste pagine. In maniera peraltro del tutto non esaustiva: si tratta più che altro di ragionamenti “in libertà”, che tengono però in considerazione anche certe peculiarità del panorama italiano, sia per quanto riguarda la formazione che la struttura del mercato del lavoro del nostro Paese. E, quando vengono forniti, si tratta di suggerimenti rivolti principalmente a giovani sviluppatori che stanno costruendo il loro “arsenale” di conoscenze e di esperienze tecnologiche.
Non dimentichiamoci del COBOL…
No, non sto proponendo questo “antico” e glorioso linguaggio come nuova frontiera della programmazione… ma intendo fare riferimento al COBOL come metafora della storia di un linguaggio di programmazione. Inventato circa sessanta anni fa, “riveduto e corretto” a più riprese, con aggiornamenti significativi nel 2002, resta un linguaggio in cui sono scritte alcune applicazioni di importanza critica soprattutto in ambito bancario/finanziario e militare.
Java: un grande classico
Ebbene, come già si sente dire da più di un decennio [2] con un leggero accento negativo, Java è il nuovo COBOL: tante applicazioni critiche nei più svariati ambiti sono scritte in Java e le varie versioni di Java concorrono a fare di questo linguaggio uno dei più conosciuti a livello mondiale. A questo aggiungiamo che esso è spesso studiato anche in ambito universitario, che si presta a numerose applicazioni e che è “propedeutico” all’apprendimento di altri linguaggi per tutta una serie di motivi legati a una sintassi che richiede conoscenza e ragionamento per essere padroneggiata.
Di fatto, Java, con le sue grandi potenzialità e i suoi limiti, resta tra i linguaggi maggiormente ricercati a livello di industria di sviluppo del software. Ce lo confermano anche una serie di indicazioni provenienti da sistemi — più o meno affidabili, ma comunque abbastanza diffusi e comunemente accettati — per calcolare quanto un linguaggio è importante sui motori di ricerca. Al momento della stesura di questo articolo, l’indice TIOBE [3] lo colloca al primo posto.
Altri indici, quali il PYPL [4] o il rapporto Octoverse [5] non mettono Java al primo posto, ma lo collocano comunque sempre sul podio: tutto questo per dire che Java resta sempre uno dei principali linguaggi di programmazione; è uno strumento versatile e adatto, ad esempio, tanto al back-end che allo sviluppo di applicazioni mobile, e questo lo colloca di sicuro nel bagaglio di conoscenze del buon programmatore.
Ma questo articolo non intende parlare diffusamente di Java, quanto invece concentrarsi su altri linguaggi che, per svariate ragioni, meritano grande attenzione.
Gli “incompleti” indispensabili
In questo calderone mettiamo dei linguaggi importanti che occorre conoscere e che, però, da soli non bastano a lavorare: per questo parliamo di “incompleti”. JavaScript è il primo esempio che viene in mente, e SQL potrebbe essere un altro. E guarda caso, si tratta di linguaggi che occupano i primi posti nel survey 2018 di Stack Overflow [6].
Il successo consolidato di JavaScript
Le ragioni per cui JavaScript è costantemente al primo posto [5] tra i linguaggi più usati sono presto dette:
- ha una “storia” ormai consolidata (le primissime versioni sono del 1995), con tantissimi casi di adozione ed enormi quantitativi di risorse didattiche;
- funziona bene per i compiti per cui è pensato: come ebbe a dire più di dieci anni fa Jeff Atwood, “Se un’applicazione può essere scritta in JavaScript, alla fine verrà scritta in JavaScript” [7];
- è relativamente facile da imparare: con la sua sintassi flessibile e “tollerante”, consente ai programmatori di avvicinarsi al linguaggio senza eccessivi problemi;
- con le attuali macchine e i moderni browser, le prestazioni sono ottime;
- è versatile e adatto a tipologie diverse di applicazioni, pur necessitando di altri linguaggi e/o framework per risultare utilizzabile appieno: abbinato a HTML e CSS è la lingua franca del web e non mancano strumenti per lo sviluppo front-end ormai consolidati come Angular, React, Ember, Backbone; inoltre, con l’uso dell’ambiente run-time js [8], JavaScript “puro” può anche essere usato lato server.
Certo, restano alcuni aspetti “discussi” legati alla natura di linguaggio a tipizzazione dinamica e interpretato: nonostante gli enormi passi in avanti fatti negli ultimi anni, JavaScript non è certo il linguaggio più adatto per applicazioni che debbano, anzitutto, essere davvero grandi e inattacabilmente robuste.
Questa considerazione ha però avuto un peso sulla nascita e lo sviluppo di uno dei linguaggi su cui si stanno attualmente rivolgendo molte attenzioni: TypeScript [9]. Sviluppato da Microsoft a partire dal 2012 con approccio libero e open source, TypeScript si propone di aggiungere a JavaScript quello che manca per farne un linguaggio robusto e scalabile, in particolare introducendo la possibilità di tipizzazione statica delle variabili. Concettualmente, TypeScript è stato pensato per rendere JavaScript un suo sottoinsieme, estendendone la sintassi. Quando necessario, quindi, diventa possibile utilizzare classi, interfacce, moduli, tipi di dato e così via, ma la cosa non è obbligatoria. Alla fine il codice viene ricompilato in JavaScript che poi funziona secondo i canoni consueti.
L’ascesa di popolarità di TypeScript è ben riportata nel rapporto Octoverse 2018 [5]: 7° in assoluto tra i linguaggi più usati e 3° tra quelli con il maggior tasso di crescita nell’adozione.
SQL per tutte le stagioni
Altro linguaggio che va annoverato tra quelli “indispensabili” è SQL: è chiaro che nessuno costruirà una app esclusivamente a partire da SQL, ma — nonostante i sempre più diffusi paradigmi non relazionali [10] per i sistemi di persistenza — il caro vecchio database relazionale sarà sempre presente in gran parte delle applicazioni con cui si può misurare uno sviluppatore.
Comprendere la struttura dei data storage più diffusi e saper recuperare dati da essi è una competenza che anche gli sviluppatori front-end dovrebbero acquisire. Se a questo aggiungiamo che si tratta di un linguaggio piuttosto facile da imparare, e che la prima implementazione risale a quarant’anni fa, è chiaro che SQL resta uno strumento dal quale non si può prescindere.
Sorpresa Python
Pur non essendo nei primissimi posti nelle varie “classifiche”, Python [11] è comunque sempre piazzato tra i linguaggi più conosciuti e adottati: del resto, esiste da più di un quarto di secolo e ha superato la prova del tempo. Alla sua diffusione ha contribuito sicuramente anche il fatto di essere fra i linguaggi forse più piacevoli da imparare: ha una sintassi chiara e intuitiva, e un codice pulito, leggibile e ben strutturato grazie all’indentazione che, va ricordato, incide sulla sua esecuzione.
Ciò che sorprende è che in questi ultimi tempi Python sia tra i linguaggi più ricercati e che destano maggior interesse: al momento della stesura di questo articolo è primo fra i Most wanted languages su Stack Overflow [12], e primo sull’indice PYPL (PopularitY of Programming Language) [4].
A cosa è dovuta questa crescita di interesse? Python funziona su innumerevoli sistemi e piattaforme, si presta a sviluppare applicazioni di diverso tipo — il framework per applicazioni web Django [13] è presente nello stack tecnologico di molti importanti siti di rilevanza mondiale —, ha un gran numero di librerie di supporto; ma forse non è questa la chiave per capirne l’attuale successo.
Il fatto è che, da sempre, Python ha ricevuto grande attenzione, spesso in ambito accademico, per applicazioni di tipo scientifico e matematico che si sono riflesse nel campo dell’intelligenza artificiale e del machine learning, due temi decisamente caldi in questi ultimissimi anni e che hanno contribuito sicuramente alla crescita esponenziale dell’interesse per Python. E siccome i temi della Data Science — in senso ampio — saranno ancor più importanti nell’immediato futuro, Python è un linguaggio destinato a mantenere le sue posizioni, proprio in virtù di quello che può offrire in tale direzione.
Piccoli ma agguerriti
Ed eccoci a una serie di linguaggi che di sicuro hanno tassi di adozione decisamente bassi ma che, per ben precise ragioni, meritano grande attenzione e stanno presentando sviluppi importanti: stiamo parlando di Go [14], Kotlin [15] e Swift [16].
A differenza che con i linguaggi citati fin qui, non siamo in presenza di numeri enormi. Ma questo non deve trarre in inganno. Anzitutto, abbiamo a che fare con “bambini” sotto i dieci anni di età — abbondantemente, nel caso di Swift — e abbiamo visto come i tempi di definitiva affermazione di un linguaggio possano ampiamente distendersi sulle decine di anni. E poi, per quanto i numeri siano ancora magri, è il tasso di crescita che deve far riflettere: nel rapporto Octoverse 2018 [5], Kotlin è al primo posto tra i Fastest growing languages.
Go
A poco a poco, Go comincia a farsi spazio dopo anni di lenta crescita. Tra gli “emergenti” degni di nota è il più vecchio, essendo stato creato nel 2009 da Google con l’intenzione — consentitemi la semplificazione — di realizzare un C/C++ più semplice, sicuro e meno “impegnativo” per il programmatore. Su queste pagine se ne era parlato qualche anno fa [17].
La versione 2, che è stata annunciata ma che è ancora lontana dall’arrivare, risolverà molti dei problemi ancora presenti nel linguaggio, consentendo alle sue caratteristiche positive di spingere ancor più l’adozione di Go. Go, infatti, è relativamente facile da imparare anche in virtù di una sintassi ridotta e di un codice di facile comprensione; ma ciò che lo rende vincente è la sua efficienza computazionale: c’è un’ottima gestione della programmazione concorrente e il codice viene compilato.
A questi aspetti positivi va aggiunta una buona versatilità: adatto allo stile architetturale a microservizi, ai web server, al newtorking, Go è, ad esempio, il linguaggio con cui sono realizzati Kubernetes e Docker, o parti importanti dell’architettura di Dropbox o Netflix, tanto per citare solo due servizi di adozione planetaria, visto che ce ne sarebbero molti altri.
Per tutti questi motivi Go è un linguaggio da tenere sicuramente in considerazione per i prossimi anni.
Kotlin
Senza girarci tanto intorno, possiamo dire che Kotlin è stato probabilmente il “linguaggio dell’anno”: i numeri di adozione sono ancora molto bassi, ma l’attenzione, il tasso di crescita, l’interesse intorno a questo linguaggio sono stati davvero notevoli. Su MokaByte è stata recentemente pubblicata una bella serie di quattro articoli [18] dedicata a Kotlin alla quale rimandiamo per approfondimenti.
Qui basti ripetere quello che, semplicisticamente, si può dire a proposito di questo promettente linguaggio: con le sue caratteristiche di linguaggio funzionale accanto al paradigma Object Oriented, e con la sua completa interoperabilità con le librerie e la Virtual Machine di Java, Kotlin è una sorta di Scala migliorato, senza certi problemi di quest’ultimo.
Grazie al pieno supporto in Android Studio, Kotlin sta diventando uno dei linguaggi di elezione per lo sviluppo di applicazioni mobile su quei sistemi; e il fatto che, attraverso opportune funzionalità degli IDE (sia IntelliJ IDEA che Eclipse), sia possibile convertire le classi Java in Kotlin rappresenta sicuramente un motivo in più per l’adozione di Kotlin anche da parte di aziende che abbiano grandi code base scritte in Java, che così non vanno perse.
Ma l’assunto “Kotlin = linguaggio per sviluppare app Android” rappresenta solo una visione parziale della questione: Kotlin può essere usato anche nello sviluppo di applicazioni lato server, quali microservizi o applicazioni web; e non mancano i tentativi [19] per rendere il codice Kotlin utilizzabile su numerosi sistemi operativi, desktop o mobile.
Quali che siano le evoluzioni future del linguaggio e la reale ampiezza delle sue possibilità d’uso, Kotlin è di sicuro una delle novità tecnologiche degli ultimi anni più promettente e potenzialmente destinata a lasciare il segno.
Swift
Di tutti i linguaggi citati in questo articolo, Swift è il più “verticale”, nel senso che ha un uso limitato e ben preciso: sviluppare applicazioni per sistemi operativi e dispositivi di casa Apple. Nato nel 2014, Swift è giunto nel 2017 alla versione 4 con notevoli miglioramenti rispetto alle precedenti e si è proposto di mandare in pensione Obiective-C mai troppo amato dagli sviluppatori.
Con Swift si possono sviluppare applicazioni per macOS e iOS, ma anche per i dispositivi indossabili e la Apple TV. Il codice Swift è sintetico ed espressivo, e risulta facile da leggere; la gestione automatica della memoria, inoltre, semplifica alcune scelte programmatiche e facilita la realizzazione di applicazioni performanti. D’altro canto, una certa “immaturità” del linguaggio ancora si riscontra con qualche instabilità e con una ridotta disponibilità di risorse “didattiche” rispetto ad altri linguaggi.
Anche qui, il discorso sull’adozione è molto semplice: Swift è pensato per le API Cocoa e Cocoa Touch. Se, come freelance, startup o software house più strutturata, si prevede di programmare estensivamente per i sistemi Apple, Swift è un investimento da fare sicuramente in termini di studio e di ambiente di sviluppo: la sua “verticalità” è ripagata dal fatto che, per quanto non il più grande in termini assoluti, il mercato delle applicazioni mobile Apple resta il più remunerativo e non si intravvede certo all’orizzonte un declino del mondo iOS. Se poi si conoscono altri linguaggi per lo sviluppo mobile e si intende ampliare il proprio “arsenale”, Swift potrebbe rappresentare una valida “estensione” alla propria cultura di sviluppatore.
Conclusioni
In un panorama in cui Java ancora mantiene — a ragione — un importante ruolo, si stanno affermando in questi ultimissimi anni alcuni linguaggi potenti e potenzialmente destinati a grandi fortune. Il caso di Kotlin è forse quello più eclatante: senza diventare inutilmente “collezionisti” di linguaggi, è bene però per gli sviluppatori mantenere un’attenzione a cosa si muove appena sotto la superficie e dedicare del tempo allo studio di quelle novità che sembrano aprire una nuova stagione nella storia della programmazione.