Eu falhei no FizzBuzz, você me contrataria? [fechadas]

27

Sou desenvolvedor com experiência em CS e tenho experiência de trabalho em desenvolvimento em vários idiomas por quase 3 anos.

Hoje eu tive uma entrevista, no geral foi muito bem, me preparei para a maioria das perguntas e me senti pronto para qualquer coisa. No final da entrevista, eles me deram UMA pergunta de programação ... um problema como o FizzBuzz (sem a parte impressa do número). Acredito que cometi muitos erros e, portanto, "falhei". Toda a esperança está perdida para mim?

Aqui está o meu código:

  void FizzBuzz()
  {
    for(int i = 0; i <= 100; i++)
    {
      bool isThree = i % 3;
      bool isFive = i % 5;

     if (isThree)
     {
         print "Fizz\n";
     }
     else if(isFive)
     {
         print "Buzz\n";
     }
     else
     {
         print "FizzBuzz\n";
     }
  }
 }

Como você pode ver, eu errei os bools que deveriam ter a sintaxe i% 3 == 0; Se estou lembrando da pergunta corretamente, também coloquei um else em vez de um elseif com isThree && isFive. Fiquei bastante estressado, mas isso não é desculpa para perder um problema simples.

Portanto, a questão é: qual é a importância de poder produzir código de trabalho no local em relação a outros fatores, como experiência e personalidade? Por exemplo, o código acima seria um desagregador?

ja_programmer
fonte
31
Eu acho que o fato de que você usou o operador módulo é bom o suficiente
Ryathal
9
você também não imprime o número quando não é um múltiplo de 3 nem 5. O fato de você não ter mencionado que, ao postar esta pergunta, também ficaria muito cético.
Whatsisname
13
Como alguém pode responder isso em nome de seus entrevistadores?
Pd
5
Aconselhamento tangencial - fazer Euler projeto problemas 1-10 e você terá uma alça sobre muitas das perguntas padrão tipos que serão feitas de você como um "pode você programa - escrever este código"
20
Acho que não contrataria alguém que não escrevesse o FizzBuzz, mas IMHO você falhou em escrever a sintaxe perfeitamente em um quadro branco, o que é outra coisa.
Michael Shaw

Respostas:

44

O objetivo do FizzBuzz é mostrar que você realmente sabe programar , não que memorizou todas as regras de sintaxe mais refinadas do idioma em que você foi convidado a programar (embora isso importe, se eles querem saber como é experiente você está no idioma).

Se você chegou até aqui no estresse de um ambiente de entrevista e pode mostrar que entende os erros que cometeu, eu diria que você passou.

Robert Harvey
fonte
Concordei, não estava tentando sugerir que eu estava memorizando a resposta. É que eu sinto que sou um programador bastante capaz, mas sinto que apenas ter um problema de programação e não fazer bem é um reflexo muito ruim das minhas habilidades. Eles também não disseram nada sobre o problema. Eu não percebi o erro dos meus caminhos até entrar no meu carro e começar a dirigir para casa. Então foi um OMG whyyy !! reação.
6132 ja ja ja estou
Eles fizeram a pergunta do FizzBuzz primeiro? Se eles não terminaram a entrevista imediatamente, você passou. Os entrevistadores consideram outros fatores além de um simples teste de codificação; bons empregadores querem pessoas que saibam pensar criticamente e resolver problemas.
Robert Harvey
Eles passaram a maior parte do tempo me perguntando sobre meu currículo, perguntando sobre várias tecnologias que eu havia usado e como as usei. E então eles me perguntaram o problema de programação. Então eles me fizeram perguntas sobre mim. Então fiz uma série de perguntas e apertei as mãos deles e fui embora.
6132 ja ja ja estou
4
Os bons entrevistadores encerrarão a entrevista quando não houver mais interesse em contratar você, o que deveria ter acontecido logo após o FizzBuzz, se você falhasse no teste. Isso não significa que eles ainda o contratarão, mas significa que você não falhou na entrevista imediatamente.
9788 Robert
4
@ RobertHarvey - nem todo mundo interrompe a entrevista naquele momento. Com meu candidato recente que falhou no FizzBuzz, continuei a entrevista na tentativa de ver se ele poderia salvar as coisas. Em outras palavras, eu estava disposto a conceder a falta do exercício devido ao estresse da entrevista.
26

sim

A maioria das pessoas que entrevistei que falharam na parte do exercício de código por causa de sintaxe menor ou lógica um pouco fora da lógica acabaram sendo as melhores contratadas.

