Uma entrevista com Erik Schierboom, na qual ele e Jeremy Walker conversam sobre programação funcional, a manutenção das trilhas do Exercism e a futura análise estática das soluções do Exercism.
Olá, Erik. Obrigado por participar do primeiro Destaque para Colaboradores do Exercism! Queríamos destacar o seu trabalho porque parece que você contribui com cada pedacinho do Exercism e tem ótimas percepções por trabalhar no projeto inteiro!
Então, para dar um pouco de contexto, como você começou no Exercism?
Em 2014, fiz um curso de programação funcional que usava Scala como linguagem. Depois de terminar o curso, procurei recursos para melhorar ainda mais minhas habilidades em Scala e encontrei o Exercism. Não demorou muito para eu ficar viciado e também começar a fazer outras trilhas de linguagens no Exercism. Como eu me beneficiei muito dos comentários que as pessoas deixavam nas minhas soluções, comecei a comentar soluções na trilha de C#. Em algum momento, me convidaram para ser mantenedor da trilha de C#, e eu aceitei com prazer. Cinco anos depois, sou mentor das trilhas de C# e F#, mantenedor das trilhas de C#, F# e Scala e ajudo a trabalhar nas especificações de problemas comuns às várias trilhas.
Legal. Então você entrou no Exercism bem no comecinho dele. Para quem não sabe, você poderia explicar, por favor, o que significa ser um mantenedor do Exercism?
Claro. Falando de forma abstrata, um mantenedor do Exercism é responsável pela "saúde" de uma trilha. Na prática, isso pode significar muitas coisas, como implementar novos exercícios, atualizar exercícios existentes ou revisar pull requests de outros mantenedores. Outro aspecto importante é ordenar corretamente os exercícios de uma trilha, para garantir que os estudantes tenham a melhor experiência de aprendizado possível. Vale notar que ser mantenedor não significa que a pessoa precisa se envolver em todas as atividades citadas; é perfeitamente válido que um mantenedor se concentre em apenas uma ou duas delas.
Obrigado! Então, além do seu foco em C#, F# e Scala, você praticamente percorreu todas as trilhas de linguagens do Exercism. Você tem favoritas do ponto de vista de quem está aprendendo?
Embora eu tenha aprendido muito em todas as trilhas que fiz, minha trilha favorita é a de Haskell. Além de ser uma ótima linguagem, com muitos conceitos interessantes, a qualidade dos mentores dela era absolutamente impressionante. Outras favoritas são as trilhas de Kotlin e F#, sendo Kotlin e F# linguagens extremamente bem projetadas e pragmáticas, nas quais eu adoro programar.
É, eu ouço muitas coisas boas sobre os mentores de Haskell! Imagino que ter feito tantas trilhas tenha te dado um monte de percepções interessantes sobre programação. Você aprendeu algo em especial com essa experiência?
Ah, sim, um monte de coisas! Trabalhar com uma grande variedade de linguagens nos expõe a muitas formas diferentes de abordar problemas. Essas abordagens diferentes influenciaram de algum modo o meu estilo de programação, embora as linguagens funcionais provavelmente tenham me influenciado mais do que as outras. Hoje percebo que uso conceitos funcionais sempre que posso, até em linguagens não funcionais (que aos poucos vão incorporando recursos funcionais).
Também aprendi que, embora cada linguagem seja diferente, muitas são na verdade bem parecidas. Por isso, aprender uma nova linguagem fica muito mais fácil depois que você conhece algumas. Por exemplo, saber Haskell significa que provavelmente dá para aprender F# ou Scala relativamente rápido. Aprender novas linguagens, portanto, também pode ser uma boa jogada de carreira, já que você consegue alternar entre linguagens com mais facilidade.
Por fim, aprendi que ter mentores orientando você enquanto aprende uma linguagem torna o processo muito mais agradável e eficaz.
Eu tive a mesma impressão. Aprender com os outros multiplica demais! Do ponto de vista prático, como você lidou com toda a configuração das diferentes linguagens? Muitas vezes acho a ideia de aprender uma nova IDE um pouco intimidante. Você ficou com um editor que já conhecia enquanto trabalhava nas linguagens, ou variou para tentar ter uma experiência mais idiomática?
Em algumas linguagens, montar um novo ambiente de desenvolvimento costumava ser um pouco trabalhoso, mas hoje em dia a maioria das linguagens é bem fácil de configurar. Então eu tento encontrar a IDE que me dá a melhor experiência para aquela linguagem específica. Como eu trabalho alternadamente no Windows e no Mac OS, a IDE também precisa ser multiplataforma. Um exemplo de ótima IDE multiplataforma é o Visual Studio Code, que eu uso nas trilhas de Haskell, JavaScript, TypeScript, Elm e Elixir. Para as outras trilhas, uso uma IDE da JetBrains: o Rider para C# e F#, o IntelliJ IDEA para Java, Scala e Kotlin e, por fim, o RubyMine para Ruby (observação: essas também são IDEs multiplataforma). Como você pode ver, uso vários editores para ter a melhor experiência em cada linguagem (embora as IDEs da JetBrains sejam obviamente bem parecidas).
Dica de profissional: se você é colaborador principal de um projeto de código aberto, a JetBrains permite que você solicite uma licença gratuita para projetos de código aberto!
Isso é super útil. Obrigado! Então, você é mantenedor de C#, F# e Scala. O que te atrai especialmente nessas linguagens?
C# se tornou imediatamente minha linguagem favorita quando foi lançada, em 2002. É uma linguagem bem projetada e elegante, com ótimas ferramentas e documentação. A linguagem também evolui muito rápido, o que significa que sempre há coisas novas para aprender! Um último ponto positivo é que ela roda sobre o excelente framework .NET (Core).
F# também foi amor à primeira vista. Com uma sintaxe elegante e um rico conjunto de recursos (funcionais) da linguagem, percebi que conseguia fazer mais com menos código, especialmente na modelagem de domínio. Também é uma linguagem bem pragmática, com recursos orientados a objetos e ótima interoperabilidade com o código .NET existente (ela roda sobre o mesmo framework .NET (Core) que o C#). Um ponto forte adicional são suas ferramentas, que estão entre as melhores disponíveis para linguagens funcionais. De bônus, ela também tem uma das minhas introduções de linguagem favoritas de todos os tempos, no site fsharpforfunandprofit.
Scala foi a linguagem que me apresentou à programação funcional, então por isso ela tem um lugar especial no meu coração. Assim como F#, é uma linguagem pragmática, praticamente pelos mesmos motivos. Com sua integração ao ecossistema Java, ela ajudou muito a popularizar a programação funcional.
É interessante que você tenha começado com programação funcional por meio do Scala, seja mentor de F#, mas considere Haskell a melhor trilha. Para quem quer mergulhar de cabeça na programação funcional no Exercism, qual dessas você recomendaria tentar primeiro?
Ótima pergunta! Meu voto vai para F#, porque sinto que é a linguagem mais fácil de aprender. Isso se deve principalmente ao fato de F# ser menos complexa que as outras duas. As excelentes ferramentas e a documentação de F# também são um grande ponto a favor de quem está começando. Dito isso, eu recomendo fortemente também entrar na trilha de Haskell depois de terminar a de F#, já que Haskell tem recursos avançados fantásticos que F# não tem.
Você teve acesso a boa parte dos nossos planos para o futuro do Exercism. Tem algo no projeto que te empolga especialmente?
De todas as melhorias planejadas, a que mais me empolga é a análise estática das soluções. A ideia é montar um sistema que consiga comentar automaticamente as soluções enviadas, analisando programaticamente essas soluções em busca de problemas e sugestões comuns. Isso deve ajudar muito os mentores, que não precisariam mais comentar esses problemas e sugestões comuns e poderiam focar em questões mais interessantes.
Se você se interessar, dê uma olhada no meu protótipo (inicial) de um analisador para a trilha de C#, que usa a Plataforma de Compilador .NET para analisar estaticamente código C#.
Sim, a análise estática também é praticamente a coisa mais empolgante para mim. É ótimo ver que você já tem um protótipo pronto. Acho que o ganho de velocidade que a análise estática vai nos dar vai melhorar drasticamente o Exercism, e estou muito empolgado com a possibilidade de estendê-la para ensinar programação a iniciantes de verdade. Acho que isso muda o jogo de verdade.
Última pergunta: você tem algum projeto pessoal ou alguma causa que seja próxima do seu coração e que você gostaria de destacar?
Para mim, me envolver com o Exercism, contribuir com seu código aberto e mentorar pessoas tem sido uma experiência incrivelmente gratificante. Aprendi um monte de coisas, conheci pessoas excelentes e sinto que pude ajudar muita gente.
Eu gostaria de incentivar mais pessoas a ver se também conseguem se envolver. Se você tem uma linguagem que ama e quer ajudar as pessoas a aprender, inscreva-se como mentor no Exercism. Se você prefere escrever código, escolha um projeto de código aberto e contribua. Prometo que é bem menos assustador do que parece, e você vai se sentir ótimo fazendo isso!
Que ótimo! Obrigado por reservar um tempo para conversar e por todo o seu trabalho no Exercism!