No início de setembro de 2021, o Exercism v3 foi finalmente lançado. A Angelika Tyborska é uma das principais responsáveis pela manutenção que nos ajudaram a chegar à meta. Além de ser co-criadora dos Exercícios de Aprendizagem e do Syllabus de Elixir, a Angelika foi uma voz fundamental ao longo do desenvolvimento do v3, contribuindo com ideias e perspetivas durante todo o processo de construção. É uma contribuidora fundamental do Exercism.
Nesta apresentação em vídeo, a Angelika explica-nos que problemas o v3 foi concebido para resolver, algumas das principais novidades da plataforma e como tudo se encaixa, explorando os Analyzers, os Representers e os novos Exercícios de Aprendizagem.
Transcrição
História do Exercism
O Exercism já existe há algum tempo. Foi criado em 2013 por Katrina Owen como uma ferramenta para os seus alunos. No v1, era apenas uma coleção de Exercícios de Prática interessantes. No v2, tornou-se uma plataforma de mentoria de código gratuita.
v3 🚀 01.09.2021
A 1 de setembro, foi lançada a versão 3 do Exercism.
Neste vídeo, vou falar-te das mudanças do v3, explicar porque foram feitas e como vão melhorar a tua experiência no Exercism.
Sobre mim
Esta sou eu [foto mostrada aos 0:38]. Sou a Angelika. Em conjunto com o meu co-responsável pela manutenção, Tim, construímos as ferramentas e mais de 30 exercícios de aprendizagem para o percurso de Elixir do Exercism v3. Acredito que, na sua nova forma, o Exercism tem potencial para se tornar a melhor ferramenta para aprender novas linguagens de programação.
O que há de novo no v3?
O que há de novo no Exercism v3? Resposta curta: muito.
Todas as grandes mudanças introduzidas no v3 têm como objetivo resolver os maiores problemas que as pessoas sentiam no v2.
Problemas no v2
Há três problemas principais que o v3 vem resolver.
Um: configuração inicial difícil; dois: prática de código sem aprendizagem; três: tempo de resposta longo dos mentores.
Problema 1. Configuração inicial difícil
Problema número um: configuração inicial difícil. Para começar no Exercism, precisas de instalar a CLI do Exercism, a linguagem de programação que queres experimentar, e precisas de te sentir à vontade no terminal. Tens de configurar o teu editor para fazer coloração de sintaxe para a nova linguagem, e por aí fora. Para programadores experientes, toda essa configuração é uma perda de tempo aborrecida. Mas para quem está a começar, pode ser um obstáculo impossível de ultrapassar.
A solução: deixar as pessoas programar no navegador. Sem configuração inicial.
Para facilitar isto, o Exercism tem agora um editor web, e cada linguagem de programação tem o seu próprio Test Runner dedicado a correr os testes dos exercícios do Exercism.
Editor web
Este é o editor web [captura de ecrã mostrada aos 2:25]. Tem dois painéis, o código-fonte à esquerda e as instruções e o conjunto de testes à direita.
Não tem funcionalidades sofisticadas, porque o seu objetivo não é substituir as tuas ferramentas preferidas. O objetivo é permitir-te adiar a instalação de todas as ferramentas e dependências necessárias até te sentires mais à vontade com a nova linguagem de programação e saberes que queres continuar a trabalhar com ela.
O editor web é totalmente opcional. Podes continuar a usar a CLI e trabalhar com as tuas ferramentas preferidas no teu próprio computador.
Test Runners
Para que o editor web seja utilizável, tem de haver uma forma de correr os testes contra a solução que escreves no navegador. É esse o trabalho de um Test Runner.
Cada linguagem no Exercism tem o seu próprio Test Runner. O Test Runner é responsável por comunicar os resultados dos testes, mas não é só isso. Também precisa de extrair o corpo do teste para que saibas que código está a ser executado e possas interpretar a mensagem de falha, e ainda de capturar a saída do teste para que possas depurar o teu código no navegador com puts, print, console.log ou qualquer outra função de impressão que a tua linguagem ofereça.
Os Test Runners são essenciais para resolver exercícios no navegador, mas também serão usados nas soluções submetidas através da CLI. Quando exploras as soluções da comunidade de um determinado exercício, ou quando dás mentoria a um estudante, podes ver se a solução passa nos testes sem teres de a descarregar e executar localmente.
Problema 2. Prática de código sem aprendizagem
Problema número dois: o Exercism é uma plataforma de prática de código, mas não oferecia recursos para aprender uma linguagem específica de raiz. Tinhas de o fazer noutro sítio primeiro.
Os exercícios no Exercism foram concebidos para serem interessantes e desafiantes, mas às vezes até os mais fáceis são demasiado difíceis para servir de ponto de entrada numa nova linguagem de programação. Isto é especialmente verdade quando estás a tentar aprender uma linguagem com uma sintaxe completamente diferente ou que usa até um paradigma de programação diferente.
A solução: oferecer aprendizagem a par da prática.
Com a adição do Syllabus e dos Exercícios de Aprendizagem, o Exercism tornou-se agora uma excelente ferramenta para mergulhar de cabeça numa nova linguagem de programação.
Syllabus
O que é um Syllabus? Um Syllabus é uma árvore de Conceitos que compõem cada linguagem de programação. O Syllabus é único para cada percurso no Exercism, porque cada linguagem de programação é diferente e tem Conceitos diferentes.
Os Conceitos dependem uns dos outros, formando vários ramos da árvore. Precisas de aprender o conceito anterior do ramo para desbloquear o conceito seguinte.
Por exemplo, este é o início do Syllabus de Elixir [captura de ecrã mostrada aos 5:10]. Começa com um conceito chamado "basics", que abrange: como definir um módulo, como definir uma função com nome e onde encontrar a documentação da biblioteca padrão. Este conhecimento é necessário para todos os exercícios do Exercism. Precisas de aprender o basics para desbloquear qualquer outro conceito. Podes aprender sobre, por exemplo, Boolean, e assim que souberes Boolean, podes aprender sobre a expressão cond, e assim por diante.
Para teres uma ideia, este é o Syllabus completo de Elixir [captura de ecrã mostrada aos 6:16]. Neste momento, contém mais de 50 Conceitos, mas ainda precisa de ser ampliado.
No topo, encontras Conceitos como: strings, listas, mapas e tuplas. A meio, há: o módulo Enum, expressões regulares, structs e a escrita de typespecs. E no fim, há: protocolos, processos e tarefas.
Exercícios de aprendizagem
Aprendes os Conceitos do Syllabus resolvendo Exercícios de Aprendizagem. Os Exercícios de Aprendizagem são diferentes dos Exercícios de Prática. Foram concebidos para ensinar conceitos de programação a estudantes que não conhecem de todo a linguagem de programação em questão, mas que já conhecem pelo menos outra linguagem e os conceitos básicos de programação.
Introdução
Cada exercício de aprendizagem começa com uma introdução. A introdução descreve informação básica sobre os Conceitos que este exercício ensina. A maioria dos Exercícios de Aprendizagem ensina um único conceito, mas há exceções.
Este exemplo mostra uma introdução sobre os mapas de Elixir [captura de ecrã mostrada aos 7:12]. Explica o que são mapas, como definir um mapa, como aceder a um valor num mapa e por aí fora. Contém alguns exemplos de código para mostrar a nova sintaxe, mas não contém demasiados, para que não possas limitar-te a copiar e colar a introdução para resolver o exercício.
Instruções
Depois, há as instruções. As instruções dos Exercícios de Aprendizagem estão divididas em pequenas tarefas. As tarefas foram concebidas para incentivar o estudante a usar as partes mais importantes de um dado conceito.
Por exemplo, o exercício de aprendizagem que ensina mapas levará o estudante a criar um mapa, depois a ler um valor de um mapa, depois a atualizar um valor num mapa, depois a obter todas as chaves de um mapa, e assim por diante.
Cada exercício de aprendizagem tem uma história, mas a história não é assim tão importante. Está lá para que não tenhas de usar valores sem sentido como "foo bar" e "1 2 3", mas não desempenha um papel importante no exercício como acontece nos Exercícios de Prática.
Dicas
Cada tarefa vem com uma pequena lista de dicas, caso o estudante fique preso. As dicas revelam muitas vezes que função específica usar em cada tarefa e conduzem-te à documentação dessa função.
Praticar conceitos
Mas resolver um único exercício de aprendizagem não chega para dominar realmente o conceito. Também precisas de o praticar. Foi por isso que revimos todos os Exercícios de Prática que já existiam no v2 e escolhemos alguns que podem ser usados para praticar cada conceito.
É assim que um único conceito aparece na árvore [captura de ecrã mostrada aos 9:01]. Os pontos representam exercícios. O primeiro ponto, com o ícone de lâmpada, é um exercício de aprendizagem, e os outros pontos são Exercícios de Prática.
É assim que um conceito aparece depois de resolveres alguns exercícios [captura de ecrã mostrada aos 9:37]. Repara que alguns dos Exercícios de Prática deste conceito continuam bloqueados, mesmo que o exercício de aprendizagem esteja concluído. Isto acontece porque os Exercícios de Prática não se limitam a praticar um único conceito. Pode ser que precises de aprender mais Conceitos do que apenas atoms [conceito mostrado na captura de ecrã] antes de esses exercícios serem desbloqueados.
Os Exercícios de Aprendizagem devem ser triviais para quem já é fluente numa determinada linguagem. Mas não te preocupes, são totalmente opcionais. Podes mudar do modo de aprendizagem para o modo de prática, o que te dá acesso imediato a todos os Exercícios de Prática interessantes sem teres de percorrer o Syllabus primeiro.
Syllabus = um esforço enorme
Um detalhe importante que tenho de mencionar para gerir as tuas expectativas é que desenvolver o Syllabus é um esforço ENORME. Nem todos os percursos têm responsáveis pela manutenção ativos suficientes para terem um Syllabus pronto neste momento.
No momento em que gravo este vídeo [4 de setembro de 2021], os Exercícios de Aprendizagem só estão disponíveis em: Common Lisp, C#, Elm, Elixir, F#, Go, Java, JavaScript, Python, Ruby, Rust e Swift. O percurso de Julia vai lançar o seu Syllabus em breve.
Problema 3. Tempo de resposta longo dos mentores
Problema número três: tempo de resposta longo dos mentores. Nem todos os percursos têm mentores suficientes. Alguns percursos têm tão poucos mentores que o tempo de espera por mentoria pode chegar a um mês. Isto sempre foi extremamente desanimador para os estudantes. É um problema tão central no Exercism que está a ser abordado de 3 ângulos diferentes.
Feedback automático
A solução número 1 é fornecer feedback automático. Muito do feedback que os mentores escrevem aos estudantes é repetitivo. Conseguir detetar erros comuns automaticamente e comunicá-los diretamente ao estudante muda tudo.
Receber feedback automático sobre erros comuns permite ao estudante melhorar a sua solução antes mesmo de pedir mentoria, o que também facilita o trabalho do mentor. Poupa os mentores de terem de mencionar detalhes maçadores como snake_case vs camelCase e deixa-os concentrarem-se na essência da solução. Em alguns casos, o feedback automático será suficiente para satisfazer o estudante, que nem chegará a pedir mentoria.
No v3, há dois tipos de ferramentas de feedback automático: os Analyzers e os Representers.
Analyzers
O Analyzer é uma ferramenta que procura características específicas numa solução e devolve ao estudante uma lista de comentários predefinidos sobre o que encontra. As características que procura dependem inteiramente da linguagem e do exercício em questão.
Por exemplo, o Elixir tem uma convenção de nomenclatura muito específica para funções e variáveis. Uma das verificações que o Analyzer de Elixir faz em todos os exercícios é verificar todos os nomes de variáveis e de funções. Se encontrar um nome que não esteja escrito em snake_case, lembra o estudante da convenção de nomenclatura.
Outra verificação que o Analyzer de Elixir pode fazer é detetar a utilização de um módulo específico. Por exemplo, esta verificação [captura de ecrã mostrada aos 13:20] de não usar o módulo Enum é específica do exercício de aprendizagem sobre recursão. Usar o módulo Enum contraria o propósito do exercício de aprendizagem, por isso o Analyzer lembrará o estudante de não o fazer e de usar recursão em vez disso.
Representers
A segunda ferramenta que nos vai ajudar a fornecer feedback automático no Exercism é o Representer. O Representer pega na solução e remove as partes não essenciais. Normaliza a formatação, remove comentários e documentação e substitui nomes de funções e variáveis por marcadores de posição.
O resultado do Representer chama-se representação. Cada solução submetida ao Exercism passa pelo Representer e a sua representação é guardada na plataforma juntamente com a solução.
Os mentores terão então acesso a uma interface onde podem explorar representações de soluções submetidas. Para cada representação única, um mentor pode deixar feedback sobre essa representação. Depois, esse feedback será apresentado a todos os estudantes que submeterem uma solução semelhante com a mesma representação. Um mentor só tem de escrever o feedback uma vez e o feedback pode chegar a todos os que precisam dele.
Os próprios Representers já estão implementados e publicados para algumas linguagens, mas, no momento em que gravo este vídeo [4 de setembro de 2021], a interface para mentores ainda não existe na plataforma, por isso temos de esperar um pouco até esta funcionalidade estar totalmente disponível.
Evitar sessões de mentoria indesejadas
Outra solução para as longas filas de mentoria é evitar sessões de mentoria indesejadas. No v2, a mentoria era obrigatória para os exercícios principais. Submeter um exercício principal significava pedir mentoria automaticamente, e não podias avançar para o exercício principal seguinte sem a aprovação de um mentor. Muitos estudantes aprendiam a linguagem percorrendo os exercícios principais, por isso precisavam da mentoria para os orientar ao longo do processo de aprendizagem.
Isso já não acontece. O papel de ensino dos exercícios principais e a aprovação dos mentores foram assumidos pelos Exercícios de Aprendizagem e pelos Analyzers. No v3, a mentoria é sempre opcional e tem de ser pedida explicitamente.
Pedido de mentoria
Para pedires mentoria, tens de responder a 2 perguntas: O que esperas aprender com este percurso?, e: Como é que um mentor te pode ajudar com a tua solução? Sabendo à partida quais são as expectativas do estudante em relação à sessão de mentoria, o mentor pode escolher os pedidos de mentoria que melhor se adequam ao seu conhecimento e ao seu estilo de mentoria, o que torna mais provável que ambas as partes fiquem satisfeitas com a sessão.
Fila de mentoria e favoritos
Na nova fila de mentoria, os mentores podem ver estatísticas sobre o histórico de mentoria do estudante. Podem ver qual estudante nunca recebeu mentoria e pode precisar de uma análise mais cuidada, e qual estudante já passou por mentoria muitas vezes e percebe como funciona.
Os mentores podem também, finalmente, encontrar estudantes a quem já deram mentoria antes e desenvolver relações com eles. Os mentores podem até adicionar estudantes aos favoritos e usar isso para dar prioridade a estudantes com quem tiveram anteriormente uma boa experiência.
Listas de bloqueio
Depois de cada sessão de mentoria, tanto o estudante como o mentor têm a opção de bloquear a outra pessoa. Há duas listas de bloqueio, estudantes bloqueados e mentores bloqueados. Se eu, enquanto mentor, te bloquear a ti enquanto estudante, podes ainda assim vir a dar-me mentoria mais tarde. A outra pessoa não fará, naturalmente, ideia de que foi bloqueada, por isso não pode retaliar contra ti.
Podes escolher bloquear alguém por qualquer motivo, mas se essa pessoa estiver a violar o Código de Conduta, certifica-te de que também a denuncias explicitamente, para protegeres os outros utilizadores.
Mitigar as consequências negativas dos longos tempos de espera
Por fim, o último passo para lidar com o problema dos longos tempos de espera é garantir que, mesmo tendo de esperar às vezes, as consequências negativas da espera são mínimas. No v3, esperar por mentoria não te impede de resolver outros exercícios. Podes continuar a avançar no percurso.
Uma sessão de mentoria pode ser terminada por qualquer das partes. Se fores estudante e não gostares da abordagem que um determinado mentor está a ter contigo, podes sempre pedir uma abordagem diferente, ou podes optar por sair da sessão. Independentemente de como a sessão de mentoria termina, o estudante pode pedir uma nova sessão de mentoria com outro mentor para a mesma solução.
Vagas de mentoria
Em cada percurso, podes ter de 1 a 4 vagas de mentoria. Ter várias vagas de mentoria pode ajudar-te quando queres pedir mentoria para um exercício difícil, que tem menos probabilidades de receber mentoria depressa, mantendo ao mesmo tempo a possibilidade de receber mentoria noutros exercícios.
As vagas de mentoria podem ser desbloqueadas ganhando reputação. A reputação é atribuída por publicares as tuas soluções para todos poderem explorar, por dares mentoria a estudantes e por contribuíres para qualquer um dos repositórios do Exercism. Isto significa que os estudantes que contribuem mais para a plataforma podem obter mais mentoria.
Resumo
Estas são algumas das principais formas como o Exercism mudou a 1 de setembro de 2021.
Adicionámos os Exercícios de Aprendizagem para que possas aprender sem sair da plataforma, um editor web para que possas programar sem instalar nada, e os Analyzers e os Representers para que possas obter feedback automático imediato. Também removemos muitos bloqueios frustrantes do processo de mentoria.
E há muito mais para explorar: a nossa secção de contribuição, distintivos, novos perfis, uma página de percurso com todo o teu histórico no Exercism, e muito mais.
Vem a exercism.org e experimenta.
Obrigada.