Hoje realizei minha primeira entrevista com possíveis estagiários. Embora isso tenha sido principalmente perguntas abertas, tive algumas tarefas de programação triviais para eles:
- Escreva uma função que retorne true se os lados do triângulo (todos os números inteiros) a, bec forem representativos de um triângulo retângulo .
- FizzBuzz.
- Calcule o N-ésimo elemento de Fibonacci usando recursão (se eles não soubessem o que era Fibonacci , eu escreveria para eles a definição F (n) = F (n-1) + F (n-2); F (1) = 1; F (0) = 1).
- Implementar lista de estruturas para funções inteiras e de gravação para revertê-las.
Obviamente, essas são tarefas muito fáceis e eu não estava preparado para alguém que não as resolvesse.
Como devo agir quando eles lutam com essas perguntas? Devo desistir da resposta? Dar dica por dica (eu fiz isso e acabei resolvendo o problema sozinho)? Ou apenas seguir em frente (ou talvez apenas parar) com a entrevista?
ps. Por ter problemas com perguntas, não quero ter um bug, quero dizer, se eles nem conseguem começar. Este foi um caso com as perguntas de Fibonacci e List.
interview
internship
Mykolas Simutis
fonte
fonte
Respostas:
Você disse que está entrevistando para cargos de estagiário na pergunta, portanto é desse ponto de vista; para desenvolvedores em período integral, o nível será um pouco maior.
Ao entrevistar estagiários, você deve se lembrar de que eles podem não ter concluído seus estudos e que também podem ter ingressado na faculdade sem nenhum conhecimento prévio em programação e ciência da computação. Dessa forma, você precisa dimensionar as expectativas para o que você razoavelmente espera que alguém conheça e para o grau de prestígio da posição (por exemplo, o Google pode se safar das expectativas que uma empresa que as pessoas nunca ouviram falar).
Examinando as perguntas que você apresentou, provavelmente as veria da seguinte maneira em uma entrevista:
Aplicação básica da geometria com codificação simples, a maioria dos estudantes deve ser capaz de fazer isso sem muita dificuldade. No máximo, um lembrete do teorema de Pitágoras pode ser necessário se eles estiverem mostrando um pouco de estresse por estarem em uma entrevista. Isso quase pode ser visto como um problema de "aumento do ego", pois pode ajudar a acalmar algumas pessoas se elas estiverem muito nervosas na entrevista.
Novamente, outra aplicação de algumas instruções básicas de controle. Os alunos que não foram expostos ao operador do módulo, ou que não o usaram muito, podem precisar ser lembrados, mas não devem encontrar problemas reais para solucionar o problema.
Como esse é um problema bastante comum, a maioria dos alunos (se não todos) o verá em algum momento antes da formatura. O problema é que geralmente aparece quando a recursão é apresentada aos alunos, uma vez que se presta bem ou uma solução recursiva ou baseada em loop que pode ser comparada para que alunos de escolas diferentes possam vê-lo em momentos diferentes, dependendo da sequência dos cursos. Na prática, se alguém não pudesse inventar a recursiva, eu pediria uma alternativa usando loops e, se não conseguisse, eu ficaria mais preocupado com sua capacidade potencial.
Essa questão pode ser um pouco aberta demais, pois está escrita, portanto, também pode ser uma boa pergunta ver como o candidato procura informações adicionais (por exemplo, se as funções de exclusão devem ser incluídas, a conversão em matrizes etc.), mas com um bom resultado. declaração de problema definida ("Implemente uma estrutura básica de lista para números inteiros que permita que números sejam adicionados ao final ou em um índice arbitrário, excluídos e incluam uma função para retornar uma cópia invertida da lista") os alunos devem ser capazes de resolver o problema desde que as listas sejam uma estrutura comum apresentada em um curso inicial de estruturas de dados ou em um curso básico de ciência da computação.
Em termos de lidar com os candidatos, se eles estiverem lutando, verifique se eles estão relaxados e permita um pouco de clemência, pois eles podem estar apenas com ansiedade no desempenho, pois essa pode ser sua primeira entrevista real. Dicas para solucionar os problemas podem ser necessárias, principalmente no terceiro e quarto problemas, em oposição aos dois primeiros.
Além disso, estruture o processo geral da entrevista para que haja pontos de "saída normal" incorporados. Por exemplo, você pode ter a seguinte agenda:
Esse fluxo de entrevistas tende a funcionar bem se você quiser demitir candidatos cedo, pois eles sabem desde o início que eles podem ser demitidos após o intervalo. A breve entrevista antes do questionário também significa que eles não estão apenas aparecendo para fazer o teste, o que lhes dá algumas práticas de entrevista e também pode permitir que eles decidam que não se encaixam bem. Se houver outros programadores observando o questionário ou auxiliando o candidato durante o processo, isso também lhes dará a chance de passar / reprovar no candidato enquanto eles estão fazendo uma pequena pausa.
Em todos os momentos em que você está entrevistando para um estágio e os candidatos são estudantes, lembre-se de que eles ainda são estudantes e podem não ter muita prática com entrevistas (levando a uma possível ansiedade no desempenho) e também podem não ter atingido o ponto em seus estudos. até ser capaz de responder às perguntas, o que significa que pode ser uma boa ideia enviá-las a caminho com uma cópia da "solução (s) ideal (is)" para os problemas que eles também apresentam.
fonte
Meu objetivo em qualquer entrevista de emprego, não importa de que lado eu esteja, é acabar me sentindo como se estivesse conversando com um colega. Os colegas entram no meu escritório o tempo todo quando estão presos a um problema. Peço ajuda aos meus colegas quando eu mesmo fico preso. Então, em uma entrevista, tento recriar essa dinâmica.
Em outras palavras, o que você diria se um colega precisasse implementar uma sequência de fibonacci e não soubesse o que era? Você explicaria a eles até que eles compreendessem o suficiente para continuar por conta própria. Não há vergonha na ignorância, desde que não seja permanente.
Se você realizar esse exercício e ainda não conseguir se imaginar trabalhando com essa pessoa, ela não será uma boa opção para o trabalho.
fonte
O objetivo de fazer perguntas como essa em uma entrevista é determinar se alguém pode descobrir como resolver problemas. O trabalho de ser programador geralmente consiste em duas coisas: "Aceite esses requisitos e implemente-os no código" e "descubra por que a implementação não está correspondendo aos requisitos e corrija-os". Portanto, o que você realmente procura não é uma solução para essas perguntas específicas, mas a capacidade de descobrir as coisas.
Entendendo isso, eu daria uma dica ou duas para começar alguém, e talvez mais ainda, se estiver claro que eles estão fazendo um progresso real, mas faltam detalhes em algum lugar. Mas se ficar claro que eles simplesmente não conseguem descobrir como resolver o problema, você tem sua resposta e não há necessidade de continuar com o exercício.
Para dar um exemplo, quando entrevistei meu trabalho atual, recebi uma pergunta sobre como encontrar o caminho mais curto de um nó para outro em um gráfico. Respondi que provavelmente usaria algo como o algoritmo de Dijkstra, que me lembrava vagamente de ter aprendido um dia na faculdade e que nunca havia usado desde então, e dei uma explicação rápida (e incorreta) dele que satisfazia as condições específicas dadas pelo questão. O entrevistador apontou que minha solução terminaria em um loop infinito se o gráfico fosse modificado levemente e isso movimentasse minha memória, então expliquei o caminho certo para evitar esse problema. E acabei conseguindo o emprego.
fonte
para posições internas, você pode estar perguntando um pouco demais.
Eu não tenho idéia do que você quer dizer com a quarta pergunta. quanto a fazer uma pergunta de recursão, é um pouco impraticável, analise sua própria base de código e determine o número de áreas em que a recursão é usada. Estou disposto a apostar que é pouco. As situações da entrevista são estressantes, e esperar que os candidatos implementem estratégias raramente usadas, que são inversas, em comparação com a maioria das coisas que você programará é injusto com elas, especialmente no início de uma entrevista. Pessoalmente, eu faria perguntas onde eles têm que explicar o que significam conceitos importantes / como são usados, fornecendo exemplos em lata. Eu ficaria muito mais interessado em candidatos que podem dizer a você o livro X ou a pesquisa no Google Y fornecerá tudo o que é necessário para implementar algo em sua base de código.
fonte
IMHO, suas duas primeiras perguntas devem ser resolvidas por qualquer pessoa que se autodefina como programadora, seja júnior ou sênior, diretamente da escola ou autodidata.
Se eu vir que o entrevistador está tendo problemas com um deles, tentarei reformular o problema e verificar se ele o entendeu completamente. Em seguida, incentive-a a usar caneta e papel, quadro branco, desenhar figuras ou qualquer outra abordagem que prefira para resolver o problema. Também peço a ela para pensar em voz alta, para ter uma visão de seu processo de pensamento e, se necessário, dar pequenas dicas se ela estiver no caminho certo, apenas não se atreve a avançar ou tem algum obstáculo. Mas se várias dicas não ajudarem, ou - como você mencionou acima - eu acabar resolvendo o problema para ela, provavelmente terminaria a entrevista para impedir mais desperdício de tempo. Em uma entrevista, estou sempre tentando ver e focar no que a candidata sabe, e não no que ela não sabe, mas se não consigo encontrar nenhum conhecimento significativo, desisto depois de um tempo.
O 3º e o 4º são um pouco mais difíceis, então eu poderia aceitar se um júnior não os conseguisse, se ele demonstrasse uma boa abordagem e entusiasmo na solução de problemas. Mas para os idosos, eles ainda são obrigatórios.
fonte
Eu tive que procurar o que você quis dizer com "FizzBuzz"; Acontece que eu tinha ouvido falar do jogo e de suas regras, mas não com esse nome e em pouco tempo. Portanto, não pense que você não precisa fornecer QUALQUER informação aos entrevistados.
Dito isto, são todos os problemas básicos de codificação que eu esperaria que alguém entrevistando mesmo para uma posição de codificação de nível básico pudesse pensar em seu caminho, se não conseguisse codificar uma resposta por inspeção. Então, nós estamos na mesma página lá. A resposta para o seu problema depende de como eles estão errando:
Problemas menores de sintaxe: se você está esperando um código em um determinado idioma, não conte muito se perder um ponto-e-vírgula ou um erro de ortografia no uso de algum identificador. A maioria dos IDEs entende isso imediatamente, e todo mundo faz erros de digitação de tempos em tempos. Em quase todas as entrevistas nas quais eu esperava codificar alguma coisa, "pseudo-C-ish" era aceitável desde que o algoritmo fosse comunicado adequadamente ao entrevistador e a lógica fosse correta.
Falha na lógica secundária: se o algoritmo se comportar como esperado na maioria dos cenários esperados (mas não em todos) (digamos, ao codificar o FizzBuzz, 15 resultaria apenas em "Fizz" ou "Buzz", mas não em ambos, como deveria). seja o "testador de unidade" e indique que o algoritmo falharia nessa instância e veja se eles podem corrigi-lo. Eles podem ter esquecido esse caso específico ou podem não ter entendido os requisitos completamente o suficiente. Ambas são novamente ocorrências diárias de codificação completamente compreensíveis, que devem ser facilmente superadas com o simples fornecimento de informações ou comentários adicionais.
Principais falhas lógicas: se o algoritmo não passasse na maioria ou em todos os cenários de teste dados, aponte-o também e verifique se eles podem consertá-lo. Isso é mais um problema; ou eles entenderam mal algum requisito básico do sistema ou ignoraram algum buraco lógico. Mas, se eles puderem corrigi-lo, com mais detalhes do problema, sem que sejam informados exatamente onde seu código está falhando, atribua-o a requisitos pouco claros e prossiga.
Não sei por onde começar / resposta codificada para casos específicos / não consigo entender seu pseudocódigo: estas são as bandeiras vermelhas. Se você pedir a alguém para codificar um algoritmo que siga as regras do FizzBuzz, explicando essas regras para eles e você receber um olhar vazio, a entrevista acabou. Da mesma forma, se eles puderem colocar ALGUMA COISA no quadro, mas ele falhar em grande parte do espaço do problema, e você precisar segurar a mão deles para ilustrar a falha e como corrigi-la, eu não faria uma segunda entrevista .
fonte
Se você realmente tem um estagiário em potencial que age como um cervo no farol porque ele nunca foi entrevistado, tem problemas de ansiedade, nunca esteve em uma situação da vida real como essa (você geralmente percebe pela linguagem corporal deles), basta começar perguntando a eles em que eles trabalharam por último.
Então será o território dele, para que ele não fique loucamente nervoso. Quando você encontrar um local apropriado, pergunte: "Ei, como você implementou isso?". Se ele puder explicar, pode lhe dar uma ideia do modo de pensar dele.
Coloque seus próprios testes na agenda depois disso.
fonte
Fizzbuzz é um requisito absoluto. Se eles não podem codificar o Fizzbuzz, você não deve contratá-los.
Normalmente, solicito ao candidato uma sessão de código pré-entrevista, na qual usamos o Google Docs para solucionar um problema de programação (normalmente o Fizzbuzz + um problema de nível superior, se é possível concluir o Fizzbuzz com facilidade).
Normalmente, eu estou no telefone ou no skype com eles durante isso, e como estou assistindo eles resolverem o problema (e conversando com eles sobre o que eles estão pensando em determinados momentos), posso estar razoavelmente confiante de que eles não o fizeram ' basta pesquisar no google a resposta.
Desde que seus outros problemas sejam bem especificados (ou seja, você forneça a fórmula para cada um), suas perguntas serão excelentes.
Quando entrevisto candidatos, tento manter os problemas de programação que eles provavelmente encontrarão. Adoro problemas de manipulação de cordas porque, quando você está na Web, praticamente tudo o que o usuário enfrenta tem a ver com algum tipo de manipulação de cordas. Como eles lidam com isso é importante.
fonte
Depende do calibre da posição que você está tentando preencher.
Se você estiver procurando por um desenvolvedor sênior, esperaria que eles soubessem tudo isso. Se eles entendessem errado e eu estivesse me sentindo mal, eu simplesmente pararia a entrevista, obrigado e adeus. Se eu estivesse com um humor mais educado, agradeceria e correria pelo resto da entrevista.
Se eu estivesse indo para um desenvolvedor júnior, essas perguntas poderiam ser consideradas bastante difíceis. Eu estaria mais interessado em explorar sua capacidade e vontade de aprender. Então, eu tentava dar dicas e orientá-los e ver como eles respondem.
fonte
Entrevistas com estagiários são um tipo diferente de entrevista. O que normalmente faço é usar minhas perguntas padrão do desenvolvedor (como as que você forneceu) para avaliar onde elas estão na educação. A capacidade de resolver esses problemas variará muito, do segundo ao segundo ano.
Depois de obter essas informações, concentro a entrevista em outras habilidades, como: eles serão capazes de trabalhar em equipe, podem ser ensinados, se beneficiarão do estágio em nossa empresa, são apaixonados por desenvolvimento / aprendizado etc.
Para mim, são as coisas não técnicas que realmente diferenciam um estagiário dos outros candidatos. Prefiro passar alguns meses treinando / orientando alguém que é motivado a aprender e crescer, do que alguém que apenas quer um emprego para o semestre.
fonte
Pergunte a si mesmo que valor o entrevistado provavelmente agregará à sua empresa. Considere o custo de ter um mentor envolvido, especialmente se eles não puderem resolver problemas no nível do fizzbuzz. Se a resposta não for proporcional ao salário pretendido, você terá um bom argumento econômico para não contratá-los.
Não tenha medo de voltar ao seu gerente e dizer "não havia candidatos que agregariam valor suficiente à nossa empresa para fazer a contratação deles valer a pena". Esse deve ser um curso de ação melhor do que acabar com alguém que é realmente de valor negativo, devido ao custo de ter alguém constantemente ajudando-o.
fonte
Minha resposta pode parecer um pouco cruel ou desdenhosa, mas acho que funciona bem. Para começar, faço ao candidato uma pergunta muito fácil, que serve como uma pergunta de aquecimento para ajudar a construir sua confiança. Se eles são ou não bem-sucedidos, passo para uma questão menos trivial e diretamente relacionada ao que o trabalho implica.
Neste ponto, é tudo ou nada. Se eles navegarem por ele, ótimo, não há problema. Se eles se esforçarem um pouco, sem problemas, ajudarei a estimulá-los e depois passarei para outras perguntas para determinar outras habilidades.
Se, no entanto, eles não têm a capacidade de resolvê-lo, vou em frente e passo o resto do tempo da entrevista ajudando-os. O candidato ainda se sente envolvido na entrevista, mas não preciso orientá-la em direções diferentes e irrelevantes. Também é bom para o candidato, pois pode ser educacional.
fonte
Então, minha resposta é: esteja melhor preparado.
PS Você é um gerente, e por isso, você realmente deve manter stress.
fonte