Lendo este site e SO, eu já vi muitas histórias de perguntas e respostas de entrevistas dizendo que um candidato tinha que implementar uma lista vinculada do zero. Normalmente, este é um exercício "fácil" para programar candidatos a funções, como escrever o FizzBuzz. A idéia é que, se o candidato não puder fazer isso, ele não poderá programar e deve ser rejeitado quase imediatamente.
No entanto, não posso deixar de pensar que isso pode ser uma prática ruim pelos seguintes motivos:
- Linguagens modernas de nível superior, como C # e Python, usam nativamente listas extensivamente; escrever seu próprio objeto de lista vinculada seria necessário apenas em circunstâncias incomuns e, mesmo assim, provavelmente desaconselhado.
- Linguagens de nível inferior, como C ++, têm bibliotecas padrão com iteradores / contêineres e objetos de lista.
- À luz dos dois primeiros pontos, os codificadores podem levar anos sem sequer pensar em implementar uma lista (vinculada, duplamente vinculada etc.). Alguns podem nem mesmo ver essas coisas desde os tempos de faculdade.
- O poder da computação também não é o fator de anos atrás; portanto, a eficiência via ponteiros não é o problema que costumava ser (em geral).
- Uma simples pesquisa na web de algo como "exemplo de lista vinculada" traria muitos exemplos de código que poderiam ser memorizados e cuspidos de volta, sem realmente indicar a verdadeira competência do candidato.
Devo dizer que usar uma lista vinculada para levar a perguntas / discussões em aberto sobre a capacidade de resolver problemas / pensamento crítico dos candidatos é provavelmente uma prática de entrevista realmente boa. De qualquer maneira, um entrevistador pode realmente ver como é o candidato e como ele acha que é massivamente benéfico.
Eu acho que essa abordagem binária de "nenhum código de lista vinculada, nenhum trabalho" para programadores que trabalham em um aplicativo de desktop ou web está um pouco desatualizada. Também pode ser bastante prejudicial; um candidato que não se lembra de como trabalhar adequadamente com o cabeçalho de uma lista pode ser um excelente programador e colega de trabalho e se perder na mistura. Pensamentos?
EDIT : Existem muitos (bons) comentários sugerindo que se essa é uma pergunta boa ou ruim a ser feita depende do contexto do trabalho. Concordo plenamente, então deixe-me reformular esta pergunta: implementar uma lista vinculada é uma pergunta comum de entrevista para uma ampla gama de tarefas de codificação, semelhante a perguntas como o FizzBuzz ou a criação de uma função recursiva para calcular fatoriais. Essa pergunta tem utilidade suficiente para ser usada comumente na avaliação de candidatos de programação em geral? Ou deveria ser considerada uma pergunta ruim, exceto para os cargos "Desenvolvedor sênior, Equipe de listas vinculadas incorporadas"?