FizzBuzz - sério? [fechadas]

60

Quando se trata de perguntas de "teste de entrevista", o assunto do FizzBuzz geralmente aparece. Há também um post sobre Horror em codificação .

Agora, se você se incomoda em ler sites como esse, provavelmente é menos provável que você esteja no grupo demográfico de programadores que considerariam o FizzBuzz nada além de trivial.

Mas é realmente verdade que 99% dos programadores terão dificuldades com isso?

Realmente?

Qual é a evidência para apoiar isso?

Alguns exemplos da vida real seriam muito úteis para responder a essa pergunta.

DanSingerman
fonte
57
Não é 99% dos programadores, é 99,5% dos candidatos (muitos dos quais não são programadores).
Webbiedave 29/10/10
4
Eu não acreditei até conseguir uma entrevista - depois consegui o emprego e depois conversei com o CEO sobre o assunto. Aparentemente, 99% está certo. Oo
Fishtoaster
3
Eu sempre pensei que perguntas efervescentes eram um mito, ou talvez apenas para iniciantes recém-formados na faculdade, mas um dia fui perguntado de fato em uma entrevista. Sim, muitos candidatos realmente têm problemas com isso?
darenw
2
Rotineiramente, dou o teste do FizzBuzz em entrevistas e rotineiramente as pessoas falham. Um designer gráfico passou um dia embora ..... Surpreendeu-me um pouco :)
Brandon Wamboldt
4
@ Rogue Coder - Ei, não somos estúpidos, apenas estranhos. E a maioria de nós é péssima em matemática.
Inaimathi 13/11

Respostas:

46

99%? Não. Uma porcentagem significativa? Sim. Da minha própria experiência direta de entrevistar pessoas, posso testemunhar isso. Pode parecer insignificante para você, mas há muitas pessoas no campo da programação que tentaram mais ou menos passar por anos e se candidatam a cargos que não são de nível de entrada e não são bem-sucedidas.

Mesmo que você consiga resolvê-lo facilmente, mas você me dá uma enorme estática sobre ser convidado a fazer uma tarefa tão insignificante contará contra você. Estar em equipe significa ter que fazer coisas que você pode não gostar, mas que são necessárias. Se logo de cara, antes mesmo de começarmos a trabalhar juntos, você acha que seria melhor tentar afirmar seu status especial de estar acima de fazer algo que eu pedi para você, então isso funcionará como uma marca contra você.

Eu não me importo necessariamente com o quão elegante é a sua solução (embora isso seria bom), mas ver você dar uma facada no quadro branco e falar o caminho mostra-me que você está pelo menos disposto a dar uma facada nele . Se você ficar indignado e disser algo como "Sou um solucionador de problemas, não um macaco de código!" então você será derrubado.

Já tive entrevistados que se recusam a começar a tentar. Simplesmente recuse. Não. Não vai fazer isso. Faço mais uma ou duas perguntas educadas, agradeço o tempo delas e encerro a entrevista.

Eu digo isso como gerente e desenvolvedor.

Todd Williamson
fonte
11
Quais são os motivos deles para se recusar a tentar?
11138 Jon Hopkins
3
Eu nunca perguntei diretamente a eles. Após a segunda recusa, eu faria mais algumas perguntas e depois encerraria a entrevista. Se eu ia adivinhar, seria porque eles estavam nervosos demais para tentar (se eu estiver sendo caridoso) ou que eles não possam de fato descobrir isso imediatamente (se eu estou sendo mais cínico).
Todd Williamson
11
Conheço um cara que se recusa a codificar em entrevistas. Ele também se recusa a se comprometer com a memória de qualquer coisa que possa pesquisar em alguns segundos no Google. Ele é um "solucionador de problemas".
kirk.burleson
4
Por outro lado, a codificação do quadro branco é um problema que o entrevistador oferece a você ... que precisa ser resolvido, talvez? Para mim, recusar-se a codificar na entrevista é equivalente a recusar resolver um problema que o entrevistador possui. Daí a contradição com o termo "solucionador de problemas" e é mais como o cara é um "recusador de problemas".
Spoike 07/07
@ Spike: não, porque os solucionadores de problemas não precisam conhecer a sintaxe de nenhuma linguagem de programação, agora precisam?
Pierre Arlaud
25

