Os estouros de buffer são aceitáveis por um desenvolvedor graduado? Estamos definindo a fasquia muito alta? Quais são as capacidades esperadas dos engenheiros graduados / juniores?
Contexto:
Atualmente, estamos recrutando para uma posição de desenvolvedor júnior, trabalhando principalmente em C no Linux.
Como parte do processo, exigimos que os candidatos concluam um teste de código à vontade em C.
Até agora, rejeitamos dois candidatos com base no fato de que seu código, embora legível e, em um caso, bastante idiomático, sofria de erros de estouro de buffer devido a gravações ilimitadas de buffer.
[Editar]:
- Solicitamos explicitamente um código de qualidade de produção verificado por erro.
- Fornecemos uma estrutura de teste e construção para os candidatos
[Atualizar]:
Como resultado desse encadeamento e das conversas que tivemos com outros desenvolvedores pessoalmente, estamos mudando a maneira como realizamos testes de código e a quem direcionamos nosso recrutamento.
Decidimos que um candidato incapaz de corrigir ou entender um estouro de buffer significa que ele seria inadequado para o trabalho que realizamos, em particular, ele precisaria de mais orientação do que estamos acostumados. Portanto, ainda rejeitaremos candidatos que não possam enviar um exemplo de código robusto.
No entanto, adotamos algumas medidas para tornar o processo de recrutamento mais produtivo para nós e para os candidatos.
Em particular:
- Tornamos nossa expectativa mais explícita, com uma explicação clara do que queremos dizer com qualidade de produção e um aviso de que o código deve ser robusto com relação a entradas e erros.
- Agora, vinculamos candidatos a recursos em programação defensiva e à biblioteca padrão C na descrição do teste de código.
- Mudamos nosso público-alvo de desenvolvedores Júnior e graduados para atingir pessoas com alguma experiência relevante.
- Caso o código enviado falhe de alguma forma, mas de outra forma seria aceito, agora fornecemos um caso de teste mínimo que causa a condição de erro e damos aos candidatos a chance de corrigir seus erros (a menos que o código seja rejeitado por algum outro motivo). Também apontaremos linhas / funções problemáticas, se apropriado.
- O objetivo dos testes em si agora mudou ligeiramente de um filtro de front-end para uma chance de criar uma imagem melhor do candidato, em particular, isso informará nossa discussão por telefone. Dito isto, ainda estamos dispostos a rejeitar com base apenas no código.
[Atualização 2015-07-09]: Andy Davis, da Nujob, escreveu um artigo interessante e relevante sobre o uso de um teste de código da perspectiva do candidato, e vale a pena examinar o artigo. Encontre aqui .