Na última entrevista que participei, me pediram para resolver um quebra-cabeça em que era esperado medir exatamente blá litros de água em dois baldes com capacidade - blá e blá, respectivamente. Não consegui resolver o quebra-cabeça em um determinado período (~ 5 minutos).
O entrevistador ficou um pouco decepcionado e disse que um programador precisa ter "essas" habilidades. Eu não entendi quais habilidades ele estava falando.
Sempre me senti estranho com esse tipo de quebra-cabeça que normalmente é solicitado nas entrevistas de emprego de programação. Não entendo qual é a conexão entre esses quebra-cabeças e a programação. Exatamente quais habilidades os entrevistadores pretendem avaliar com esses quebra-cabeças?
Respostas:
Algumas pessoas perguntam a eles na tentativa de avaliar sua capacidade e abordagem para resolver problemas. Pessoalmente, não acho que esses quebra-cabeças forneçam um indicador preciso. No "mundo real", você tem mais de cinco minutos para descobrir se está lidando com um problema de empacotar uma caixa versus uma mochila , por exemplo. Inicialmente, às vezes é fácil entender mal o problema em questão até que você esteja no meio da aplicação da solução errada. Isso acontece com pessoas com 1, 5, 10 ou mesmo 20 anos de experiência.
Os melhores 'enigmas' da entrevista são aqueles em que você se senta em um computador para resolver um problema no domínio em que deseja obter conhecimentos. Também não gosto do pensamento "Bem, um programador deve ser capaz de ..." porque não leva em consideração que as pessoas ficam ansiosas quando são atingidas por algo inesperado em um ambiente que já é estressante. Claro, você poderia resolver isso se tivesse tempo para pensar sobre isso ... e talvez pudesse resolver mais rápido se percebesse que sua vida terminaria se não o fizesse. Você quer trabalhar em algum lugar onde sua vida acabará se você não conseguir resolver os problemas em cinco minutos ? Você será demitido se não puder ?
Todos os grandes programadores também devem ser campeões em solucionadores de sudoku? Tenho certeza de que existem muitas, mas não é um tipo de pré-requisito para competência.
Não estou dizendo que você não deve ser testado em como aborda os problemas, mas os testes devem ser divertidos e convidam o 'melhor' que o candidato deve dar, considerando sua área de especialização. Provar que você é tão inteligente quanto um personagem que Bruce Willis retrata parece meio sem sentido, considerando que os produtores gastaram uma soma muito para obter essa cena apenas direita.
Em outras palavras, se você detectar que está sendo entrevistado por alguém que tem pouca compreensão sobre o que realmente estará fazendo , peça licença para ir ao banheiro e nunca mais voltar.
fonte
excuse yourself to go to the restroom and never return
!A Microsoft começou a usar essas perguntas no início dos anos 80. À medida que a Microsoft se tornou notavelmente bem-sucedida, outras empresas começaram a copiá-las, mas alguns pontos-chave se perderam na tradução.
Naquela época, a Microsoft tentava ocupar muitos cargos técnicos, mas não de programação: redatores técnicos, testadores, suporte por telefone etc. Esses não eram trabalhos comuns na época e era difícil conseguir pessoas com experiência real nessas áreas. encontrar. Como alternativa, a Microsoft achou que eles poderiam contratar pessoas realmente inteligentes, inteligentes e flexíveis e treiná-las no trabalho. Como essas pessoas não tinham formação em programação, fazer perguntas sobre a programação na entrevista era inútil. Os enigmas foram escolhidos para tentar identificar pessoas inteligentes e com habilidades analíticas excepcionalmente boas. Os programadores geralmente enfrentavam problemas de programação no quadro branco, embora também pudessem receber enigmas durante o almoço ou o jantar.
Essas perguntas nunca foram feitas para serem aprovadas. Eles pretendiam ser o início de uma conversa sobre como você resolveria o problema e como pensaria em problemas que nunca havia visto antes. A única maneira certa de "falhar" era recusar-se a tentar resolver o problema. Naquela época, essa era uma estratégia inovadora e você não podia procurar as perguntas no Google.
Editar:
Algum tempo depois de escrever essa resposta, li The Computer Boys Take Over , uma história da computação institucional nas décadas de 1950 e 1960. Aparentemente, a prática de pedir quebra-cabeças e enigmas de candidatos a trabalhos de programação remonta à década de 1950. Os EUA estavam tentando informatizar seu sistema de defesa aérea e a IBM estimou que precisariam de vários milhares de programadores para fazer o trabalho. A resposta foi chocada e consternada: havia apenas algumas dezenas de "programadores profissionais" em todo o mundo. Várias abordagens foram tentadas: testes abstratos de aptidão em programação, recrutamento de matemáticos como programadores, recrutamento de jogadores de xadrez e solucionadores de palavras cruzadas e triagem de candidatos com enigmas e quebra-cabeças.
Eles acabaram conseguindo recrutar programadores suficientes para concluir o projeto, mas a conclusão foi que nenhum dos métodos de triagem era melhor do que a chance de identificar os recrutas que tiveram notável sucesso como programadores.
fonte
Eles são úteis? Não, na verdade não. Eles eram tão comuns na Microsoft que até eram chamados de "perguntas da Microsoft", e havia livros escritos sobre eles, este é realmente uma boa leitura.
Existem 2 problemas com eles. Em primeiro lugar, se o candidato pesquisar (e ler o livro), ele os conhecerá de qualquer maneira e em segundo lugar, mesmo se puder resolvê-los, como isso mostra que será um bom desenvolvedor / teste / PM.
Por esses motivos, raramente são solicitados na Microsoft. É muito melhor fazer perguntas de codificação ou de resolução de problemas que não exijam uma resposta "enganosa". Em outras palavras, você precisa fazer perguntas que permitam explorar as habilidades e o comportamento do candidato à medida que tentam resolver o problema - como entrevistador, eu quero que ele faça perguntas, encontre soluções e depois volte atrás quando descobrirem um problema, talvez nem encontre uma solução no tempo que eles têm, mas pelo menos resolva-o de maneira sensata. Isso reflete o trabalho da vida real. Eu nunca tive que medir 3 litros usando 2 baldes e uma galinha (ou qualquer que fosse a pergunta).
Dito isso, me fizeram algumas perguntas complicadas no meu tempo e agora me considero um especialista em transportar galinhas e raposas em pequenos barcos e calcular a vida útil de uma mosca que vive em um trem. Eu nunca tive que usar essa informação, mas quem sabe, talvez um dia ....
fonte
Você pode querer ler o livro Como você moveria o Monte Fuji? . Isso entra no raciocínio de que muitas pessoas usam enigmas nas entrevistas, e minha opinião é que é uma combinação de comportamento de culto à carga ( "A Microsoft faz isso, e se queremos ser tão bem-sucedidos quanto eles), é melhor fazermos o que eles querem"). do " ) e trote de fraternidade ( " caramba! ", eu tive que responder a essas perguntas e é melhor você acreditar que o próximo cara terá que responder!" ).
A história dessas perguntas como prática de entrevistas começou com William Shockley na década de 1950. Eles eram um tipo de pergunta razoavelmente comum no Vale do Silício, que os entrevistadores faziam porque outros estavam fazendo (e talvez eles soubessem algo que esse entrevistador não sabia?). Shockley os pretendia como um teste de inteligência, e a pergunta com os dois baldes estava em um dos testes originais de Stanford Binet IQ em 1916.
Possivelmente, as pessoas que fazem a entrevista realmente querem ver como você procura respostas, de modo que serão impossíveis de calcular perguntas, como quantas bombas de gasolina existem na sua cidade. Esses tipos de problemas são problemas de Fermi . Dois posts interessantes de Jeff sobre esse assunto são: A pergunta mais difícil do mundo sobre entrevistas e quão bom é um estimador? Parte III .
Pessoalmente, tenho uma opinião baixa sobre esse tipo de perguntas, pois elas geralmente são usadas por entrevistadores que não sabem o que estão fazendo, nem como procurar desenvolvedores. A menos que você trabalhe para uma empresa que faz quebra-cabeças / enigmas, eles pertencem à pilha da história, junto com "qual é a sua maior fraqueza" (responda a verdade a essa questão e encerre sua entrevista de maneira ruim) ou "por que são tampas de bueiro redondas "(nem todas são).
fonte
Outros forneceram respostas que eu votei como uma obrigação . A razão pela qual escrevo outra resposta é porque o que eu quero dizer provavelmente não se encaixa em um comentário e porque algo precisa ser dito sobre como pode ser uma boa entrevista de emprego em programação.
Na primeira boa entrevista, lembro que conversamos muito, sem pressa. Primeiro por uma hora, por telefone, sobre o design orientado a objetos e os prós e contras de implementá-lo em C ++. Então, no local, conversei com várias pessoas sobre suas práticas de desenvolvimento de software, integração, teste, controle de versão e gerenciamento de configuração, sobre equipes e responsabilidades, sobre tecnologia e design. Foi uma entrevista de um dia inteiro que incluiu almoço com as pessoas que me entrevistaram. Em retrospectiva, tratava-se de me encaixar produtivamente no que eles já estavam fazendo.
Desde então, as boas entrevistas têm sido longas, conversas de uma a duas horas sobre desenvolvimento de software. Não houve perguntas sobre solução de problemas, quebra-cabeças e desafios de codificação.
Se eu fosse entrevistar alguém para um trabalho de programação hoje, continuaria gostando. Gostaria de solicitar opiniões sobre diversos tópicos e deixar de lado a profundidade:
Essas são perguntas com mais de uma resposta e tratam de tópicos sobre os quais um desenvolvedor de software deve ter uma opinião informada. Concordo plenamente com as respostas que mencionam problemas reais anteriores experimentados como um tópico de conversa (não como perguntas).
Os estudos mais científicos sobre desenvolvimento eficaz de software desde a Peopleware dizem que os melhores programadores são aqueles que entendem a dinâmica do desenvolvimento de software, mesmo que não tenham o QI mais alto. Prefiro pegar um novato que está ansioso para aprender do que alguém com
n
anos de experiência que se resumem a1
anos de experiência repetidasn
vezes. Meu preconceito pessoal é para candidatos que tendem a pensar fora da caixa e, ao mesmo tempo, sabem como se encaixar na (atual) caixa (minha).fonte
Eles podem ser úteis na avaliação de habilidades de resolução de problemas , o que é obviamente um dos aspectos principais da programação.
Como entrevistador de muitas pessoas ao longo dos anos, normalmente não faço perguntas do tipo pegadinha, como as que você parece descrever, mas posso muito bem perguntar algo e perguntar "como você resolveria ...".
Minhas expectativas nesse caso são ouvi-lo articular sua abordagem ao problema. Que outros dados você tentaria reunir? Como você testaria suas hipóteses, etc.
fonte
Essas são apenas práticas de contratação de vodu. Outras pessoas fazem essas perguntas para que sintam que deveriam. Eles sabem que não responder à pergunta é "ruim" e responder é "bom", mas não sabem dizer por que além das não respostas, como "um desenvolvedor precisa dessas habilidades". Eles são uma perda de tempo e um indicador de que o entrevistador não é um entrevistador competente.
fonte
Essa é a lógica antiga de que você precisa ter habilidades lógicas básicas; qualquer outra coisa pode ser ensinada. Mas isso não é inteiramente verdade. Ler lógica booleana , condições e loops, não é o mesmo que ser capaz de resolver um quebra-cabeça lógico .
Dito isto, nos dias das linguagens processuais, provavelmente era verdade que alguém que pudesse resolver esses problemas teria uma maior propensão a poder aplicar qualquer problema em termos de opções. Mas, em minha opinião, a programação funcional / OO requer uma mentalidade de engenharia, que é bem diferente (embora não contraditória).
Pessoalmente, não tenho certeza se gostaria de um emprego em uma empresa que ainda achava que a lógica era mais importante do que habilidades práticas de programação.
Isenção de responsabilidade: sou muito bom em quebra-cabeças lógicos e provavelmente não teria começado nesta linha de trabalho sem essa lógica.
fonte
O entrevistador deve estar se referindo às habilidades de resolução de problemas e lógica, que fazem parte do trabalho diário de um programador. Quando houver um problema, você precisará analisá-lo, subdividi-lo e escrever uma solução para ele usando a abordagem mais ideal.
Você pode argumentar quão bem um quebra-cabeça como esse representa sua capacidade de fazer isso. Não vejo o mérito de fazer uma pergunta de quebra-cabeça em vez de apenas fazer um problema de programação da vida real.
fonte
Programar não é escrever linhas de código, é resolver problemas para e de outras pessoas (cliente, usuário, etc.).
Acontece que, para programadores, a solução assume a forma de um programa.
Por isso, é importante ter recursos de solução de problemas e por que é testado.
Dito isto, não tenho certeza de que resolver quebra-cabeças complicados seja a melhor maneira de avaliar alguém.
fonte
Os quebra-cabeças nas entrevistas se enquadram em duas categorias: "quebra-cabeças lógicos" (como o que lhe foi perguntado) e categoria "pense de forma diferente". A categoria pensar de maneira diferente (não tenho certeza, também são chamados de quebra-cabeças laterais?) Geralmente é desse tipo: quantas folhas há nessa árvore? ou Quantos alfaiates estão presentes na sua cidade?
Eu estou bem com "quebra-cabeças lógicos" porque eles têm uma ou talvez duas soluções, no máximo, e podem ser alcançados por uma lógica direta. E acredito que os quebra-cabeças lógicos são bons até certo ponto, porque o processo necessário para resolvê-los é muito parecido com o que um codificador precisa pensar na vida real.
O tipo "pense de maneira diferente" me incomoda sem fim porque eles o forçam a fazer suposições e, em seguida, fazem alguns cálculos com base nas suposições. Simplificando, se seu entrevistador concorda com sua lógica, mas não com suas suposições, ou vice-versa, você perdeu. Há muito espaço para o entrevistador discordar da sua solução.
Quando tomo entrevistas, não pergunto quebra-cabeças lógicos. Motivo: a maioria dos candidatos, mesmo aqueles com 3 a 4 anos de experiência, fracassa ou desiste quando lhes peço para codificar problemas simples de livros didáticos, como séries de Fibonacci ou palíndromos.
O problema dos quebra-cabeças, de qualquer maneira, é que os programadores não tão bons sabem que, apenas procurando soluções para esses quebra-cabeças comuns na rede, podem impressionar os entrevistadores. Pouquíssimas pessoas serão honestas o suficiente para dizer que já conhecem a solução.
fonte
Dois pontos:
A programação é principalmente diferente da resolução de quebra-cabeças. É perfeitamente explicado por Steve McConnell em "Code Complete":
O que? Você não precisa ser superinteligente? Não você não. Ninguém é realmente inteligente o suficiente para programar computadores. O entendimento completo de um programa médio requer uma capacidade quase ilimitada de absorver detalhes e uma capacidade igual de compreendê-los todos ao mesmo tempo. A maneira como você concentra sua inteligência é mais importante do que quanta inteligência você possui. Como o Capítulo 5 mencionou, na palestra do Prêmio Turing de 1972, Edsger Dijkstra entregou um artigo intitulado "O Humilde Programador". Ele argumentou que a maior parte da programação é uma tentativa de compensar o tamanho estritamente limitado de nossos crânios. As pessoas que são melhores em programação são as que percebem quão pequenos são seus cérebros. Eles são humildes. As pessoas que são as piores em programação são as que se recusam a aceitar o fato de que seus cérebros não são iguais à tarefa. Seus egos os impedem de serem grandes programadores. Quanto mais vocêaprenda a compensar seu cérebro pequeno, melhor você será um programador . Quanto mais humilde você for, mais rápido irá melhorar.
Esses quebra-cabeças podem ser úteis durante a entrevista, mas Somente se o entrevistador observar o Processo , não resultará.
Mas, idealmente, os quebra-cabeças deveriam ser mais complicados e relacionados à programação (como um pequeno projeto de 2 horas), na minha opinião. O fato é que os entrevistadores são pessoas e não têm "habilidades de entrevista" perfeitas.
fonte
Existem algumas maneiras diferentes de examinar esses problemas:
Conhecendo uma solução anterior. No filme ... Die Hard with a Vengeance ... explica isso para mim ...? sendo um exemplo de conhecer uma solução para o caso em que os blá são 4,3 e 5, respectivamente. Algumas pessoas poderão aproveitar rapidamente seu conhecimento interno de uma solução passada e adaptá-la, se necessário. Isso é geralmente o que eu acredito que um entrevistador esperaria, o que pode ou não ser uma boa idéia.
Habilidades de improvisação criativa. Esse seria o caso se você não souber uma solução anterior ou mesmo reconhecer o problema como algo que se poderia modelar como uma equação diofantina. Portanto, a questão é a rapidez com que você pode usar o que é fornecido e encontrar uma solução para o problema de maneira criativa, além de explicar por que o que você tem é uma solução válida para o problema.
Pode ser o que faz a pergunta passar de maneira satisfatória, embora em cada caso também haja um pouco de teste das habilidades de comunicação de alguém, como também se pode tentar uma resposta de: "Isso é realmente relevante para a posição em que estou?" aplicando? Quando essas habilidades foram usadas pela última vez? " isso pode levar a um diálogo interessante se o entrevistador se abrir sobre o que exatamente eles querem ver que talvez uma abordagem alternativa possa ser vista como mais eficaz aqui.
fonte
Não é um problema particularmente complicado. Apenas três etapas são necessárias e existem apenas duas opções em cada etapa. Eu ficaria surpreso se algum dos meus colegas fosse incapaz de resolvê-lo em pouco tempo. Não apresentamos esses problemas nas entrevistas, mas acho razoável fazer essas perguntas. Eles são certamente mais úteis do que perguntas detalhadas sobre sintaxe ou bibliotecas.
OTOH, acho que os problemas de programação são mais úteis.
fonte
Você deve se lembrar que não há como saber com absoluta certeza que alguém será bom em um emprego. Especialmente um trabalho de CS, pois muitos desafios que o trabalho pode ter reservado não podem ser previstos.
Portanto, o potencial empregador deve adivinhar seu desempenho futuro.
Graus, recomendações e GPAs podem ser obtidos com tempo / esforço e engenharia social, a experiência de trabalho pode ser embelezada e / ou falsa, e os testes padronizados são francamente básicos demais para serem excessivamente indicativos de capacidade. Portanto, o currículo pode dar uma indicação dos níveis de esforço / compromisso em sua história, mas nada disso diz respeito à sua capacidade real de resolver problemas difíceis que surgem no mundo da ciência da computação. Não consigo pensar em uma maneira melhor de prever esse tipo de habilidade do que alguns bons quebra-cabeças de lógica / matemática / CSy.
Lembre-se de que é um jogo de adivinhação, e a realidade é que todas as coisas são iguais a qualquer um de nós prefere contratar alguém capaz de resolver esses quebra-cabeças do que aquele que não pode.
Sim, você pode estudar quebra-cabeças de entrevistas, mas acho que você ficará queimado se o quebra-cabeça fornecido não corresponder aos que você estuda ... e desde que não memorize os quebra-cabeças e suas soluções, talvez estudando os quebra-cabeças eles mesmos farão de você uma pessoa mais inteligente de uma maneira real, como qualquer educação real deveria.
fonte