Eu acho que 99% dos programadores que se candidatam a um emprego (e não o conseguem) podem ter dificuldades. Mas não 99% dos programadores que estão produtivamente mantendo um emprego.

Essa é a natureza do nosso processo moderno de busca de emprego. Muitas pessoas que se inscrevem não são qualificadas.

Esse post sobre Coding Horror também fala da maneira como ensinamos Ciência da Computação atualmente. No passado (principalmente no MIT), você era obrigado a aprender coisas como o Lisp, que praticamente exige que você compreenda conceitos como recursão.

Atualmente, as pessoas aprendem Java porque ele é amplamente usado na indústria, e o foco mudou para a sintaxe, em vez de pensar profundamente em programação. Eu não gosto de Java; de fato, acho que é a primeira linguagem de programação ideal. Mas eu não vi meus instrutores ensinarem princípios de programação profundos com ele.

Robert Harvey
fonte
11
Sim, acho que nosso sistema educacional (pelo menos nos EUA) é uma grande parte disso. Conheço alguém que se formou em Programação de Software por dois anos e se formou com distinção e não sabia ler ou escrever código.
24410 Rachel
8
O argumento contra o ensino de Java é fraco. Os conceitos podem ser ensinados na maioria das línguas (a recusa é facilmente escrita em Java, por exemplo). Não discordo que o ensino dos conceitos ensinados esteja ficando mais fraco, mas não o culpo arbitrariamente na linguagem de implementação.
Steven Evers
11
Oh, coisas como Recursão são ensinadas, elas simplesmente não se acostumam. Você obtém a mesma nota por escrever uma declaração IF de 100 linhas que por escrever uma função recursiva (pelo menos você fez para onde eu fui), e a declaração IF de 100 linhas é mais fácil de escrever quando você está com pressa (ou seja, você tenho pulado fazendo sua lição de casa até 5min antes que você precisa para transformá-lo em)
Rachel
11
@SnOrfus: Nem culpo o Java. Não argumentei contra o ensino de Java. Sim, você pode ensinar esses conceitos em Java, mas eu não vi isso acontecer, não nas aulas de Java que fiz, de qualquer maneira. Dito isto, o MIT originalmente escolheu o Scheme para suas aulas de programação introdutórias, porque possui uma sintaxe muito simples, então você começa a pensar em conceitos de programação cedo, sem precisar se concentrar muito na sintaxe da linguagem.
Robert Harvey
4
Quem diabos vai para uma universidade onde eles "ensinam Java". As escolas de idiomas de programação são pouco úteis (independentemente de serem Java, C ++, Lisp ou o que for); é isso que você tem nos EUA? Onde eu estudei CS, você mais ou menos ensinou-se a linguagem de prog conforme necessário (uma exceção seria a classe Paradigmas, eu acho). Os cursos universitários ensinavam matemática, teoria de CS, múltiplos paradigmas de programação, cálculo, etc. Qualquer pessoa que se formara pode facilmente resolver o FizzBuzz, porque tivemos que resolver problemas mais difíceis apenas para passar nos cursos.
Andres F.
20

Eu odeio dizer isso, mas

A principal razão pela qual eu vi perguntas de programação não serem respondidas é culpa do autor da pergunta e não da pessoa que responde.

Lembro-me claramente de uma entrevista em que me perguntaram como criar um algoritmo de pesquisa de coleção específico que seria executado em tempo constante (mesmo número de pesquisas, independentemente de quantos itens da coleção). Eu me atrapalhei e me atrapalhei por 20 minutos antes de desistir. Foi então que esse gênio da entrevista começou a demonstrar a resposta como algo que operava em tempo quase constante, mas ainda não constante. Um pouco como dizer "Dê-me uma resposta igual a zero" e depois aceitar 0,1.

