Vi siete mai chiesti perché C++ porta in dote i puntatori? O perché i progettisti di Java hanno preferito un approccio differente per la gestione della memoria? Sicuramente la Rete è piena di fonti, che riportano i motivi delle scelte progettuali alla base dei più importanti linguaggi di programmazione (Wikipedia
docet).
Federico Biancuzzi e
Shane Warden, autori del libro
MasterMinds of Programming hanno pensato a un approccio diverso: piuttosto che raccogliere queste informazioni in un volume sui paradigmi di programmazione,
hanno intervistato i rispettivi creatori di diciassette tra i più noti linguaggi di programmazione.
Il libro diventa così un contenitore in cui i progettisti dei linguaggi di programmazione rispondono alle domande rivolte loro dagli autori del libro e motivano le scelte adottate nella progettazione del proprio linguaggio.
Il libro include una prefazione e diciassette capitoli, uno per ogni linguaggio di programmazione analizzato, in cui viene riportata la conversazione con il rispettivo autore, che verte su
argomenti differenti in base all'età del linguaggio e ai paradigmi di programmazione da esso supportati.
Il primo intervistato è
Bjarne Stroustrup: il creatore di C++, secondo linguaggio di programmazione nella
classifica TIOBE, viene interrogato sui motivi che lo indussero, nel lontano 1979, ad aggiungere al linguaggio C le funzionalità
Object Oriented presenti in Simula, evitando di comprometterne le prestazioni. Con queste caratteristiche, dice
Stroustrup, il linguaggio è adatto a ogni tipo di applicazione, da quelle desktop fino a software
mission-critical; tra i vari campi applicativi per cui C++ è consigliato,
Stroustrup non esclude lo sviluppo di kernel in C++ "bacchettando" gli sviluppatori del kernel Linux di eccessivo conservatorismo. Inoltre C++ è un linguaggio in continuo sviluppo: la nuova C++0x, di cui
abbiamo parlato in alcuni precedenti articoli, fornirà nuove funzionalità per migliorare la concorrenza, pur restando compatibile al 100% con la precedente versione. Del resto
non bisogna dimenticare che parte del successo nella fase di lancio di C++ è dovuto alla compatibilità con il linguaggio C.
A confermare l'importanza della retrocompatibilità per un linguaggio di programmazione c'è
Guido van Rossum, che esordisce affermando che
i linguaggi di programmazione sono la dipendenza più importante (e meno modificabile) di ogni progetto software. E' questa la prima di una lunga serie di risposte che consentono al lettore di scoprire cosa si intenda per
Pythonic way, la filosofia che sta dietro il linguaggio. Le caratteristiche di Python, tra cui spiccano tipizzazione debole, paradigmi multipli e indentazione del codice obbligatoria, offrono agli sviluppatori l'opportunità di scrivere meno codice rispetto a un linguaggio meno dinamico come, ad esempio, C++ e Java.
Un buon programmatore — dice comunque
Van Rossum —
si riconosce dalle motivazioni. Non è possibile fare una domanda per capire se un programmatore è valido o meno. Nell'ultima sezione del capitolo,
Van Rossum descrive alcuni espedienti che possono essere utili quando si programma con Python.
Il terzo capitolo è dedicato a
Adin D. Falkoff che collaborò alla creazione di APL mentre era alla ricerca di una estensione di notazione matematica per la descrizione precisa degli algoritmi. Il linguaggio, seppur non molto utilizzato, dispone di caratteristiche interessanti; basti pensare che nel 1979 il suo creatore ricevette un
Turing Award per l'innovatività del linguaggio. La prima domanda rivolta a
Falkoff riguarda l'
approccio carta e penna menzionato in un documento dal titolo
The Design of APL, pubblicato da
Falkoff. La discussione prosegue mostrando i principi elementari del linguaggio e il conseguente approccio al parallelismo.
Il quarto capitolo mostra il linguaggio FORTH, un linguaggio
stack-based progettato da
Chuck Moore nel 1960. Il linguaggio è caratterizzato da uno stack per la memorizzazione dei dati e da parole per operare sullo stack. La prima parte del'intervista a
Moore, una delle più brevi del libro, pone l'accento sulle motivazioni di progetto del linguaggio e, in particolare, sulle potenzialità in termini di portabilità anche su dispositivi
embedded (ad esempio il progetto
Open Firmware è scritto in questo linguaggio). Il capitolo si conclude con alcune domande sul modo in cui il linguaggio influenza la progettazione delle applicazioni.
Il quinto capitolo parla del linguaggio BASIC, inventato da
Thomas Kurtz e
John Kemeny nel 1963 come strumento per insegnare la programmazione ai principianti. L'intervista, condotta a
Tom Kurtz riguarda gli obiettivi proposti e ottenuti da BASIC, le problematiche di progettazione del compilatore, il linguaggio e le pratiche di programmazione.
Dopo un linguaggio tanto caro a Microsoft non poteva che essere proposta l'intervista ai tre creatori di AWK, di cui è stato proposto un
tutorial su Programmazione.it; esso è uno dei linguaggi che ha tra i propri punti di forza l'utilizzo della filosofia UNIX, secondo cui bisognerebbe creare piccoli softwre, che combinati tra loro possono offrire software complessi e ben assemblati. Il capitolo è uno dei più lunghi del libro a causa della numerosità e dell'importanza dei suoi creatori tra cui figurano
Al Aho,
Peter Weinberger e
Brian Kernighan. Tra gli argomenti affrontati nella conversazione sono presenti sia l'approccio al linguaggio AWK, sia domande riguardanti UNIX e l'informatica in generale. Senza dubbio è il capitolo più interessante considerato anche il calibro degli intervistati, e in particolare di
Brian Kernighan, il quale, oltre ad aver collaborato alla creazione di AWK, si è occupato anche della progettazione del linguaggio C.
Ad AWK segue LUA, il linguaggio che è diventato famoso per la semplicità di integrazione all'interno di motori grafici, in qualità di linguaggio di scripting. I suoi inventori,
Roberto Ierusalimschy,
Luiz Enrique de Figueiredo e
Waldemar Celes sono intervistati in merito alla potenza dello scripting, sulla esperienza d'uso del linguaggio di programmazione e sulla progettazione.
L'ottavo capitolo parla del linguaggio HASKELL, un linguaggio puramente funzionale, progettato inizialmente come standard aperto per i moderni linguaggi funzionali. Al contrario degli altri capitoli l'intervista si basa su scambi di e-mail con
Paul Hudak,
John Hughes,
Simon Peyton Jones e
Philip Wadler ed è integrata con una intervista al telefono con
Simon Peyton Jones. Trattandosi del primo linguaggio funzionale preso in considerazione dal libro, l'intervista è focalizzata sull'analisi del paradigma di programmazione e sulle differenze, analizzando vantaggi e svantaggi di questo approccio rispetto ai paradigmi più usati. La seconda sfilza di domande è invece dedicata alle caratteristiche di Haskell. Il capitolo si conclude con delle domande riguardanti la diffusione dei linguaggi funzionali e l'evoluzione di questo linguaggio.
Il nono capitolo parla del linguaggio ML, un linguaggio funzionale
general-purpose sviluppato da
Robert Milner all'Università di Edinburgh nel 1970. Considerata la natura matematica del linguaggio,
Milner è intervistato sull'importanza della storia di ML nel corso della sua evoluzione. Gli viene poi chiesto come la progettazione di un linguaggio di programmazione possa influire sulla progettazione di programmi e in che misura il linguaggio stesso aiuti gli sviluppatori a pensare nel modo migliore. Il capitolo termina con una serie di domande sui problemi maggiori dell'informatica al giorno d'oggi.
Il decimo capitolo parla del linguaggio SQL, che in realtà non è un vero linguaggio di programmazione, come riportato nella
classifica TIOBE. L'intervistato non è
Codd, a cui si deve il modello relazionale, ma
Donald Chamberlin, che sviluppò SQL sulla base delle idee di
Codd. All'intervistato viene chiesto di parlare delle modalità di progettazione del linguaggio, dell'evoluzione e infine di XQuery, il linguaggio su cui sta lavorando
Donald Chamberlin finalizzato all'accesso a dati XML.
L'undicesimo capitolo parla del linguaggio Objective-C, la cui popolarità è dovuta all'avvento dei sistemi NeXT introdotti da
Steve Jobs nel 1988 e che continua tuttora a essere utilizzato in Mac OS X e nell'iPhone. Objective-C fu creato da
Tom Love e
Brad Cox come una combinazione tra C e Smalltalk, con l'aggiunta del supporto agli oggetti di Smalltalk. La discussione con
Tom Love è focalizzata sulle scelte progettuali e soprattutto sulle differenze con C++, linguaggio concorrente che secondo
Love non merita il successo ottenuto, dovuto più a ragioni commerciali che a causa di una motivazione tecnica. Gli altri argomenti della discussione sono l'evoluzione del linguaggio, l'addestramento degli sviluppatori e la gestione dei progetti software. Il capitolo prosegue con l'intervista a
Brad Cox, che ribadisce il rapporto tra Objective-C e C++ e si intrattiene sul software a componenti. Gli ultimi argomenti trattati sono la qualità del software come fenomeno economico e l'insegnamento di un linguaggio di programmazione.
Il dodicesimo capitolo parla del linguaggio Java, ovvero quello che è considerato da tutti il linguaggio open source enterprise per eccellenza.
James Gosling discute con gli intervistatori della stretta relazione tra potenza e semplicità. Questa è solo una delle scelte di Java, che tra le altre più note, include una virtual machine per l'esecuzione del codice. La discussione è incentrata sulle differenze con C++ e
Gosling descrive le motivazioni che lo hanno indotto a progettare Java, così come lo conosciamo oggi.
Il tredicesimo capitolo parla del linguaggio C#, il linguaggio commissionato da Microsoft al veterano del settore
Anders Hejlsberg, in seguito ai problemi legali con Java. La discussione con
Hejlsberg inizia ripercorrendo le esperienze riguardanti la progettazione di linguaggi di programmazione: dall'implementazione di Turbo Pascal attraverso Delphi, J++, Cool, fino ad arrivare a C#. Da qui prende il via la discussione sulla progettazione del linguaggio, le motivazioni dell'uso di una vrtual machine e le differenze con gli altri linguaggi di programmazione simili; tra questi quello preso come riferimento è Java, con il quale condivide diverse caratteristiche. Le altre sezioni riguardano la crescita del linguaggio, il futuro di C# e il futuro dell'informatica in generale.
Il quattordicesimo capitolo parla del linguaggio UML, acronimo di
Unified Modeling Language, che ha fornito agli sviluppatori di tutto il mondo uno strumento per modellare i software
object-oriented tramite diagrammi universalmente riconosciuti. L'intervista è svolta separatamente a
Ivar Jacobson,
James Rumbaugh e
Grady Booch. Il primo parla delle modalità migliori per apprendere e insegnare un linguaggio di programmazione e di come UML possa essere utile nella comunicazione e nell'organizzazione di un team di sviluppo. Questi due argomenti sono poi correlati quando si parla del collegamento tra conoscenza delle tecniche di ingegneria del software e i linguaggi di programmazione.
Rumbaugh descrive invece quanto sia importante per i moderni team di sviluppo essere pronti al cambiamento, attitudine più semplice se si fa uso di sistemi per condividere la conoscenza, per riusare il software e per accelerarne lo sviluppo. Trova spazio anche una critica ai design pattern e al famoso libro che secondo
Rumbaugh risulta poco utile per linguaggi diversi da C++ o Java. La discussione con
Grady è invece incentrata sulla progettazione del linguaggio UML e sulla sua effettiva utilità nello sviluppo di software.
Il quindicesimo capitolo parla del linguaggio Perl, definito dai suoi stessi fan
Pathologically Ecletic Rubbish Lister. Inizialmente esso era stato inteso come un collante tra le shell UNIX e il linguaggio C per aiutare gli sviluppatori.
Larry Wall coglie l'occasione per mostrare all'intervistatore la lunga lista dei principi di progettazione del linguaggio e le motivazioni delle scelte progettuali. La discussione verte anche sull'importanza della comunità e si conclude con l'analisi dell'evoluzione di Perl fino alla sesta versione rilasciata nel 2000.
Il sedicesimo capitolo parla del linguaggio PostScript, comunemente utilizzato per la pubblicazione di documenti elettronici. Il linguaggio fu inventato da
John Warnock e
Charles Geschke dopo aver fondato Adobe Systems nel 1982. I due creatori sono intervistati insieme e vengono poste le stesse domande a entrambi. L'intervista ripercorre le tappe di definizione del linguaggio e le problematiche che il linguaggio ha dovuto risolvere nel tempo. L'intervista termina con una critica agli attuali standard web, i quali, secondo
Geschke, non sono affatto paragonabili in termini di efficacia con altre tecnologie, tipo Flash ed Air, che offrono la possibilità di scrivere del codice realmente multipiattaforma. Secondo i creatori di PostScript infatti HTML non può considerarsi uno standard dato che su browser diversi può offrire risultati diversi.
L'ultimo capitolo è dedicato ad Eiffel, il linguaggio progettato da
Bertrand Meyer, la cui caratteristica più famosa è l'idea del
Design by Contract. L'intervista a
Meyer ha lo scopo di approfondire le motivazioni dell'uso di questo paradigma di programmazione, ripercorrendo le tappe più importanti dalla sua nascita fino ai giorni nostri.
Meyer passa poi a descrivere come questo approccio favorisca la riusabilità del codice e l'evoluzione dei progetti.