Uploaded avatar of iHiD

¡Llegó la hora de Dig Deeper!

@iHiD
hace Casi 4 años
Video

Resolver un ejercicio en Exercism es solo el primer paso. ¡El verdadero aprendizaje viene después!

Esta semana lanzamos la nueva pestaña «Dig Deeper» en los ejercicios, pensada para ayudarte a ir más allá de la etapa de resolución y explorar los matices y las disyuntivas de un ejercicio, sin necesidad de preguntarle a un mentor.

Introducción

Las soluciones de nuestros ejercicios varían muchísimo. El ejercicio «proper» más básico en la mayoría de los tracks es TwoFer. Una solución típica se ve así (este es Ruby, pero es similar en la mayoría de los lenguajes):

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

Sin embargo, de las 500 soluciones más recientes que pasaron las pruebas, más de 350 eran únicas 😲 E incluso si normalizas cosas como los espacios en blanco y los nombres de las variables, más de la mitad seguirán siendo soluciones realmente únicas.

Lo que hace absolutamente fascinante explorar cómo resuelve cada quien las cosas. Pero también es del todo poco práctico. Hay millones de soluciones en Exercism y leerlas todas tomaría literalmente toda una vida.

¡Sin embargo! Tras diseñar los ejercicios y haber sido mentores de cientos de miles de personas a través de ellos, nuestro equipo tiene una idea bastante clara de los distintos enfoques que toma la gente. Así que agregamos la nueva pestaña Dig Deeper para resaltar las distintas formas idiomáticas (o no idiomáticas, pero interesantes) en que se puede resolver un ejercicio.

Un ejemplo

Veamos un ejemplo para mostrarlo en acción. En C# hay varias formas de invertir un string.

Puedes usar el método Array.Reverse():

var chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);

O usar un enfoque más corto basado en LINQ:

return new string(input.Reverse().ToArray());

o usar un StringBuilder:

var chars = new StringBuilder();
for (var i = input.Length - 1; i >= 0; i--)
{
    chars.Append(input[i]);
}
return chars.ToString();

o incluso ir un poco menos idiomático (¡pero más eficiente!) y 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);

A cada una de estas las llamamos un enfoque, y cada una tiene su propio artículo que la explica. La página Dig Deeper de este ejercicio los reúne, y además incluye un artículo sobre rendimiento que explora las disyuntivas.

👉🏾 Échale un vistazo (tendrás que usar el modo incógnito si aún no has resuelto el ejercicio)

¡Pero hay más!

Además de tener documentos sobre estos distintos enfoques, hay miles de videos que nuestra comunidad ha producido explorando ejercicios, grabando recorridos o transmitiendo sesiones de programación, y sumergiéndose en las profundidades de lo que hace que una solución sea idiomática. Estamos recopilando todos esos videos y trayéndolos a las páginas.

Participa

Durante las próximas semanas, comenzarás a ver la pestaña Dig Deeper apareciendo en los ejercicios de todo el sitio.

Si te gustaría aportar un enfoque, un artículo de ejercicio, o contarnos sobre tus videos para que podamos agregarlos, ponte en contacto con jonathan@exercism.org y él te ayudará a empezar.

Y por último, cuéntanos qué piensas y publica tus ideas y opiniones en el post del foro!

domingo, 30 de octubre de 2022 · ¿Te resultó útil?