Além disso, já vi muitos casos em que alguém entrevistando faz uma pergunta que não atende aos seguintes critérios:

  1. Eles conhecem todas as respostas corretas possíveis.
  2. Eles sabem por que as respostas corretas estão corretas.
  3. Eles sabem como fornecer informações suficientes sem dar a resposta.
  4. As questões de "solução de problemas" não se baseiam no conhecimento de um fato não revelado (esse é o maior problema que já vi).
  5. Levaria menos de um minuto para escrever a resposta se você não tivesse que descobrir. Se levar apenas 5 minutos para digitar o código, realmente é necessário mais resolução de problemas do que pode caber na parte verbal da entrevista.
  6. As perguntas são baseadas em mais do que apenas "Um problema que encontrei uma vez ou fui informado na escola e, portanto, você deve saber como resolvê-lo agora ". Aposto que você teve mais de 2 minutos para responder, por que você não está dando ao candidato a mesma cortesia?

Sério (1), acho idiota pedir às pessoas que escrevam código na parte verbal de uma entrevista.

Sério (2), acho que entrevistar pessoas sem pedir que elas escrevam código também é estúpido.

Sério (3), você deve dar a eles "lição de casa", pedir que tragam amostras de código ou fornecer um laptop e algumas perguntas e um escritório silencioso para trabalhar com eles. Depois, deixe-os em paz enquanto trabalham neles. Eu geralmente uso a última abordagem, pois limita a capacidade de obter ajuda externa (trapaça) e posso cronometrar.

MIA
fonte
Você teve uma discussão com o entrevistador explicando por que a solução deles não era constante? Se eu fosse o entrevistador e você fosse capaz de me convencer de maneira sucinta e sem malícia, eu estava errado em contratar você imediatamente.
Nemi12 /
11
@ Nemi - Sim, eu fiz. A pessoa em questão não possuía autoridade para contratar, mas recebi uma oferta no cargo.
MIA
8
int? result; for (int i = 0; i < int.MaxValue; i++) { T item = (i < array.Length) ? array[i] : someDummyItem; if (item == whatWereLookingFor) result = i; } return result;- constante time :)
configurador
Corrija-me se estiver errado, mas acho que as tabelas de hash têm tempos de acesso constantes, supondo que sejam feitas corretamente e que não haja colisões. Portanto, uma pesquisa usando uma função hash deve ser possível em tempo constante.
Trylks
Hashes podem ter colisões. É por isso que geralmente é declarado como tempo constante amortizado.
Rig
10

Tudo o que você precisa fazer é pesquisar no FizzBuzz. Houve uma enorme onda de postagens nele. De um modo geral, o blogueiro disse "Eu disse às pessoas para escrevê-lo em [algum idioma] e aqui estão os tipos de erros que eles cometeram:" e depois listaram algumas armadilhas. A diversão começa nos comentários em que as pessoas dizem "ha! Isso é trivial em [algum outro idioma], tudo o que você precisa escrever é o seguinte:" seguido pelo código. O próximo comentário invariavelmente encontra erros nesse primeiro. Parece que alguns desenvolvedores muito bons não acertam na primeira vez, em qualquer idioma. Alguns dos erros:

  • Eu pedi 1 a 100 e você fez 1 a 99 ou 0 a 99
  • bagunçando se o número deve ser impresso juntamente com fizz e / ou buzz
  • desacordos sobre "fizzbuzz" vs "fizz-buzz"
  • otimizações perdidas, como comparar duas vezes quando uma vez faria
  • muito mais

Quando estou contratando, peço às pessoas que codifiquem no quadro branco para mim, nada tão complicado (eu sei, você não acha que é complicado) e muitos candidatos falham completamente. Quero dizer como escrever If, Then, End If ao estilo vb, mas colocar chaves também (só para garantir que eu acho) ou escrever C # (e perguntar primeiro, C #?), Mas não ter um ponto e vírgula em lugar nenhum. Não me inicie em erros de lógica!

