9 linguaggi di programmazione all'avanguardia che vale la pena imparare ora

I grandi linguaggi sono popolari per un motivo: offrono un'enorme base di codice open source, librerie e framework che semplificano il completamento del lavoro. Questo è il risultato di anni di slancio in cui vengono scelti più e più volte per nuovi progetti, e la competenza nelle loro sfumature cresce utile e abbondante.

A volte le vaste risorse dei popolari linguaggi di programmazione tradizionali non sono sufficienti per risolvere il tuo problema particolare. A volte devi guardare oltre l'ovvio per trovare la lingua giusta, dove la giusta struttura fa la differenza mentre offre quella funzionalità extra per aiutare il tuo codice a funzionare molto più velocemente senza infinite modifiche e ottimizzazioni. Questo linguaggio produce codice molto più stabile e accurato perché impedisce di programmare codice sciatto o sbagliato.

Il mondo è pieno di migliaia di linguaggi intelligenti che non sono C #, Java o JavaScript. Alcuni sono apprezzati solo da pochi, ma molti hanno comunità fiorenti legate da un comune amore per la facilità della lingua nel risolvere determinati problemi. Potrebbero non esserci decine di milioni di programmatori che conoscono la sintassi, ma a volte è utile fare le cose in modo leggermente diverso, poiché la sperimentazione con qualsiasi nuovo linguaggio può pagare dividendi significativi su progetti futuri.

Le seguenti nove lingue dovrebbero essere presenti sul radar di ogni programmatore. Potrebbero non essere i migliori per ogni lavoro: molti sono destinati a compiti specializzati. Ma tutte offrono vantaggi su cui vale la pena indagare e investire. Potrebbe esserci un giorno in cui una di queste lingue dimostrerà di essere esattamente ciò di cui il tuo progetto, o il tuo capo, ha bisogno.

Kotkin: Java riconsiderato 

Java è un ottimo linguaggio che supporta alcune delle piattaforme più popolari in assoluto, ma sta diventando un po 'vecchio e i punti deboli stanno diventando un po' troppo noti. Kotlin è il figlio del cervello del team JetBrains in Russia, quelli che ci hanno portato meravigliosi IDE come IntelliJ. Kotlin ha lo scopo di compilare rapidamente, coesistere con Java e risolvere alcuni dei peggiori problemi che occupano il tempo degli sviluppatori Java. 

La parte migliore potrebbe essere l'attenzione prestata ai valori nullable, la rovina di tutti i programmatori orientati agli oggetti. Se ritieni che metà del tuo codice stia controllando i valori nulli, gli sviluppatori di Kotlin hanno sentito le tue urla. Kotlin fa un grande passo verso la risoluzione di questo problema, se non una volta per tutte, almeno la maggior parte delle volte costringendo gli sviluppatori a chiamare esplicitamente le variabili che potrebbero essere nulle. Quindi controlla automaticamente alcuni dei peggiori errori che possiamo fare con loro. 

Kotlin è progettato per funzionare con il codice Java esistente, rendendolo una buona opzione per i team che desiderano migliorare gradualmente una base di codice. Compilerà anche in JavaScript o codice nativo se è quello che ti serve. Google ha riconosciuto il valore del linguaggio e ora gli sviluppatori Android che desiderano utilizzare Kotlin sono ben supportati. 

Questa cauta strategia ha dimostrato di essere popolare perché consente al team di adottare la lingua lentamente. Il gruppo Kotlin ha guadagnato molti fan in grandi team di sviluppo presso importanti banche, gruppi di consulenza e società di app. 

Erlang: programmazione funzionale per sistemi in tempo reale

Erlang iniziò nelle profondità degli inquietanti regni degli interruttori telefonici di Ericsson, la società di telecomunicazioni svedese. Quando i programmatori Ericsson hanno iniziato a vantarsi delle sue prestazioni "nove 9", fornendo il 99,9999999% dei dati con Erlang, gli sviluppatori esterni a Ericsson hanno iniziato a prenderne atto.

Il segreto di Erlang è il paradigma funzionale. La maggior parte del codice è costretta a funzionare nel suo piccolo mondo in cui non può corrompere il resto del sistema attraverso effetti collaterali. Le funzioni svolgono tutto il loro lavoro internamente, eseguendo piccoli "processi" che agiscono come sandbox e dialogano tra loro solo tramite messaggi di posta. Non puoi semplicemente prendere un puntatore e modificare rapidamente lo stato in qualsiasi punto della pila. Devi rimanere all'interno della gerarchia delle chiamate. Potrebbe richiedere un po 'più di riflessione, ma è meno probabile che gli errori si propagino.

