Quanto spesso ti trovi a dover integrare elm con codice JS?
Ultimamente poco. Mesi fa quando ci siamo messi a fare la migrazione ovviamente la situazione era diversa, avevo a che fare con JS più di quanto avrei voluto :)
Se con elm si possono scrivere solo funzioni pure, come si gestiscono le funzioni che di natura non sono pure, per esempio una chiamata Ajax o la richiesta di un numero random?
Ottima domanda! Questo è stato il mio dubbio più grande all'inizio. La risposta è che in Elm esiste un tipo particolare che *descrive* che tipo di azione impura vogliamo eseguire. In altre parole, se volessimo fare una chiamata HTTP ad esempio, anzichè essere espliciti e chiamare direttamente `fetch()` come faremmo in JS, restituiamo una struttura dati che *rappresenta* la richiesta. Questa struttura conterrà URL, Method, Headers etc che il runtime di Elm utilizzerà per fare la richiesta vera e propria. Una spiegazione più approfondita è disponibile sul mio blog: https://alpacaaa.net/blog/post/elm-memory-game-from-scratch/
Come si ottimiza la gestione dello stato, per evitare eccessive ridondanze ?
Non mi è molto chiara la domanda. In ogni caso, molte delle best practices che valgono per Redux sono applicabili anche in Elm. La cosa più importante secondo me è mantenere una versione normalizzata dei dati nello stato (che ha il beneficio di evitare eccessive ridondanze, se è questo quello che intendi).
Fare refactoring di codice Javascript non è sempre piacevole. Si può dire lo stesso di Elm?
In Elm fare refactoring è una gioia! Abbiamo sempre al nostro fianco il compilatore che controlla tutto ciò che facciamo. Quindi nel momento in cui cominciamo un refactoring modificando alcune proprietà nello stato ad esempio, possiamo star certi che il compilatore continuerà a lamentarsi finchè non abbiamo sistemato tutte le occorrenze delle proprietà modificate. Questo ci dà certezza e tranquillità rispetto la correttezza del nuovo codice!
Quale è secondo te il modo migliore di introdurre una nuova tecnologia in azienda?
Serve un champion, qualcuno che si prenda la briga di mostrare i benefici di questa nuova tecnologia ai colleghi e di seguirne passo passo l'introduzione. I primi tempi sono sempre i più difficili e la cosa più importante è non perdere la speranza: il champion deve essere pronto a spendere tutto il tempo necessario per superare gli ostacoli che si presentano inevitabilmente all'inizio. Questi sforzi saranno ripagati, una volta che il team si rende conto dei vantaggi portati dalle novità introdotte!