Kate Gregory
fonte
2
@ Jeff maioria dos desenvolvedores primeiro escreve algo que não seria compilado. Os bons dão uma olhada e corrigem erros simples de sintaxe. Os programadores estressados, bons ou calmos ok, escrevem uma função, mas não têm código para chamá-la, escrevem algo que não é super otimizado, sofre (e não identifica) um desvio por um ou pode perder um ou dois erros de sintaxe. Programadores horríveis escrevem código que nem chega a ser compilável, faz a coisa totalmente errada, etc. Por exemplo, repetindo para 3 ou 5, pois esses estão em questão, em vez de repetir para 99, 100 ou 101 (ish). código em tudo. Você realmente não pode acreditar até vê-lo.
Kate Gregory
7
Se {"If {} Then {} EndIf" se qualificar totalmente como falha}, então {Seu estilo de entrevista está com defeito e / ou você tem uma sorte incrível de poder demitir um candidato em uma base tão trivial} EndIf
Sparr
7
Eu programo em pelo menos uma dúzia de idiomas mensalmente. Sente-me na frente de um computador e peça para eu trabalhar em um que eu não toquei há um mês e eu cometerei erros assim nos primeiros cinco minutos enquanto eu voltar ao ritmo, geralmente tendo meus erros apontados pelo compilador ou intérprete.
Sparr
2
@ Sparr - com certeza. Portanto, no quadro branco, se eu pedir para você dar uma olhada, você provavelmente o verá e dirá "oops - eu uso muitos idiomas". Caso contrário, direi "em que idioma você escreveu isso?" e então você vai. Não é uma pergunta complicada ou uma armadilha. Na verdade, algumas pessoas nunca escreveram código e afirmam que sim. Esse é o ponto de perguntas como esta.
Kate Gregory
2
Mas acho que essas perguntas não são boas para isso. Eu não sabia dizer, cinco minutos antes do início desse tópico, se o VB exigia chaves entre blocos de código. Eu poderia ter lhe dito que o If / Then / EndIf se parecia principalmente com o VB [.Net]. E escrevo código no VB por ... cerca de duas horas a cada três meses (tarefas rentacoder.com, nunca aceito trabalhos de VB reais, odeio).
Sparr 3/11/10
10

Eu li o artigo sobre Coding Horror que você mencionou, e minha opinião é que Jeff está certo ... mas quando foi a última vez que ele foi entrevistado?

Quando você é entrevistado, geralmente está estressado e muitas vezes precisa responder a perguntas teóricas (sem inteligência, sem google, sem recarregador, ... apenas sua memória perturbada pelo estresse). É o mesmo nos testes. O estresse não ajuda.

Percebi que a única maneira de saber se alguém é adequado para uma posição é trabalhar com ele por um tempo ... Pegue as últimas 10 pessoas que você contratou em 100 (talvez mais), quanto foi realmente bom contratar???

Um empregador deve contratar um solucionador de problemas, não um macaco de código que saiba sobre módulos.

Você não pode testar "por um tempo todos os candidatos", portanto é necessário entrevistá-los. É por isso que concentro minhas perguntas nisso (resolução de problemas) e faço a verificação de referências anteriores.

Minha opinião é que o FizzBuzz é perigoso para a empresa que procura desenvolvedores para sustentar seu crescimento.