Il modello rende inoltre più semplice per il codice di runtime determinare cosa può essere eseguito contemporaneamente. Con la concorrenza così facile da rilevare, lo scheduler di runtime può sfruttare il sovraccarico molto basso nell'impostazione e nel ripping di un processo. I fan di Erlang amano vantarsi dell'esecuzione di 20 milioni di "processi" contemporaneamente su un server Web.

Se stai costruendo un sistema in tempo reale senza spazio per la perdita di dati, come un sistema di fatturazione per uno switch di telefonia mobile, controlla Erlang.

Vai: semplice e dinamico

Google non è stata la prima organizzazione a esaminare la raccolta di lingue, solo per trovarle disordinate, complesse e spesso lente. Nel 2009, l'azienda ha rilasciato la sua soluzione: un linguaggio tipizzato staticamente che assomiglia al C ma include intelligenza in background per evitare che i programmatori debbano specificare i tipi e destreggiarsi tra le chiamate malloc. Con Go, i programmatori possono avere la concisione e la struttura del C compilato, insieme alla facilità d'uso di un linguaggio di script dinamico.

Mentre Sun e Apple hanno seguito un percorso simile nella creazione di Java e Swift, rispettivamente, Google ha preso una decisione significativamente diversa con Go: i creatori del linguaggio volevano mantenere Go "abbastanza semplice da contenere nella testa di un programmatore". Rob Pike, uno dei creatori di Go, ha notoriamente detto ad Ars Technica che "a volte puoi ottenere di più a lungo termine portando via le cose". Pertanto, ci sono pochi extra rapidi come generici, ereditarietà dei tipi o asserzioni, solo blocchi semplici e puliti di codice if-then-else che manipola stringhe, array e tabelle hash.

Secondo quanto riferito, il linguaggio è ben consolidato all'interno del vasto impero di Google e sta guadagnando l'accettazione in altri luoghi in cui gli amanti del linguaggio dinamico di Python e Ruby possono essere indotti ad accettare parte del rigore che deriva da un linguaggio compilato.

Se sei una startup che cerca di attirare l'attenzione di Google e devi creare una logica di business lato server, Go è un ottimo punto di partenza.

OCaml: giocoliere complesso della gerarchia dei dati

Alcuni programmatori non vogliono specificare i tipi delle loro variabili e per loro abbiamo costruito i linguaggi dinamici. Altri godono della certezza di specificare se una variabile contiene un numero intero, una stringa o forse un oggetto. Per loro, molti dei linguaggi compilati offrono tutto il supporto che desiderano.

Poi ci sono quelli che sognano elaborate gerarchie di tipi e parlano persino di creare "algebre" di tipi. Immaginano elenchi e tabelle di tipi eterogenei che vengono riuniti per esprimere stravaganze di dati complesse e multilivello. Parlano di polimorfismo, primitive di pattern matching e incapsulamento dei dati. Questo è solo l'inizio del mondo complesso e altamente strutturato di tipi, metatipi e metametatipi che desiderano.

Per loro, c'è OCaml, un serio sforzo da parte della comunità dei linguaggi di programmazione per rendere popolari molte delle idee di cui sopra. C'è il supporto per gli oggetti, la gestione automatica della memoria e la portabilità del dispositivo. Ci sono persino app OCaml disponibili sull'App Store di Apple.

Un progetto ideale per OCaml potrebbe essere la creazione di un sito web di matematica simbolica per insegnare l'algebra.

TypeScript: JavaScript ti piacerà

Tutti possono usare JavaScript, ma a nessuno sembra piacere programmarlo. O almeno così sembrerebbe perché tutti oggi hanno il loro pre-processore o super-processore preferito che estende e migliora il linguaggio. TypeScript è l'attuale preferito perché aggiunge tipi a tutte le variabili, cosa che fa sentire i programmatori Java un po 'più sicuri.

Il motivo principale per cui più sviluppatori sono interessati a TypeScript ora è Angular, un ottimo framework per la creazione di applicazioni Web che vengono scritte in TypeScript. La ruga interessante è che non è necessario utilizzare TypeScript per utilizzare Angular. Puoi goderti la qualità del suo codice e unirlo al tuo JavaScript precedente. Non hai bisogno di scegliere.

Il motivo è che TypeScript è un superset di JavaScript. Gli sviluppatori hanno aggiunto la digitazione in un modo che funziona bene con JavaScript vecchio stile, qualcosa che è molto utile se ci sono persone in ufficio a cui non piace l'idea dei tipi o che hanno opinioni dogmatiche su come i tipi stanno ostacolando il loro stile. I tipi sono effettivamente opzionali e le persone che si dedicano al tempo per specificare i tipi possono raccogliere i frutti. 

