Introduzione:
-------------
Premetto che quest'articolo fornisce una risposta completamente personale alla domanda "il miglior linguaggio di programmazione?" e non vuole assolutamente mettere in risalto un determinato linguaggio rispetto agli altri: come vedremo nelle prossime righe infatti, la domanda non possiede risposta, o più precisamente, la risposta cambia ogni volta in base al contesto in cui la si pone.


Perchè non esiste un linguaggio migliore?
-----------------------------------------
E' meglio l'inglese o il cinese? Alcuni di voi risponderanno "inglese", altri preferiranno il cinese, in base al posto in cui viviamo, in base al numero di persone che la parlano e in base ad altri fattori del tutto personali che variano da persona a persona. Si possono ricavare dati statistici che rispondano a domande tipo "Quante persone parlano l'inglese e il cinese? Qual'è la lingua più parlata fra le due?" ma non è possibile stabilire quale fra le due è la migliore. Con entrambe infatti possiamo esprimere i medesimi concetti. Un discorso molto simile è applicabile al discorso del miglior linguaggio di programmazione, con l'eccezione che alcuni linguaggi permettono di fare cose che altri non permettono, quindi ecco che la risposta alla nostra domanda "qual'è il linguaggio migliore?" cambia in base al contesto in cui la poniamo.
Dubbiosi? Rispondete alla seguente domanda: qual'è il miglior linguaggio per sviluppare un sito web di e-commerce che supporti SSL e faccia appoggio ad un database? Di sicuro la vostra risposta non sarà C++ o Visual Basic 6 vero?
Provate a rispondere invece alla domanda: qual'è il miglior linguaggio per sviluppare un applicazione gestionale? La vostra risposta sarà del tutto soggettiva, se siete dei puristi probabilmente sceglierete il C++, se preferite un buon compromesso tra velocità e semplicità potreste dire Delphi o Visual Basic 6, se vi piace l'OOP invece C# o Java.

Come vedete, è impossibile stabilire quale sia il linguaggio migliore per sviluppare un software gestionale. Per il sito di e-commerce avete anche li valide opzioni: Php, Asp, Asp.net, Jsp...


Se non esiste un linguaggio migliore, quali domande posso pormi per scegliere il linguaggio più adatto al tipo di software
che sto sviluppando?
--------------------------------------------------------
Che esistano linguaggi più adatti per lo sviluppo di determinate applicazioni, su questo non c'è alcun dubbio.
Provate a rispondere:
- Quali linguaggi fra quelli esistenti sono più portati allo sviluppo della mia applicazione? (fate una lista)
- (Guardando la lista) Quali di questi conosco meglio? Posso guadagnarci qualcosa spendendo il mio tempo per imparare questo linguaggio che ancora non conosco, ma che ho sentito dire che è molto adatto a sviluppare il tipo di applicazione che voglio creare?
- Il programma dev'essere veloce oppure la velocità non è un fattore primario e preferisco dare spazio a rapidità nello sviluppo del software e maggiore chiarezza nel codice?
- Il programma deve girare su più sistemi operativi?
- E' un software di grandi dimensioni? Se si, credo sia meglio usare un linguaggio ad oggetti oppure no? Potrà facilitarmi la vita l'uso di un linguaggio ad oggetti?

Dopo aver risposto a queste domande, scegliete il linguaggio che possiede le caratteristiche che più si avvicinano alle vostre risposte.


Le caratteristiche dei linguaggi:
---------------------------------
Qui sotto riporto una breve lista dei linguaggi che ho avuto il piacere di studiare e provare nella pratica. Per conoscere le caratteristiche di un linguaggio tuttavia, vi consiglio vivamente di cercare informazioni più dettagliate con qualche motore di ricerca. Tengo inoltre a precisare che la lista delle tipologie, dei pregi e difetti di ogni linguaggio è uno schema riassuntivo e per niente completo che non dev'essere interpretato come "scheda completa del linguaggio", bensì come "brevissima panoramica del linguaggio".