fonte
28
O problema aqui é que o FizzBuzz é uma pergunta tão superficial que, se você não pode responder, mesmo sob estresse, merece que as pessoas riam na sua cara se você se chamar de "programador". Se fosse algo um pouco mais complicado, como "implementar um tipo de bolha", essas desculpas e preocupações seriam justificadas, mas não para o FizzBuzz.
dsimcha
23
Fizzbuzz é bom no que é para: filtrar as pessoas que conhecem nada do povo algo . E saber de algo ainda pode não ser suficiente para fazer o trabalho. Não é um teste de decisão de contratação, é um teste de "você vai desperdiçar meu tempo em uma entrevista". Alguns gerentes de contratação tentam levar o fizzbuzz longe demais para que ele faça seu trabalho por eles.
Steven Evers
31
Meu Deus, módulo não é algum tipo de operador esotérico. É uma operação principal com a qual todos os desenvolvedores devem ter experiência se quiserem se chamar programadores profissionais. Independentemente disso, se alguém pode escrever o FizzBuzz, isso não significa que você o contrate. É apenas um ponto de partida rápido para ver se essa pessoa pode tentar planejar o fluxo de controle necessário para concluir a tarefa.
Webbiedave 29/10/10
12
Eu acho que o FizzBuzz é útil simplesmente porque é muito trivial. Requer um loop for, duas instruções if, modulo e print. Qualquer pessoa com alguma experiência de programação significativa deve ser capaz de fazer isso sem pensar. Se alguém luta contra isso em uma entrevista, considero isso um teste decisivo perfeitamente válido.
Adam Crossland
11
@ snorfus: Arquivado em "problema de outra pessoa". Eu prefiro sentir falta do barco de um bom desenvolvedor com ansiedade social incapacitante do que perder um tempo precioso e treinamento com dinheiro e aguardar resultados de alguém sem aptidão para programar. Não consegue lidar com outros seres humanos? Consulte um terapeuta.
Aaronaught 29/10/10
10

Recentemente, fui encarregado de entrevistar mais de 50 programadores para uma posição sênior, onde eles trabalhariam principalmente com PHP.

Joguei o problema do fizzbuzz no exame de triagem, principalmente para me divertir e porque queria dez boas perguntas e apenas nove. Minha intenção, na época, era mostrar às pessoas que também podemos nos divertir, mesmo nas perguntas da entrevista.

80% dos candidatos resolveram o problema, mas não usaram o operador de módulo.

15% dos candidatos não conseguiram resolver o problema.

5% dos candidatos resolveram o problema usando o operador de módulo.

Embora minha amostragem seja bastante limitada (50 solicitantes de um país), posso dizer que:

95% deles tinham um BS ou superior em um currículo de CS (as universidades daqui competem tentando fazer o CS parecer mais espetacular).

Fiquei verdadeiramente impressionado. Bem, assustado .. mas espantado. Não achei que chegaria perto de reproduzir os resultados, já que o problema se tornou tão popular. Isso me mostra que 5% dos meus candidatos podem não ser super programadores, mas pelo menos lêem blogs relacionados à programação.

Tim Post
fonte
Eu pensava que o uso do modulador opertor era o mais óbvio; estou surpreso que 95% das pessoas que resolveram o problema com sucesso usassem outra coisa. Talvez seja porque eles eram recém-formados e fizeram as contas por si mesmos?
jmoreno
Eu nunca aprendi o operador de módulo em nenhuma das minhas aulas. Se eu não tivesse feito estágios ou passado algum tempo contribuindo para projetos de código aberto, nunca teria aprendido isso até entrar na indústria. Além disso, em uma das minhas aulas de introdução à ciência da computação, fui ensinado que o operador ternário é uma prática ruim de codificação, porque é muito confusa e difícil de ler.
Robert Fraser
O que eles usaram em vez do operador restante? x - (x/y)*y?
CodesInChaos
9

Na minha última rodada de contratações, tive 3 trabalhadores da construção civil com 0, repito zero, educação ou experiência em programação para uma posição de desenvolvedor de software. * Então esse é o fundo do barril. Se você assumir uma distribuição normal de habilidade, poderá ver como o nível médio de habilidade será bastante baixo e até 'acima da média' (entre os candidatos) ainda será relativamente ruim.

Agora, se você está zombando apenas dos candidatos que tinham o que parecia ser uma habilidade de programação, verá que agora tem:

  1. mentirosos
  2. entusiastas de chavão (li um artigo sobre .NET uma vez)
  3. programadores reais ruins
  4. pessoas que usaram uma tecnologia para concluir um projeto, mas não aprenderam sobre ela (consulte perguntas efervescentes sobre o impossível de identificá-las)

Além disso, algumas perguntas 'fizzbuzz' que eu já vi são específicas do domínio. Você pode desenvolver progressivamente com uma linguagem / estrutura x por vários anos (daí z anos de experiência com x) e não se deparar com certas partes (desenvolvedores de bibliotecas que não conhecem muito sobre o desenvolvimento de componentes de interface do usuário, por exemplo).

