Qualche considerazione sui linguaggi di programmazione
Titolo pretenzioso stavolta… Molto più prosaicamente, vogliamo riprendere qui alcune riflessioni apparse in precedenti occasioni su questo sito [1] e [2] in cui si cercava di comprendere le tendenze per i linguaggi di programmazione più in voga, o più richiesti, o più diffusi nel panorama dello sviluppo software.
Qualche tendenza confermata
Per quanto le cose con gli anni siano cambiate, certe tendenze precedentemente individuate si sono tutto sommato rivelate fondate. In particolare
- Ci sono linguaggi che spesso si imparano “a gruppi” nel senso che esistono dei linguaggi estremamente importanti e molto diffusi ma “incompleti” — o meglio, specificamente pensati per determinate aree di intervento — con cui però, da soli, si può fare solo una parte del lavoro. Pensiamo a JavaScript o a HTML/CSS presi singolarmente. A differenza dei tempi che furono — davvero tanto tempo fa — non si pensa più a un solo linguaggio che fa tutto.
- Ci sono linguaggi ormai considerati vecchi e che, in effetti sono vecchi per davvero, perché magari inventati trent’anni fa o anche più, il che, in termini informatici, vale un periodo geologico. Eppure “vecchio” non significa necessariamente “superato”.
- Ci sono linguaggi nuovi e innovativi, estremamente potenti, che segnano un sicuro avanzamento sintattico e tecnologico. Magari hanno un ruolo chiave nello sviluppo di determinate applicazioni o nei confronti di certe piattaforme. Ciò nonostante, la loro diffusione e adozione è molto minore rispetto a quel che si potrebbe pensare.
Cosa ci dicono le “statistiche”
Esistono dei siti “di riferimento” che pubblicano annualmente o mensilmente la “classifica” dei linguaggi di programmazione più usati e diffusi nelle applicazioni esistenti, oppure di quelli che sono maggiormente richiesti al momento sul mercato del lavoro, oppure di quelli che i professionisti del settore dichiarano di voler apprendere nell’immediato futuro.
Queste classifiche, questi “indici”, questi “sondaggi” non hanno pretesa di assoluto specchio della realtà, e ciò si riscontra anche dal fatto che spesso le posizioni nell’elenco non corrispondono perfettamente.
Ma, nel complesso, ci aiutano comunque a farci un’idea del panorama, e ci consentono, specie se guardate in retrospettiva, di intravedere certe tendenze in atto.
Qualche numero, in libertà ma non troppo
Cominciamo allora a guardare qualcuna di queste “classifiche”, partendo dall’indice TIOBE [3] aggiornato a febbraio 2022 (figura 1)
Come è facile notare, ai primi posti ci sono linguaggi come Python, C e Java, che non son certo delle novità nel panorama. Per capire di cosa si sta parlando, l’indice TIOBE non è un giudizio di merito che ci indichi il miglior linguaggio di programmazione, ma è piuttosto un indicatore di popolarità di una certa tecnologia, aggiornato di mese in mese e basato su vari dati, tra cui il numero di tecnici che la conoscono e la quantità di ricerche effettuate sui motori di ricerca e sui siti di riferimento. Non si tratta neanche di un dato basato sulla quantità di applicazioni oppure sul numero di righe di codice scritte in un dato linguaggio. Con tutti i limiti, qualcosa ci dice.
Diversi sono i dati che ci provengono da Stack Overflow [4], che fa un resoconto annuo basato su questionari proposti al publico. In questo “sondaggio”, vengono prese in considerazioni tecnologie, piattaforme, linguaggi, database e così via e si fa una distinzione tra uso generalizzato e uso da parte dei professionisti, nel senso che esistono anche persone che, pur conoscendo un linguaggio di programmazione e usandolo, non lo usano in modo estensivo all’interno di attività lavorative.
Qui i risultati derivano da un altro tipo di considerazioni: si tratta di un questionario a cui rispondono decine di migliaia di professionisti ai quali viene chiesto quale siano i linguaggi che hanno usato estensivamente in progetti durante l’anno e quali useranno — o desidererebbero impiegare/imparare — nel corso dell’anno successivo.
I primi posti, in questo caso, sono appannaggio di JavaScript, HTML/CSS e SQL, facendo intuire che chi ha compilato i questionari si occupi sostanzialmente di sviluppo di siti e applicazioni web. Ma anche qui, resistono certi “classici” com Python che è appena fuori dal podio, e Java che è dichiarato come usato da più di un terzo dei rispondenti.
Percorsi di studio
A fornire indicazioni sul “miglior” linguaggio da imparare sono anche “agenzie formative” ai vari livelli, che spesso propongono i loro percorsi formativi soppesando i diversi elementi insiti nel trasferimento di competenze informatiche: quanto è “potente” il linguaggio che si va a imparare, quanto è propedeutico e abilitante all’apprendimento successivo di altri linguaggi e anche quanto è immediatamente spendibile su un mercato ampio ma molto segmentato.
In tale ottica possiamo leggere la proposta di un istituto di formazione, Berkeley Extension, che fa capo all’Università della California [5].
Breve rassegna sui linguaggi
Sì, ma in definitiva, per un neofita che si avvicini alla programmazione, o per un programmatore che conosca qualche linguaggio, quale potrebbe essere la scelta “migliore” da fare nell’intraprenderne lo studio?
Per quanto scontata, la risposta è che una scelta “migliore” valida sempre non esiste. È chiaro che per uno studente è fondamentale imparare uno o più linguaggi che consentano anzitutto di apprendere le basi logiche, sintattiche, le difficoltà e a volte anche le contraddizioni della programmazione.
Ben diverso è il discorso per un professionista, anche junior, che voglia ampliare il proprio “arsenale” di strumenti e che si orienterà su nuove conoscenze facendo sicuramente riferimento a quello che già conosce, al mercato in cui si muove o su cui intende proporsi, alle esigenze dell’azienda per cui lavora, alle possibilità di “spendibilità” delle competenze anche in futuro.
Vediamo quindi una rapidissima carrellata su alcuni linguaggi, dividendoli non in base alle già illustrate “classifiche” ma piuttosto in quelli orientati ai dati e alla logica di programmazione lato server (come C/C++/C# o Java o Python), quelli adatti al design visuale alla programmazione di interfacce (come JavaScript o TypeScript) e quelli più specificamente utilizzati nella programmazione di app per le diverse piattaforme mobili (come Swift / Objective-C per iOS di Apple).
Python
Per quanto non certo un “giovinetto” in termini di apparizione, Python sembra godere di una costante “gioventù” nel senso che molte statistiche lo danno come il linguaggio più usato da un gran numero di sviluppatori.
La presenza di numerose librerie ne facilitano l’adozione nei campi dell’intelligenza artificiale, dell’analisi statistica dei dati e dell’apprendimento automatico. Oltretutto è relativamente facile da imparare e da scrivere, dispone di buoni framework per l’utilizzo. Pertanto rientra sicuramente tra i linguaggi su cui un programmatore può investire tempo ed energie.
C++
C++ continua ad avere la sua importante posizione nel mondo tecnologico: il ranking nei vari indici varia di poco, di anno in anno, ma, al di là di queste classifiche che lasciano un po’ il tempo che trovano in quanto a valore assoluto, questo linguaggio OO è utilizzato estensivamente all’interno di grandi aziende tecnologiche e resta ampiamente utilizzato nello sviluppo di videogame, di applicazioni desktop e laddove sia necessaria una ottimizzazione delle prestazioni. Non va dimenticato poi che, nonostante non sia il linguaggi più facile da imparare se comparato con altri, resta comunque un’ottima base per poterne imparare di altri.
C#
C# funziona sulla piattaforma .NET ed è chiaramente legato al mondo Microsoft, dove è stato sviluppato a partire dal 2000. È un linguaggio ben congegnato, relativamente facile da capire, può fare affidamento sulle numerose librerie .NET, ed è utilizzato, oltre che ovviamente all’interno di Microsoft, anche da altri grandi gruppi. Se si guarda alla spendibilità di un linguaggio, C# è un linguaggio da non trascurare, vista l’elevata richiesta di programmatori che lo conoscano.
JavaScript
Se passiamo ai linguaggi destinati allo sviluppo frontend, JavaScript è uno dei linguaggi di programmazione più popolari in assoluto e sempre con grande richiesta. Indipendente dalla piattaforma, non solo è relativamente facile da padroneggiare, ma dispone di una codebase ben organizzata e di grande aiuto per favorire sia l’apprendimento che la produttività. Se abbiniamo queste caratteristiche al fatto che JavaScript è usato ubiquitariamente, possiamo capire perché resti un pilastro tra i linguaggi da conoscere.
Java
Di Java viene celebrato il funerale ogni anno, e di sicuro la sua parabola è stata complicata dalle vicende dello scorso decennio che hanno infine portato alla ridefinizione delle piattaforme standard ed enterprise nelle nuove versioni di Java e Jakarta EE. Ciò nonostante, il linguaggio resta alla base di una miriade di applicazioni, sia di tipo desktop che mobile, funzionanti in vari ambiti applicativi, dallo sviluppo web alle applicazioni cloud. Indipendenza dalla piattaforma, produttività ormai “consolidata” da anni e anni di esperienze, sicurezza intrinseca, adozione diffusa rendono Java, ancora oggi, un linguaggio dal quale è difficile prescindere. E non va dimenticata la sua “propedeuticità” all’apprendimento di linguaggi più specifici, magari dedicati a un preciso ambito di sviluppo.
Kotlin
E Kotlin è proprio uno di questi linguaggi… Kotlin è un linguaggio multipiattaforma in grado di operare con il Java Runtime Environment e che quindi può funzionare con ogni ambiente per cui esista una Java Virtual Machine. Le potenzialità di Kotlin non finiscono qui, comunque visto che il compilatore è in grado produrre anche codice JavaScript. Viene usato principalmente per lo sviluppo di applicazioni Android ed è uno dei linguaggi in maggior espansione. Non solo l’interoperabilità gioca a favore di Kotlin, ma anche la sua efficienza, la sua efficacia e la sempre più ampia diffusione.
Go
Analoghe considerazioni possono essere fatte per Go, messo a punto in Google alla fine degli anni Zero, e diventato oggi uno dei linguaggi di programmazione più affidabili ed efficienti, non solo per la programmazione di applicazioni Android, come spesso si tende a pensare. Abbastanza facile da capire e da imparare, specie se già si conoscono linguaggi come C o Java, si presta a un gran numero di utilizzi e si propone come uno delle tecnologie più promettenti nell’ambito della programmazione dei prossimi anni.
Swift
Concludiamo questa rapida carrellata con Swift un linguaggio di programmazione robusto ed efficiente, creato da Apple per programmare applicazioni per i suoi sistemi operativi (iOS, watchOS, macOS) che girano sulle diverse famiglie di dispositivi Apple. Relativa facilità di apprendimento, supporto per librerie dinamiche, notevoli prestazioni, e un mercato di app remunerativo fanno di Swift un altro ottimo investimento nell’apprendimento di un linguaggio.
Conclusioni
L’abbiamo detto: non esiste un linguaggio che, in senso assoluto, sia meglio imparare rispetto a un altro. I prossimi anni vedranno probabilmente un assestamento del panorama su tendenze ormai ben strutturate da qualche anno. Difficile pensare a qualcosa di disruptive — se non si voglia già dare per imminente la possibilità concreta di un pair programming assistito dall’intelligenza artificiale — nell’immediato futuro.
Più sensato invece progettare un percorso di formazione e di apprendimento che tenga in considerazione l’interesse dello sviluppatore e la spendibilità sul mercato IT:
Riferimenti
[1] Francesco Saliola, L’anno che verrà. Le tendenze tecnologiche per il 2016. MokaByte 213, gennaio 2016
https://www.mokabyte.it/2016/01/techtrends2016/
[2] Luigi Mandarino, Java è vivo e lotta insieme a noi! Qualche riflessione su linguaggi vecchi e nuovi. MokaByte 244, novembre 2018
https://www.mokabyte.it/2018/11/linguaggi2018/
[3] L’indice TIOBE per febbraio 2022
https://www.tiobe.com/tiobe-index/
[4] Le tecnologie più usate nel 2021 secondo Stack Overflow
https://insights.stackoverflow.com/survey/2021#technology-most-popular-technologies
[5] 11 Most In-Demand Programming Languages in 2022
https://tinyurl.com/ycq83a8j

Luigi Mandarino ha cominciato ad appassionarsi ai computer con il glorioso ZX Spectrum 48k: una bomba, per l‘epoca 🙂 Dopo gli studi di ingegneria, si è dedicato per diversi anni allo sviluppo di applicazioni Java, specie per la piattaforma Enterprise. Successivamente, ha svolto il ruolo di architetto dei sistemi interessandosi particolarmente alle architetture di integrazione. Attualmente, svolge consulenze a svariate aziende in particolare nel settore bancario, assicurativo e finanziario, principalmente su temi inerenti le architetture Java EE e le dinamiche di processo secondo un approccio Lean/Agile.