Quais são os prós e os contras do empregador das perguntas de código durante uma entrevista? [fechadas]

16

A pergunta nº 11 do Teste Joel é: "Os novos candidatos escrevem código durante a entrevista?". Quais são os argumentos a favor e contra para pedir aos novos candidatos que escrevam código durante a entrevista e tomem uma decisão sobre isso?

duros
fonte
Escreva o código como em fisicamente, escreva-o com um lápis e sua mão ou escreva como no código de tipo em uma máquina?
31410 Chris
O principal golpe é fazer perguntas estúpidas ou inúteis e pensar que você fez certo. Como o comentário de alguém sobre como ser solicitado a escrever uma lista de links.

Respostas:

13

Eu não vejo os contras. Uma entrevista tem muitas partes, e um candidato deve ser endossado "na cadeia" algumas vezes.

Eu entrevisto ~ 10 pessoas semanalmente. Eu realmente, realmente, realmente aprecio o fato de que o RH fez todo o trabalho em segundo plano e me apresentou muitas anotações. Quando eles chegam a mim, é hora de eu marcar os testes.

Os testes dependem inteiramente da posição. Geralmente, tento sondar:

  • Habilidade de programação geral. Você pode usar operadores efetivamente? Você pode conceber um sistema numérico que tenha uma raiz que não seja 10?

  • Você sabe como fazer o que estamos contratando?

  • Avaliação de suas contribuições para qualquer projeto de código aberto que você listou

Eu tento mantê-lo curto e divertido. Quando entro no escritório, pego as respostas, as examino e conduzo uma entrevista secundária. Para ser contratado, você normalmente precisa passar por três entrevistas.

Também avalio o quão bem você irá se misturar com a equipe que o receberá. Essa equipe conta comigo para fazer isso de forma eficaz.

Uma coisa é responder a perguntas na forma meta; outra é realmente produzir código. Se eu vou contratá-lo, preciso ver você produzir código.

Tim Post
fonte
Hmmm ... Eu me considero um desenvolvedor qualificado. Durante minhas últimas três entrevistas, quando me perguntaram sobre algo como "o que um método em particular faz", ou algo semelhante, decidi desistir. Como nunca procuro um emprego, pretendo fazer algo que sei muito bem. Não é interessante. Como meu ex-chefe disse: "Reutilizável? Programadores devem ser reutilizáveis, programas - talvez".
duros
@duros Lamento ouvir isso. Um bom entrevistador deve ser capaz de tornar o processo divertido .. e deve perceber que outros programadores odeiam testes.
Tim Post
não é que eu não me sinta confortável ao fazer o teste. Eu apenas percebo quais oportunidades de aprender e experimentar algo novo eu teria, se eles me contratassem como codificador ... Durante o último, enviei o entrevistador para ler os javadocs ...: - / Talvez, eu '
Estou
10
Uma vez me pediram em uma entrevista para escrever acessadores para uma lista vinculada no Perl. Nos oito anos em que trabalho com Perl, não encontrei um único programa de produção que use listas vinculadas. Obviamente, eu me atrapalhei e produzi, no papel, métodos insert () e remove () e um objeto baseado em hash que eu pensei que faria o trabalho. A primeira coisa que o entrevistador disse quando olhou para o jornal foi "Você está faltando alguns pontos e vírgulas"
leed25d 24/11/10
1
outro é realmente produzir código - isso é verdade. Fui surpreendido repetidamente por pessoas que descrevem um algoritmo plausível, mas não conseguem nem começar a reduzi-lo ao código. Isso, ou eles passaram por algum passo não algorítmico que não pode ser evitado quando você escreve código.
poolie 9/09/11
34

Com desculpas a Scott Whitlock:

Contras:

  • Nenhum

Prós:

  • Economiza muito tempo e dor no caminho, se você impedir a contratação de alguém que não pode programar
  • Requer que você tenha uma pessoa técnica na entrevista
Armand
fonte
Pode "Requer que você tenha uma pessoa técnica na entrevista" ser considerado um golpe?
precisa saber é o seguinte
2
Depende se você está tentando preencher um papel ou apenas preencher uma cadeira, eu acho. Mas IMO não, não pode ser considerado um golpe.
Armand
19

Se você fosse contratar um malabarista, seria uma loucura não fazê-lo fazer malabarismos com você. Ou um músico você teria audição. Caso contrário, você recebe coisas como o impressionante ioiô "mestre" K-strass .

