Como se estuda estruturas de dados?
Olá dev! eu sou estudante de programação, e utilizo python; agora estou na parte do estudo de estruturas de dados, e tendo como base o roadmap de python do roadmap.sh (na parte 'Datastructures and Algorithms') vi algums algoritimos e estruturas que vou começar a estudar. Porém, me veio uma dúvida... Como posso dizer que "aprendi" aquela estrutura?
Pode parecer óbvio, mas acredito que para aprender devo:
- Entender o funcionamento da estrutura;
- Suas aplicações práticas;
- Quando se deve utilizar;
- E sua escalabilidade;
Minha dúvida é se há algo mais a ser estudado, quero aprender tudo do jeito certo para ser um bom programador. Me ajudaria muito se você pudesse dizer quais estruturas você aprendeu primeiro.
Acho que não preciso criar minha propria implementação das estruturas, creio que devo focar em entendê-las e em como usá-las.
Espero que possa entender minha dúvida. Obrigado.
Olá!
Sua jornada no estudo de estruturas de dados é essencial para se tornar um desenvolvedor eficiente. Antes de mais nada, para responder à sua dúvida "se há algo mais a ser estudado", comece consultando "Introduction to Algorithms" (CLRS) e "The Art of Computer Programming" de Knuth. Até que você tenha resolvido todos os exercícios desses livros, há mais para estudar!
Ao embarcar no estudo de estruturas de dados e algoritmos, é crucial não encarar esse processo como um estudo de curto prazo, que se conclui em apenas alguns meses, e depois você segue em frente. Pelo contrário, trata-se de um compromisso de longo prazo. Se você deseja realmente aprender e dominar esses conceitos, prepare-se para dedicar-se consistentemente pelos próximos anos.
Vamos abordar dois aspectos fundamentais para avaliar seus conhecimentos estruturas de dados e como elas funcionam.
Como Usar Estruturas de Dados e Algoritmos
Após conhecer estruturas de dados básicas em Python como listas, dicionários, conjuntos, filas. Aprenda a aplicá-las em problemas comuns. Sites como CodeRank e HackerElite oferecem exercícios práticos. Tente resolver problemas variados para entender melhor quando e como usar cada estrutura. Resolver consistentemente problemas de nível avançado é um indicativo que você tem um domínio considerável sobre o assunto.
Considere estudar livros como "Elements of Programming Interviews" ou "Cracking the Coding Interview". Esses livros focam em problemas comuns em entrevistas técnicas, que são solucionados com uso correto de estruturas de dados e algoritmos.
Como as Estruturas de Dados e Algoritmos Funcionam
Uma excelente maneira de entender profundamente as tabelas hash é analisar o código-fonte em C do dicionário do Python. Pode parecer complexo no início, mas persista no aprendizado. Antes de desistir, implemente sua própria tabela hash em C do zero. Isso é o básico para qualquer aspirante a engenheiro de software.
Depois implmente uma Árvore B, esse desafio é muito maior. Pode usar Python para essa tarefa. Para tirar 10 precisa implmentar a operação de remoção. Pontos extras se lidar com acessos concorrentes.
Isso não apenas é um ótimo treino para suas habilidades de codificação, fornece insights valiosos sobre o funcionamento destas estruturas, mas o mais importante, é que tudo se resume a aprender a resolver problemas, a essência do trabalho de um engenheiro.
O melhor material que eu conheço é esse aqui: https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-spring-2020/video_galleries/lecture-videos/.
Pra avaliar se você aprendeu. Eu recomendo o Leetcode.
Além de todos os materiais que o pessoal está compartilhando, acho que o ideal para dominar qualquer coisa em programação é a prática deliberada.
Faça um repositório no Github e implemente cada estrutura de dados que você estudar, mas de cabeça, não copiando pseudocódigo de livro. Enquanto você não conseguir implementar a estrutura de cabo a rabo, não creio que dá para você afirmar que aprendeu ela.
Dá uma pesquisada sobre Programação Competitiva, a comunidade do Brasil eh bem boa. Sites como Codeforces, Atcoder são mais focados em competição, já leetcode e hackerrank em entrevistas de emprego. Neles têm vários problemas envolvendo estruturas de dados e algoritmos, penso que se tu é capaz de resolver problemas mais complicadinhos usando uma ED, pode dizer que aprendeu ela, até pq entender como funciona não diz muita coisa.
Pra entender como funciona tem os livros que mencionaram, aulas de universidades no youtube, blogs do codeforces, etc.
Particularmente gosto bastante de resolver problemas de competitiva, então meio que aprender EDs é natural para resolver mais problemas.
Leia o livro do Cormen , Introduction to Algorithms