Javascript: Il linguaggio di programmazione più incompreso del mondo
Crockford mantiene le specifiche di JSON. Crockford da parte del comitato ECMA per la standardizzazione di Javascript. Crockford ha scritto una serie di post su javascript che mi sento di condividere e che sono stati tradotti in diverse lingue tra cui il cinese ed il turco (con buona pace dei leghisti) ma non in italiano. Google non mi ha indirizzato a traduzioni del pezzo che ho deciso di tradurre e che troverete di seguito. Non mi resta che ringraziare Douglas Crockford per la pronta e positiva risposta alla mia proposta di traduzione.
Javascript: Il linguaggio di programmazione più incompreso del mondo
Titolo originale: JavaScript: The World’s Most Misunderstood Programming Language
Douglas Crockford (www.crockford.com)
JavaScript, alias Mocha, alias LiveScript, alias JScript, alias ECMAScript, è uno dei linguaggi di programmazione più popolari.Teoricamente ogni personal computer al mondo ha installato almeno un interprete Javascript e lo usa correntemente. La popolarità di Javascript è dovuta interamente al suo ruolo di linguaggio di scripting per il WWW.
A dispetto della sua popolarità, pochi sanno che Javascript è un bellissimo linguaggio di programmazione dinamico orientato agli oggetti e adatto a tutti gli ambiti di sviluppo. Come mai questa cosa è potuta restare un segreto? Perché questo linguaggio è così incompreso?
Il Nome
Il prefisso Java- suggerisce che in qualche modo Javascript sia legato a Java, che ne sia un sottinsieme o una versione ridotta. Sembra che il nome sia stato scelto proprio per creare confusione, e la confusione genera mailntesi. Javascript non è un Java interpretato. Java è Java interpretato. Javascript è un altro linguaggio.
JavaScript è più simile sintatticamente a Java di quanto quest’ultimo non lo sia nei confronti del C. Ma non è un sottoinsieme di Java più di quanto Java non sia un sottoinsieme di C. Javascript è migliore di Java in quelle applicazioni per cui Java (già OAK) era stato pensato originariamente.
Javascript non è stato sviluppato da Sun Microsystem, il creatore di Java. Javascript è stato sviluppato da Netscape. Originariamente il suo nome era LiveScript, ma quel nome non era abbastanza ambiguo.
Il suffisso -Script suggerisce che non si tratti di un vero lingiaggio di programmazione, che un linguaggio di scripting sia qualcosa di meno di un linguaggio di programmazione. In realtà è tutta una questione di specializzazione. Comparato al C, Javascript scambia le performance con la forza espressiva ed il dinamismo.
Lisp travestito da C
La sintassi di Javascript, simile a quella del C, incluse le parentesi graffe e quello sgraziato costrutto for, lo fa sembrare un normale programma procedurale. Si tratta di una falsa impressione perché Javascript ha più in comune con i linguaggi funzionali come Lisp or Scheme che con C o Java. Ha array invece che liste e oggetti al posto delle property
list. Le funzioni sono di prima classe. Ha le chiusure. Avete le funzioni lambda senza dover bilanciare tutte quelle parentesi.
Casting dei tipi
JavaScript è stato progettato per funzionare in Netscape Navigator. Il suo successo ne ha fatto un componente standard di praticamente tutti i browser web. Questo ha portato al casting dei tipi. Javascript è il George Reeves dei linguaggi di programmazione. JavaScript è adatto ad una grossa fetta di applicazioni non web.
Bersaglio Mobile
La prima versione di Javascript era abbastanza debole. Mancava la gestione delle eccezioni, le funzioni annidate e l’ereditarietà. Nella sua forma attuale è un completo linguaggio orientato agli oggetti. Ma molte opinioni sul linguaggio sono basate sulla sua forma immatura. Il comitato ECMA che ha preso in carico il linguaggio sta sviluppando estensioni che, anche se bene intenzionate, aggraveranno uno dei suoi maggiori problemi: Ne esistono già troppe versioni. Questo crea confusione.
Errori di progettazione
Nessun linguaggio di programmazione è perfetto. Javascript ha la sua parte di errore di progettazione come l’overloading dell’operatore + ad indicare sia la somma che il concatenamento con coercizione di tipo, l’istruzione with che può generare errori ed andrebbe evitata. La politica di gestione delle parole riservate è stroppo stretta. L’inserimento automatico dei punti e virgola è stato un grosso errore, così come la notazione usata per le espressioni regolari. Questi errori hanno portato ad errori di programmazione, e fatto discutere della progettazione dell’intero linguaggio. Fortunatamente, molti di questi problemi possono essere ridotti con un buon programma di lint.
Il design del linguaggio, nel suo insieme è buono. Sorprendentemente il comitato per l’ECMAScript non sembra interessato a risolvere questi problemi. Forse saranno interessati ad introdurne di nuovi.
Pessime Implementazioni
Alcune delle prime implementazioni di Javascript erano piene di bug. Questo ha avuto un cattivo impatto sulla reputazione del linguaggio. Oltretutto, quelle implementazioni erano associate a browser assolutamente malfunzionanti.
Brutti Libri
Quasi tutti i libri su Javascript sono atroci. Contengono errori, esempi poco calzanti, e incoraggiano cattive pratiche. Caratteristiche importanti del linguaggio sono appena accennate, spiegate male o tralasciate interamente. Ho recensito dozzine di libri su Javascript, e mi sento di raccomandarne soltanto uno:JavaScript: The Definitive Guide (5th Edition) by David Flanagan. (versione italiana).
(Attenzione autori: se avete scritto un buon libro, fatemene avere una copia da recensire.)
Standard al di sotto degli standard
Le specifiche ufficiali del linguaggio è pubblicato dall’ECMA. Le specifiche sono scritte particolarmente male. Sono difficile da leggere e molto difficili da capire. Questo ha avuto la sua parte nella stesura di una cattiva bibliografia perché gli autori non sono in grado di utilizzare questi documenti per migliorare la propria comprensione del linguaggio. ECMA e il comitato TC39 dovrebbero esserne profondamente imbarazzati.
Dilettanti
La maggior parte delle persone che programmano in Javascript non sono programmatori. Mancano della disciplina e della formazione necessaria alla stesura di buoni programmi. Javascript ha una tale potenza espressiva da metterli comunque in grado di fare cose utili. Questo ha dato a Javascript la fama di linguaggio pre dilettanti, non adatto allo sviluppo professionale. Semplicemente, non è questo il caso.
Orientamento agli oggetti
JavaScript è object-oriented? Ha oggetti che possono contenere dati e metodi che agiscono su questi dati. Gli oggetti possono contenere altri oggetti. Non ha classi, ma ha il concetto di costruttore che fa quello che ci si aspetta da una classe, anche funzionare da contenitore per variabili di classe e metodi. Non ha una ereditarietà basata sulle classi ma ne propone una basata su prototipi. le due strategie più usate per costruire sistemi ad oggetti sono l’ereditarietà (is-a [è-un]) e l’aggregazione (has-a [ha-un]). Javascript permette entrambi, la sua natura di linguaggio dinamico, però, lo fa eccellere con l’aggregazione.
Qualcuno potrebbe ribattere che Javascript non è veramente orientato agli oggetti perché non supporta l’incapsulamento. Cioè un oggetto non può avere variabili e metodi privati: tutti i membri sono pubblici.
In realtà si scopre che gli oggetti JavaScript possono avere variabili e metodi privati (click qui per scoprire come). Naturalmente, pochi ne sono a conoscenza perché Javascript è il linguaggio più incompreso del mondo.
C’è chi ribatte che Javascript non è un vero linguaggio ad oggetti perché non supporta l’ereditarietà. In realtà Javascript non si limita a supportare l’ereditarietà classica, ma permette anche altre forme di riutilizzo del codice.
Copyright 2001 Douglas Crockford.
All Rights Reserved Wrrrldwide.

