4 plataformas para treinar suas habilidades com algoritmos
De tempos em tempos eu gosto de relembrar os conceitos por trás das tarefas que faço como desenvolvedora. Além disso, desafios geralmente me motivam e me entretém bastante.
No geral, nós não lidamos com muita frequência com complexidade de algoritmos, mas quando precisamos, a demanda não chega formatada e, às vezes, pode custar uma ida à produção até percebermos que havia uma solução melhor para aquele problema.
Por isso é bom manter a cabeça fresca para esse tipo de desafios algorítmicos, para que seja fácil de identificar e resolver no dia-a-dia.
A seguir eu descrevo algumas plataformas com exercícios para praticar.
ProjectEuler
Eu conheci o ProjectEuler enquanto ainda estava na faculdade. Um dos mais simples de todos, ele traz uma lista gigante de mais de 400 problemas, com pelo menos uma classificação de dificuldade que varia entre 5% e 100%.
Dado um problema, você tem que informar o resultado esperado, mas o código é feito fora da plataforma, em qualquer linguagem que você queira.
Todas as soluções deveriam ser conseguidas em menos de um minuto. Ou seja, se seu código leva mais de um minuto mas obtém o resultado correto, vale a pena dar uma aprimorada para não estourar o tempo recomendado.
CodeWars
Não muito tempo depois, conheci o CodeWars. Quase que como uma rede social, você tem estatísticas no seu perfil de quantidade de desafios completados, sua lista de amigos, e você pode participar de clans. Além disso, quanto mais difíceis são os desafios que você está completando, você sobe de nível.
Ao completar um Kata (é como eles chamam os desafios), você pode ver o código que outras pessoas fizeram e votar. É super interessante porque além de se preocupar se seu código está correto, também irá se preocupar com o design do código.
Ah, e você também pode submeter novos Katas. Eles passam por um processo de avaliação, teste beta, e se for aprovado você pode ter contribuído com novos Katas para o site.
HackerRank
Antes de ser uma plataforma de treino, o HackerRank é uma plataforma para recrutamento. Empresas que têm uma etapa de resolução de código utilizam o HackerRank para enviar o problema para os candidatos.
Além disso, a plataforma oferece alguns testes que você pode fazer para praticar seus skills para alguma empresa específica, ou no geral.
O diferencial é que o HackerRank não testa só as suas habilidades com algoritmo. Há também testes para linguagens específicas (inclusive SQL), diferentes paradigmas como programação funcional e até mesmo frameworks como React!
Além disso há diversas outras funcionalidades como cursos, emissão de certificados e concursos promovidos pelo HackerRank ou outras empresas.
Codility
Assim como o HackerRank, o Codility é uma plataforma para recrutamento. Contudo, o Codility traz um olhar mais voltado para algoritmos, dando ênfase em estruturas de dados e complexidade de tempo e espaço.
Existe uma quantidade relativamente limitada de problemas. Há 17 lições e, em média, 3 problemas por lição. Cada lição contém um PDF com uma explicação teórica sobre o assunto e algum exemplo prático.
Você vai ver que fica muito mais claro o que o problema quer resolver, uma vez que entende a proposta da lição.
Todos os exercícios descrevem a complexidade requerida para os problemas, geralmente informando o tamanho máximo do input. Além disso, o tempo necessário para cumprir cada um deles é de 2 horas.
O resultado é bem legal porque traz um resumo dos testes adicionais que são rodados, com diversos edge cases e testes de performance.
Quase todos os resultados que eu obtive também me mostraram a complexidade do meu algoritmo, informando a notação Big-O.
Por fim, seu resultado será uma porcentagem que varia de 0 a 100 levando em consideração performance e precisão da sua solução.
Conclusão
Com certeza há uma série de outras plataformas da mesma natureza, cada uma com sua especificidade.
Resolver esses desafios parece bem difícil no começo mas há duas dicas que são infalíveis: aprenda novos algoritmos e pratique sempre.
Você conhece alguma plataforma que vale a pena destacar? Comenta aqui 😃