Perché ci sono così tanti linguaggi di programmazione?

Esistono oltre 250 linguaggi di programmazione. Alcuni sono ampiamente utilizzati nel mondo degli affari, come C ++, Java, JavaScript, Ruby e Python. Altri sono principalmente accademici, come Lisp. Tuttavia, altri sono oscuri ed esoterici. Potresti chiederti, "Perché ci sono così tanti linguaggi di programmazione?"

È come chiedere "perché ci sono così tanti campi di matematica? Abbiamo un'algebra, perché abbiamo bisogno di geometria, calcolo e meccanica dei fluidi?" Ogni linguaggio di programmazione mira a risolvere un particolare problema. Più di una lingua potrebbe essere in grado di risolvere lo stesso problema, ma ciascuna si avvicinerà in modo diverso.

Ecco alcune delle principali differenze nei linguaggi di programmazione.

Leggibilità e manutenibilità

Alcune lingue sono più facili da leggere per un essere umano, il che rende più facile per un programmatore collaborare con il codice di un altro programmatore. Python, ad esempio, ha la reputazione di essere facile da leggere. Esegue il rientro rigoroso delle righe per definire i suoi blocchi di codice, il che rende facile dare un'occhiata a un programma e capire la sua struttura. Anche altri linguaggi consentono l'indentazione, ma come scelta stilistica, non come requisito.

Al contrario, Perl è un linguaggio che consente al programmatore di scrivere lo stesso programma in molti modi diversi, ma lo scopo del programma potrebbe non essere immediatamente chiaro a un altro lettore. Un programma del genere può essere comodo da scrivere, ma difficile da comprendere e modificare per qualcun altro.

Prestazione

Alcune lingue sono interpretate e alcune sono compilate. Un programma compilato deve essere elaborato da un preprocessore, un compilatore e un linker prima che possa essere eseguito dal computer. Questo software intermedio specializzato esegue analisi lessicali, traducendo il programma in linguaggio macchina. Può anche ottimizzare le istruzioni risultanti, cercando modi intelligenti per far funzionare il programma più velocemente.

I programmi compilati generalmente funzionano meglio dei programmi interpretati. Ad esempio, C, C ++ e Objective-C sono linguaggi che tipicamente vengono compilati con codice macchina molto veloce. I video giochi e il software di sistema sono spesso scritti in queste lingue, per spremere ogni bit di prestazioni dalla CPU.

D'altra parte, i programmi in lingua interpretata sono gestiti da un software chiamato interprete, che esegue le istruzioni del programma senza prima compilarle al codice macchina. Sebbene l'interprete a volte analizzi il programma in un linguaggio intermedio, con conseguente ottimizzazione, le prestazioni non sono mai veloci come il codice macchina compilato.

Uno dei principali vantaggi delle lingue interpretate è il loro potenziale di sviluppo interattivo. Poiché non è necessario compilare l'intero programma prima che possa essere eseguito, il codice può essere eseguito in modo interattivo. Ne sei a conoscenza se hai mai utilizzato la riga di comando del tuo sistema operativo: inserisci un comando e vedi i risultati. Tale interfaccia è denominata REPL o "read-eval-print-loop". Un REPL consente di eseguire comandi (o blocchi di comandi) singolarmente e visualizzare i risultati. Lisp, Perl, Python, NodeJS, Ruby e JavaScript sono esempi di linguaggi interpretati che possono essere eseguiti in REPL.

Interfacce di comando interattive, come il prompt dei comandi di Windows e bash, si qualificano anche come lingue interpretate. I programmi in questi "linguaggi" sono chiamati file batch o script di shell.

Casi d'uso specifici

Spesso, le lingue sono particolarmente adatte alla scrittura di tipi specifici di programmi. Ad esempio, NodeJS è progettato per scrivere applicazioni single-threaded per il web. L'I / O file non bloccante consente ai programmi di continuare a funzionare ("non essere bloccati") mentre aspettano la trasmissione dei dati richiesti.

Un altro esempio è il linguaggio di programmazione R, specializzato in analisi statistiche. I programmi scritti in R beneficiano di test e modelli analitici integrati e strumenti per manipolare in modo efficiente enormi quantità di dati.

