ti-enxame.com

As perguntas sobre algoritmos são boas para entrevistas?

Recentemente, tive uma discussão com um colega programador. Ele estava entrevistando para uma nova posição e foi feita a seguinte pergunta:

Dê uma sequência de números começando em X e terminando em Y, mas com um elemento faltando, para que N seja Y-X-1, encontre o elemento ausente em O(N) ou melhor.

Agora, a resposta é irrelevante aqui (mas interessante). Isso iniciou uma discussão sobre se essa seria uma boa pergunta a ser feita durante uma entrevista.

Um lado: os algoritmos são uma parte herdada da programação e a capacidade dos candidatos de responder a essa pergunta suporta que esse candidato seja um bom programador e seja capaz de resolver problemas maiores e possa lidar com a maioria das tarefas de programação que são fáceis de entender e responder.

Outro lado: escrever algoritmos do zero raramente é usado na programação moderna e, portanto, é irrelevante na questão mais ampla de saber se a pessoa será um bom programador. Uma pessoa poderia responder com sucesso a essa pergunta e ainda não conseguir executar tarefas de programação mais comuns.

Seus pensamentos? Boa pergunta para entrevista ou não?

25
MBonig

Concordo em fazer uma pergunta sobre algoritmo, mas discordo em insistir em um nível específico de qualidade de grande O.

Fazer esse tipo de pergunta é interessante para ver como a pessoa aborda o problema e quais armadilhas consideram em sua tentativa, mas, a menos que esteja escrevendo algo insanamente incorreto ou ineficiente, os detalhes reais do que eles escrevem não são tão reveladores quanto o fato de que eles supere as etapas de solução/projeto de problemas de maneira coerente.

Faço uma pergunta semelhante, mas as pessoas com quem tive mais sorte após contratar são as pessoas que deram respostas erradas, mas tiveram a idéia correta em sua abordagem.

20
Bill

Eu discordaria da idéia de que a capacidade de escrever algoritmos é irrelevante na questão maior de saber se a pessoa será um bom programador. Mesmo que ele nunca precise usá-lo (o que é duvidoso), ele ainda mostra se ele possui a flexibilidade mental necessária para encontrar uma solução lógica para um problema mais complicado do que um conjunto simples de requisitos já escritos e definidos em detalhes pelo cliente.

Definitivamente, não gostaria de contratar alguém que não saiba pensar e analisar. É isso que faz a diferença entre um macaco de código e um programador de computador.

9
Mason Wheeler

Devo admitir aqui que sou um daqueles que gostam de fazer perguntas sobre algoritmos em entrevistas, mas devo enfatizar que a resposta real à pergunta é absolutamente irrelevante. Não me importo nem um pouco se o entrevistado souber a resposta ou não. Em vez disso, para mim, essa pergunta visa aspectos diferentes, como os seguintes - em ordem de importância:

Exigências

Tais questões são deliberadamente subespecificadas. No seu exemplo, não há mais detalhes sobre a sequência. Se você tem um entrevistado que pergunta se esses números são realmente classificados, é um bom sinal. Ele tem a mentalidade correta para pedir aos clientes mais detalhes, que ajudarão a chegar a uma solução melhor em menos tempo. O candidato também pode brincar com a idéia de usar o espaço O(n) para armazenar uma matriz de N números, mas ele não deve fazer isso sem perguntar sobre mais detalhes sobre X e Y. Digamos) que X e Y estão entre 1 e 1000, é claro, vá em frente e inicie uma solução baseada em array, mas se eu lhe disser que o intervalo é de 1 a 1 bilhão, o problema se tornará totalmente diferente. , que não me importo com a solução, quero ver se o candidato consegue encontrar a distinção entre esses problemas, que são imensamente diferentes.

Técnicas padrão