Da mesma forma, muitos desenvolvedores fazem o desenvolvimento de manutenção atualmente, portanto, suas habilidades de arquitetura / design podem ser fracas em algumas áreas.

Agora, não tenho certeza se 99% é preciso, mas o IME ainda é bastante alto. Pelo menos na faixa de 80%.

* Não, nós não ligamos ou sequer demos uma segunda olhada nesses aplicativos.

Steven Evers
fonte
3
Tivemos uma situação semelhante, mas como nosso contrato com o cliente dizia que tínhamos quatro desenvolvedores em tempo integral atribuídos ao projeto, e o projeto estava basicamente concluído, o pendurado sheetrock aprendeu a programar o dólar do cliente pelos 3 semanas restantes no contrato.
Tangurena
Também vi algo assim acontecer quando algum programa de benefícios governamentais / seguro-desemprego exige que a pessoa que recebe o benefício aplique a um certo número de empregos por semana. Mesmo quando esses programas têm algum tipo de requisito nominal ao qual o destinatário se candidata aos trabalhos para os quais eles são realmente qualificados, os recursos para avaliar para quais empregos eles são qualificados e para aplicar essa parte específica do requisito "candidatar-se a empregos" são muito limitados .
Daniel Martin
8

Sim com certeza. Provavelmente não 99%, mas ainda bem alto. Eu costumava entrevistar estudantes de ciência da computação para estágios e contratações em período integral. Eu entrevistaria cerca de 25 alunos em uma faculdade. Disseram-nos para não fazer as mesmas perguntas, porque os alunos conversaram. Eu aprendi rapidamente que isso não importava, porque eu teria apenas 3 ou 4 alunos dos 25 que poderiam responder à minha primeira pergunta. "Escreva strcmp"

Pedi que escrevessem uma função para comparar duas strings. Talvez use a função para classificar palavras para um dicionário. Você ficaria surpreso com o número de alunos que não entenderam como comparar duas palavras, muito menos saber como escrever a função. E alguns desses estudantes afirmaram ter todos os A's no CSc.

A coisa é programar é MUITO DIFÍCIL. Muitas pessoas gostam de pensar que sabem como programar, mas não sabem.

ChrisMcB
fonte
3
A inflação de notas é péssima, desperdiça tempo para todos!
darenw
8

Alguns pensamentos:

  • Eu não resistiria a alguém se o programa tivesse alguns erros, mas eles claramente tinham a idéia certa. A depuração faz parte da programação.

  • Acho triste que muitas pessoas estejam se candidatando a empregos que não sabem que não podem fazer. Parece-me um problema com a economia.

  • É realmente fácil fazer perguntas ruins às pessoas, onde a única resposta "correta" é aquela que o entrevistador daria.

Mike Dunlavey
fonte
2
Sobre o segundo ponto ... tendo passado muito tempo contemplando minha próxima mudança de carreira, estudando várias indústrias e procurando emprego, foi uma grande dificuldade tentar avaliar meu próprio nível de competência em muitas coisas diferentes. Aparentemente, este é um grande, grande problema para (quase) todos.
darenw
@ DarenW: Você tem minha simpatia. Eu acho que é importante saber do que você gosta e trabalhar a partir daí. Pessoalmente, eu sempre gostei da escola e nunca duvidei do meu interesse em engenharia. Meus irmãos quase têm certeza do que estão fazendo. Um não é, e é fácil ver que é uma luta. Sua página inicial indica um interesse na interseção entre ciência e arte - isso é ótimo. Algumas pessoas tiveram más experiências na juventude, e isso pode consumir toda a sua energia agora.
Mike Dunlavey
7

Esse teste cobre muito bem várias coisas que eu quero saber sobre um programador que eu possa contratar:

  1. Você pode mesmo programar?
  2. Você pode escrever um programa a partir do zero (porque nem todos podem !!!)
  3. Você pode resolver um problema sem mais -pensar-lo.

