Lendo: Entendendo Algoritmos
Minha experiência lendo o livro, e como estou finalmente preenchendo umas lacunas
Estou lendo Entendendo Algoritmos (Aditya Y. Bhargava) e cheguei até o capítulo 6. Até agora, estou gostando muito - principalmente porque o livro está me ajudando a preencher umas lacunas que eu sentia falta há um tempo: entender melhor estruturas de dados e algoritmos.
O livro segue uma linha bastante didática e visual. Pra mim, que não conhecia muita coisa dessa área, esse livro está sendo um ótimo guia, tanto sobre os assuntos tratados, sobre temas que devo estudar após a leitura. Também existem muitos exercícios para fazer enquanto lê, e a recomendação é essa mesmo, ler -> entender -> praticar.
A minha abordagem pra aprender é basicamente fazer exercícios no meu tempo livre. Sempre antes de avançar um tema, eu recapitulo todos os anteriores de forma prática, refazendo algorítmos ou respondendo perguntas para mim mesmo sobre como certa estrutura de dados funciona.
Os exemplos de código contidos nele são em Python, porém tenho feito em Go por alguns motivos, que valem um post só sobre isso, porém em resumo: faz algum tempo que estou usando essa linguagem para estudar por ser de fácil escrita e compreensão, e ao mesmo tempo uma linguagem que te aproxima bastante da máquina (não mais do que C porém muito mais do que php, que eu trabalho); um segundo motivo seriam basicamente as vozes da minha cabeça me dizendo que ao interpretar e ter que reescrever um trecho de código em outra linguagem de programação, eu aprendo mais. Porém, como eu disse, a fonte disso é altamente duvidosa, mas eu acho que faz sentido.
O que já aprendi até aqui
O livro apresenta os conceitos de forma introdutória, mas muito clara. Já passei por temas fundamentais:
- Notação Big O: Foi o primeiro grande “estalo”. Aprendi que essa é a linguagem que usamos para falar sobre o tempo que um algoritmo leva para executar. Entender que o Big O não foca no tempo em segundos, mas no número de operações que cresce com os dados, mudou minha visão sobre performance.
- Estruturas de Dados: Aprendi a diferença prática entre
arrayselinked lists, além de entender como funcionam asstacks,queues,HashTablese osgrafos.
Sinto até vergonha de dizer isso, pois já sou um desenvolvedor há alguns anos, e sempre trabalhei com php, que é uma linguagem de tipagem dinâmica, e o “array” que eu conhecia, além de um tipo híbrido que funciona pra tudo, na verdade é umaHashTabledisfarçada, e eu nunca me dei conta. Quem vem do Java, ou de qualquer outra linguagem mais tradicional, pode pensar “nossa, que burro”, e é… realmente kkkk. - Busca e Ordenação: Entendi perfeitamente a lógica da busca linear e como a busca binária é absurdamente mais rápida. Também vi como funcionam a ordenação por seleção e o famoso quicksort.
- Busca em Grafos: O capítulo de BFS (Busca em Largura) foi um dos pontos altos até agora, clareando muito como encontrar o “caminho mais curto”.
Por que estou gostando?
Sabe aquela sensação de descoberta ao entender como funciona algo que você sempre usou? É assim que eu me sinto a cada capítulo. Eu percebi que estudar e praticar esses fundamentos fazem muita diferença na hora de escrever código, mesmo que hoje em dia utilizemos frameworks e bibliotecas que já implementam tudo (inclusive melhor do que eu teria feito), saber como funcionam por baixo dos panos ajuda a tomar sempre a melhor decisão e da muito mais segurança.
Pra quem eu recomendo
Se você, assim como eu, já é programador, mas sente que precisa iniciar a fortalecer os fundamentos, eu considero essa uma leitura que vale muito a pena. Estou considerando este livro como o meu pontapé inicial para a minha evolução como desenvolvedor.
Ainda tenho alguns capítulos pela frente, mas estou muito animado e satisfeito com o que aprendi até agora!