Não quero contratar um programador que nem saiba o que significa O(n). Isso é absolutamente necessário saber se você teve alguma educação decente nessa área. Mas também é importante não apenas saber o que isso significa, mas realmente aplicar esse conhecimento.No seu exemplo, quero que um candidato perceba que ele não tem permissão para classificar os dados (sem fazer mais perguntas visando a opção de uma classificação de balde ou outro O(n)) devido à classificação de O (n log n) em geral.

Da mesma forma, outras perguntas sobre algoritmos têm como alvo técnicas padrão, como passagem por árvore ou gráfico ou recursão. Um candidato pode usar uma dessas técnicas, o que não causa uma boa impressão. Nesses casos, no entanto, eu gosto de ir mais fundo para descobrir se o candidato tem alguma experiência em CS. Obviamente, depende de qual é a posição de destino, mas geralmente um desenvolvedor que não conhece as complexidades do tempo de execução, nem as estruturas de dados típicas e seus percursos, não será de grande ajuda.

Mentalidade de solução de problemas

Depois de fazer a pergunta, você monitora o candidato de perto. Como ele reage? Você obtém os melhores resultados aqui de candidatos que não têm absolutamente nenhuma pista sobre como resolver o problema a princípio. A esse respeito, a pergunta verifica o que pode acontecer se uma situação semelhante ocorrer mais tarde no local de trabalho. Você pode se deparar com esse problema durante o seu desenvolvimento, e é bom saber como o candidato lida com esses problemas, mesmo que ele não consiga resolver tudo sozinho.

Exemplo: você não deseja que seu candidato entre no modo silencioso pela próxima meia hora! Verifique se ele consegue formular perguntas inteligentes (consulte Requisitos), verifique se ele começa a pensar fora da caixa quando perceber que não pode fazê-lo. Mesmo uma contra-pergunta "divertida" como uma "Posso usar a opção de telefonar para um colega de trabalho?" é um bom sinal.

Como responder

Em geral, as melhores respostas que você pode dar para esse tipo de pergunta são contra-perguntas! Dizer uma resposta imediatamente falha basicamente a coisa toda e, de fato, não é uma boa resposta, porque todas essas perguntas sugerem trocas, o que sua resposta implica, sem que você tenha as informações necessárias ainda para fazer isso de maneira inteligente. troca. Obviamente, a qualidade das contra-perguntas varia entre os candidatos.

Como uma observação geral sobre as perguntas da entrevista: Contra-perguntas raramente são uma coisa ruim. Em uma de minhas próprias entrevistas, fui perguntado, por exemplo, algo como o seguinte: "Se você tivesse que implementar o X, escolheria C++ ou Java para isso e por quê?" - simplesmente rebateu com "Estou limitado a esses dois?", adivinhe, que tipo de reação você recebe de um entrevistador por uma contra-pergunta - e quão fácil é realmente mostrar ao entrevistador o que você é capaz do.

6
Frank

A menos que você esteja fazendo perguntas sobre algoritmos/fórmulas que o candidato precisa conhecer para o trabalho (dinâmica dos fluidos, por exemplo, se a posição exigir isso), não vejo o valor deles. O candidato provavelmente já está preocupado com o modo como está vestido, com o que está falando, etc ... se eles podem responder a uma pergunta matemática no local não prova nada além de talvez como poderiam se sair em um programa de TV.

Quando entrevisto, nem faço perguntas de 'programação' por si só. Eu tenho o candidato descrevendo seus projetos anteriores, como seu código alcançou objetivos, quais são suas abordagens, etc. A partir disso, eu posso dizer rapidamente se o candidato sabe o que está fazendo ou se é um poser.

5
GrandmasterB

Concordo que os programadores devem conhecer muito bem os algoritmos, mesmo com novas estruturas sofisticadas, mas não estou totalmente convencido sobre um quebra-cabeças em uma entrevista. Minha maior preocupação seria que, em um ambiente real, você escreva algoritmos sob condições muito diferentes; aka, não sob pressão com alguém observando você a cada toque, com pelo menos vários minutos para refletir sobre isso em silêncio. Para aqueles que defendem esse método de avaliação, quanto tempo você geralmente dá à pessoa para resolvê-lo? Acredito que o código não é tanto o de encontrar uma solução em um terror febril de 3 minutos, então me convença de que essa é realmente uma boa maneira de ver como alguém lidará com uma tarefa cotidiana.