Facilità di prototipazione

Alcuni linguaggi consentono la prototipazione rapida: il programmatore può "iniziare a scrivere" e creare componenti su componenti fino alla completa formazione del programma.

Ad esempio, il sito Web Reddit è stato originariamente scritto in Lisp. Dopo l'avvio di Reddit, l'intero sito è stato riscritto in Python per molte ragioni, sia tecniche che logistiche. Sebbene il refactoring di tutto il codice fosse un'impresa importante, i proprietari del sito non hanno espresso rimpianti. In un post del blog del 2005, hanno osservato che Lisp permetteva loro di creare qualcosa senza sapere esattamente cosa sarebbe diventato.

Librerie disponibili

Di solito, quando si avvia un nuovo progetto di programmazione, non si vuole reinventare la ruota. Cioè, non si desidera scrivere funzioni per attività comuni come il calcolo di una radice quadrata o la ricerca della prima occorrenza di un carattere in una stringa. Per questo motivo, quasi tutti i linguaggi di programmazione forniscono un set di librerie standard di funzioni comuni. I programmatori possono preferire una lingua a causa delle librerie fornite.

Ad esempio, le librerie standard C forniscono funzioni altamente performanti per molte operazioni di sistema di basso livello. Perl fornisce molte librerie robuste e anche il repository CPAN dei moduli da scaricare e utilizzare nel programma. Python offre una vasta gamma di funzioni e moduli integrati per quasi tutto sotto il sole. Clojure, un linguaggio simile a Lisp che gira su JVM, trae vantaggio dalla sua capacità di eseguire codice dalle ampie librerie esistenti di oggetti e metodi Java.

Sicurezza

Non tutte le lingue si prestano a scrivere codice sicuro. Il linguaggio di programmazione C, ad esempio, è noto per le sue caratteristiche (o la sua mancanza) che possono portare a vulnerabilità devastanti come il dereferenziamento del puntatore nullo. Altre lingue cercano di affrontare queste preoccupazioni con regole più severe.

Ad esempio, alcune lingue pongono restrizioni su quali operazioni possono essere eseguite su vari tipi di dati. Il più rigoroso di questi linguaggi viene talvolta definito "fortemente dattiloscritto" e può offrire la massima tranquillità ai programmatori che attribuiscono priorità alla sicurezza e alla stabilità nello sviluppo del software. Esempi di lingue fortemente tipizzate includono Rust, Nim, Ocaml e Haskell.

Le lingue possono anche porre limiti alla "mutabilità", la capacità di un oggetto di dati di cambiare stato. Invece di oggetti i cui valori vengono sovrascritti, questi linguaggi preferiscono oggetti "immutabili": valori in memoria che non possono essere modificati senza un'eccezione esplicita. Gli oggetti immutabili hanno attratto l'interesse quando le CPU multi-core sono diventate molto diffuse, a causa della loro tendenza a promuovere la "sicurezza del thread". In un programma thread-safe, più di un processore può operare su un set di dati con un rischio di errore notevolmente ridotto. Le lingue che danno la priorità agli oggetti immutabili includono Ruggine e Clojure.

Supporto comunitario

Quando si scrive un programma in una nuova lingua, è utile avere accesso a una comunità attiva e appassionata di sviluppatori che utilizzano e contribuiscono attivamente al lavoro degli altri. Prima di scegliere un linguaggio di programmazione, scopri di più sulla comunità di quel linguaggio. Alcune lingue hanno una base di utenti eccitante, dinamica e vibrante di cui potresti voler far parte e altre lingue potrebbero avere poca o nessuna comunità.

espressività

Quando si scrive un programma, i pensieri del programmatore e le capacità di risoluzione dei problemi stanno "parlando" attraverso quel linguaggio. Di conseguenza, i programmatori tendono a preferire le lingue in cui sono a loro agio nell'esprimersi. Ciò che rende un linguaggio e un programmatore funzionano bene insieme è tuttavia difficile da definire. In definitiva, l'unico modo per conoscere la lingua con cui ti trovi a tuo agio è usare lingue diverse per progetti diversi e confrontarli per te.