“Explain the RAII idiom” é uma boa pergunta de triagem em C ++? [fechadas]

13

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".

JasonTrue
fonte
3
"Até mesmo alguns desenvolvedores de C ++ que eu conheço bem o suficiente para julgar sua competência disseram que não reconheciam o termo". OK. "Então, é" Você pode me explicar o idioma da RAII? ", Uma pergunta de triagem justa?" Porque perguntar? Você não conseguiu encontrar pessoas que sabiam disso. O que mais você precisa saber que ainda não sabe? Talvez você deva menosprezar esse assunto (já que você já sabe a resposta) e se concentrar em "Existem melhores alternativas para perguntas" weeder "" que possam ser interessantes. Só que é um tiroteio opiniões, que não são bem toleradas.
precisa saber é o seguinte
9
Os idiomas mudam, as boas práticas não. Em vez de perguntar sobre um idioma específico, que tal simplesmente perguntar: "que medidas você executa na criação de uma classe para garantir que ela não vaze?"
Blrfl
É justo, embora meu tamanho de amostra seja baixo e eu não esteja mais envolvido ativamente na comunidade C ++, então não sei o que a comunidade considera conhecimento essencial atualmente. Estou essencialmente tentando descobrir como expandir meu repertório de perguntas que podem ser usadas para julgar o conhecimento real de C ++ além, por exemplo, dos conceitos básicos de sintaxe.
precisa saber é o seguinte
2
seu problema não é o que eu esperava. Presumi que você encontraria alguém que sabe o que é RAII, é contratado e só mais tarde você descobre que eles ainda são péssimos em codificação.
Kevin
1
@ JasonTrue: Eu acho que as perguntas de fizz buzz devem ser questões de programação reais, como reverter uma string. Mas de qualquer maneira eu acho que é uma boa pergunta. Você também pode perguntar quais recursos do c ++ - 0x o entrevistado considera mais interessantes ou importantes. É um pouco mais difícil, mas se você receber uma boa resposta, provavelmente significa coisas boas. E a pergunta sempre pode voltar a: 'quais bibliotecas de reforço são mais importantes / interessantes' se você receber um olhar vazio.
Kevin

Respostas:

24

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.

Justin Cave
fonte
Uma excelente sugestão. Eu gosto dessa abordagem.
precisa saber é o seguinte
Leva muito tempo em uma entrevista por telefone.
HelloWorld
15

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.

GEL
fonte
3

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 .

Armando
fonte
3

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.

Satanicpuppy
fonte
Eu não costumo fazer muitas perguntas esotéricas de conhecimento nas entrevistas de triagem, mas há uma certa diligência que eu devo fazer para garantir que alguém não seja completamente incompetente. Portanto, estou procurando uma pergunta em aberto que permita verificar algum nível de conhecimento e permitir que o candidato mostre seu próprio histórico. Espero "alguns" conhecimentos diretos se alguém disser que conhece a tecnologia X em seu currículo; minha pergunta se resume a: qual conhecimento devo esperar de um programador de C ++ que seja um gateway útil para novas conversas?
JasonTrue
4
@jason: Bem, provavelmente vou me lembrar da sigla RAII por alguns meses. Esse conhecimento efêmero me torna competente, mesmo que eu não tenha tocado em C ++ há anos? É trivial. Pergunte a eles como eles lidam com os bloqueios e verifique se eles entendem o CONHECIMENTO real, não o acrônimo estranho.
7898 Satanicpuppy
1
@jason: eu concordo. Eu simplesmente não concordo que o básico inclua esse tipo de trivialidade. Um idiota pode saber, e um especialista pode não. Você está baseando seu processo de seleção em algo irrelevante para a habilidade.
Satanicpuppy
5
Saber o que RAII é chamado não é um conhecimento essencial. Mas alcançar automaticamente o padrão é.
btilly
2
RAII é um conceito fundamental de bom C ++, e o termo existe há pelo menos 20 anos. Eu acho que descartá-lo como trivial é um pouco injusto. Embora você possa ter bons desenvolvedores de C ++ que não conhecem o termo, para mim cheira a alguém que não pesquisa sua arte.
Kaz Dragão
1

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.

Harold Bamford
fonte
1
Eu usei e recebi essa pergunta com frequência e mencionei acima no meu comentário, mas acho estranho perguntar em uma conversa por telefone de 25 minutos.
JasonTrue
0

É 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.

david.pfx
fonte