4
Morgan Herlocker

O problema com essa pergunta específica é que é quase uma questão complicada. Com um insight específico, você encontrará facilmente O (n), caso contrário, lutará para ficar melhor que O (n log n). Quase se reduz a "Você já viu esse antes?"

Não tenho certeza se existem boas perguntas algorítmicas. Se você perguntasse a alguém com base na teoria dos grafos, por exemplo, isso dependeria de como o entrevistado estivesse familiarizado com a teoria dos grafos - e, se você o contratar, ele ou ela poderá acelerar a teoria dos grafos rapidamente. Novamente, voltamos a "Você já foi exposto a isso antes?"

Em uma entrevista regular, não há tempo para resolver sérios problemas, e eu abordo as coisas de maneira diferente quando posso me sentar, usar a Wikipedia e, em geral, levar algum tempo para descobrir as coisas. Provavelmente não há tempo para o entrevistador discutir cuidadosamente o que o entrevistado sabe em detalhes e escolher uma pergunta algorítmica adequada.

2
David Thornley

Você quer uma pergunta que lhe dê informações sobre o candidato. Uma pergunta sobre algoritmo pode dar uma boa resposta ou não. E não estou me referindo a eles serem capazes de responder ou não. Se eles resolverem o problema e você entender e seguir o raciocínio deles, esse é um bom indicador. Se eles ficarem lá, sem resposta real, nem parecerem por onde começar, isso é um indicador ruim (talvez). O problema seria que algumas pessoas congelam e pode ser difícil diferenciar o congelamento de não ter habilidades para resolver problemas.

As pessoas reclamam de perguntar praticamente qualquer coisa nas entrevistas, por vários motivos. O candidato pode congelar, o candidato pode ter acabado de pesquisar essa pergunta, o candidato pode não conhecer essa parte específica de trivialidade/tecnologia/qualquer coisa. Tudo isso é verdade, mas uma entrevista ainda precisa acontecer, e muitos de nós nessa profissão odeiam isso. Nós odiamos a idéia de alguém sentado no julgamento de nós. Imediatamente invocamos razões pelas quais podemos ser julgados injustamente ou como o teste pode ser falso ou falso. Resumindo, isso não importa.

O que você realmente deseja é um entrevistador com a capacidade de determinar habilidades que podem ou não ser apresentadas durante a entrevista. As perguntas são apenas as ferramentas. Para mim, todos os martelos parecem iguais. Mas para alguém habilidoso o suficiente com eles, tenho certeza de que há diferença.

1
Jeremiah Nunn

Tenho várias perguntas semelhantes a algoritmos que uso regularmente, algumas das quais são muito difíceis. Eu os uso para ver como eles atacam mentalmente um problema e para ver se eles criam certos conceitos. (Já vi muitos candidatos a desenvolvedores que simplesmente não entendem ponteiros.)

1
John Franklin

Gosto de perguntas sobre algoritmos, porque é o que fazemos. Eu gosto de restrições, porque é o que usamos. Big-O é especialmente relevante no meu setor.

Não gosto de exigir que as respostas para esse tipo de pergunta sejam "escreva o código no quadro". O entrevistado deve ser capaz de falar de maneira inteligente sobre a abordagem da solução e participar de uma discussão contínua, à medida que os entrevistadores alteram os requisitos enquanto a discussão está em andamento.

A pergunta original é feita, diz o entrevistado, "comece do começo e marque no final, procurando o 'buraco'". O entrevistador diz que é muito lento, porque N é gigantesco. O entrevistado começa a discutir a pesquisa binária. O entrevistador diz que, de repente, os dados não são mais classificados. O entrevistado diz "classificar e pesquisar". "Agora está muito lento". Etc etc.

0
dash-tom-bang