La digitazione forte ha molti vantaggi, come rilevare precocemente alcuni bug e migliorare la qualità generale degli strumenti. L'aggiunta di tipi consente agli editor intelligenti di aiutarti con suggerimenti intelligenti mentre crei il tuo capolavoro. Il completamento del codice è molto più veloce e più accurato quando le routine di completamento del codice conoscono qualcosa sulle funzioni e sugli argomenti. Ciò significa meno movimento delle dita sulla tastiera. Gli amanti di TypeScript sono sicuri che vantaggi come questi attireranno chiunque sia indifferente alla potenza di un linguaggio fortemente determinato. 

Rust: linguaggio di sistema sicuro e utilizzabile

I programmatori front-end non sono gli unici a divertirsi. La ruggine è come una versione rinnovata di C con un sacco di caratteri polimorfici mescolati sotto il cofano. Ha vinto il "linguaggio di programmazione più amato" dagli elettori di Stack Overflow negli ultimi due anni consecutivi, un onore che si riflette anche nell'indice di popolarità del linguaggio di Stack Overflow. Solo pochi anni fa, Rust si aggirava intorno ai 50 sulla lista e quest'anno è balzato a 18. 

Perché? Forse perché Rust ripulisce molti dei problemi nodosi con C senza fare troppe mani o insistere sul fatto che gli sviluppatori indossino camicie di forza virtuali. I programmatori di sistema amano non fare affidamento sulla raccolta dei rifiuti, un ottimo servizio fino a quando non si attiva esattamente nel momento più inappropriato. Rust ti fa sentire come se fossi responsabile di ciò che accade al numero in memoria, senza aspettare che qualche servizio faccia il lavoro per te.

Il sistema di battitura è generale e flessibile, offrendo il tipo di polimorfismo che si ispira a Haskell, almeno in astratto. Quando viene implementato, tuttavia, il compilatore personalizza la struttura per ogni tipo, qualcosa che gli sviluppatori amano chiamare "monomorfismo". Il linguaggio aggiunge alcuni altri limiti per impedire agli sviluppatori di uscire dai binari. Ogni valore, ad esempio, è "posseduto", il che significa che può essere consumato solo una volta, prevenendo una rete aggrovigliata di riferimenti da altre parti del programma che agiscono come se avessero il pieno controllo su un valore.   

Tutte queste caratteristiche più alcune altre, come il threading senza condizioni di gara, significano che il nuovo programmatore può iniziare a scrivere codice di sistema senza incappare in alcuni dei peggiori anti-pattern che hanno a lungo tormentato i programmatori C. Ottieni tutto il divertimento hard-core e ad alte prestazioni di scrivere C con un compilatore che rileverà molti dei peggiori errori prima ancora che il codice venga eseguito. 

Scala: programmazione funzionale su JVM

Se hai bisogno della semplicità del codice delle gerarchie orientate agli oggetti per il tuo progetto ma ami il paradigma funzionale, hai diverse scelte. Se Java è il tuo regno, Scala è la scelta che fa per te.

Scala funziona sulla JVM, portando tutte le limitazioni di progettazione pulita della programmazione funzionale nel mondo Java fornendo codice che si adatta alle specifiche della classe Java e collegamenti con altri file JAR. Se quegli altri file JAR hanno effetti collaterali e altri fastidiosi mal di testa imperativi, così sia. Il tuo codice sarà pulito.

Il meccanismo dei tipi è fortemente statico e il compilatore fa tutto il lavoro per dedurre i tipi. Non c'è distinzione tra tipi primitivi e tipi di oggetto perché Scala vuole che tutto discenda da una chiamata Any dell'oggetto ur. La sintassi è molto più semplice e pulita di Java; La gente della Scala la chiama "cerimonia bassa". Puoi lasciare i nomi delle variabili CamelCase lunghi un paragrafo in Java Land.  

Scala offre molte delle caratteristiche che ci si aspetta dai linguaggi funzionali, come la valutazione pigra, la ricorsione in coda e le variabili immutabili, ma sono state modificate per funzionare con la JVM. I metatipi di base o le variabili di raccolta, come gli elenchi collegati o le tabelle hash, possono essere modificabili o immutabili. La ricorsione della coda funziona con esempi più semplici, ma non con esempi elaborati e reciprocamente ricorsivi. Le idee ci sono tutte, anche se l'implementazione può essere limitata dalla JVM. Inoltre, include anche tutta l'ubiquità della piattaforma Java e la vasta raccolta di codice Java esistente scritto dalla comunità open source. Non è un cattivo compromesso per molti problemi pratici.

Se devi destreggiarti tra i dati in un cluster da mille processori e avere una pila di codice Java legacy, Scala è un'ottima soluzione.