Uma empresa com a qual trabalho me pediu para fazer exames de telefone dos candidatos para garantir que eles não fiquem completamente constrangidos ao enviar alguém para um cliente em potencial.
Acontece que um número razoável de pessoas estava sendo colocado para uma função de desenvolvedor de C ++. Não passo muito tempo em C ++, mas já fiz alguns projetos triviais e não triviais na linguagem. Imaginei que "Explain the RAII idiom" seria uma boa pergunta sobre softbol que os desenvolvedores mais sérios de C ++ poderiam responder enquanto dormiam e me permitiria passar para perguntas mais interessantes sobre a experiência. Mas acontece que pessoas com mais de 10 anos de experiência em C ++ não reconhecem o termo, mesmo se eu expandir o acrônimo para "Aquisição de recursos é inicialização". Um candidato chegou ao ponto de dizer que achava que nem sempre era prático aplicar a técnica no desenvolvimento do Windows, o que eu achava um sentimento estranho, mas pude ver alguns exemplos que sustentam essa linha de pensamento.)
Até alguns desenvolvedores de C ++ que eu conheço bem o suficiente para julgar sua competência disseram que não reconheciam o termo, mas ao ler um resumo da técnica, disseram "Ah, sim, eu não sabia que tinha um nome. Eu apenas pensei nessas coisas como algo que você apenas precisa fazer . " Lembro-me do termo da segunda edição do livro de Stroustrup, embora o impacto total não tenha caído na época.
Então, é "Você pode me explicar o idioma da RAII?" uma pergunta de triagem justa? É razoável esperar que todos os desenvolvedores competentes de C ++ entendam isso? O termo é mais esotérico do que eu pensaria? Supondo que um candidato não conheça o termo, existem perguntas de acompanhamento que poderiam me ajudar a esclarecer se eles pelo menos internalizaram as práticas que fazem o RAII funcionar? Existem perguntas alternativas "weeder" melhores que dão ao candidato alguma margem de resposta e ajudam o candidato a demonstrar sua compreensão do desenvolvimento de C ++?
Edição para adicionar : para esclarecer, não sou o tipo de entrevistador que desqualifica as pessoas porque elas não sabem palavras-chave e acrônimos. No entanto, acho razoável esperar que um programador C ++ experiente tenha internalizado boas práticas para gerenciamento de recursos. Também acho importante verificar se um candidato entende alguns "conceitos básicos" sobre a tecnologia em que afirma ter experiência antes de passar para perguntas mais interessantes sobre design, resolução de problemas etc. Acho que o que estou procurando é uma boa maneira fazer uma pergunta aberta, adequada para uso em uma breve triagem por telefone, que eu possa usar para julgar o entendimento básico de um candidato sobre boas práticas de gerenciamento de recursos em C ++, antes de fazer perguntas "difíceis".
Respostas:
Parece que você descobriu que os desenvolvedores de C ++ que você conhece por experiência são competentes não estão familiarizados com essa sigla ou mesmo com a expressão completa. Só isso parece indicar que a pergunta não é adequada como uma pergunta de triagem durante uma ligação.
Por outro lado, você pode chegar ao mesmo ponto de uma maneira mais indireta, apresentando um cenário. Algo como: "Você está implementando uma classe Log que gravará informações de log em um arquivo. Obviamente, será necessário ter uma variável de membro que seja um identificador de arquivo (std :: FILE *). Onde você aloca e libera esse arquivo lidar com?" Se o candidato começar a falar sobre a criação de um método open () e close () em vez de alocar o identificador de arquivo no construtor e desalocar o identificador no destruidor, você poderá fazer perguntas perguntando sobre como a classe deles se comportaria se o código de chamada gerou exceções, etc.
fonte
Não acho que seja uma questão prática, conforme proposta. Eu acho que você encontrará muitos desenvolvedores que se enquadram no campo "ah, sim, eu não sabia que tinha nome". Eu sugiro que você teste os candidatos no conceito e não o nome do conceito. Dê a eles um exemplo de código e pergunte por que está incompleto ou peça que demonstrem que conhecem o conceito.
fonte
Eu acho que é uma pergunta válida. Embora eu não saiba o quão popular é o termo RAII (na minha equipe, usamos o termo RAII o tempo todo), mas o conceito de manuseio de recursos é importante, especialmente se você também deseja segurança com exceção e segurança multithread .
fonte
Bem, eu sei que quando quero saber se alguém é competente, a primeira coisa que faço é verificar o conhecimento de siglas. Uma vez estabelecido, garanto que eles saibam os nomes de outras tecnologias que acho legais. Se eles ainda estiverem lá depois, peço uma lista de suas cores favoritas.
Eu não suporto esse tipo de coisa. Quero dizer, no final da entrevista, são sirenes e campainhas de aviso. Não quero trabalhar em um lugar em que realmente importe que eu saiba mnemônicas bizarras que meu chefe acha que são "fundamentais". Não posso me incomodar em aprender nomes de pessoas com quem lidei há anos, por isso não desperdice o espaço do cérebro com siglas engraçadas que descrevem as melhores práticas.
Olhe para o meu código. Pergunte-me como eu faria as coisas. Vou rabiscar uma porcaria no quadro branco até as vacas chegarem em casa. Codificarei um aplicativo para você. Não me faça perguntas triviais. As curiosidades são sempre um sucesso ou um fracasso, e nunca são fundamentais.
fonte
Se seu objetivo é filtrar o total de incompetentes rapidamente, tente algo como isto:
Teste FizzBuzz
Em seguida, você pode deixar conceitos e práticas de C ++ para aqueles em uma posição melhor para avaliar seus conhecimentos.
fonte
É uma pergunta válida, mas não para triagem. Usei-o como uma pergunta escrita, para ser discutida na entrevista. Você pode obter muitas idéias sobre padrões de pensamento com antecedência. Como uma pergunta de triagem, é apenas uma armadilha desagradável.
fonte