Java:
> Tipologia: Applicazioni multipiattaforma, applet per il web, applicazioni per cellulari
> Object Oriented: si
> Velocità di esecuzione delle applicazioni: la velocità d'esecuzione del codice è veloce (più lenta del C o C++ ma più veloce di altri linguaggi interpretati come Python), il caricamento è tuttavia relativamente lento a causa della pesantezza della Java Virtual Machine.
> Pregi: Portabile su praticamente ogni sistema operativo senza la necessità di cambiare una sola riga di codice.
> Difetti: Lentezza di caricamento ed esecuzione del codice a causa della sua natura interpretata.

C:
> Tipologia: Applicazioni multipiattaforma (ma sono necessari controlli a compile e a run time), script CGI, sistemi operativi, utility di base nei sistemi operativi, scrittura di compilatori/interpreti, librerie matematiche o comunque applicazioni ad alte performance
> Object Oriented: no
> Velocità di esecuzione delle applicazioni: molto veloce
> Pregi: Seguendo alla lettera lo standard ANSI è possibile scrivere applicazioni multipiattaforma in grado di essere compilate senza variare una sola riga di codice.
> Difetti: Libreria di funzioni non troppo vasta, stringhe inesistenti.

C++:
> Tipologia: Applicazioni multipiattaforma, (ma sono necessari molti controlli e compile e a run time), script CGI, sistemi operativi, utility di base nei sistemi operativi, scrittura di compilatori/interpreti, librerie matematiche o comunque applicazioni ad alte performance
> Object Oriented: si
> Velocità di esecuzione delle applicazioni: molto veloce
> Pregi: Unisce la velocità di esecuzione del C al supporto per la programmazione ad oggetti, offre una vasta libreria di classi e funzioni (STL) che permettono di risolvere problemi frequenti nella programmazione come l'implementazione di ordinamenti, code, stack, ecc.
> Difetti: estremamente difficoltoso nel costruire applicazioni multipiattaforma compatibili.  

Delphi:
> Tipologia: Applicazioni Windows, facendo un po' di attenzione è possibile costruire anche applicazioni compatibili con Linux (ricompilando il sorgente con Kylix)
> Object Oriented: si
> Velocità di esecuzione delle applicazioni: discretamente veloce
> Pregi: Il linguaggio unito al potente IDE di casa Borland permette di costruire rapidamente applicazioni Windows, offre una vasta raccolta di controlli che permettono di risolvere in maniera flessibile problemi frequenti nella programmazione.
> Difetti: Libreria di funzioni piuttosto incompleta (soprattutto quella relativa alle stringhe).

Visual Basic 6:
> Tipologia: Applicazioni Windows
> Object Oriented: no
> Velocità di esecuzione delle applicazioni: discretamente veloce
> Pregi: Rapidità nello sviluppo delle applicazioni.
> Difetti: Sintassi un tantino fuori dagli standard che dovrebbe rispettare un linguaggio di programmazione che si rispetti. Occorre prestare particolare attenzione quando si scrive in Visual Basic 6 perchè l'apparente capacità del linguaggio di adattarsi a qualsiasi tipo di dato (sfruttando il tipo di dato Variant) è spesso causa di cattiva efficenza del programma finale.

