Un'intervista con Erik Schierboom in cui lui e Jeremy Walker parlano di programmazione funzionale, della manutenzione delle track di Exercism e della prossima analisi statica delle soluzioni di Exercism.
Ciao Erik. Grazie per essere il protagonista del primo Contributor Spotlight di Exercism! Volevamo mettere in luce il tuo lavoro perché sembra che tu contribuisca a ogni angolo di Exercism e abbia ottimi spunti maturati lavorando su tutto il progetto!
Allora, per inquadrare un po' il contesto: come ti sei avvicinato a Exercism la prima volta?
Nel 2014 ho seguito un corso di programmazione funzionale che usava Scala come linguaggio. Dopo aver finito quel corso, ho cercato risorse per migliorare ulteriormente le mie competenze in Scala e ho trovato Exercism. Non ci è voluto molto prima che ci rimanessi preso e iniziassi a seguire anche le track di altri linguaggi su Exercism. Dato che avevo tratto grande beneficio dai commenti che le persone lasciavano sulle mie soluzioni, ho iniziato a commentare le soluzioni nella track di C#. A un certo punto mi è stato chiesto di diventare maintainer della track di C# e ho accettato volentieri. Cinque anni dopo, sono mentore nelle track di C# e F#, maintainer delle track di C#, F# e Scala e collaboro alle specifiche dei problemi condivise tra le track.
Bello. Quindi ti sei avvicinato a Exercism davvero agli inizi. Per chi non lo sa, potresti spiegare cosa significa essere un maintainer di Exercism?
Certo. Detto in astratto, un maintainer di Exercism è responsabile della «salute» di una track. In pratica, questo può voler dire moltissime cose: implementare nuovi esercizi, aggiornare quelli esistenti o rivedere le pull request di altri maintainer. Un altro aspetto importante è ordinare correttamente gli esercizi di una track, per assicurarsi che gli studenti abbiano la migliore esperienza di apprendimento possibile. Nota che essere un maintainer non significa doversi dedicare a tutte le attività appena citate: è del tutto legittimo che un maintainer si concentri solo su una o due attività.
Grazie! Oltre a concentrarti su C#, F# e Scala, hai praticamente affrontato tutte le track di linguaggi su Exercism. Ne hai alcune preferite dal punto di vista di chi impara?
Anche se ho imparato tantissimo da ogni track che ho affrontato, la mia preferita in assoluto è la track di Haskell. Non solo è un ottimo linguaggio, con tantissimi concetti interessanti, ma la qualità dei suoi mentori era assolutamente straordinaria. Altre mie preferite sono le track di Kotlin e F#, due linguaggi estremamente ben progettati e pragmatici in cui adoro programmare.
Già, sento parlare molto bene dei mentori di Haskell! Immagino che aver affrontato così tante track ti abbia dato un sacco di spunti interessanti sulla programmazione. C'è qualcosa in particolare che hai imparato da quell'esperienza?
Oh, sì, un sacco di cose! Lavorare con una grande varietà di linguaggi ti espone a molti modi diversi di affrontare i problemi. Questi approcci diversi hanno tutti influenzato in qualche modo il mio stile di programmazione, anche se probabilmente i linguaggi funzionali sono quelli che mi hanno influenzato di più. Ora mi accorgo di usare concetti funzionali ogni volta che posso, anche nei linguaggi non funzionali (che stanno lentamente adottando elementi funzionali).
Ho anche imparato che, per quanto ogni linguaggio sia diverso, molti in realtà si somigliano parecchio. Di conseguenza, imparare un nuovo linguaggio diventa molto più facile una volta che ne conosci un paio. Per esempio, conoscere Haskell significa che probabilmente si può imparare F# o Scala abbastanza in fretta. Imparare nuovi linguaggi può quindi essere anche una buona mossa per la carriera, perché ti permette di passare da un linguaggio all'altro con più facilità.
Infine, ho imparato che avere dei mentori che ti guidano mentre impari un linguaggio rende il processo molto più piacevole ed efficace.
Ho riscontrato la stessa cosa. Imparare dagli altri è un moltiplicatore incredibile! Da un punto di vista pratico, come hai gestito tutta la configurazione dei vari linguaggi? Spesso trovo che l'idea di imparare un nuovo IDE sia un po' intimidatoria. Sei rimasto su un editor che conoscevi mentre affrontavi i vari linguaggi, o l'hai cambiato per cercare di avere un'esperienza più idiomatica?
Per alcuni linguaggi, configurare da zero un ambiente di sviluppo era un po' una scocciatura, ma oggi la maggior parte è abbastanza semplice da configurare. Poi cerco di trovare un IDE che mi dia la migliore esperienza per quel linguaggio specifico. Dato che lavoro alternativamente su Windows e Mac OS, l'IDE deve anche essere multipiattaforma. Un esempio di ottimo IDE multipiattaforma è Visual Studio Code, che uso per le track di Haskell, JavaScript, TypeScript, Elm ed Elixir. Per le altre track uso un IDE JetBrains: Rider per C# e F#, IntelliJ IDEA per Java, Scala e Kotlin, e infine RubyMine per Ruby (nota: anche questi sono IDE multipiattaforma). Come vedi, uso più editor per avere la migliore esperienza con ogni linguaggio (anche se gli IDE JetBrains sono ovviamente molto simili).
Consiglio da esperto: se sei un contributore principale di un progetto open-source, JetBrains ti permette di richiedere una licenza open-source gratuita!
È molto utile, grazie! Dunque, sei maintainer di C#, F# e Scala. Cosa ti attira in particolare di questi linguaggi?
C# è subito diventato il mio linguaggio preferito quando è uscito, nel 2002. È un linguaggio ben progettato ed elegante, con ottimi strumenti e un'ottima documentazione. Il linguaggio si evolve anche molto rapidamente, il che significa che c'è sempre qualcosa di nuovo da imparare! Un ultimo punto a favore è che gira sull'eccellente framework .NET (Core).
Anche F# è stato amore a prima vista. Con una sintassi elegante e un ricco insieme di elementi (funzionali) del linguaggio, ho scoperto di poter fare di più con meno codice, soprattutto nella modellazione del dominio. È anche un linguaggio molto pragmatico, con elementi orientati agli oggetti e una grande interoperabilità con il codice .NET esistente (gira sullo stesso framework .NET (Core) di C#). Un ulteriore punto di forza sono i suoi strumenti, tra i migliori disponibili per i linguaggi funzionali. Come bonus, ha anche una delle introduzioni a un linguaggio che preferisco in assoluto, sul sito fsharpforfunandprofit.
Scala è stato il linguaggio che mi ha introdotto alla programmazione funzionale, e proprio per questo occupa un posto speciale nel mio cuore. Come F#, è un linguaggio pragmatico, più o meno per gli stessi motivi. Con la sua integrazione nell'ecosistema di Java, ha davvero contribuito a diffondere la programmazione funzionale.
È interessante che tu ti sia avvicinato alla programmazione funzionale con Scala, sia mentore di F#, ma consideri Haskell la track migliore. Per chi vuole tuffarsi nella programmazione funzionale su Exercism, quale di questi consiglieresti di provare per primo?
Ottima domanda! Il mio voto va a F#, perché credo sia il linguaggio più facile da imparare. Questo soprattutto perché F# è meno complesso degli altri due. Anche gli ottimi strumenti e la documentazione di F# sono un grande vantaggio quando si inizia. Detto questo, consiglio comunque caldamente di unirsi anche alla track di Haskell una volta finita quella di F#, perché Haskell ha alcune caratteristiche avanzate fantastiche che F# non ha.
Hai avuto modo di conoscere parecchi dei nostri piani per il futuro di Exercism. C'è qualcosa del progetto che ti entusiasma in particolare?
Tra tutte le migliorie in programma, quella che mi entusiasma di più è l'analisi statica delle soluzioni. L'idea è creare un sistema che possa commentare automaticamente le soluzioni inviate, analizzandole in modo programmatico alla ricerca di problemi e suggerimenti comuni. Questo dovrebbe aiutare molto i mentori, che non dovranno più commentare questi problemi e suggerimenti comuni e potranno concentrarsi su questioni più interessanti.
Se ti interessa, dai un'occhiata al mio prototipo (agli inizi) di un analizzatore per la track di C#, che usa la .NET Compiler Platform per analizzare staticamente il codice C#.
Sì, anche per me l'analisi statica è praticamente la cosa più entusiasmante. È fantastico vedere che hai già messo insieme un prototipo. Penso che i miglioramenti di velocità che l'analisi statica ci darà miglioreranno radicalmente Exercism, e sono davvero entusiasta di come potremmo estenderla per insegnare a programmare a chi parte da zero. Credo che sia un vero punto di svolta.
Ultima domanda: hai progetti personali o cause che ti stanno a cuore e a cui vorresti dare visibilità?
Per me, coinvolgermi in Exercism, contribuire al suo codice open-source e fare da mentore alle persone è stata un'esperienza incredibilmente gratificante. Ho imparato tantissime cose, ho conosciuto persone davvero fantastiche e sento di aver potuto aiutare molte persone.
Vorrei incoraggiare le persone a vedere se anche loro possono farsi coinvolgere. Se c'è un linguaggio che ami e vuoi aiutare le altre persone a impararlo, iscriviti come mentore su Exercism. Se preferisci scrivere codice, scegli un progetto open-source e contribuisci. Ti prometto che è molto meno spaventoso di quanto sembri e ti sentirai benissimo a farlo!
Fantastico! Grazie per il tempo che ci hai dedicato a chiacchierare e per tutto il tuo lavoro su Exercism!