«Explain the RAII idiom» est une bonne question de filtrage C ++? [fermé]

13

Une entreprise avec laquelle je travaille m'a demandé de faire des filtrages de candidats pour m'assurer qu'ils ne sont pas complètement gênés lors de l'envoi de quelqu'un à un client potentiel.

Il s'avère qu'un bon nombre de personnes étaient placées pour un rôle de développeur C ++. Je ne passe pas beaucoup de temps en C ++, mais j'ai fait quelques projets triviaux et non triviaux dans le langage. J'ai pensé que "Expliquer l'idiome RAII" serait une belle question de softball à laquelle les développeurs C ++ les plus sérieux pourraient répondre pendant qu'ils étaient à moitié endormis, et me permettrait de passer à des questions plus intéressantes sur l'expérience. Mais il s'avère que les personnes qui ont plus de 10 ans d'expérience en C ++ ne reconnaissent pas le terme, même si j'élargis l'acronyme à «L'acquisition de ressources est l'initialisation». Un candidat est même allé jusqu'à dire qu'il estimait qu'il n'était pas toujours pratique d'appliquer la technique au développement de Windows, ce que je pensais être un sentiment étrange, mais je pouvais voir quelques exemples qui soutiennent sans doute cette ligne de pensée.).

Même quelques développeurs C ++ que je connais assez bien pour juger de leur compétence ont dit qu'ils ne reconnaissaient pas le terme, mais à la lecture d'un résumé de la technique, ils ont dit "Oh, oui, je ne savais pas que j'avais un nom. pensé à ces choses comme quelque chose que vous avez juste à faire . " Je me souviens du terme de la deuxième édition du livre de Stroustrup, même si le plein impact n'a pas pénétré à l'époque.

Alors, est "Pouvez-vous m'expliquer l'idiome RAII?" une bonne question de sélection? Est-il raisonnable de s'attendre à ce que tous les développeurs C ++ compétents le comprennent? Le terme est-il plus ésotérique que je ne le pense? En supposant qu'un candidat ne connaît pas le terme, y a-t-il des questions de suivi qui pourraient m'aider à déterminer s'il a au moins internalisé les pratiques qui font fonctionner le RAII? Existe-t-il de meilleures questions «sarcleuses» alternatives qui donnent au candidat une certaine latitude pour répondre et l'aident à démontrer sa compréhension du développement C ++?

Modification à ajouter : Pour clarifier, je ne suis pas le genre d'intervieweur qui disqualifie les gens parce qu'ils ne connaissent pas les mots à la mode et les acronymes. Cependant, je pense qu'il est raisonnable de s'attendre à ce qu'un programmeur C ++ expérimenté ait internalisé les bonnes pratiques de gestion des ressources. Je pense également qu'il est important de vérifier qu'un candidat comprend certaines "bases" de la technologie dans laquelle il revendique son expertise avant de passer à des questions plus intéressantes sur la conception, la résolution de problèmes, etc. Je pense que ce que je recherche est un bon moyen pour poser une question ouverte, utilisable dans une courte projection téléphonique, que je peux utiliser pour juger la compréhension de base d'un candidat des bonnes pratiques de gestion des ressources en C ++, avant de poser des questions "dures".

JasonTrue
la source
3
"Même quelques développeurs C ++ que je connais assez bien pour juger de leur compétence ont dit qu'ils ne reconnaissaient pas le terme". D'accord. "Alors, est-ce que" Pouvez-vous m'expliquer l'idiome RAII? "Une question de dépistage juste?" Pourquoi demander? Vous ne pouviez pas trouver des gens qui le savaient. Que devez-vous savoir de plus que vous ne savez pas déjà? Peut-être devriez-vous minimiser ce sujet (puisque vous connaissez déjà la réponse) et vous concentrer sur "Y a-t-il de meilleures questions" de désherbage "alternatives qui pourraient être intéressantes. Sauf que c'est une fusillade d'opinions, qui n'est pas bien tolérée.
S.Lott
9
Les idiomes changent, les bonnes pratiques non. Au lieu de poser des questions sur un idiome particulier, que diriez-vous simplement de demander "quelles étapes prenez-vous dans la conception d'une classe pour vous assurer qu'elle ne fuit pas?"
Blrfl
Assez bien, bien que ma taille d'échantillon soit faible et que je ne sois plus activement engagé dans la communauté C ++, donc je ne sais pas ce que la communauté considère comme des connaissances essentielles de nos jours. J'essaie essentiellement de comprendre comment élargir mon répertoire de questions qui peuvent être utilisées pour juger de vraies connaissances C ++ au-delà, par exemple, des bases de la syntaxe.
JasonTrue
2
votre problème n'est pas ce à quoi je m'attendais. J'ai supposé que vous trouveriez quelqu'un qui sait ce qu'est RAII, qui est embauché, et ce n'est que plus tard que vous découvrirez qu'il aspire toujours au codage.
Kevin
1
@ JasonTrue: Je pense que les questions de buzz sont censées être de vraies questions de programmation comme inverser une chaîne. Mais de toute façon, je pense que c'est une bonne question. Vous pourriez également envisager de demander quelles fonctionnalités de c ++ - 0x la personne interrogée pense être les plus intéressantes ou les plus importantes. C'est un peu plus difficile, mais si vous obtenez une bonne réponse, cela signifie probablement de bonnes choses. Et la question peut toujours revenir à `` quelles bibliothèques de boost sont les plus importantes / intéressantes '' si vous obtenez un regard vide.
Kevin

Réponses:

24

Vous semblez avoir constaté que les développeurs C ++ que vous connaissez par expérience sont compétents ne connaissent pas cet acronyme ou même l'expression complète. Cela seul semble indiquer que la question ne convient pas comme question de sélection lors d'un appel téléphonique.