Perl:
> Tipologia: Brevi applicazioni multipiattaforma, particolarmente adatto per script CGI
> Object Oriented: si (solo dalla versione 5; alcuni programmatori puristi che giudicano l'Object Oriented del Perl un "artificio costruito arrampicandosi sugli specchi")
> Velocità di esecuzione delle applicazioni: discretamente veloce
> Pregi: Possibilità di scrivere rapidamente applicazioni abbastanza complesse con pochissime righe di codice.
> Difetti: Sintassi a dir poco confusionaria e ambigua.

Python:
> Tipologia: Applicazioni multipiattaforma
> Object Oriented: si
> Velocità di esecuzione delle applicazioni: discretamente veloce
> Pregi: Possibilità di scrivere rapidamente applicazioni abbastanza complesse con pochissime righe di codice e soprattutto, portabili.
> Difetti: Non offre una buona libreria per gestire le finestre.

Assembler:
> Tipologia: Tutto, ma fortemente sconsigliato per cose diverse da "piccole parti di un sistema operativo" o "brevi routine all'interno di programmi costruiti con altri linguaggi".
> Object Oriented: no
> Velocità di esecuzione delle applicazioni: estremamente veloce
> Pregi: Puoi fare tutto, nel vero senso della parola.
> Difetti: Difficoltà al limite dell'immaginabile, estrema difficoltà a scrivere applicazioni compatibili da computer a computer (non da sistema operativo a sistema operativo, da computer a computer!).

Javascript:
> Tipologia: Applicazioni per browser web
> Object Oriented: si
> Velocità di esecuzione delle applicazioni: dipendente dal browser che esegue il codice
> Pregi: Penso nessuno, fa semplicemente suo dovere di unico linguaggio lato client compatibile con quasi tutti i browser.
> Difetti: Se il browser ha disabilitato javascript, il vostro sito web potrebbe non funzionare come si deve.

Vbscript
> Tipologia: Applicazioni per browser web
> Object Oriented: no
> Velocità di esecuzione delle applicazioni: quasi identica a Javascript
> Pregi: Permette di usare la sintassi di Visual Basic per dare istruzioni al browser web.
> Difetti: E' compatibile solo con Internet Explorer.

C#:
> Tipologia: Applicazioni Windows
> Object Oriented: si
> Velocità di esecuzione delle applicazioni: attualmente (24/08/2006) non troppo veloce
> Pregi: Sfruttando il Framework .NET permette di sviluppare rapidamente qualsiasi tipo di applicazione Windows grazie alla vastissima libreria di classi del Framework.
> Difetti: Un computer senza il Framework .NET non può far girare un'applicazione scritta in C#. Esiste un progetto chiamato MONO che si sta occupando di garantire la portabilità per i sistemi GNU/Linux che permette di far girare applicazioni .NET dove si è tenuto conto di usare solo classi che sono state "trasportate", tuttavia la piena portabilità non è garantita.

Visual Basic .NET:
> Tipologia: Applicazioni Windows
> Object Oriented: si
> Velocità di esecuzione delle applicazioni: attualmente (24/08/2006) non troppo veloce
> Pregi: Sfruttando il Framework .NET permette di sviluppare rapidamente qualsiasi tipo di applicazione Windows grazie alla vastissima libreria di classi del Framework.
> Difetti: Un computer senza il Framework .NET non può far girare un'applicazione scritta in Visual Basic .NET. Esiste un progetto chiamato MONO che si sta occupando di garantire la portabilità per i sistemi GNU/Linux che permette di far girare applicazioni .NET dove si è tenuto conto di usare solo classi che sono state "trasportate", tuttavia la piena portabilità non è garantita.

Php:
> Tipologia: Applicazioni web server-side
> Object Oriented: si (solo Php5)
> Velocità di esecuzione delle applicazioni: non troppo veloce
> Pregi: Semplice nel sviluppare rapidamente applicazioni server-side.
> Difetti: Il fatto che permette di dichiarare variabili un po' qui e un po' la, di usarle senza inzializzarle, spesso causa un po' di confusione se non si sta attenti.


Conclusione:
------------
Con questo articolo spero di aver fatto capire bene il concetto che non esiste un linguaggio migliore in assoluto, ma esistono linguaggi migliori rispetto ad altri in base al contesto in cui ci si trova.

Un ringraziamento personale va a Enrico F. che ha gentilmente dedicato parte del suo tempo segnalandomi un buon numero di imperfezioni nell'articolo.

Per qualsiasi commento postate sul forum di http://www.pierotofy.it

Piero Tofy
admin@pierotofy.it
http://www.pierotofy.it

Ultimo aggiornamento: 16.25 13/03/2007