Para elaborar sobre o último ponto, existem inúmeras soluções para o efervescimento. Você procura legibilidade? Rapidez? Brevidade? Você tenta terminar de escrever o programa rapidamente? Como um programador ataca esse problema simples é muito revelador. Se um programador não pode escolher uma solução e vê-la até o fim, o que isso diz sobre como essa pessoa se sairá em uma tarefa real?


fonte
6

Infelizmente, muitas pessoas com currículos com aparência impressionante parecem não ter habilidades básicas de programação. Eu já vi muitos casos em que as pessoas que listam C e C ++ em seus currículos não conseguiam responder perguntas básicas sobre indicadores.

Dima
fonte
3

Há dois tipos de pessoas que eu espero que o FizzBuzz me ajude a evitar.

  1. Chancadores sem nenhum conhecimento de programação ou nenhum conhecimento relevante de programação. Geralmente, você pode reconhecê-los no currículo, mas nem sempre, e dar a eles uma tarefa simples de programação é uma boa maneira de deixar claro que eles não são programadores.
  2. Os graduados da escola em Java, que concluíram um curso ou diploma de programação, mas não sabem como programar. Essas pessoas podem ser mais difíceis de filtrar porque podem falar sobre teoria, mas simplesmente não possuem habilidades práticas. Colocar um problema simples na frente deles e pedir uma solução e uma explicação da solução é uma maneira muito boa de ver a diferença entre um Petra Java e um Paula Bean.

Em ambos os casos, eu realmente não me importo com uma implementação perfeita. O teste que você precisa fazer com as pessoas que se candidatam a empregos de desenvolvedor é que elas podem programar.

Dito isto, eu provavelmente não me incomodaria com esse teste específico por várias razões agora. Em primeiro lugar, é muito conhecido e qualquer um dos grupos acima tentaria rapidamente. Em segundo lugar, eu preferiria usar as perguntas na tela do telefone de Steve Yegge para filtrar os não programadores antes de chegarmos até eles. Se alguém reconhecesse essas perguntas, isso implicaria que eles leram o blog de Steve Yegge, o que sugeriria que eles estivessem no 1% dos desenvolvedores que levam sua profissão a sério e certamente garantem uma entrevista. Da mesma forma, se alguém tivesse um bom representante aqui ou no SO, eu estaria inclinado a entrevistá-lo.

glenatron
fonte
A) Quão bom é "bom"? B) Você está contratando? :)
Sparr 30/10/10
3

É difícil acreditar que os desenvolvedores não possam codificar o FizzBuzz até que você veja os "nove para cinco" que copiam e colam seu trabalho juntos e tentam, de maneira concisa, não escrever código. Eu não podia acreditar quando ouvi um de nossos desenvolvedores seniores ensinar um desenvolvedor C #, com 3 anos de "experiência", como usar um Dicionário. Interfaces? Padrões de design? stdout? YAGNI? Minha liderança nunca tinha ouvido falar de YAGNI! É incrível o que essas pessoas não sabem.

Eu acredito nisso agora. Eu também acho que há muitos desenvolvedores apenas fazendo o suficiente.

kirk.burleson
fonte
3

Eu acho que parte do motivo de ser uma pergunta tão popular é porque existe mais de uma maneira de respondê-la e, dependendo de qual caminho o candidato escolher, poderá fornecer uma visão sobre como eles codificam. Alguns ótimos exemplos podem ser vistos aqui se você tiver 10K repetições no Stack Overflow.

Quanto à estatística de 99%, verifique de onde vem esse número. Provavelmente é tendencioso. Se é baseado em programadores iniciantes que estão entrevistando para o primeiro emprego, sim, posso ver que isso é possível, especialmente se a maioria de seus candidatos estiver saindo diretamente da faculdade. Na verdade, posso pensar em alguém que provavelmente escreveria uma declaração de condição 100 como solução para esse problema.