Innanzitutto grazie per la traduzione.
Io avrei tradotto il titolo con: “JavaScript: il linguaggio di programmazione più frainteso al mondo”
unwiredbrain
Luglio 20, 2009 alle 0:04 am
Beh, ci ho pensato un pò prima di scegliere frainteso piuttosto che incompreso ed ho scelto quest’ultimo perché penso che vada meglio al nocciolo della questione:
A causa di un cattivo supporto e peggiori implementazioni iniziali, Javascript è stato sempre snobbato come linguaggio professionale. Io stesso, fin dai primi esperimenti con quel trabiccolo di netscape l’ho odiato a morte. Da qualche tempo non solo l’ho rivalutato, ne sono rimasto affascinato.
Volendo riassumere il tutto con una immagine: io sulla copertina della bibbia di Javascript, invece che un rinoceronte ci avrei messo Calimero.
eineki
Luglio 20, 2009 alle 10:19 am
ma esiste un SANO Linguaggio NON orientato agli oggetti? Insomma un VERO linguaggio di programmazione?
Saluti
antonio
Agosto 29, 2009 alle 8:00 am
Non credo che esistano linguaggi VERI o linguaggi FARLOCCHI. Penso che esistono centinaia di linguaggi ed ognuno di questi è più o meno adatto a risolvere particolari problemi piuttosto che altri. E penso che non ci sia nulla di male in tutto ciò.
Penso, poi, che ogni programmatore si senta a casa usando una certa classe di linguaggi piuttosto che altri, e sarebbe sciocco pretendere il contrario.
Se vuoi esplorare un vero linguaggio che non sia orientato agli oggetti puoi sempre provare erlang o haskell. Se poi per VERO linguaggio intendevi l’assembly allora non hai da fare altro che scaricare le specifiche del tuo processore di riferimento
eineki
Agosto 30, 2009 alle 7:18 am