D'un autre côté, vous pourriez arriver au même point par un moyen plus détourné en posant un scénario. Quelque chose comme: "Vous implémentez une classe Log qui va écrire des informations de journalisation dans un fichier. De toute évidence, vous aurez besoin d'avoir une variable membre qui est un descripteur de fichier (std :: FILE *). Où allouez-vous et libérez-vous ce fichier manipuler?" Si le candidat commence à parler de la création d'une méthode open () et close () plutôt que d'allouer le descripteur de fichier dans le constructeur et de désallouer le descripteur dans le destructeur, vous pouvez poursuivre en demandant des choses comme le comportement de leur classe si le le code appelant a soulevé des exceptions, etc.

Justin Cave
la source
Une excellente suggestion. J'aime cette approche.
JasonTrue
Prend trop de temps lors d'un entretien téléphonique.
HelloWorld
15

Je ne pense pas que ce soit une question pratique telle qu'elle est proposée. Je pense que vous trouverez que beaucoup de développeurs tomberont dans le camp "oh, ouais, je ne savais pas qui avait un nom". Je vous suggère de tester les candidats sur le concept et non sur le nom du concept. Donnez-leur un exemple de code et demandez-lui pourquoi il est incomplet ou demandez-leur de démontrer qu'ils connaissent le concept.

GEL
la source
3

Je pense que c'est une question valable. Bien que je ne sache pas à quel point le terme RAII est populaire (dans mon équipe, nous utilisons tout le temps le terme RAII), mais le concept de gestion des ressources est important, surtout si vous voulez également une sécurité d'exception et une sécurité multi-thread. .

Armando
la source
3

Eh bien, je sais que lorsque je veux savoir si quelqu'un est compétent, la première chose que je fais est de vérifier sa connaissance des acronymes. Une fois que c'est établi, je m'assure qu'ils connaissent les noms d'autres technologies que je trouve cool. S'ils sont toujours là après cela, alors je leur demande une liste de leurs couleurs préférées.

Je ne supporte pas ce genre de chose. Je veux dire, à la fin de mon entretien, ce sont des sirènes et des cloches d'avertissement. Je ne veux pas travailler dans un endroit où il importe vraiment que je connaisse des mnémoniques bizarres que mon patron pense être "fondamentaux". Je ne peux pas être dérangé d'apprendre les noms des gens avec qui je traite depuis des années, alors je ne perds pas de temps en cerveau avec de jolis acronymes qui décrivent les meilleures pratiques.

Regardez mon code. Demandez-moi comment je ferais les choses. Je gribouillerai des conneries sur un tableau blanc jusqu'à ce que les vaches rentrent à la maison. Je vais vous coder une application. Ne me donnez pas de questions triviales. Trivia est toujours aléatoire, et ce n'est jamais fondamental.

Satanicpuppy
la source
Je n'ai pas tendance à poser beaucoup de questions sur les connaissances ésotériques lors des entretiens de sélection, mais il y a un peu de diligence raisonnable que je dois faire pour m'assurer que quelqu'un n'est pas complètement incompétent. Par conséquent, je suis à la recherche d'une question ouverte qui me permet de vérifier un certain niveau de connaissances tout en permettant au candidat de montrer ses propres antécédents. Je m'attends à "une" connaissance directe si quelqu'un dit connaître la technologie X sur son CV; ma question se résume à, quelle connaissance dois-je attendre d'un programmeur C ++ qui est une passerelle utile pour poursuivre la conversation?
JasonTrue
4
@jason: Eh bien, je serai probablement capable de me souvenir de l'acronyme RAII pendant quelques mois. Cette connaissance éphémère me rend-elle compétente, même si je n'ai pas touché au C ++ depuis des années? C'est trivial trivial. Demandez-leur comment ils gèrent les serrures et assurez-vous qu'ils comprennent la CONNAISSANCE réelle, pas l'acronyme étrange.
Satanicpuppy
1
@jason: Je suis d'accord. Je ne suis tout simplement pas d'accord pour dire que les bases incluent ce genre de futilités. Un idiot pourrait le savoir, et un expert pourrait ne pas le savoir. Vous basez votre processus de sélection sur quelque chose d'inutile à la compétence.
Satanicpuppy
5
Savoir ce que l'on appelle RAII n'est pas une connaissance essentielle. Mais atteindre automatiquement le modèle l'est.
btilly
2
RAII est un concept fondamental d'un bon C ++, et le terme existe depuis au moins 20 ans. Je pense que le rejeter comme trivial est quelque peu injuste. Bien que vous puissiez avoir de bons développeurs C ++ qui ne connaissent pas le terme, pour moi, ça sent quelqu'un qui ne fait pas de recherches sur leur métier.
Kaz Dragon
1

Si votre but est d'éliminer rapidement le total des incompétents, essayez quelque chose comme ceci:

Test FizzBuzz

Ensuite, vous pouvez laisser les concepts et les pratiques C ++ à ceux qui sont le mieux placés pour évaluer l'expertise C ++.

Harold Bamford
la source
1
J'ai utilisé et reçu cette question fréquemment et je l'ai mentionnée ci-dessus dans mon commentaire, mais je trouve gênant de le demander lors d'une conversation téléphonique de 25 minutes.
JasonTrue
0

C'est une question valable, mais pas pour le dépistage. Je l'ai utilisé comme une question écrite, à discuter lors de l'entretien. Vous pouvez obtenir de nombreuses informations sur les schémas de pensée avec un préavis. En tant que question de sélection, ce n'est qu'un piège désagréable.

david.pfx
la source