As estruturas de dados e algoritmos que eu uso na prática
(blog.pragmaticengineer.com)Muitas vezes se diz que as perguntas de algoritmos feitas em entrevistas não são usadas na prática,
e o autor reuniu, com exemplos, as que de fato usou com frequência trabalhando na Skype/Uber etc., além de recomendar materiais introdutórios para leitura
Grafos e busca em grafos: Skype & Uber
Grafos ponderados e menor caminho: SkyScanner
Ordenação: Skype
Tabelas hash e hashing: em todo lugar
Pilhas e filas: às vezes
Criptografia (Crypto), teoria das probabilidades e inferência, Hexagonal Grid e índice hierárquico: Uber
- Sobre algoritmos e estruturas de dados em entrevistas
Não é importante conhecer algoritmos populares ou estruturas de dados exóticas.
É preciso saber o que é um algoritmo e ser capaz de pensar em algoritmos simples, como o algoritmo guloso.
Você precisa conhecer estruturas de dados básicas como tabela hash, fila & pilha, mas não é necessário decorar algoritmos específicos como Dijkstra ou A*.
A maior parte do trabalho que fiz com algoritmos além de ordenação foi basicamente pesquisar e me esforçar para entender.
O mesmo vale para estruturas de dados peculiares como árvores Red-Black ou AVL.
Na prática, eu nunca precisei usar essas estruturas de dados e, mesmo que precisasse, pesquisaria de novo para aprender sobre elas.
No Vale do Silício, está se tornando cada vez mais comum fazer perguntas sobre programação dinâmica ou estruturas de dados incomuns.
Essas perguntas podem até ajudar a contratar engenheiros excepcionais, mas acabam impedindo a contratação de pessoas que fazem muito bem trabalhos que, na prática, não exigem conhecimento avançado de algoritmos.
O que realmente importa é ter noção das estruturas de dados mais comuns e a capacidade de usar o algoritmo mais simples como ferramenta para resolver um problema.
Estruturas de dados e algoritmos são apenas um kit de ferramentas.
São ferramentas que você deve usar com confiança ao desenvolver software.
Se você conhecer bem essas ferramentas, vai se acostumar a ler códigos que fazem uso delas.
Além disso, você ganhará mais confiança para implementar soluções para problemas difíceis.
Para aprender o básico, recomendo os itens a seguir. (os links estão nos comentários)
-
Data Structures Overview, do GeekforGeeks (coletânea de textos online)
-
DataStructure Collection, do HackerRank (aprenda resolvendo problemas)
-
Grokking Algorithms: algoritmos para entender conceitos com ilustrações (há edição traduzida)
-
The Algorithm Design Manual e Algorithms: Fourth Edition são secos demais e não são adequados para uso prático no dia a dia.
3 comentários
https://geeksforgeeks.org/overview-of-data-structures-set-1-linear-dat…
https://www.hackerrank.com/domains/data-structures
Em inglês: https://www.amazon.com/gp/product/1617292230/?tag=amzneu-20
Edição em coreano (Hanbit Media): https://www.hanbit.co.kr/store/books/look.php?p_code=B5896248244
The Algorithm Design Manual https://www.amazon.com/gp/product/1848000693?tag=amzneu-20
Algorithms: 4th Edition https://www.amazon.com/gp/product/032157351X/?tag=amzneu-20
A história mencionada no começo do texto, sobre o desenvolvedor do Homebrew, Max Howell, ter sido reprovado em uma entrevista no Google por não conseguir escrever a inversão de uma árvore binária no quadro, é muito famosa.
Na prática, 90% dos desenvolvedores do Google usam o Homebrew, mas, ironicamente, o próprio criador foi reprovado..
Esses 90% eram um número tirado do bolso por um desenvolvedor do Homebrew, e pelo que lembro um desenvolvedor do Google respondeu naquele tweet dizendo que de forma alguma eram 90%..
De qualquer forma, no Google desktop é Goobuntu e laptop é shell machine, então realmente também não deve haver muita ocasião para usar isso