Uploaded avatar of iHiD

É hora do Dig Deeper!

@iHiD
Quase 4 anos atrás
Vídeo

Resolver um exercício no Exercism é só o primeiro passo. O aprendizado de verdade vem depois!

Esta semana lançamos a nova aba "Dig Deeper" nos exercícios, criada para ajudar você a ir além da etapa de resolução e explorar as nuances e os trade-offs de um exercício, sem precisar pedir ajuda a um mentor.

Introdução

As soluções dos nossos exercícios variam de forma impressionante. O exercício "de verdade" mais básico na maioria das trilhas é o TwoFer. Uma solução típica é assim (este é Ruby, mas é parecido na maioria das linguagens):

module TwoFer
  def self.two_fer(name='you')
    "One for #{name}, one for me."
  end
end

Mas, das 500 soluções mais recentes que passaram nos testes, mais de 350 eram únicas 😲 E mesmo quando você normaliza coisas como espaços em branco e nomes de variáveis, mais da metade ainda serão soluções realmente únicas.

O que torna absolutamente fascinante explorar como cada pessoa resolve as coisas. Mas também é totalmente inviável. Há milhões de soluções no Exercism e ler todas elas levaria literalmente uma vida inteira.

Mas! Depois de criar os exercícios e dar mentoria a centenas de milhares de pessoas neles, nossa equipe tem uma boa ideia das diferentes abordagens que as pessoas adotam. Por isso, adicionamos a nova aba 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 isso na prática. Em C#, há várias formas de inverter uma string.

Você pode 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é partir para algo um pouco menos idiomático (mas com melhor desempenho!) 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 cada uma delas de Approach, e cada uma tem seu próprio artigo explicando-a. A página Dig Deeper deste exercício reúne tudo isso e também traz um artigo sobre desempenho que explora os trade-offs.

👉🏾 Confira (você vai precisar usar o modo anônimo se ainda não resolveu o exercício)

Mas tem mais!

Além dos documentos sobre essas diferentes abordagens, há milhares de vídeos que nossa comunidade produziu explorando exercícios, gravando walkthroughs ou transmitindo sessões de programação, e mergulhando fundo no que faz uma solução ser idiomática. Estamos reunindo todos esses vídeos e trazendo-os para as páginas.

Participe

Nas próximas semanas, você vai começar a ver a aba Dig Deeper aparecendo nos exercícios pelo site.

Se você quiser contribuir com um Approach, com um artigo de exercício, ou nos contar sobre os seus vídeos para que possamos adicioná-los, entre em contato com jonathan@exercism.org e ele vai ajudar você a começar.

E, por fim, diga o que você acha e compartilhe suas ideias e pensamentos no post do fórum!

30 de outubro de 2022 · Achou útil?