Risolvere un esercizio su Exercism è solo il primo passo. Il vero apprendimento viene dopo!
Questa settimana abbiamo lanciato la nuova scheda "Dig Deeper" sugli esercizi, pensata per aiutarti ad andare oltre la fase di risoluzione ed esplorare le sfumature e i compromessi di un esercizio, senza dover chiedere a un mentore.
Introduzione
Le soluzioni ai nostri esercizi variano moltissimo.
L'esercizio «vero» più basilare nella maggior parte dei track è TwoFer.
Una soluzione tipica è questa (questo è Ruby, ma è simile nella maggior parte dei linguaggi):
module TwoFer
def self.two_fer(name='you')
"One for #{name}, one for me."
end
end
Eppure, delle ultime 500 soluzioni che hanno superato i test, più di 350 erano uniche 😲 E anche normalizzando cose come gli spazi bianchi e i nomi delle variabili, oltre la metà sarebbero comunque soluzioni davvero uniche.
Questo rende assolutamente affascinante esplorare come ognuno risolve le cose. Ma è anche del tutto impraticabile. Su Exercism ci sono milioni di soluzioni, e leggerle tutte richiederebbe letteralmente una vita.
Però! Avendo progettato gli esercizi e guidato centinaia di migliaia di persone al loro interno, il nostro team ha un'idea abbastanza chiara dei diversi approcci che le persone adottano. Così abbiamo aggiunto la nuova scheda "Dig Deeper" per mettere in evidenza i diversi modi idiomatici (o non idiomatici, ma interessanti) in cui un esercizio può essere risolto.
Un esempio
Facciamo un esempio per vederlo in azione. In C# ci sono vari modi per invertire una stringa.
Puoi usare il metodo Array.Reverse():
var chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);
Oppure usare un approccio più breve basato su LINQ:
return new string(input.Reverse().ToArray());
oppure usare uno StringBuilder:
var chars = new StringBuilder();
for (var i = input.Length - 1; i >= 0; i--)
{
chars.Append(input[i]);
}
return chars.ToString();
o addirittura essere un po' meno idiomatici (ma più performanti!) e usare 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);
Ognuno di questi lo chiamiamo un Approach, e ognuno ha il proprio articolo separato che lo spiega. La pagina "Dig Deeper" di questo esercizio li riunisce, e include anche un articolo sulle prestazioni che esplora i compromessi.
👉🏾 Dai un'occhiata (dovrai andare in incognito se non hai ancora risolto l'esercizio)
Ma c'è di più!
Oltre ai documenti su questi diversi approcci, ci sono migliaia di video prodotti dalla nostra comunità che esplorano esercizi, registrano walkthrough o sessioni di programmazione in streaming e si addentrano in profondità in ciò che rende idiomatiche le soluzioni. Stiamo raccogliendo tutti questi video e li stiamo portando sulle pagine.
Partecipa
Nelle prossime settimane, inizierai a vedere la scheda "Dig Deeper" comparire negli esercizi in tutto il sito.
Se vuoi contribuire con un Approach, un articolo su un esercizio, o segnalarci i tuoi video in modo che possiamo aggiungerli, scrivi a jonathan@exercism.org e ti aiuterà a iniziare.
E infine, dicci cosa ne pensi e pubblica le tue idee e i tuoi pensieri nel post del forum!