Percorrer algo em um quadro branco é o equivalente dos programadores de uma rápida demonstração.

whatsisname
fonte
+1 para o link. Eu ainda acho que malabarismo não está lembrando coisas como assinaturas de métodos, ou similares, mas apenas ser capaz de pensar e resolver problemas que você nunca encontrou antes ...
duros
4
Exceto que malabarismo é uma habilidade imediata, com apenas algumas variantes, geralmente executadas na frente de uma audiência. A programação é uma tarefa profunda e ponderada, raramente realizada como tal. Também é muito menos produtivo em papel ou quadro branco. Dito isto, testes de pseudo-código (ou ignorando bugs médios triviais) podem ser muito úteis.
precisa
10

Eu acho que é super útil, e sempre o faço, mas como os benefícios foram cobertos tão bem, vou discutir apenas os negativos (aparentes).

Acho que é pouco provável que os testes de código lhe dêem falsos positivos: as chances são baixas de que alguém que realmente não pode escrever código consiga falsificá-lo em uma entrevista, pelo menos se você tiver uma escala de perguntas de dificuldade crescente. (Talvez o cenário mais provável seja que eles trapaceiem perguntando a um amigo, se não for uma entrevista cara a cara.)

Os problemas estão mais no lado falso-negativo: os testes de código levarão você a rejeitar a pessoa que é realmente o melhor candidato?

Medo do palco

Você pode ter alguém que é realmente um desenvolvedor muito bom, mas que está muito nervoso com esta entrevista, e eles ficam basicamente assustados. Atuar sob pressão é importante até certo ponto, mas lidar com o medo do palco não é uma parte essencial de ser um programador (em comparação com outras profissões), e seria lamentável rejeitar alguém que sofre muito com isso. Isso pode se agravar: se a pessoa não puder responder a uma pergunta que sabe que deve responder, poderá ficar mais rígida. Ou, como nesta pergunta , eles sentem que não podem falar e codificar ao mesmo tempo.

mitigação: comece com algumas perguntas sobre como conhecer seus antecedentes, objetivos etc. antes de entrar em questões técnicas. Talvez comece com algumas perguntas técnicas mais fáceis, para que elas tenham algum momento. Não seja idiota durante a entrevista (discutindo sobre ponto e vírgula, etc.).

É uma medida barulhenta

Perguntas interessantes sobre código podem ter mais de uma resposta correta. Se uma pessoa escreve uma resposta correta e outra escreve uma resposta correta e mais eficiente, quanto peso você deve colocar nela?

Até certo ponto, esse é o problema de algumas perguntas "enigmáticas": a pessoa tem o insight ou não e você obtém um resultado quase binário. A inteligência provavelmente afeta a probabilidade de ter esse insight, mas a amostragem apenas algumas vezes fornece uma medida grosseira.

Isso me incomoda sobre as questões de código (embora eu ainda as use.) A melhor mitigação em que posso pensar é ter, na medida do possível, uma rampa de soluções possíveis: a pessoa pode pelo menos escrever uma resposta bruta de força bruta ou uma resposta para uma parte do problema. Perceber que é melhor que nada é um bom sinal. Então, se descobrirem mais, poderão torná-lo mais eficiente ou mais elegante. Na medida do possível, evite fazer perguntas que obtenham respostas binárias.

Não é realmente representativo

Programar não é tarefa de resolver problemas algorítmicos de dez minutos, um após o outro: há muito mais trabalho para entender e projetar sistemas maiores e se concentrar por longos períodos de tempo, para não falar das habilidades interpessoais. As questões de código realmente não testam isso.

Porém, as questões de código não são as únicas perguntas que você fará: você pode observar os antecedentes, as referências, o trabalho de código aberto (se houver), para encontrar evidências de esforço contínuo, criatividade e habilidades interpessoais.

Saber como resolver pequenos problemas algorítmicos e reduzi-los ao código é uma condição necessária, mas não suficiente: se você não pode resolver pequenos problemas e não pode escrever código não trivial, então todo o pensamento geral do mundo não é vai fazer de você um desenvolvedor produtivo.

Qualquer um poderia resolver isso