Acertar a idéia central da lógica (o que você fez) e convertê-la em algo decente e conciso do ponto de vista do código (o que eu acho que você fez principalmente) é muito mais importante para mim do que deixá-la absolutamente perfeita.

Eu compro um IDE porque sua verificação de sintaxe não contrata um desenvolvedor para ele, e você teria percebido os outros erros dentro de momentos da sua primeira depuração.

Você passou do requisito inicial para uma primeira tentativa de maneira bastante direta e sem fazer nada de terrível. Isso é mais valioso em muitos ambientes do que a perfeição na ausência de feedback. Se o empregador está desconectado dos detalhes que você perdeu, pode ser um sinal de que o ambiente está por vir.

Se a tarefa fosse a variante dos números impressos, a falta dos detalhes pareceria um pouco ruim, mas não teria peso suficiente para mudar minha decisão se eu gostasse de você para a posição.

[Editar] Como Alex apontou, há também o aspecto de reação e compostura. Pessoalmente, tento evitar isso antes de começar os exercícios práticos, tentando encurralar o entrevistado em algo um pouco fora de sua experiência, mas alguns podem optar por combinar os dois. De vez em quando eu me deparo com alguém que só tem conhecimento de livros didáticos e eles navegam direto pelas questões teóricas e de fundo, mas ficam seriamente preocupados por onde começar com o exercício prático. Alguns nem conseguem descobrir por onde começar.

Essas pessoas são exatamente o que eu quero eliminar com este exercício.

Portanto, a menos que você tenha levado 20 minutos para fazer o entrevistador esclarecer o requisito, imagino que sua solução tenha sido mais ou menos sua primeira tentativa, possivelmente com algumas correções. Se você conseguiu o que colocou em menos de 5 minutos, mostrou que pode pensar o suficiente nos meus padrões.

Conta
fonte
2
Bill, eu só quero agradecer muito pelo feedback detalhado. É bom ter outras perspectivas. É frustrante cometer erros em algo tão simples e saber que você é melhor que isso.
6132 ja_programmer
1
Deixe-me confirmar o que Bill acabou de dizer. Esse tipo de teste é projetado principalmente para ver como as pessoas reagem sob pressão. NÃO é esperado que você seja um programador perfeito ao trabalhar nessas condições. Você só deve ... trabalhar. Sério. Espera-se que você tente manter a calma e enfrentar o problema da melhor maneira possível. Foi exatamente o que você fez.
AlexBottoni
Não é apenas a não impressão dos números, é também a falha em reconhecer que em multidões de 15 você não imprime Fizz ou Buzz, mas FizzBuzz. Não mostra uma boa decomposição do problema. Quando imprimir "FizzBuzz" é o elemento mais importante deste quebra-cabeça.
Pieter B
Não uso esse exemplo em particular, pois muitas casas contratadas fazem seus candidatos memorizá-lo, mas foi minha experiência que as pessoas que cometem os erros "oh duh" nesses exercícios geralmente se tornam melhores colegas de trabalho. Sua lógica começou do lugar certo, e não há muita porcaria extra, isso é bom. Ele perdeu algo que você teria visto na primeira compilação. Eu preferiria ter o cara que errar 3 vezes em 15 minutos, então é bom do que o cara que leva 30 minutos para começar.
Bill
@ Bill - Que tipo de respostas para esse problema você vê? Eu simplesmente não entendo como alguém que não teve uma aula de programação não pode saber pelo menos tanto quanto eu coloquei. Escrevi isso em talvez um minuto a um minuto e meio e a única razão pela qual demorou tanto tempo foi porque eu estava falando e escrevendo no quadro branco ao mesmo tempo.
ja_programmer
15

O código acima provavelmente seria um problema para mim se eu não tivesse mais nada para continuar. Se eles seguirem o estilo de entrevista da Microsoft, a pessoa que fez essa pergunta provavelmente o bloqueará - e muitas vezes é preciso.

O que me deixa perplexo é que o entrevistador não perguntou sobre esse código. Um bom entrevistador viu seu próprio código o suficiente para saber que as pessoas cometem erros - especialmente quando estão com pressa. Geralmente eles dizem: "Agora você vê algo errado com esse código?" "Não? Bem, vamos testar". Você cria alguns conjuntos de resultados e o executa através da função Então você diz: "Oh, merda, isso não funcionou". "Ok, como você conserta isso ..." e assim por diante. Se você sobreviver a esse diálogo, ele é realmente impressionante e demonstra uma capacidade de pensar criticamente, apresentar casos de teste e depurar seu próprio código.

