Qual é a melhor maneira de avaliar os melhores candidatos para conseguir um novo emprego (falando apenas em termos de habilidades de programação)? Na minha empresa, tivemos muitas experiências ruins com pessoas com boas notas, mas que não têm habilidades reais de programação. Suas habilidades são apenas como macacos de código, sem a capacidade de analisar os problemas e encontrar soluções.
Mais coisas que tenho que observar:
O sistema educacional no meu país é péssimo - realmente é péssimo. As pessoas que são boas nesse tipo de trabalho são boas porque têm talento para isso ou realmente tentam aprender por conta própria.
A universidade / graduação / pós-graduação não significa necessariamente que você sabe exatamente como fazer as coisas.
Certificações também não significam nada aqui, porque as pessoas encarregadas do curso de certificação também não possuem habilidades (ou estão em empregos com baixos salários).
Precisamos realmente obter os bons candidatos que são flexíveis e não têm pensamento mecânico (porque esse tipo de pessoa por experiência tem um desempenho baixo).
Estamos em uma instituição governamental e as pessoas candidatas não necessariamente vêm de fora, mas temos a possibilidade de aceitar ou não candidatos até encontrar o correto.
Espero não parecer muito agressivo na minha pergunta; e BTW eu sou um programador.
edit: Eu descobri que pedi algo realmente complexo aqui. Desmarcarei "a resposta correta" apenas para deixar a discussão fluente, sem qualquer viés.
Respostas:
Em relação à seleção de candidatos, costumo seguir um plano de três greves:
Teste regular com perguntas de codificação semelhantes ao FizzBuzz e muitas perguntas de conhecimento, onde eles precisam dar exemplos codificados. Dependendo da posição, podem ser princípios OO, princípios de design SQL etc. Eu incremento as dificuldades das perguntas ao longo do teste para ver até onde elas podem ir. A idéia não é realmente ter todas as perguntas respondidas (se tiverem, melhor), mas também ver se elas conseguem reconhecer quando não sabem alguma coisa. Confiar é essencial e não quero que alguém minta para mim na minha equipe.
Retorne ao teste com o candidato e discuta as respostas. Possível extensão das perguntas para atingir os limites do candidato. Isso pode ser extenso e, quanto mais extenso, melhor.
Última parte, mas não menos importante, The Code Review . Peço ao candidato que traga um pedaço de código (geralmente espaço o teste / discussão anterior e esta revisão por alguns dias, para deixá-los escrever e polir um pedaço de código). Em seguida, fazemos uma revisão regular do código com duas pessoas: uma pessoa que trabalhará diretamente com o candidato e a pessoa que revisou o teste com o candidato anteriormente. Em relação à revisão de código, você pode ler este artigo em JohnFX .
No final de tudo isso, você poderá decidir se deseja ou não que este candidato faça parte de sua equipe.
fonte
Comece dando a eles o FizzBuzz para resolver. Isso deve eliminar o pior deles.
Então, algo um pouco mais difícil - por exemplo, como reverter uma string sem funções internas da biblioteca. Peça que eles conversem enquanto resolvem para ver qual é o processo de pensamento deles.
Você pode continuar dando problemas mais difíceis se eles acharem isso muito fácil, até que esteja convencido de que eles podem caminhar e não apenas conversar.
fonte
Basta procurar paixão pelo trabalho.
Para citar Joel, procure pessoas que sejam " inteligentes e faça as coisas " .
O resto não importa
fonte
Com base nos meus 25 anos de programação (que, reconhecidamente, inclui apenas 5 ou 6 instâncias de contratação de outros programadores):
Indicadores positivos:
Apaixonado por tecnologia
Programas como hobby
Falará sobre assuntos técnicos se incentivado
Projetos secundários pessoais significativos (e muitas vezes numerosos) ao longo dos anos
Aprende novas tecnologias por conta própria
Opinião sobre quais tecnologias são melhores para vários usos
Muito desconfortável com a ideia de trabalhar com uma tecnologia que ele não acredita estar “certa”
Claramente inteligente, pode ter ótimas conversas sobre diversos tópicos
Começou a programar muito antes da universidade / trabalho
Possui alguns “icebergs” ocultos, grandes projetos pessoais sob o radar do CV
Conhecimento de uma grande variedade de tecnologias não relacionadas (pode não estar no CV)
Indicadores negativos:
Programar é um trabalho diário
Realmente não quero “conversar”, mesmo quando incentivado a
Aprende novas tecnologias em cursos patrocinados pela empresa
É um prazer trabalhar com a tecnologia escolhida, "todas as tecnologias são boas"
Não parece muito inteligente
Começou a programar na universidade
Toda a experiência de programação está no currículo
Focado principalmente em uma ou duas pilhas de tecnologia (por exemplo, tudo relacionado ao desenvolvimento de um aplicativo java), sem experiência fora dele
Além disso, eu sugiro:
Grande parte do resumo acima é de Como identificar um bom programador , que é um ótimo artigo, focado um pouco mais em indicadores de longo alcance. Definitivamente, confirma minhas intuições e experiência. Também há muitas coisas (como "paixão") que normalmente não são mencionadas em uma lista de verificação de "o que é um bom programador".
fonte
Avaliar a inteligência de programação é uma forma de teste de Turing. Portanto, atualmente não existem procedimentos de avaliação de formulário fechado que garantam o funcionamento. São necessários programadores inteligentes para reconhecer outros programadores inteligentes, mas apenas com alguma probabilidade razoável.
Suas chances serão melhores se você tiver entrevistadores em sua equipe que sentirão cheiro de trabalhos na neve e não gostarem instintivamente de trabalhar com pessoas estúpidas (mesmo as que são bonitas, têm currículos com aparência impressionante e podem jorrar todas as soluções enlatadas usuais de memória) .
(Uma metodologia de possibilidade que ajudaria a qualidade do fluxo de pilha como efeito colateral é desenterrar perguntas antigas sobre fluxo de pilha, relacionadas de alguma forma aos requisitos de seu trabalho, mas que, na sua opinião, têm respostas inferiores; pergunte ao entrevistado como ele responderia e peça-lhes que publiquem, se for uma boa resposta. Semelhante a uma recapitulação para OCR de origem coletiva.)
fonte
Dê a eles um problema, de preferência um associado ao domínio do problema em que eles estejam trabalhando e peça que discutam como eles abordariam isso. Você pode tê-los apenas discutindo, pseudo-código ou escrevendo partes do código real, dependendo de quão confiante você está no nível de habilidade deles
Por exemplo, se sua organização fez conferências, peça que descrevam como codificariam um sistema de registro online seguro. Eles devem ser capazes de cobrir alguns princípios básicos e fazer boas perguntas sobre exatamente o que precisa ser implementado. À medida que você interage, você deve determinar se eles serão adequados para sua organização e a função que você precisa que eles cumpram.
Eu não sou um grande fã de programação de testes triviais e quebra-cabeças. Embora possam ser divertidas para algumas pessoas, elas também podem incomodar e / ou estressar outras pessoas, incluindo pessoas que podem ser as mais adequadas para sua equipe. Além disso, as informações sobre muitos desses testes estão disponíveis on-line e incentivam os testes e outras táticas que reduziriam sua viabilidade para avaliar a capacidade do programador.
fonte
A leitura desta pergunta e de algumas das respostas recebidas me levou a escrever um artigo que eu acho interessante.
Práticas de recrutamento estranhas ao contratar desenvolvedores de software
Ok, o título do artigo é um lixo, mas o artigo chega ao cerne do problema. Não é problema do candidato que você escolheu entrevistá-los, por mais inapropriados que sejam para o papel que você tem em mente. Se você não conseguiu definir um procedimento de contratação bem fatorado para permitir que você encontre as pedras preciosas, você terá que conviver com as consequências e, sim, isso significa obter alguns candidatos que possam nunca atenda às suas expectativas. Filtrar seus candidatos com base em suas cartas e currículos exige que você primeiro peça aos seus candidatos que escrevam uma carta sobre si mesmos e o que eles querem da função e, em seguida, veja como o currículo é escrito. Se você tem apenas um ou dois candidatos em potencial para entrevistar, provavelmente já fez a pré-triagem corretamente.
Quando você encontrar os 1 ou 2 candidatos que você considera realmente valiosos, simplesmente não faça um punhado de perguntas insanas aos testadores, mas invista tempo para conhecer essas pessoas e participar de discussões abertas sobre software engenharia em geral. Você aprenderá mais com uma abordagem casual sobre o candidato do que nunca na situação tradicional (e um tanto contraditória) da entrevista. Além disso, não basta se contentar com uma única entrevista, mas trate seus candidatos-chave para várias reuniões em que a discussão aberta é usada e onde o candidato pode se encontrar com seus colegas em potencial. O tempo nunca é desperdiçado, pois candidatos inadequados não prosperarão muito bem em uma discussão altamente técnica e mostrarão suas falhas muito rapidamente ao baixarem a guarda.
fonte
Você não disse para qual idioma, mas é bastante fácil testar o conhecimento de alguém. Também depende do nível que você está procurando, mas há um grande número de perguntas sobre as perguntas da entrevista.
No entanto, você decide realizar sua entrevista, não faça as perguntas da entrevista do "quebra-cabeça do pensamento lateral" .
fonte
Sugiro que você faça uma pergunta no FizzBuzz e contrate a primeira que for aprovada. Testes adicionais tendem a ser falhos, pois nem todo bom programador abordará um problema como você, ou lidará com uma entrevista sem gaguejar, ou conhece os idiomas que deseja ou se preocupa, ou tolice, como trocar números inteiros sem uma terceira variável (quem precisa mesmo assim? média, já que a RAM excedeu 128 bytes?).
Pense nisso. Se a pergunta do FizzBuzz elimina 199 de 200, apenas eliminou centenas de entrevistas. Você realmente iria entrevistar centenas de clientes em potencial?
Apenas parece haver retornos decrescentes após o FizzBuzz. Isso pressupõe que 199/200 seja aproximadamente aproximado. E presumo que SEU tempo também é valioso ...
fonte
Não tenho certeza se isso é um comentário ou resposta, mas basicamente o que Matthieu disse. Você quer perguntas fáceis e estúpidas que levam um ou dois minutos (mas não mais que 5) e devem ser sobre áreas diferentes.
Esses exemplos de perguntas fáceis estúpidas são sobre recursão, como você tem uma lista e deve imprimi-la na ordem inversa sem usar um loop. Uma pergunta simples sobre regex se o regex normalmente é feito em seu desenvolvimento. Uma pergunta sobre bits e bytes se estiver usando C ++ (escreva um modelo que aceite char por muito tempo e imprima a representação binária. A especialização não é necessária, basta usar sizeof () para descobrir o tamanho do bit)
Você deve levar cerca de <= 3 minutos por pergunta
fonte
Pergunte a eles sobre o desafio de programação mais interessante que eles já tentaram resolver, mas não conseguiram, que abordagem eles usaram ao resolvê-lo, por que eles não conseguiram resolver e que outra abordagem eles acham que pode resolvê-lo.
Isso é o suficiente para eu julgar as habilidades de um programador como programador.
fonte
Eles podem aprender algo novo? Fale sobre um aspecto de alto nível da tecnologia que você está usando ou algo específico para o domínio comercial em que trabalha e veja se eles conseguem entender o assunto. Eles fazem perguntas inteligentes? Eles podem criar uma analogia? É semelhante a algo que eles fizeram em outro setor ou tecnologia?
Eles preferem estar programando? Não precisa ser o número um na lista, mas eles precisam mostrar uma preferência em escrever código. Quero dizer, escrever código e criar algo, não ficar sentado conversando sobre isso ou desenhando no quadro o dia inteiro. Não para minimizar o planejamento ou promover a codificação de cowboys, mas você precisa ter código eventualmente. Evite aqueles que evitam o teclado. Esta não é uma posição de gerenciamento.
Você pode fazer uma pontuação em uma escala de uma a dez coisas ou apenas confiar em ser capaz de cheirar sua própria espécie.
fonte
Se isso faz você se sentir melhor, existem maus programadores em praticamente todos os países. Como eliminá-los é o problema.
A primeira remoção de ervas daninhas é o currículo. Uma coisa que procuro é muita experiência no idioma reivindicada e nada para descrever o que eles fizeram nesse idioma. Eu vi currículos que afirmam que conhecem todos os idiomas já inventados e, no entanto, sua experiência mostra que eles realmente só trabalharam com o Access e o Visual Basic. Aqueles vão direto para o lixo. Os resumos de 10 páginas vão direto para o lixo (especialmente os de dez páginas de pessoas com menos de 2 anos de experiência que obtive). Desde os recém-formados com pouca experiência, é preciso ser muito exigente sobre como eles se apresentam. Os melhores candidatos são cuidadosos com seus currículos, eles não têm erros. Você está realmente procurando alguém que se preocupa tão pouco que não se preocupou em revisar seu currículo?
Os currículos preparados profissionalmente também estão no lixo. Depois de ler centenas de currículos, você pode selecioná-los, pois eles usam exatamente o mesmo fraseado. Você não pode confiar no conteúdo em um currículo preparado profissionalmente e sabe que a pessoa não fez sua própria preparação. Este é o tipo de pessoa que confiará nos outros para resolver seus problemas para ele. Você realmente quer isso em uma posição de programação?
Procure coisas que façam a pessoa se destacar pelas que você escolher. É mais difícil, é claro, com os que estão fora da escola, mas procure realizações, contribuições para o código aberto, etc.
A próxima eliminação é a entrevista por telefone. Pergunte sobre conceitos básicos que se relacionam com o trabalho que você tem. Se as pessoas não têm conhecimento básico de conceitos que você precisa, não vale a pena se incomodar em trazer uma entrevista pessoal. Os jovens costumam pensar que isso é injusto, porque podem procurar tudo na Internet, mas a verdade é que nunca conheci um bom programador que tivesse que procurar tudo na Internet. Você deve ter algum conhecimento de sua profissão que não precise procurar sempre.
Após a entrevista por telefone, você deve escolher os melhores 4-5 candidatos e a entrevista. É claro que se você tiver apenas 1-2 bons candidatos, não se incomode em entrevistar pessoas que você já eliminou. Agora você fará as perguntas mais difíceis e terá uma ideia de como elas abordam os problemas. Eu nunca usaria o teste fizzbuzz porque é muito conhecido, portanto as respostas não dizem nada. Em vez disso, crie alguns problemas a partir de sua própria base de código. Posso dar a eles um requisito e um pedaço de código e perguntar se o código atende ao requisito e, se não, por que não e o que eles podem fazer para atender ao requisito. Eu pediria que descrevessem o problema de programação mais difícil que tiveram que resolver e que medidas foram tomadas para encontrar a resposta. Gostaria de fazer algumas perguntas técnicas mais aprofundadas. Lembre-se de que você está tentando entender a competência técnica deles, a capacidade de resolver e depurar problemas e de se adaptar à sua equipe existente. Também faço perguntas que eles provavelmente não sabem a resposta para julgar como lidam com o estresse, é um trabalho estressante, não quero alguém que se dobre na entrevista porque o estresse do trabalho é maior que o estresse da entrevista . Eu procuro pontos fortes nas áreas em que atualmente somos fracos e capacidade de trabalhar em equipe e de nos apresentar aos clientes (nossos desenvolvedores lidam extensivamente com os usuários), sua lista pode ser diferente. não quero alguém que desista da entrevista porque o estresse do trabalho é maior que o estresse da entrevista. Eu procuro pontos fortes nas áreas em que atualmente somos fracos e capacidade de trabalhar em equipe e de nos apresentar aos clientes (nossos desenvolvedores lidam extensivamente com os usuários), sua lista pode ser diferente. não quero alguém que desista da entrevista porque o estresse do trabalho é maior que o estresse da entrevista. Eu procuro pontos fortes nas áreas em que atualmente somos fracos e capacidade de trabalhar em equipe e de nos apresentar aos clientes (nossos desenvolvedores lidam extensivamente com os usuários), sua lista pode ser diferente.
fonte
Os candidatos devem receber um problema do mundo real para resolver com a liberdade de usar qualquer tecnologia.
Se ela sai em cores voadoras, está dentro!
fonte