Rachel
fonte
3
Suspeito que o número 99% aponte para a verdade (a verdade recursiva, não menos) da afirmação de que 87% de todas as estatísticas são feitas no local.
Adam Crossland
11
@ Adam Crossland: 100% das estatísticas sobre estatísticas também são feitas no local.
Macha
Ainda assim, parece horrível que alguém não tenha conseguido resolver o problema da faculdade. Se eles não podem fazer isso, o que eles podem fazer?
Morgan Herlocker 02/09/11
2
@ironcode Eu fui para a escola com alguém que não podia nem começar a entender o fizzbuzz ... Eu ficaria surpreso se eles pudessem escrever algo que imprimisse 100 linhas com os valores do fizzbuzz codificados. Eles se formaram com honras.
Rachel
2

Acho a afirmação de que 99% dos programadores não conseguem programar ou resolver um teste simples de codificação altamente exagerado. No caso do teste do FizzBuzz, você já encontrou esse problema antes e pode resolvê-lo facilmente com o operador do módulo ou você não o encontrou antes e terá dificuldades. Não diz nada ao entrevistador sobre suas habilidades de programação.

Eu acho que o problema com muitos programadores aparentemente deixando uma má impressão em uma entrevista reside na natureza dos métodos técnicos de entrevista. Os entrevistadores esperam que os candidatos memorizem e reproduzam instantaneamente a sintaxe da linguagem, os detalhes e a complexidade computacional das estruturas de dados, arquiteturas de hardware, padrões de design etc. etc. A área de ciência da computação / engenharia de software é vasta. É impossível e insensível tentar memorizar tudo.

No mundo real, a chave é ser capaz de entender o problema de programação / design atribuído a você e saber onde encontrar informações (seu IDE, páginas de manual, livros, google, etc.) como resolver seu problema. Isso é algo que os entrevistadores nunca testam.

marca
fonte
14
Você percebe como é fácil o FizzBuzz? Você não precisa ter encontrado. Se você luta, considere uma mudança de carreira.
John Smith
Mas pode ser resolvido sem módulo usando a divisão. Uma solução correta usando / em vez de% funcionaria para mim. Então eles precisam entender matemática muito básica e programação muito básica.
Almo
0

Eu ainda sou um programador relativamente júnior (eu tenho codificado por dinheiro por ~ 2 anos e codificado em alguma capacidade profissional como uma responsabilidade secundária por cerca de 2 antes disso), portanto, use grãos suficientes de sal.

Eu tenho alguma experiência fazendo uma primeira tela para codificadores para um projeto de grande empresa (nós meio que sabíamos que o projeto estava condenado, mas, ei, eles queriam pagar de qualquer maneira). Como o único programador da empresa que contratou, tive a tarefa de revisar currículos e selecionar candidatos.

Isso era para um projeto do governo e, talvez, provavelmente não atraísse os candidatos mais talentosos, mas eu não recebi um aplicativo de ninguém com uma conta no Github que realmente tinha o código mostrado, nem de qualquer pessoa que tivesse um portfólio, então usei o fizzbuzz ( literalmente o problema exato) como uma primeira passagem para quem parecesse capaz de programar.

Eu o antecipei com um pseudo-pedido de desculpas afirmando que eu sabia que era estúpido, mas que eu só queria ver qualquer código em funcionamento, e se eles quisessem, poderiam enviar outro exemplo de valor igual ou maior ou realmente qualquer coisa, mas esse efervescimento seria suficiente.

O resultado: não recebi uma resposta realmente correta, o que é impressionante, considerando o volume de respostas na Internet. Ninguém nem se deu ao trabalho de plagiar. Tivemos que apenas contratar pessoas que haviam trabalhado anteriormente nas iterações anteriores com falha do projeto.

Após o choque inicial do exercício e o desapontamento sobre o quão estragado foi o software / contratação do governo, me senti muito melhor com minhas próprias habilidades, com vitórias tão pequenas?

Edit: Por incorreto, não quero dizer um erro de um por um (ou seja, eu pedi entre 100 e 99) ou algum outro bug inocente que seja uma solução fácil. Quero dizer, não funcional, ou não será executado / compilado / etc ou mostrou claramente que o problema simplesmente não foi lido e compreendido, também uma parte significativa retirou o aplicativo e nenhum outro código foi enviado.

BSpiros
fonte