Observe também que eles geralmente não estão procurando por "código funcional". Quem produz que a primeira tentativa de qualquer maneira? Mas logicamente correto com tratamento de erros e bons conjuntos de testes é um bom objetivo.

Além disso, isso pode surpreendê-lo, mas você está competindo com muitas pessoas que nem conseguem iniciar o efervescimento. Nós tendemos a supor que todo mundo está atravessando árvores b + enquanto dorme ... mas, na realidade, eles não conseguem nem descobrir múltiplos de 3 e 5 e usam um operador de módulo. Você pode se deliciar surpreendentemente com o desempenho que fez com os outros candidatos.

Meu conselho, apenas ignore. Eu entrevistei recentemente grandes empresas de software (Microsoft, Amazon etc ...) e foi a primeira vez que passei por um processo de entrevista tão completo. Eu me enganei em uma entrevista no local da Microsoft em grande parte por causa dos nervos, mas também não sabia o que esperar ou o que exatamente eles estavam procurando. Eu preguei um problema de caminho mais curto apenas para resolver alguns problemas realmente simples. Retirei valores do lado errado de uma pilha, esqueci em uma int atoi(char* value)implementação queint val = value[i] - '0';me daria o valor inteiro do personagem e vários outros erros tolos. Fiquei feliz com a entrevista, mas ainda entendi por que não recebi uma oferta. Eu tinha que perceber que isso não era tanto uma reflexão sobre minhas habilidades, mas era um indicador de que eu só precisava continuar tentando até conseguir dominar meus nervos. Eventualmente, marquei algumas entrevistas com perguntas muito mais difíceis e consegui o emprego dos meus sonhos. Realmente é - para a maioria das pessoas que realmente sabe o que está fazendo - apenas uma questão de descobrir o que os entrevistadores querem, ter confiança em si mesmo e dar a eles. Leva um tempo.

Jonathan Henson
fonte
Concordo que o código também seria um rompimento de contrato (estive em algumas posições de liderança em que precisava revisar o código). Eu esperava que eles me perguntassem vários problemas de programação e fizessem o que eu pensava ser a abordagem "tradicional" de me guiar pelo problema, se necessário. Como você mencionou "Veja algo de errado com este código", teria me informado imediatamente. Eu não esperava o FizzBuzz e achei que era um exercício de velocidade. E eu estava nervosa, não dormi muito na noite anterior. Fico feliz em saber que você conseguiu o emprego dos seus sonhos. Vou continuar entrevistando para conseguir o meu também!
ja_programmer
@ja_programmer bem fizzbuzz é um exercício de velocidade. Você deve concluir em menos de 2 minutos. Eles não estão testando suas habilidades de resolução de problemas, apenas sua capacidade de escrever código simples rapidamente. Também me perguntaram "Você vê algum problema com este código?" quando o código estava completamente correto e eles estavam apenas tentando avaliar minha confiança ou me irritar - ainda não decidiram.
Jonathan Henson
Bom ponto, eles poderiam dizer que, se estivesse correto. No entanto, acho que, neste caso, eu precisava de um tapa na cabeça que os "problemas com este código" teriam ganho. Se eu tivesse passado por um caso de teste simples como uma pessoa normal, notaria que minha lógica estava incorreta. Além disso, como para a sua pergunta, eu estou indo para ir com um pouco de ambos;)
ja_programmer
2
+1 para No? Well let's test it. Peço aos candidatos que escrevam comentários em entrevistas. Eu também os levo a escrever um teste de unidade. Às vezes, seu zumbido fracassa falha, mas seu teste de unidade detecta isso, levando-os a corrigi-lo - tudo bem. Os caras que são rejeitados são os que escrevem uma solução com falha e depois escrevem um teste que falha ao detectar isso. Eu pergunto a eles, você está feliz com esse teste, se é, é quando eles falham.
Qwerky
12

Eu teria que dizer não, mas não pelo motivo que você deu, mas por colocar a seção FizzBuzz em último lugar. Com o funcionamento do seu código, ele nunca imprimirá o FizzBuzz quando você espera. Como comentou Lee, ele será impresso para todo valor não divisível por 3 ou 5.

