In questa sezione descrivo brevemente i linguaggi di programmazione che ho avuto modo di prendere in considerazione o utilizzare nei miei sviluppi e per i quali esistono compilatori e tools di sviluppo opensource e multipiattaforma.
In un'era in cui ormai conta molto di più essere altamente e velocemente produttivi, i linguaggi che mi
sento di consigliare (anche per esperienza personale) sono quelli interpretati o byte-compiled: essi sono
generalmente più lenti e meno ottimizzati di quelli compilati nativamente ma forniscono in genere un ottimo
supporto multipiattaforma e permettono una rapidità di sviluppo considerevolmente maggiore.
Un altro parametro da considerare nella scelta di un linguaggio è anche e soprattutto la disponibilità
di librerie in modo da poter far fronte alla maggior parte delle esigenze che si hanno o che si potranno
avere (mai dire: questo non mi serve tanto non lo userò mai).
Il linguaggio pascal è stato probabilmente quello che ha segnato maggiormente la mia formazione e che per anni ho considerato il migliore.
Si tratta di un linguaggio fortemente tipizzato e strutturato, tanto da essere ancora oggi utilizzato nelle scuole per insegnare i concetti della buona programmazione.
E' un linguaggio compilato che permette di creare programmi estremamente performanti ed efficienti, ne esistono anche implementazioni multipiattaforma.
Attualmente il suo utilizzo è abbastanza ridotto: sui sistemi unix predomina da sempre il C e sui sistemi win purtroppo (conseguenza di un certo conflitto di interessi ;-) predominano linguaggi che in taluni casi definirli tali è un complimento.
Probabilmente il periodo di maggior splendore per questo linguaggio è stato l'ultimo decennio del secolo
scorso: con il turbo pascal prima e il delphi poi, sono scresciute intere generazioni di programmatori.
Si tratta di 2 implementazioni commerciali e monopiattaforma (mi scuso per essermi lasciato andare a
citare questi prodotti che con l'open source hanno poco a che vedere, ma che hanno veramente fatto crescere
il linguaggio) e personalizzate del linguaggio ad opera della Borland tramite l'introduzione degli oggetti
e di apposite librerie per le gui, i database e altro.
Oggi la stessa azienda produce il Kylix: una versione di pascal multipiattaforma (gira bene su win e linux)
per la quale è disponibile una versione gratuita adatta solo per sviluppi opensource.
Una ottima implementazione opensource e multipiattaforma del linguaggio è invece il freepascal.
Nonostante il pascal sia ancora un ottimo linguaggio per apprendere i fondamenti della programmazione, non mi sento di consigliarne l'adozione per lo sviluppo, causa anche la ridotta disponibilità di librerie libere per il linguaggio.
Il Basic è forse uno dei più semplici linguaggi mai concepiti.
La sua nascita e successiva diffusione è indissolubilmente legata al mondo dei pc: storico fu l'interprete
gwbasic che permetteva di creare semplici programmi in modalità testo.
I primi interpreti basic erano addirittura contenuti sulle rom dei pc.
Col passare del tempo il basic divenne un linguaggio valorizzato e sostenuto (anche se, aimè, praticamente
abbandonato in modalità console dopo la breve parentesi come qbasic) dal maggiore produttore commerciale
di sistemi operativi trasformandolo in un prodotto per lo sviluppo di semplici programmi con interfacce
grafiche in stile RAD: nacque così il visual basic.
Ad esso si è affiancata anche una implementazione di interprete che può essere inclusa negli applicativi
che si sviluppano permettendo così di dotarli di una interfaccia di scripting: stiamo parlando del
visual basic for applications (vba), conosciuto soprattutto nel mondo office.
Generazioni di programmatori (o pseudo tali) si sono formate, hanno lavorato e tutt'ora lavorano con questo ambiente/linguaggio.
Recentemente il produttore ha però annunciato il suo stop nello sviluppo del medesimo: i tempi sono cambiati e va spinta la nuova piattaforma applicativa .net per cui tanti saluti al vecchio vb e preparatevi a studiare la nuova versione che rivoluzionerà l'ambiente nonchè il linguaggio.
A fianco della più famosa e diffusa implementazione commerciale di questo linguaggio sono comunque sorti interpreti e compilatori liberi per varie piattaforme (linux compreso). Essi non hanno però avuto una grande diffusione perchè il linguaggio in sè non è adatto per la creazione di grandi progetti (non supporta la programmazione ad oggetti ma solo quella procedurale) e privato dell'ambiente rad commerciale non è che offra particolari facilitazioni al suo target di programmatori: bisogna mettere mano al codice e ben pochi di coloro che usano la versione commerciale sono in grado di farlo sul serio. Chi invece già è abituato a programmare con un semplice editor usa altri linguaggi dei quali è soddisfatto.
Nonostante il basic sia considerato un linguaggio semplice e adatto per chi inizia a programmare, io non lo raccomando affatto in quanto ha ormai fatto il suo tempo, esso supporta praticamente solo la programmazione procedurale oltre che alcuni costrutti di programmazione destrutturata (la famigerata goto) che sono da tempo altamente sconsigliati da tutti.
Per chi vuole iniziare a programmare (da professionista o da semplice hobbista) consiglio invece l'ottimo linguaggio python descritto più avanti che rispetto al basic offre la possibilità (non l'obbligo) di programmare ad oggetti nonchè una totale portabilità del codice su una miriade di piattaforme.
Il C e la sua più famosa implementazione ad oggetti C++ (esiste anche l'objective-c) è un linguaggio che può essere considerato il naturale erede dell'assembler: di basso livello, compilato nativamente e fortemente ottimizzato per produrre codice macchina efficiente.
Un altro vantaggio del C rispetto all'assembler è quello di essere facilmente trasportabile a livello di sorgenti su piattaforme diverse: le istruzioni assembler sono proprie delle singole architetture di cpu, il C invece rappresenta un linguaggio standard (il più conosciuto è l'ANSI C) che poi il compilatore traduce in linguaggio macchina per la piattaforma su cui dovrà girare il programma.
Il linguaggio è da sempre stato molto diffuso nei sistemi unix-like, tando da divenirne parte integrante (è difficile pensare ad un sistema unix senza compilatore C).
Oggigiorno in pratica il C è utilizzato principalmente per scrivere i sistemi operativi, i compilatori, applicazioni critiche, i giochi e gli interpreti dei linguaggi di alto livello, anche se non mancano i programmi direttamente implementati in C.
Alterne fortune ha avuto il C++, nato come estensione ad oggetti del primo, ha spesso esteso anche le
difficoltà di programmazione, e la mancanza di un buon set di librerie standard e multipiattaforma ha fatto
sì che non sia mai arrivato a primeggiare o sostituire il suo antenato.
Attualmente il C++ è usato soprattutto nella programmazione di interfacce/librerie grafiche e programmi
che per la loro complessità richiedono un linguaggio efficiente.
Il linguaggio C presenta non poche difficoltà anche per gli esperti: l'uso dei puntatori in memoria nonchè
la mancanza di un sistema di allocazione/deallocazione automatica della stessa porta spesso i programmatori
a produrre codice con importanti bug che ne pregiudicano le funzionalità e la sicurezza.
Questa caratteristica, associata alla notevole mole di codice da scrivere per implementare anche gli
algoritmi più semplici, fa sì che sempre più programmatori si orientino verso linguaggi di più alto
livello, almeno quando questo non pregiudica troppo la velocità di esecuzione dell'applicativo.
Il Perl (Practical Extracting and Report Language) è un linguaggio interpretato, procedurale, disponibile praticamente per tutti i sistemi unix-like ma anche per la piattaforma win32, e finalizzato principalmente alla manipolazione di stringhe e file di testo.
E' nato in ambiente unix essenzialmente come linguaggio per creare utility di sistema (piccoli programmi per processare files diconfigurazione, di log, ecc) e offre avanzate funzionalità per la ricerca di sequenze di caratteri all'interno di stringhe (pattern matching) nonchè sostituzione di sottostringhe (pattern substitution)
Uno degli aspetti che ha reso famoso il perl è l'uso delle regular expressions: espressioni sintatticamente anche molto complesse per facilitare la ricerca e il matching delle stringhe.
Anche il perl col tempo è cresciuto, supporta ora una qualche sorta di programmazione ad oggetti ed offre la possibilità tramite librerie aggiuntive di creare programmi con gui.
L'uso primario e storico del linguaggio è comunque sempre stato quello di piccoli programmi di manutenzione
per i server ed ha conosciuto un grande splendore con l'avvento della programmazione web.
Chi di voi sa cosa significhi creare un cgi può comprendere che il perl è probabilmente il linguaggio più
adatto per questo compito.
Si diceva che con l'avvento di java probabilmente il perl non avrebbe più avuto motivo di esistere ma esso
ha saputo dimostrare di essere ben più veloce, efficiente e pratico per quei piccoli o grandi compiti di
amministrazione di un server che in java sarebbe molto più complesso e dispendioso fare.
Il linguaggio, che non è adatto per la creazione di applicazioni scientifiche o di calcolo, resta comunque largamente diffuso anche per le applicazini web, dove soffre comunque della concorrenza del php.
Il principale svantaggio del perl è notevole complessità della sua sintassi (derivata essenzialmente da C, awk, sh, sed), il fatto che una certa cosa possa essere fatta in vari modi, il largo uso di espressioni annidate e complesse che porta spesso ad una difficile leggibilità nonchè lo rende inadatto per l'implementazione di grandi progetti.
Il perl permette di eseguire direttamente un file sorgente senza passare prima per una fase di compilazione, e questo velocizza abbastanza i tempi di sviluppo, anche se è comunque compilabile in byte-code per migliorare le prestazioni.
Si sente ormai da anni parlare di java ma non tutti sanno esattamente di cosa si tratti. Innanzitutto il java non va confuso con il javascript, quest'ultimo è un semplice linguaggio di scripting client side usato su internet per interagire con l'utente e prende dal java parte della sintassi.
Lo scopo dichiarato per cui è nato il java è stato quello di disporre di un linguaggio che favorisse lo sviluppo di sw utilizabili sul maggior numero possibile di sistemi.
In effetti questa è esattamente la maggiore caratteristica del java: la portabilità. Esso consiste in un piccolo nocciolo scritto in linguaggio di basso livello (la java virtual machine) che è specifico per ogni piattaforma. Su di esso si innesta il vero e proprio linguaggio e le librerie del medesimo (scritte anch'esse in buona parte in java). Non a caso java gira ormai non solo su pc e mainframe (con diverse architetture) ma anche su palmari e telefonini.
Va da sè che avendo a disposizione una virtual machine per ogni piattaforma vi si potranno far girare i programmi scritti e compilati anche su altri sistemi. Almeno questa è la teoria, perchè in pratica vi sono alcune differenze impercettibili tra le varie jvm che di fatto oltre a differenziarne anche di molto le performance, rendono anche alquanto difficile far girare programmi complessi su più di una piattaforma senza minimi aggiustamenti al codice.
I creatori del java (la Sun) si sono ispirati nella sintassi al C++, esso è quindi un vero linguaggio di
programmazione object-oriented che favorisce la creazione di applicativi anche molto complessi.
Purtroppo java non è open-source e la rigidità del suo sviluppo da parte di Sun ha portato alcuni anni fa
la Microsoft alla creazione di alcune estensioni del linguaggio per favorirne l'integrazione con i suoi
sistemi operativi. Ne nacque così un causa giudiziaria conclusasi con la condanna di Microsoft.
Nonostane le cose siano un po' cambiate, il problema resta: java non è opensource (anche se rimane gratuito) e la Sun sta andando principalmente verso un target aziendale.
Il linguaggio di base ha un supporto per le gui e anche per interagire con i database (tramite i driver jdbc).
Attualmente il java è maggiormente utilizzato per sviluppare servizi su internet (server side) oppure
animazioni nelle pagine web (le applet: client side), anche se è comunque possibile impiegarlo per lo
sviluppo di applicativi desktop e, forzando un po' la mano, piccole utility.
Di fatto quello che fino a qualche anno fa sembrava dovesse divenire il linguaggio di programmazione
per eccellenza, fino a soppiantare la maggior parte dei linguaggi esistenti, si è ora invece stabilizzato
e nonostante il continuo sviluppo, non sembra che finirà per conquistare il mondo.
Le cause di questo, a mio avviso, sono molteplici:
Il python è un linguaggio interpretato (byte compiled) con le seguenti caratteristiche principali:
Il linguaggio era nato inizialmente per avere un qualche cosa più potente dei semplici script di shell unix (che già non sono paragonabili a quelli dos).
Col passare del tempo si è evoluto e attualmente può essere considerato un linguaggio di uso generico.
Chi vi parla lo ha adottato come principale linguaggio di sviluppo ormai da anni e può dirvi che fino ad ora non c'è stata esigenza che non fosse supportata dalla libreria standard o da librerie aggiuntive disponibili su internet.
In particolare, ho usato python per:Python è un linguaggio interpretato e byte-compiled e quindi non è performante come quelli compilati nativamente (come il C), ha però il vantaggio di essere assolutamente portabile e multipiattaforma (come il java) e di poter eseguire direttamente codice sorgente senza la necessità di una fase di compilazione (quest'ultima avviene automaticamente ad opera dell'interprete quando si accorge di avere una versione del sorgente con data più recente rispetto al byte-code).
E' scritto in C come pure una buona parte della sua libreria standard e dei moduli aggiuntivi che si possono reperire su internet, questo fa sì che le performance dei programmi siano di tutto rispetto, spesso decisamente superiori a quelle del java (molte librerie di quest'ultimo sono scritte direttamente in java, come le swig e pagano non poco in termini di prestazioni).
Le caratteristiche multiparadigma del linguaggio favoriscono sia la creazione di piccoli o piccolissimi programmi (sintassi procedurale) sia quella di veri e propri progetti aziendali (programmazione ad oggetti). In java ad esempio tutto è una classe, quindi anche per stampare una semplice riga a video occorre scrivere una classe che lo faccia, in perl invece la programmazione è prevalentemente procedurale e questo fa si che i programmi di una certa ampiezza siano difficilmente manutenibili (contribuisce molto anche la poca chiarezza e pulizia della sintassi).
Il linguaggio ha la caratteristica di essere molto pulito (usa l'indentazione del codice per identificare gli statements) e non richiede l'uso di begin/end o parentesi graffe o altro. Si tratta inoltre di un linguaggio di alto livello che permette l'uso di potenti strutture di dati come dizionari, liste e tuple che favoriscono molto la programmazione. Per questi ed altri motivi si dice che il python permetta di scrivere programmi che a volte sono circa il 50% più corti degli equivalenti java e almeno un quinto degli equivalenti in C.
Infine, proprio per queste caratteristiche il python può essere considerato uno dei linguaggi più adatti per l'insegnamento nelle scuole o per chi deve imparare a programmare. Se invece si parte già con una base di programmazione, vi posso dire che nel giro di un paio di giorni sarete in grado di creare i primi semplici programmi senza particolari difficoltà.
Molto ricca e completa la documentazione presente con il linguaggio: dal tutorial di apprendimento a tutta la documentazione dei moduli della libreria standard.
Il linguaggio ha da sempre avuto un unico fulcro di sviluppo: il suo creatore (un certo Guido Van Rossum). Da alcuni anni però, visto anche l'espandersi del suo utilizzo in progetti commerciali e di ampio respiro, è stata creata una fondazione apposita che ne coordina e segue lo sviluppo, in modo da garantirne la continuità: tale associazione è la Python software foundation (psf)
Una caratteristica molto bella del linguaggio è che l'interprete funziona anche in modalità interattiva: quando lanciato senza un nome di file da eseguire esso presenta una riga di comando che permette di digitare ed eseguire espressioni e comandi in modo interattivo. Personalmente trovo questa funzionalità molto utile durante gli sviluppi di programmi anche corposi per testare piccole espressioni o funzionalità prima di includerle nell'implementazione.
E' inoltre abbastanza semplice includere un prompt interattivo di python in un proprio programma e la cosa è veramente utile e spettacolare quando lo si fa con toolkit grafici che supportano la sintassi colorata come wxPython. Io stesso ho realizzato un paio di applicazioni che permettono di aprire una sessione interattiva grafica di python dalla quale posso interagire vedendo tutte le strutture dati e codice del programma che sta girando (molto utile per il debug e non solo...).
Alcuni links:Questo linguaggio è in pratica una sorta di mix tra il python (da cui prende molte delle caratteristiche) e il perl.
Si tratta di un linguaggio ad oggetti: in ruby tutto è un oggetto.
E' interpretato e multipiattaforma: esiste un interprete per quasi tutti i principali sistemi operativi e piattaforme.
Il linguaggio è molto flessibile e personalizzabile, anche i costrutti di base possono essere modificati per comportarsi diversamente dalla loro concezione iniziale.
Nato in oriente (Giappone), il linguaggio è molto più recente e meno sviluppato rispetto ad esempio al python e offre una libreria di base decisamente meno ricca.
Pur non avendo approfondito molto questo linguaggio, ritengo che presenti pochi vantaggi rispetto ad esempio ai suoi diretti concorrenti come il python e il perl, anzi, a meno che non si abbia necessità di avere una perfetta localizzazione nei linguaggio dei paesi del sol levante, ritengo sia molto più sicuro appoggiarsi ad un linguaggio molto simile e ben più longevo e testato come il python.
Il php è un linguaggio nato espressamente per facilitare la programmazione web e rappresentare una valida alternativa alla complessità del perl nonchè offrire una maggiore portabilità del codice rispetto a quella offerta da soluzioni come l'ASP.
Accade così che oltre all'ottimo supporto per lo scripting cgi offerto dal perl nascono nuovi modi di programmare per il web che rivoluzionano questo mondo anche nei suoi contenuti: il php permette di creare pagine web con contenuti dinamici delimitati da opportuni marcatori che vengono eseguiti e sostituiti dal lato server prima che la pagina venga inviata al browser del client.
Il PHP è un linguaggio interpretato e multipiattaforma, i suoi script possono quindi essere direttamente interpretati senza bisogno di essere prima compilati (a differenza di quanto avviene ad esempio con java) su una notevole varietà di sistemi operativi e piattaforme.
Il linguaggio vince in semplicità sul java e anche grazie ai numerosissimi tools nati per implementare interfacce web sempre più elaborate con esso, nonchè al diffusissimo supporto offerto dai maggiori providers di hosting, rappresenta una più che valida soluzione per chi, magari alle prime armi, vuole iniziare a crearsi un sito che non sia composto unicamente da pagine html statiche.
Pur rimanendo un linguaggio prettamente adatto alla programmazione web, il php ha avuto una notevole
evoluzione che lo ho portato a disporre di librerie adatte ad eseguire molti compiti come ad esempio
l'uso di database, la generazione di files pdf, la creazione di programmi standalone con gui.
Ebbene si: php non è usato solo per inserire codice nelle pagine html ma è un vero linguaggio dotato di un
vero interprete che gli permette di eseguire anche singoli programmi che con le giuste librerie possono
offrire funzionalità non indifferenti (un esempio può essere il sw di reportistica Agata report).
Il linguaggio TCL (l'acronimo sta per tool command language) è un linguaggio di scripting opensource
a carattere generale, un po' come perl e python, la cui nascita risale al 1988 ad opera di un
professore dell'università di Berkeley.
Il linguaggio ha spiccate caratteristiche di semplicità e si colloca a metà strada tra il C e i
linguaggi di shell unix (particolarmente csh). La sintassi si discosta un po' rispetto a quella che siamo
abituati a vedere nei più diffusi linguaggi di programmazione, poi tuttavia ci si abitua e se ne
apprezzano anche gli aspetti di praticità.
Il linguaggio è multipiattaforma (win, linux/unix e mac) e si presta molto bene ad essere incorporato come tool/interprete di script in programmi scritti con altri linguaggi, eventuali estensioni possono essere scritte in C o in Tcl stesso.
Il tcl di per se è un linguaggio molto semplice e pulito, non include librerie particolarmente ricche (come invece succede con il python) ma ciò che lo ha fatto crescere fino a farlo divenire un po' la killer application dei linguaggi di scripting grafico è il modulo tk: si tratta di una semplice ma efficace libreria grafica sviluppata come aggiunta e divenuta ormai inseparabile in qualsiasi distribuzione del linguaggio al punto di cambiarne il nome (si parla quasi sempre di tcl/tk)
La libreria Tk viene spesso utilizzata come estensione grafica per altri linguaggi allo scopo di non reinventare l'acqua calda (per il python ad esempio è la libreria grafica ufficiale ma esistono moduli per utilizzarla anche con il perl e vari altri linguaggi), essa ha però delle caratteristiche estetiche tipiche di vecchi ambienti unix e che la rendono ormai un po' sorpassata, specie sotto.
Il linguaggio di base è sostanzialmente dichiarativo e funzionale, non presenta supporto per gli oggetti e manca anche di alcune strutture dati importanti come array e liste dinamiche. Sostanzialmente in tcl tutti i tipi di dati vengono trattati e gestiti come stringhe.
Posso consigliare TCL/TK a coloro che non amano la programmazione ad oggetti e prevedono di sviluppare molte piccole e semplici applicazioni, specie se con gui. Il linguaggio è anche molto adatto per chi è completamente a digiuno di programmazione, in quanto semplice da apprendere e non particolarmente ricco di comandi.
Alcuni links:E' un linguaggio abbastanza giovane e poco diffuso, si trovano poche risorse sul web e non mi sento quindi di consigliarlo per progetti di una certa importanza o addirittura per adottarlo come linguaggio principale di sviluppo.
La sintassi è piuttosto particolare e consiglio il linguaggio solo a coloro che amano la programmazione funzionale.
I links:Il lisp è uno dei più longevi linguaggi (risale alla fine degli anni '50) di alto livello (per l'epoca in cui è nato) insieme al fortran, dal quale differisce però notevolmente. E' un linguaggio funzionale che si è diffuso soprattutto a livello accademico ed è molto adatto per applicazioni di calcolo ed elaborazioni algebriche e logiche.
Ha conosciuto fortune alterne e attualmente è utilizzato quasi esclusivamente in ambito scientifico/tecnico come ad esempio nei sw di intelligenza artificiale, simulazioni numeriche, ecc. ma non disdegna anche campi applicativi più concreti come disegno tecnico (CAD) e il famoso editor EMACS.
Esso si presta molto bene alla ridefinizione della sintassi, per questo sono nati vari dialetti che
rimodellano il linguaggio fino, a volte, a reinventarlo.
Tra i più famosi dialetti troviamo scheme, guile, logo, ecc.
Attualmente esiste lo standard COMMON ANSI LISP che tenta di riunire ed unificare le caratteristiche del
linguaggio.
Il linguaggio è diffuso soprattutto su sistemi unix-like e nelle distribuzioni linux si trova spesso almeno una versione di scheme, guile o clisp.