Não, aparentemente não. Como o famoso post do FizzBuzz aponta, os problemas que você pode pensar são uma armadilha trivial, não apenas para os recém-formados, mas para as pessoas com anos de experiência no setor. Não sei porque. Ou o teste de código é uma medida ruim (o que é possível, embora eu ache improvável), ou eles não estavam contribuindo muito para os projetos em seu currículo ou estavam fazendo muito por copiar e colar não- código algorítmico (o que é possível.)

Vale a pena reconhecer que você realmente pode fazer muito sem escrever nenhum código algorítmico. As pessoas ganham muito dinheiro com aplicativos cujo valor está nos gráficos ou na lógica de negócios e não no que você poderia chamar de "programação", e isso é bom. Mas, se você realmente precisa de programadores, não é um bom ajuste.

Pode não estar bem calibrado

Se você fizer uma pergunta, a resposta pode muito bem parecer fácil para você. No entanto, se você fizer alguma pergunta comparável do nada ou se não for direcionada a seus interesses e antecedentes, pode ser muito mais difícil.

mitigação: execute os testes em alguns desenvolvedores que você já conhece e veja como eles funcionam. Talvez alguém que já seja da sua equipe e que você conhece seja muito inteligente, tenha problemas com um deles e considere ajustá-lo. Talvez eles pensem em uma resposta melhor ou diferente.

É muito parecido com trivialidades

Eu acho que as questões de código certamente podem ser triviais, se você insistir que as pessoas conheçam APIs obscuras de cor, ou obtenha a sintaxe perfeita, ou lembre-se da definição exata de um algoritmo não trivial. É razoável confiar nesses documentos, pesquisas na Web ou erros de compilador e ter pouca correlação com os conhecimentos reais. Nem mesmo saber onde é provável que a API esteja talvez seja uma pista de que a pessoa não a usou recentemente, mas isso não é necessariamente um problema, desde que ela não esteja no currículo.

Portanto, a resposta para isso é bastante simples: não faça perguntas triviais e não fique preso a erros triviais. Lembre ao candidato como a API é chamada ou deixe-a procurar; corrigir erros de sintaxe; não teste para pessoas que memorizam definições de estrutura de dados.

Como você compara?

Se você tem dois candidatos e ambos respondem bem às perguntas, como escolher entre eles? Você pode escolher quem terminou mais rápido, mas talvez aí comece a escolher lebres em vez de tartarugas. Você poderia fazer outra rodada e fazer perguntas muito mais difíceis, mas também não tenho certeza. Talvez você apenas dê a ambos um A + e tente escolher entre eles de acordo com outros critérios (ou tente encontrar o dinheiro para contratar os dois).

poolie
fonte
7

Um argumento que consigo pensar é que é difícil "codificar em voz alta" na frente de outras pessoas. Acho difícil até digitar com alguém olhando por cima do meu ombro e não estou sozinha. Percebo que quando alguém me chama para sua estação de trabalho para ajudar em alguma coisa, de repente, começa a digitar erros de digitação, selecionando a conclusão incorreta do código e até mesmo cometendo erros óbvios - nenhum dos quais eles teriam cometido se eu não estivesse sentado ali. Inferno, já vi pessoas começarem a usar o menu para operações de recortar e colar, apenas porque estavam sob observação. Esse não é um comportamento normal, e os codificadores de que estou falando são excelentes programadores e bastante inteligentes.

Recentemente, tive uma entrevista na qual o entrevistador me perguntou como codificaria uma operação específica e ele disse: "Apenas me mostre a matemática". Bem, eu tive que pensar no problema primeiro antes de começar a matemática, de modo que eu estava me bajulando. O que eu coloquei no quadro branco no começo foi embaraçoso, e eu senti que estava perdendo naquele momento. Acabei tendo o momento do A-ha e encontrei a resposta (na verdade, quando finalmente me ocorreu o que ele estava realmente perguntando), mas a "bagunça" que eu fiz antes de chegar lá me fez sentir muito desconfortável. No entanto, consegui o emprego, mas se o entrevistador tivesse sido menos paciente, talvez não.

Acho que se você der aos entrevistados uma tarefa de codificação, dê-lhes algum tempo para trabalhar em um computador, talvez até em um IDE com o qual estejam familiarizados. Deixe-os escrever o código para você e depois falar sobre ele. Pergunte a eles por que eles fizeram as coisas de uma certa maneira e se outra maneira pode não ser melhor. Você descobrirá mais desse tipo de processo do que pedindo que eles (figurativamente falando) façam xixi em um copo bem na sua frente.

