An interview with Erik Schierboom in which he and Jeremy Walker discuss functional programming, maintaining Exercism tracks, and the upcoming static analysis of Exercism solutions.
Olá, Erik. Obrigado por participares no primeiro Contributor Spotlight do Exercism! Quisemos destacar o teu trabalho porque parece que contribuis para todas as partes do Exercism e tens ideias excelentes por trabalhares em todo o projeto!
Então, para dar algum contexto, como é que te envolveste no Exercism pela primeira vez?
Em 2014, fiz um curso de programação funcional que tinha o Scala como linguagem. Depois de terminar esse curso, procurei recursos para melhorar ainda mais as minhas competências em Scala e encontrei o Exercism. Não demorou muito até ficar viciado e começar também a fazer outras tracks de linguagens no Exercism. Como tinha beneficiado imenso dos comentários que as pessoas deixavam nas minhas soluções, comecei a comentar soluções na track de C#. A certa altura, convidaram-me para ser responsável pela track de C#, o que aceitei com todo o gosto. Cinco anos depois, sou mentor nas tracks de C# e F#, responsável pelas tracks de C#, F# e Scala e ajudo a trabalhar nas especificações de problemas transversais às várias tracks.
Boa. Entraste no Exercism muito cedo, logo no início. Para quem não sabe, podes explicar o que significa ser um responsável no Exercism?
Claro. Em termos abstratos, um responsável no Exercism tem a seu cargo a "saúde" de uma track. Na prática, isso pode significar muitas coisas, como implementar novos exercícios, atualizar exercícios existentes ou rever pull requests de outros responsáveis. Outro aspeto importante é ordenar corretamente os exercícios de uma track, para garantir que os alunos têm a melhor experiência de aprendizagem possível. Repara que ser responsável por uma track não significa ter de participar em todas as atividades acima mencionadas; é perfeitamente válido que um responsável se foque apenas numa ou duas atividades.
Obrigado! Então, além do teu foco em C#, F# e Scala, percorreste praticamente todas as tracks de linguagens do Exercism. Tens favoritas do ponto de vista de quem aprende?
Embora tenha aprendido imenso em todas as tracks por onde passei, a minha track favorita tem de ser a de Haskell. Não só é uma ótima linguagem, com imensos conceitos interessantes, como a qualidade dos seus mentores era absolutamente impressionante. Outras favoritas são as tracks de Kotlin e F#, sendo o Kotlin e o F# linguagens extremamente bem concebidas e pragmáticas nas quais adoro programar.
Sim, ouço falar muito bem dos mentores de Haskell! Imagino que percorrer tantas tracks te tenha dado um monte de ideias interessantes sobre programação. Houve algo em particular que tenhas aprendido com essa experiência?
Oh, sim, imensas coisas! Trabalhar com uma grande variedade de linguagens expõe-te a muitas formas diferentes de abordar problemas. Todas essas abordagens diferentes influenciaram de alguma forma o meu estilo de programação, embora as linguagens funcionais tenham sido provavelmente as que mais me influenciaram. Agora dou por mim a usar conceitos funcionais sempre que posso, mesmo em linguagens não funcionais (que vão integrando características funcionais aos poucos).
Também aprendi que, embora todas as linguagens sejam diferentes, muitas são na verdade bastante parecidas. Por isso, aprender uma nova linguagem torna-se muito mais fácil depois de conheceres duas ou três. Por exemplo, saber Haskell significa que provavelmente consegues aprender F# ou Scala com relativa rapidez. Aprender novas linguagens pode também ser uma boa jogada de carreira, já que passas a alternar entre linguagens com mais facilidade.
Por fim, aprendi que ter mentores a orientar-te enquanto aprendes uma linguagem torna o processo muito mais agradável e eficaz.
Também tenho a mesma experiência. Aprender com os outros multiplica tudo! De um ponto de vista prático, como é que lidaste com todas as configurações das diferentes linguagens? Muitas vezes acho a ideia de aprender um novo IDE um pouco intimidante. Mantiveste-te num editor que já conhecias enquanto percorrias as linguagens, ou foste variando para tentar ter uma experiência mais idiomática?
Para algumas linguagens, configurar um novo ambiente de desenvolvimento costumava ser um pouco trabalhoso, mas hoje em dia a maioria das linguagens é bastante fácil de configurar. Depois tento encontrar um IDE que me dê a melhor experiência para essa linguagem em concreto. Como trabalho alternadamente em Windows e Mac OS, o IDE também tem de ser multiplataforma. Um exemplo de um ótimo IDE multiplataforma é o Visual Studio Code, que uso nas tracks de Haskell, JavaScript, TypeScript, Elm e Elixir. Para as outras tracks, uso um IDE da JetBrains: Rider para C# e F#, IntelliJ IDEA para Java, Scala e Kotlin e, por fim, RubyMine para Ruby (nota: também são IDEs multiplataforma). Como podes ver, uso vários editores para ter a melhor experiência em cada linguagem (embora os IDEs da JetBrains sejam obviamente bastante parecidos).
Dica de profissional: se és contribuidor principal de um projeto de código aberto, a JetBrains permite-te candidatar-te a uma licença gratuita de código aberto!
Isso é muito útil. Obrigado! Então, és responsável pelas tracks de C#, F# e Scala. O que é que te atrai particularmente nessas linguagens?
O C# tornou-se logo a minha linguagem favorita quando foi lançado, em 2002. É uma linguagem bem concebida e elegante, com ótimas ferramentas e documentação. A linguagem também evolui muito rapidamente, o que significa que há sempre coisas novas para aprender! Um último ponto a favor é que corre no excelente framework .NET (Core).
O F# também foi amor à primeira vista. Com uma sintaxe elegante e um conjunto rico de funcionalidades (funcionais) da linguagem, descobri que conseguia fazer mais com menos código, sobretudo na modelação de domínios. É também uma linguagem muito pragmática, com funcionalidades orientadas a objetos e uma ótima interoperabilidade com código .NET existente (corre no mesmo framework .NET (Core) que o C#). Outro ponto forte são as suas ferramentas, que estão entre as melhores disponíveis para linguagens funcionais. Como bónus, tem também uma das minhas introduções a uma linguagem preferidas de sempre, no site fsharpforfunandprofit.
O Scala foi a linguagem que me iniciou na programação funcional, por isso tem um lugar especial no meu coração. Tal como o F#, é uma linguagem pragmática, praticamente pelas mesmas razões. Com a sua integração no ecossistema Java, ajudou mesmo a popularizar a programação funcional.
É interessante que te tenhas iniciado na programação funcional através do Scala, que sejas mentor de F#, mas que consideres a track de Haskell a melhor. Para alguém que queira mergulhar na programação funcional no Exercism, qual delas recomendas que experimente primeiro?
Boa pergunta! O meu voto vai para o F#, porque acho que é a linguagem mais fácil de aprender. Isto deve-se sobretudo ao facto de a linguagem F# ser menos complexa do que as outras duas. As excelentes ferramentas e a documentação do F# também são uma grande vantagem quando se começa. Dito isto, recomendo vivamente que te juntes também à track de Haskell quando terminares a de F#, porque o Haskell tem funcionalidades fantásticas e avançadas que o F# não tem.
Tiveste acesso privilegiado a bastantes dos nossos planos para o futuro do Exercism. Há algo que te entusiasme particularmente no projeto?
De todas as melhorias planeadas, a que mais me entusiasma é a análise estática das soluções. A ideia é montarmos um sistema que comente automaticamente as soluções submetidas, analisando-as programaticamente à procura de problemas e sugestões comuns. Isto deverá ajudar imenso os mentores, que deixariam de ter de comentar esses problemas e sugestões comuns e poderiam concentrar-se em problemas mais interessantes.
Se tiveres interesse, vê o meu protótipo (ainda inicial) de um analisador da track de C#, que usa a .NET Compiler Platform para analisar estaticamente código C#.
Sim, a análise estática é praticamente a coisa que mais me entusiasma a mim também. É fantástico ver que já tens um protótipo montado. Acho que as melhorias de velocidade que a análise estática nos vai dar vão melhorar drasticamente o Exercism, e estou mesmo entusiasmado com a forma como a podemos alargar para ensinar a programar quem está a começar do zero. Acho que é um verdadeiro ponto de viragem.
Última pergunta: tens algum projeto pessoal ou causa que te seja próxima do coração e que gostasses de destacar?
Para mim, envolver-me no Exercism, contribuir para a sua base de código aberto e fazer mentoria a outras pessoas tem sido uma experiência incrivelmente gratificante. Aprendi imensas coisas, conheci pessoas fantásticas e sinto que consegui ajudar muitas pessoas.
Gostaria de incentivar as pessoas a ver se também conseguem envolver-se. Se tens uma linguagem que te apaixona e queres ajudar pessoas a aprendê-la, inscreve-te como mentor no Exercism. Se preferires escrever código, escolhe um projeto de código aberto e contribui. Prometo que é muito menos assustador do que parece e vais sentir-te muito bem a fazê-lo!
Fantástico! Obrigado pelo tempo que dedicaste a esta conversa e por todo o teu trabalho no Exercism!