Tivemos um candidato a nível sênior da entrevista reprovado em uma nuance da pergunta 1 2 do FizzBuzz .
Quero dizer, realmente, completamente, completamente, falhei na pergunta - nem mesmo perto.
Eu até treinou-lo através de pensamento sobre usando um loop e que 3
e 5
foram realmente vale a pena considerar como casos especiais.
Ele estragou tudo.
Apenas para fins de controle de qualidade, fiz a mesma pergunta exata a três colegas de equipe; deu a eles 5 minutos; e depois voltou para coletar seu pseudo-código. Todos eles acertaram em cheio e não tinham visto a pergunta antes. Dois perguntaram qual era o truque ...
Em um exercício lógico diferente, o candidato mostrou alguma compreensão de alguns dos recursos disponíveis no idioma que ele escolheu usar (C #). Portanto, não é como se ele nunca tivesse escrito uma linha de código. Mas sua lógica ainda fedia.
Minha pergunta é se eu deveria ter dado a ele a resposta para as perguntas lógicas.
Ele sabia que estragou tudo e reconheceu isso mais tarde na entrevista.
Por outro lado, ele nunca pediu a resposta ou o que eu esperava ver.
Eu sei que exercícios de codificação podem ser usados para configurar candidatos a falhas (novamente, veja o segundo link acima). E eu realmente tentei ajudá-lo a responder ao cerne da questão. Mas esse era um candidato de nível sênior e o Fizz-Buzz é, francamente, ridiculamente fácil, mesmo depois de considerar o nervosismo das entrevistas.
Eu senti que deveria ter mostrado a ele uma maneira de resolver o problema para que ele pudesse pelo menos aprender com a experiência. Mas, novamente, ele não perguntou.
Qual é o caminho certo para lidar com essa situação?
1 Ok, esse não é o link para a pergunta real do FizzBuzz, mas é uma boa discussão sobre a P.SE em torno do FizzBuzz e os links para os vários aspectos dela.
2 Para ajudar a esclarecer, esta é a nuance do Fizz-Buzz que perguntei e é do primeiro problema do Project Euler . Impressão substituta Fizz | Buzz para somar os números e você tem a mesma pergunta fundamental.
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Write a function that finds the sum of all the multiples of 3 or 5 below 1000.
3 Essa pergunta atraiu mais atenção do que eu esperava e aprecio todas as respostas. Algumas das respostas posteriores chegaram realmente ao cerne da minha pergunta, portanto, permitirei que a comunidade analise e vote antes de atribuir a "resposta".
4 Selecionei "a" resposta com base nos votos da comunidade naquele momento. E acho que a resposta de Yannis é apropriada para entrevistas com desenvolvedores mais recentes. Eu acho que a resposta coletiva focada na falta de pedir a resposta também é clara.
Respostas:
A maioria das minhas entrevistas foi com estudantes que procuravam uma vaga de estágio e, na maioria das vezes, estragaram exercícios simples (?). Eu queria uma maneira fácil e amigável de comunicar os erros deles, e o que surgiu foi bem simples: resolvi os exercícios sozinho e mostrei minhas soluções depois que eles terminaram com os deles.
Tive algumas discussões extremamente interessantes e reveladoras com os candidatos que começaram comparando nossas diferentes abordagens para resolver o mesmo problema. Depois de um tempo, eu até antecipei alguns dos erros, apenas verificando qual escola o candidato estava frequentando (alguns "professores" são ... idiotas). E, bem, nos poucos casos em que um candidato não conseguiu encontrar nenhuma solução, eu já havia dado um para a próxima vez.
fonte
Dando a resposta
Eu diria que, se o candidato não estiver interessado o suficiente para perguntar, não perderia o fôlego, mas a resposta @Yannis_Rizos é muito melhor.
As entrevistas são bastante rápidas. Eu sei que muitas vezes procuro as coisas por dias após uma entrevista.
Pessoas que não podem codificar o FizzBuzz Classic
Eu imagino que um grande ponto de discórdia é estar ciente do operador%. Você esperaria que alguém pensasse em comparar,
(myInt / 3) == (myDouble / 3.0)
mas talvez com o estresse de uma entrevista ... Ainda assim, o FizzBuzz Classic força uma abordagem de força bruta, colocando-a na categoria dos problemas de algoritmo mais fáceis de resolver. Como sugestão, você já tentou pedir às pessoas que codificassem "Fizz" como meio crédito e talvez adicionassem "Buzz" posteriormente como aprimoramento?Acho que a resposta final para sua pergunta é que é realmente muito difícil encontrar bons candidatos.
Perguntas da entrevista em geral
Muitas vezes, achei mais fácil e produtivo pedir aos candidatos que descrevessem o último projeto de programação que eles estavam entusiasmados. Eu tive 100% de sucesso com essa pergunta, o que significa que as pessoas que falaram animadamente sobre um projeto de programação e puderam responder perguntas técnicas sobre ele foram ótimas contratações e aquelas que não puderam, não foram. Isso tem os bons efeitos colaterais de deixar o candidato à vontade e incentivar discussões abertas. Com esta pergunta, o candidato, na verdade, informará para o que eles são mais adequados.
Talvez em um algoritmo do think tank também sejam necessárias perguntas, mas eu as abandonei em favor da questão do "projeto favorito".
Soma (Filho) de FizzBuzz
Sua pergunta da entrevista não é equivalente ao FizzBuzz:
Onde o FizzBuzz Classic obriga a realizar n iterações (para imprimir todos os números ou Fizz / Buzz), seu problema pode ser resolvido em n / 5 + n / 3 + n / 15 iterações, ou mesmo sem iterações - uma conexão direta direta. cálculo de pontos é possível. O programa a seguir compara esses três métodos:
Saída (soma do FizzBuzz <1000):
Com um n maior para comparação de desempenho:
Nota para aqueles que votaram negativamente como off-topic
O objetivo de apresentar uma solução para esta pergunta é mostrar que, embora a solução de força bruta do Sum of FizzBuzz seja semelhante ao FizzBuzz Classic, melhores soluções para o problema Sum estão disponíveis, tornando-o um problema fundamentalmente diferente. A soma do FizzBuzz é extremamente complicada se você não se lembrar da fórmula apropriada para a soma de uma série ou se não perceber que ela se aplica ao passar por 3 ou 5.
Se você deriva a fórmula da soma de uma série dividindo-a ao meio, revertendo uma metade e combinando-as, obtém (n + 1) (n / 2) que pode levá-lo a um caminho realmente confuso no que diz respeito à divisão inteira e aos restos truncados. A versão (n (a1 + an)) / 2 desta fórmula é absolutamente crítica para uma resposta simples para todos os valores de n.
fonte
t = { |i| (i * (i+1)) / 2 }; fizzbuzz = { |n| 3 * t((n-1)/3) + 5 * t((n-1)/5) }
Eu não me importo com o nível da entrevista, nem mesmo se é uma pergunta de nível "FizzBuzz" ou uma pergunta avançada. Se você pedir a um candidato para resolver uma pergunta, e ele não puder, mas nem se importa em pedir a resposta certa , eles não valem o seu tempo. Como no mundo você pode ser tão intelectualmente preguiçoso?!?
E mesmo se você fede totalmente como programador e está apenas tentando convencê-lo a conseguir um emprego, por que você não seria tão pragmático a ponto de obter a resposta certa agora, para conhecê-la na próxima entrevista?
Portanto, não, você não deve "dar" a resposta, mas deve esperar que o candidato insista em ouvir a resposta certa depois que falharem. Se não, é uma enorme bandeira vermelha no meu livro.
Se alguém estragou o FizzBuzz em uma entrevista Dev de nível júnior, porque não conseguia se lembrar do operador do módulo e simplesmente não conseguia seguir em frente sem ele, mas eles se apaixonaram por refazê-lo depois de explicar a resposta certa, ou pelo menos conversando com o código certo com você, é quase tão bom quanto respondê-lo corretamente.
fonte
Eu digitei fizzbuzz enquanto estava no telefone com o entrevistador durante uma pré-tela. Isso é algo que, mesmo que todo mundo nunca tenha ouvido falar, você deve ser capaz de se reunir depois de um semestre de trabalho, mas definitivamente depois de adquirir o status "sênior".
Realmente não há recuperação de não ser capaz de fazer isso. É um daqueles incômodos necessários que você precisa evitar no caminho.
Eu diria que faz sentido exibir como uma pré-tela para que você não perca tempo com todo mundo trazendo-os ao local para uma entrevista.
fonte
Seria interessante saber qual é a resposta "correta" para sua pergunta no FizzBuzz. De onde estou, uma boa (em C) escrita na letra da sua pergunta é:
Um melhor pode ser:
Por que diabos você escreveria um programa para fazer isso quando puder calculá-lo diretamente?
O ponto é que há mais de uma maneira de esfolar um gato, e o fato de o candidato em questão não começar imediatamente a escrever
for
loops emod
operadores não significa que ele é estúpido. Se você quiser saber o que o candidato sabe, discuta o problema - descubra o que ele está pensando. Se ele está preso ou confuso, descubra onde e por quê. Ele pode levá-lo a uma abordagem que você nunca considerou.Como entrevistador, não é seu lugar ensinar uma lição ao candidato . Se eles realmente não sabem escrever código, não há absolutamente nenhuma necessidade de constrangê-los, insistindo no quanto eles não sabem. Se eles estão interessados o suficiente para perguntar, então, sinta-se à vontade para compartilhar. Caso contrário, termine a entrevista, agradeça pelo tempo dispensado e passe para o próximo candidato.
fonte
discuss the problem
esse elemento, surgiram outras questões durante a entrevista. Lamentavelmente, o candidato foi ... menos do que próximo em responder. Não adicionei esse aspecto à pergunta original, pois estava realmente tentando manter as diretrizes da P.SE para "uma boa subjetividade".Seu "problema" é que você é um ser humano empático, por isso é difícil assistir alguém se debater com um problema que você conhece a resposta (isso também é um problema se você executar estudos de usabilidade). Do ponto de vista dos deveres como entrevistador, você não é de nenhuma maneira obrigado a ensinar o entrevistado como programar ou resolver problemas, ou a solução para um problema que você pergunta.
Quando você treina um entrevistado, não é para que ele possa obter a resposta certa. É para que você possa ver se eles realmente não conseguem resolver o problema ou se acabaram de ficar com um ou dois erros ou mal-entendidos.
Portanto, se você quiser dar uma solução ao entrevistado após o fato, estará fazendo isso puramente por si mesmo. Em geral, prefiro usar esse tempo para permitir que o entrevistado tente outro problema. Mas um programador "sênior" que não pode responder ao FizzBuzz provavelmente está fora da lista. Se você decidir dar soluções, certifique-se de não se iludir pensando que a entrevista foi melhor do que aconteceu (se você estiver pensando "ele não conseguiu resolver o problema, mas quando expliquei, ele entendeu bem", você está em um caminho perigoso).
E sim, eu fui um entrevistado que estava enlouquecido e nem consegui fazer a primeira tentativa de resolver um problema de entrevista. Isso significava simplesmente que eu precisava aprender muito mais para conseguir um emprego nesse campo.
fonte
Obter a resposta certa não é a parte importante deste teste. O que você está medindo é a abordagem de alguém para a solução de problemas, como eles se envolvem com a pergunta, qualquer coisa criativa ou interessante que surgem ao longo do caminho; esse tipo de coisa. Mesmo que recebam a resposta errada, eles ainda podem ser viáveis por esses critérios.
OK, não sabendo que o operador de mod é indesculpável, e pelas métricas que dei a esse candidato ainda parecem uma anulação, mas não acredito que dar a resposta certa a ele seja de alguma forma benefício.
Isso se resume à sua opinião pessoal daqui. Deseja dar feedback à entrevista com o objetivo de ajudar o candidato a se sair melhor em futuras entrevistas (e para que futuros entrevistadores não precisem sofrer o que você acabou de passar)? Nesse caso, divida seus comentários nos termos que acabei de descrever acima: diga a eles que não é apenas a resposta certa, mas como eles trabalham para chegar à resposta é um fator crítico.
fonte
how they work to arrive at the answer is a critical factor.
Embora eu esperasse que um operador de módulo fosse usado, isso é apenas porque é assim que eu o teria resolvido. Eu estava muito aberto a ver qualquer outra abordagem que resolvesse o problema sem criar erros gritantes de condição de limite (veja meus vários comentários sobre a abordagem com recursão ....).Do meu ponto de vista, não há situação para lidar. Supondo que você tenha rejeitado sua inscrição, a (aparente) falta de interesse do candidato não é algo que você precise se preocupar.
De fato, mesmo que ele tenha perguntado, você não deve uma explicação a ele. E se você conversou com seu pessoal de RH sobre isso, eles podem aconselhá-lo que discussões adicionais com o candidato são desaconselháveis por razões legais.
Também é importante notar que o problema do FizzBuzz tem diferentes "melhores" respostas, dependendo de como você o pergunta. Se você pedir a solução "mais simples" e a "mais eficiente", as melhores respostas serão radicalmente diferentes. E isso pode colorir seu julgamento de maneira injusta ... se você não estiver claro da maneira que fez a pergunta. (Por outro lado, um candidato bom / experiente teria a capacidade de esclarecer isso antes de começar a codificar ...)
fonte
Para responder sua pergunta, não, eu não daria a resposta. Se a pessoa quiser ser um engenheiro de software melhor, encontrará a resposta. Se você lhes der uma resposta, estará roubando essa oportunidade.
A questão mais relevante é quando você pode se chamar desenvolvedor sênior? Isso varia entre organizações e países. Por exemplo, uma empresa com a qual trabalhei considerou Engenheiros de Software com 5 anos de experiência como idosos. Não houve ênfase na qualidade da experiência, apenas no comprimento.
Até chegarmos a um padrão que categorize todos os engenheiros de software, independentemente do idioma, resta o indivíduo decidir o nível de suas habilidades. E continuaremos ouvindo os "Engenheiros seniores" reprovados no teste de habilidades mais rudimentar.
Algumas semanas atrás, a pergunta foi feita "Quando você deve se chamar desenvolvedor sênior" . Também escrevi uma postagem no blog sobre o assunto.
fonte