Mas o ponto principal é que você aprende com isso. Gosto do fato de você estar aqui perguntando como poderia ter se saído melhor. Certifique-se de fazer alguns quebra-cabeças de código e pesquisar perguntas comuns da entrevista. Além disso, talvez tente cronometrar a si mesmo ou faça outra coisa que aumentaria a pressão, para que você possa imitar a sensação de que vai entrar em uma entrevista. E prepare, prepare e faça mais preparativos para a entrevista, se você realmente quiser eliminá-la.

David Peterman
fonte
3
Ele irá imprimir FizzBuzz sempre que inão é divisível por 3 ou 5.
Lee
1
Sim, eu percebo isso. Realmente não sei o que estava pensando.
ja_programmer
@Lee desculpe, você está certo, eu quis dizer que nunca seria impresso quando ele quisesse.
22612 David Davidman
1
@mattnz Não, mas espero que alguém com 3 anos de experiência seja capaz de escrever uma declaração if funcional, e mesmo que ela entenda errado, seja capaz de me dizer com precisão onde eles deram errado. (sem ofensa para o OP, apenas tentando ser o mais honesto possível)
David Peterman
6
@mattnz: Eu ficaria menos preocupado com bugs e compilação do que com o fato de a lógica do programa estar completamente errada. Eu poderia viver com o erro isThree = i% 3, mas a parte "else print FizzBuzz" mata para mim. Eu provavelmente daria uma pequena cutucada no entrevistado para ver se ele pode pegar e resolver esse problema, mas, se não, é um desastre.
Misko
9

Não. O objetivo do FizzBuzz é verificar se você é capaz de elaborar uma lógica condicional básica, que abrange todos os casos. Ao contrário das opiniões de algumas pessoas, o FizzBuzz não é sobre operador de módulo, conhecendo operações ternárias ou operandos booleanos. É um exercício simples de condicionais e você falhou.

O problema está estruturado para que todo o código de aparência "elegante" falhe em cobrir pelo menos um caso.

Respostas aceitáveis:

if div3 print fizz
if div5 print buzz
if !div3 && !div5 print x


if div3 {
    print fizz;
    if div5 {
        print buzz;
    }
} else {
    if div5 {
        print buzz;
    } else {
        print x;
    }
}
RokL
fonte
2
Seu segundo exemplo é muito confuso.
Brian
7

Eu dou às pessoas problemas triviais de programação no quadro branco. Se o código resultante está livre de erros não é o ponto de decisão. Em vez disso, preocupo-me com vários comportamentos exibidos durante a escrita do código. É interativo e estou aprendendo bastante sobre candidatos enquanto está acontecendo.

Entro em mais detalhes no "teste" do quadro branco durante uma entrevista: maneira legítima de fazer backup do seu código (quadro branco)?

Claro, seu entrevistador pode não ser nada como eu. Mas é perfeitamente possível que você tenha passado uma entrevista comigo enquanto produzia um código muito pequeno, e é possível que tenha falhado com o código idêntico.

Kate Gregory
fonte
1
Obrigado pelo link. Essa foi uma boa leitura. É tudo o que ouvi falar (alguns anos atrás) na minha aula de preparação para entrevistas. Gostaria de ter ouvido seu conselho antes desta entrevista passada. Não recebi perguntas, mas também não fui informado e forneço informações. Bem, talvez um pouco, mas acho que a maior parte disso foi murmurada. Vou levar o seu conselho a sério e usá-lo em uma (espero que em breve) futura entrevista que tenho. Obrigado!!
11282 ja_programmer
4

Se eu estivesse avaliando isso, procuraria o seguinte:

  1. O candidato tenta entender claramente os requisitos antes de avançar para a implementação? O candidato procura resolver meu problema ou usar suas ferramentas de estimação em sua caixa de ferramentas de programação? Como o candidato resolve os problemas?
  2. O candidato é fluente em pelo menos uma linguagem de programação?
  3. O candidato tem uma noção da lógica booleana?
  4. O que o candidato faz para garantir a qualidade de suas soluções?
  5. Como o candidato responde ao feedback sobre seu código?

-

É difícil dizer no # 1. Sua pergunta afirma que seu problema não incluiu a parte "número de impressão" e sua solução não inclui isso. Não tenho escolha a não ser confiar na sua palavra, mas se, de fato, foi o problema clássico do FizzBuzz que incluiu imprimir os números que não eram divisíveis, parece que você pulou para uma solução antes de entender completamente os requisitos, o que seria uma marca fora.

Eu daria a você crédito parcial pelos itens 2 e 3. Você sabia usar o operador de módulo e tinha a estrutura de uma solução funcional, mas perdia partes de ambos.

