Resolver un ejercicio en Exercism es solo el primer paso. ¡El verdadero aprendizaje viene a continuación!
Esta semana hemos lanzado la nueva pestaña «Dig Deeper» en los ejercicios, diseñada para ayudarte a ir más allá de la fase de resolución y explorar los matices y las contrapartidas de un ejercicio, sin necesidad de preguntar a un mentor.
Introducción
Las soluciones de nuestros ejercicios varían enormemente.
El ejercicio «de verdad» más básico en la mayoría de los tracks es TwoFer.
Una solución típica se ve así (esto 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 cuando 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 persona. Pero también es totalmente poco práctico. Hay millones de soluciones en Exercism y leerlas todas llevaría literalmente toda una vida.
Sin embargo, tras diseñar los ejercicios y haber ejercido de mentor con cientos de miles de personas a través de ellos, nuestro equipo tiene una idea bastante buena de los diferentes enfoques que adopta la gente. Así que hemos añadido la nueva pestaña «Dig Deeper» para destacar las diferentes formas idiomáticas (o no idiomáticas, pero interesantes) de resolver un ejercicio.
Un ejemplo
Veamos un ejemplo para mostrar esto 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 ser 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 uno de estos lo llamamos un enfoque, y cada uno tiene su propio artículo independiente que lo explica. La página Dig Deeper de este ejercicio los reúne, y además incluye un artículo sobre rendimiento que explora las contrapartidas.
👉🏾 É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 diferentes enfoques, hay miles de vídeos que nuestra comunidad ha producido explorando ejercicios, grabando recorridos guiados o retransmitiendo 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 vídeos y llevándolos a las páginas.
Participa
Durante las próximas semanas, empezarás a ver aparecer la pestaña Dig Deeper en ejercicios de todo el sitio.
Si quieres contribuir con un enfoque, un artículo de ejercicio o hablarnos de tus vídeos para que podamos añadirlos, 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 la publicación del foro!