Robusto
fonte
4
Tudo bem, no entanto. O objetivo de uma pergunta de entrevista de codificação não é testar a capacidade de digitação ou mesmo o conhecimento perfeito da API. Erros de digitação e outros enfeites podem ser ignorados e, em vez disso, você se concentra no processo de pensamento do candidato e na familiaridade com os fundamentos da programação. Por exemplo, eu já participei de uma entrevista que mostrou a total incapacidade do candidato em pensar alguns passos à frente (eles resolveriam um pequeno problema, perceberiam que isso criava outro problema etc.).
Adam Lear
2
É "difícil de codificar na frente de outras pessoas"? Bem. Contrato apenas pessoas que podem fazer coisas difíceis. Uma delas é a possibilidade de discutir código (ou seja, programa) com (na frente de) outras pessoas.
Kevin cline #
1
@ Kevin Cline: Você perdeu o meu ponto. Você se importa com a forma como as pessoas obtêm resultados ou deseja apenas que elas obtenham resultados de acordo com seus caprichos? Muitas pessoas podem codificar perfeitamente em um ambiente de equipe, mas precisam de "tempo sozinho" para produzir com eficiência máxima. Você parece o tipo de cara que não teria contratado Mark Zuckerberg porque ele precisava estar "conectado" para obter o máximo de produtividade.
Robusto
1
@ Robusto: Não estou fazendo perguntas profundas em uma entrevista. Eu só preciso ver alguém resolver um problema simples em alguns minutos. E preciso de pessoas que possam trabalhar em equipe. Isso significa capacidade e vontade de falar sobre código. Claro, posso sentir falta de um grande programador que simplesmente não aguenta a pressão de uma entrevista. Isso está ok. Mas uma má contratação é desastrosa.
Kevin cline
6

Contras: Nenhum. Sempre que você gasta configurando um PC, projetando um teste de código e analisando-o, você economiza dor de cabeça incalculável no futuro.

Prós: "Confie, mas verifique" - Ronald Regan. Tantas vezes eu já vi e ouvi falar de pessoas que finalmente se afastaram de uma posição em que, na entrevista, você pensaria que estava recebendo uma estrela do rock. A prova está no pudim; Eu quero ver o que eles podem fazer. Representará o que acontece depois que você investe tempo e dinheiro na contratação de alguém e coloca um novo projeto na frente deles.

Código difícil
fonte
4

Contras:

  • Requer que você tenha uma pessoa técnica na entrevista

Prós:

  • Economiza muito tempo e dor no caminho, se você impedir a contratação de alguém que não pode programar
Scott Whitlock
fonte
25
Se você está entrevistando desenvolvedores sem a participação de pessoas técnicas, está condenado de qualquer maneira.
precisa
@ David: Eu concordo, eu acho que os profissionais aqui longe superam os contras, mas era o único "con" Eu poderia pensar.
Scott Whitlock
4

Quando entrevistei para o meu trabalho atual, recebi uma lista de perguntas para escrever o código pelo recrutador. Fiquei muito impressionado, porque as perguntas foram obviamente escritas por alguém que tinha um profundo conhecimento de SQL, por isso funciona nos dois sentidos.

Larry Coleman
fonte
2

Você realmente deseja que a pessoa escreva o código na entrevista - melhor ainda, faça com que ela pareie o programa com um membro da sua equipe por um período de tempo X (o que você puder pagar confortavelmente em tempo / mão de obra).

É praticamente uma das únicas maneiras de saber se essa pessoa pode codificar ou não.

Eu prefiro um pouco a programação dos pares, pois mostra o trabalho da equipe, dá a eles um IDE real para trabalhar e permite que eles trabalhem em um problema 'real' (a outra pessoa do par pode orientá-los a superar quaisquer detalhes ambientais que o entrevistado nunca poderia razoavelmente saber sobre).

Começamos a usar essa política de contratação e estamos muito felizes com os resultados.

Martijn Verburg
fonte
+1 para testes em pares: comprova a capacidade de trabalhar com um companheiro de equipe e / a capacidade de codificar.
Bruce Alderson
2

Você julga um pássaro por suas penas e um programador por seu código.

