Resolver um exercício no Exercism é apenas o primeiro passo. A verdadeira aprendizagem vem a seguir!
Esta semana lançámos o novo separador "Dig Deeper" nos exercícios. Foi concebido para te ajudar a ir além da fase de resolução e a explorar as nuances e as contrapartidas de um exercício, sem precisares de pedir ajuda a um mentor.
Introdução
As soluções dos nossos exercícios variam imenso.
O exercício "a sério" mais básico na maioria dos percursos é o TwoFer.
Uma solução típica tem este aspeto (isto é Ruby, mas é semelhante na maioria das linguagens):
module TwoFer
def self.two_fer(name='you')
"One for #{name}, one for me."
end
end
No entanto, das 500 soluções mais recentes que passaram nos testes, mais de 350 eram únicas 😲 E mesmo quando normalizas coisas como espaços em branco e nomes de variáveis, mais de metade continuam a ser soluções realmente únicas.
O que torna absolutamente fascinante explorar a forma como cada pessoa resolve as coisas. Mas também é totalmente impraticável. Há milhões de soluções no Exercism e lê-las todas levaria, literalmente, uma vida inteira.
No entanto! Como concebemos os exercícios e orientámos centenas de milhares de pessoas através deles, a nossa equipa tem uma ideia bastante clara das diferentes abordagens que as pessoas seguem. Por isso, adicionámos o novo separador Dig Deeper para destacar as diferentes formas idiomáticas (ou não idiomáticas, mas interessantes) de resolver um exercício.
Um exemplo
Vamos ver um exemplo para mostrar isto em ação. Em C#, há várias formas de inverter uma string.
Podes usar o método Array.Reverse():
var chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);
Ou usar uma abordagem mais curta, baseada em LINQ:
return new string(input.Reverse().ToArray());
ou usar um StringBuilder:
var chars = new StringBuilder();
for (var i = input.Length - 1; i >= 0; i--)
{
chars.Append(input[i]);
}
return chars.ToString();
ou até seguir uma via um pouco menos idiomática (mas mais eficiente!) e usar Span<T>:
Span<char> chars = stackalloc[input.Length];
for (var i = 0; i < input.Length; i++)
{
chars[input.Length - 1 - i] = input[i];
}
return new string(chars);
Chamamos a cada uma destas uma Abordagem, e cada uma tem o seu próprio artigo a explicá-la. A página Dig Deeper deste exercício reúne todas elas e inclui também um artigo sobre desempenho que explora as contrapartidas.
👉🏾 Vê isto (vais precisar de navegar em modo privado se ainda não resolveste o exercício)
Mas há mais!
Além de termos documentos sobre estas diferentes abordagens, há milhares de vídeos que a nossa comunidade produziu a explorar exercícios, a gravar análises passo a passo ou a transmitir sessões de programação em direto, e a mergulhar a fundo no que torna as soluções idiomáticas. Estamos a reunir todos esses vídeos e a trazê-los para as páginas.
Participa
Ao longo das próximas semanas, vais começar a ver o separador Dig Deeper a aparecer nos exercícios um pouco por todo o site.
Se quiseres contribuir com uma Abordagem, um artigo sobre um exercício, ou falar-nos dos teus vídeos para os podermos adicionar, contacta o jonathan@exercism.org e ele ajuda-te a começar.
E, por fim, diz-nos o que pensas e partilha as tuas ideias e opiniões no tópico do fórum!