Marijn Haverbecke è l'autore del libro Eloquent JavaScript e di CodeMirror. In questa intervista abbiamo parlato di JavaScript visto come linguaggio da imparare, ossia dal punto di vista di chi lo studia.
Secondo la tua esperienza personale, quali sono i concetti di JavaScript più difficili da capire per chi inizia?
Le closure, ed anche il concetto generale delle funzioni come valori, sembrano confondere molte persone. In parte ciò è dovuto al fatto che molte persone hanno esperienza con altri linguaggi che non enfatizzano questa caratteristica nel modo con cui lo fa JavaScript. Sembra che capire la differenza tra il punto in cui una funzione è creata ed il punto in cui viene invocata richiede un elaborato modello mentale dell'esecuzione del codice. Questo porta via del tempo ai principianti.
Molti programmatori JavaScript di talento tendono a scrivere i loro articoli e tutorial solo per lettori avanzati. Pensi che questo approccio abbia degli svantaggi?
Gli argomenti avanzati hanno un senso solo per chi ha un background di un certo livello. Credo sia utile scrivere su questi argomenti per un livello avanzato, ma per chi inizia molti concetti vanno persi. Detto questo, cerco di scrivere usando i tecnicismi solo dove è necessario e spiego i termini oscuri ogni volta sia possibile per rendere il testo il più accessibile possibile.
Le specifiche ECMAScript e DOM evolvono rapidamente. Cosa pensi di questa evoluzione?
Ho imparato a tenermi alla larga dalle discussioni sugli standard. Sono confuse e piene di argomenti fuorvianti. Ma sono utili e ne ho avuto conferma dalle idee partorite dallo sviluppo di HTML5 ed ECMAScript 6. La lentezza del processo di standardizzazione mi rende frustrato e penso che lo siano anche gli altri sviluppatori. Per esempio, avrei voluto più supporto ad Unicode in ECMA 6, ma questa parte è finita nel progetto ECMAScript Internationalization, che al momento è ferma. Ma date le parti in gioco e l'alto costo degli errori fatti nelle specifiche, penso sia una cosa con cui dobbiamo convivere.
Molti programmatori hanno delle difficoltà quando imparano JavaScript avendo già un solido background in altri linguaggi. Quale consiglio daresti a questa categoria di lettori?
La cosa più importante è non pensare che JavaScript non sia un vero linguaggio di programmazione. Se si rifiuta di prendere qualcosa sul serio, non si riuscirà ad impararlo. Sebbene JavaScript sia certamente un linguaggio "strano", le cose straordinarie che si realizzano con JavaScript dimostrano che vale la pena padroneggiarlo. Si applica qui il relativismo culturale: se avete fatto cose diverse durante la vostra carriera, sembra quasi eccessivo che i dizionari dinamici e gli oggetti dotati di un set statico di campi vengano rappresentati nello stesso modo. Al contrario, sembrerebbe sciocco introdurre un'eccessiva complessità separando questi concetti. Le tecniche di compilazione di JavaScript sono state migliorate negli ultimi anni e questo elimina molti pregiudizi.
I browser evolvono rapidamente ma ci sono ancora in giro reliquie del passato. Pensi che il progressive enhancement e la graceful degradation siano due approcci corretti quando si deve scrivere codice cross-browser?
Penso che tutto dipenda da cio che si implementa. Per i semplici documenti HTML di contenuto testuale, spostare tutto su JavaScript e creare problemi nei browser obsoleti è da criminali. Per le applicazioni invece penso sia utile, così come è utile scrivere semplicemente del codice moderno senza preoccuparsi troppo di questi approcci.
Quali sono i tuoi progetti nell'immediato? So che stai preparando la seconda edizione di "Eloquent JavaScript".
Si, ci sto lavorando, ma non così velocemente come speravo perché mi ritrovo a riscrivere più di quanto pensassi. Ma sono soddisfatto di come sta venendo. Un altro progetto (infinito questo...) è CodeMirror, un editor open-source che funziona nel browser. Sebbene abbia già detto che è un editor e non un IDE, il suo sviluppo si è andato espandendo nel corso degli anni. Non è un problema, perché un software va bene se ha le batterie giuste incluse nella distribuzione. Lo gestisco da solo senza che per questo occupi tutta la mia vita.
Dopo la seconda edizione di Eloquent JavaScript, voglio dedicare del tempo ad aggiungere nuove feature a CodeMirror, a fixare dei bug e a incrementare, diciamo così, le "pubbliche relazioni" del progetto rendendolo più facile da trovare, a migliorarne la documentazione e magari convincere alcune società a pagare per avere un supporto in modo da guadagnare qualcosa.