Parece que você não fez o # 4, o que o marcaria. No futuro, eu recomendaria dar um passo atrás no quadro branco e examinar sua solução antes de terminar. Eu também (sem ser solicitado) percorria alguns testes de unidade da sua solução, que teriam demonstrado rapidamente onde você errou.

Eles não deram a você a chance de # 5, o que é lamentável. Mas o ponto é que eu não quero alguém que pense que toda linha de código que eles já escreveram seja ouro puro que não poderia ser melhorado, mas alguém disposto a aceitar comentários sobre suas soluções e se envolver em alguma conversa sobre sua abordagem .

-

Portanto, se eu estivesse avaliando isso sozinho, votaria "Sem contratação". Coisas como essa são meio que medir uma arte performática em vez de capacidade de programação , mas dominá-la ainda pode ajudar sua carreira. Portanto, minhas recomendações para futuras entrevistas técnicas seriam:

  1. Antes da entrevista, pratique alguns desses tipos de exercícios a frio, usando o mínimo possível de recursos externos. Não para memorizar soluções, mas para ter certeza de que você está confortável com seu idioma preferido

  2. Faça perguntas sobre o problema para validar suas suposições.

  3. Antes de anunciar a solução completa, volte para o quadro branco, examine-o e passe por alguns casos simples de teste de unidade.

JohnMcG
fonte
Embora eu concorde com isso como um objetivo básico da entrevista, esse não é o objetivo do fizzbuzz. O Fizzbuzz está avaliando uma coisa e apenas uma coisa. Você pode escrever código simples de maneira rápida e correta? Normalmente, os entrevistadores querem que essa pergunta seja feita em menos de 2 minutos. Isso não é tudo, eu sei, mas é para isso que a pergunta foi criada.
Jonathan Henson
1
O ponto do fizzBuzz é o que o entrevistador deseja que seja. Se eu usasse o fizzBuzz ou um exercício semelhante, é isso que eu estaria procurando.
JohnMcG
1
Certamente, qualquer pergunta da entrevista é o que o entrevistador deseja usar para avaliar as coisas em que está interessado. Meu argumento é que o FizzBuzz é uma pergunta muito ruim para avaliar algo além de "Ele / ela pode escrever o código correto rapidamente?" Não é realmente tecnicamente desafiador o suficiente para avaliar habilidades de pensamento crítico. Se alguém ficar seriamente preso a essa pergunta, você ainda a quer na sua equipe? É como contratar um engenheiro que não pode fazer cálculos básicos. Enquanto todos querem ter certeza de que o engenheiro conhece seu cálculo básico - é realmente inegociável que ele o faça.
11138 Jonathan Henson
2

Pedir a alguém para resolver um problema sem dar a eles a capacidade de obter feedback sobre sua solução é uma abordagem questionável, porque eles não têm permissão para melhorar.

Todo esse teste nos diz que você não demonstrou habilidades muito boas na solução de problemas "top-of-the-head".

Esse poderia ser um dos elementos na decisão de contratar ou não você, mas para mim definitivamente não deve ser o único.

Se eles tivessem fornecido a você um ambiente de execução ou teste de unidade, os erros cometidos teriam sido menos desculpáveis.

guillaume31
fonte
1
Há um tempo e um lugar para melhorar suas habilidades, mas não é a entrevista de emprego.
RokL
Você implica que um recrutador não deve se preocupar com a capacidade do candidato para melhorar a si próprio?
precisa
1
Melhorar-se ocorre em escalas de tempo superiores a uma hora. Não é importante para o recrutador.
Whatsisname
Eu acho que, dada a facilidade do problema, eu não deveria ter cometido nenhum erro, apesar de estar sob estresse. Dito isto, acho que há motivos para "melhorias" em problemas como esse, se o entrevistador empurra um pouco o candidato. Mesmo dizendo algo tão simples como "você acha que poderia melhorar isso?" dará ao candidato uma dica de que algo não está certo ou que ele / ela poderia fazer melhor. Eu não tenho esse comentário.
21312 j ja_programmer
@ whatsisname: Eu acho que deveria ser importante para o recrutador, mas não da maneira que você imagina. Se o candidato for recusado, o recrutador precisará de feedback para entender por que, para que ele possa apresentar melhores candidatos à empresa no futuro e instruir esse candidato sobre como eles podem se tornar um candidato mais forte para o futuro. Eu acho que há espaço para benefício mútuo lá.
Alroc