Quando comecei na empresa atual em que estou trabalhando, eles me pediram para escrever um código C que gera ou verifica o bit de paridade de alguma entrada binária (dependendo de você estar codificando ou decodificando). Esta foi uma pergunta de entrevista exatamente porque esses tipos de problemas são resolvidos durante o trabalho. Claro que estou pensando em não verificar a paridade, mas trabalhar em um nível baixo.

terminus
fonte
2

Todas as respostas até agora (que li) não tratavam do fato de que o Teste Joel NÃO é (apenas) uma lista de práticas recomendadas para empreendedores, mas uma lista de verificação para facilitar sua avaliação de um possível empregador .

O problema é que, se eles testam minuciosamente seus candidatos, provavelmente contratam pessoas que sabem o que fazem, o que significa para você

  1. menos dor de cabeça e também
  2. a maior chance de aprender algo com seus colegas de trabalho

em vez de consertar os erros deles ...

Raffael
fonte
1

Eu diria:

Prós

  • Demonstra que o candidato possui pelo menos um conhecimento aceitável de programação, uma vez que currículos podem ser fabricados / embelezados
  • Se o entrevistador discutir o código com o candidato, ao contrário de ser mais como uma prova escrita, pode ser um bom indicador de como você se "socializa" socialmente e se o candidato é adequado para a empresa / empresa e equipe. serve para o candidato

Contras

  • Pode ser um insulto aos candidatos se as perguntas forem bobagens triviais e triviais que nunca surgiriam durante o trabalho (por exemplo, "Escreva uma classificação de bolha" quando todas as estruturas modernas que alguém usaria no trabalho tiverem classificação integrada, "Inverter uma cadeia de caracteres "quando existe um Reversemétodo interno ou similar, ou para testes escritos, coisas como" Quais são os argumentos para o Foométodo da Barclasse ", quando qualquer idiota poderia pesquisar no Google isso ou usar a documentação) em oposição às questões de arquitetura / design que mostram o candidato pode fazer as coisas e resolver problemas de negócios .
Wayne Molina
fonte
1
Eu acho que "reverter uma string" é uma excelente pergunta inicial em uma entrevista de codificação. Se eles não sabem por onde começar (e um número incrível de pessoas não), você provavelmente não deseja contratá-los. Se eles usarem o método embutido, isso é bom - isso indica que eles não tentarão construir sua própria roda, se houver, mas apresentar uma situação hipotética em que o método embutido possui um bug para que eles precisa escrever seus próprios. Você pode então usar o seu código como um ponto de partida para perguntar outras questões como a forma de corrigir todos os erros, uso de memória, tempo de execução, etc.
Gabe
0

Um profissional é que mostra que alguém tem conhecimentos básicos de programação ou o que quer que seja (a última vez que o encontrei, fiquei surpreso com o quão básica era a questão SQL). Também pode servir de base para uma discussão técnica, perguntando por que o candidato fez isso e aquilo e como poderia ser melhorado.

Leva tempo na entrevista, que pode ser usada para outras coisas. Além disso, escrever código em um quadro branco não é um ambiente natural e algumas pessoas terão problemas cada vez menos sérios. Isso pode fazer com que você perca um desenvolvedor que fica nervoso sem ferramentas ou referências normais.

David Thornley
fonte
3
O que o surpreenderia ainda mais era quantas pessoas não poderiam responder a essa pergunta básica do que quem poderia.
HLGEM
0

A programação é uma habilidade altamente técnica, com um monte de "entregas" claras. Um candidato pode ou não pode entregá-los. Portanto, não há "contras" em fazer perguntas técnicas. É inteiramente para dizer: "mostre-me algum código para este aplicativo ou" mostre-me o código para um aplicativo que você JÁ escreveu. "

NÃO fazer isso pode levar a um resultado como o seguinte: Um homem rico entrevistou um tutor para ensinar seus filhos a jogar xadrez (como um exercício de expansão da mente). O tutor abriu um tabuleiro de xadrez e começou a falar sobre os 64 quadrados, mas não tocou em uma peça de xadrez. Pressionado pelo tempo, o pai contratou o tutor de qualquer maneira. E o tutor ensinou as crianças a jogar Damas.

Tom Au
fonte
Isso mostra apenas um exemplo de entrevistador incompetente, não a necessidade de realmente jogar xadrez em uma entrevista. O homem rico poderia ter acabado de me perguntar "explicar Castling", ou algo semelhante, e imediatamente ter uma idéia do que o tutor sabia.
GrandmasterB