Является ли «Объяснить идиому RAII» хорошим проверочным вопросом C ++? [закрыто]

13

Компания, с которой я работаю, попросила меня проверить кандидатские телефонные звонки, чтобы убедиться, что они не смущаются при отправке кого-либо потенциальному клиенту.

Оказывается, довольно много людей были назначены на роль разработчика C ++. Я не трачу много времени на C ++, но я сделал несколько тривиальных и нетривиальных проектов на языке. Я подумал, что «Объяснить идиому RAII» было бы хорошим вопросом софтбола, на который большинство серьезных разработчиков C ++ могли бы ответить в полусне, и позволил бы мне перейти к более интересным вопросам об опыте. Но оказывается, что люди, которые имеют опыт C ++ более 10 лет, не распознают этот термин, даже если я расширю акроним до «Приобретение ресурсов - это инициализация». Один кандидат зашел так далеко, что сказал, что, по его мнению, не всегда практично применять эту технику при разработке Windows, что, на мой взгляд, было странным чувством, но я видел несколько примеров, которые, возможно, подтверждают эту точку зрения.).

Даже пара разработчиков C ++, которых я знаю достаточно хорошо, чтобы судить об их компетентности, сказали, что они не распознали этот термин, но, прочитав краткое изложение техники, сказали: «О, да, я не знал, что у него есть имя. Я просто думать о тех вещах, как о чем-то, что вам просто нужно сделать ". Я помню термин из второго издания книги Страуструпа, хотя в то время не было полного воздействия.

Итак, "Можете ли вы объяснить мне идиому RAII?" честный вопрос отбора? Разумно ли ожидать, что все компетентные разработчики C ++ поймут это? Является ли термин более эзотерическим, чем я мог бы подумать? Предполагая, что кандидат не знает этого термина, есть ли дополнительные вопросы, которые могли бы помочь мне выяснить, насколько они усвоили методы, которые заставляют RAII работать? Есть ли лучшие альтернативные вопросы, которые дают кандидату некоторую свободу ответов и помогают ему продемонстрировать свое понимание разработки на C ++?

Редактирование, чтобы добавить : чтобы уточнить, я не из тех интервьюеров, которые дисквалифицируют людей, потому что они не знают модных слов и сокращений. Тем не менее, я думаю, что разумно ожидать, что опытный программист на C ++ усвоил передовой опыт управления ресурсами. Я также думаю, что важно убедиться, что кандидат понимает некоторые «основы» технологии, в которой он претендует, прежде чем перейти к более интересным вопросам о дизайне, решении проблем и т. Д. Я думаю, что то, что я ищу, - это хороший способ задавать открытый вопрос, подходящий для использования при просмотре коротких телефонных звонков, который я могу использовать, чтобы оценить базовое понимание кандидатом хороших методов управления ресурсами в C ++, прежде чем задавать «сложные» вопросы.

JasonTrue
источник
3
«Даже пара разработчиков C ++, которых я знаю достаточно хорошо, чтобы судить об их компетентности, сказали, что они не распознали этот термин». Ладно. «Итак,« Можете ли вы объяснить мне идиому RAII? », Вопрос справедливой проверки?» Зачем спрашивать? Вы не могли найти людей, которые знали об этом. Что еще нужно знать, чего вы еще не знаете? Возможно, вам следует преуменьшить эту тему (так как вы уже знаете ответ) и сосредоточиться на «Есть ли лучшие альтернативные« более простые »вопросы», которые могут быть интересными. За исключением того, что это извращенное мнение, которое плохо переносится.
С.Лотт
9
Идиомы меняются, а хорошая практика - нет. Вместо того, чтобы спрашивать о конкретной идиоме, а просто спрашивать: «Какие шаги вы предпринимаете при разработке класса, чтобы убедиться, что он не протекает?»
Blrfl
Справедливо, хотя размер моей выборки невелик, и я больше не активно участвую в сообществе C ++, поэтому я не знаю, что сообщество считает необходимыми в наши дни. По сути, я пытаюсь понять, как расширить свой перечень вопросов, которые можно использовать для оценки реальных знаний C ++, помимо, например, основ синтаксиса.
JasonTrue
2
ваша проблема не то, что я ожидал. Я предполагал, что вы найдете кого-то, кто знает, что такое RAII, будет нанят, и только позже вы обнаружите, что они все еще отстой в кодировании.
Кевин
1
@JasonTrue: Я думаю, что вопросы о шипучих словах должны быть реальными вопросами программирования, такими как изменение строки. Но в любом случае я думаю, что это хороший вопрос. Вы также можете спросить, какие функции в c ++ - 0x респондент считает наиболее интересными или важными. Это немного сложнее, но если вы получите хороший ответ, это, вероятно, означает хорошие вещи. И вопрос всегда может вернуться к «какие библиотеки поддержки наиболее важны / интересны», если вы видите пустой взгляд.
Кевин

Ответы:

24

Похоже, вы обнаружили, что разработчики C ++, которых вы знаете по опыту, компетентны, незнакомы с этим сокращением или даже с полным выражением. Это само по себе может указывать на то, что этот вопрос не подходит для проверки во время телефонного звонка.

С другой стороны, вы можете добраться до той же точки более окольным путем, изобразив сценарий. Что-то вроде: «Вы реализуете класс Log, который будет записывать информацию журнала в файл. Очевидно, вам потребуется переменная-член, которая является дескриптором файла (std :: FILE *). Где вы размещаете и освобождаете этот файл? ручка?" Если кандидат начинает говорить о создании методов open () и close (), а не о выделении дескриптора файла в конструкторе и об освобождении дескриптора в деструкторе, вы можете задать вопрос о том, как поведет себя его класс, если вызывающий код вызывает исключения и т. д.

Джастин Кейв
источник
Отличное предложение. Мне нравится этот подход.
JasonTrue
Занимает слишком много времени в телефонном интервью.
HelloWorld
15

Я не думаю, что это практический вопрос, как это предлагается. Я думаю, вы обнаружите, что многие разработчики попадут в лагерь «о, да, я не знал, что у этого есть имя». Я хотел бы предложить вам проверить кандидатов на концепцию, а не название концепции. Дайте им пример кода и спросите, почему он неполный, или попросите их продемонстрировать, что они знают эту концепцию.

ГЕЛЬ
источник
3

Я думаю, что это правильный вопрос. Хотя я не знаю, насколько популярен термин RAII (в моей команде мы все время используем термин RAII), но концепция обработки ресурсов важна, особенно если вы хотите также исключительную безопасность и многопоточную безопасность ,

Armando
источник
3

Ну, я знаю, что когда я хочу узнать, компетентен ли кто-то, первое, что я делаю, это проверяю его знания аббревиатур. Как только это будет установлено, я уверен, что они знают названия других технологий, которые, на мой взгляд, звучат круто. Если они все еще там после этого, тогда я попрошу у них список их любимых цветов.

Я терпеть не могу такого рода вещи. Я имею в виду, на моем конце интервью, это сирены и предупреждающие звонки. Я не хочу работать в месте, где действительно важно знать причудливую мнемонику, которую мой начальник считает «фундаментальной». Я не могу беспокоиться о том, чтобы выучить имена людей, с которыми я имел дело в течение многих лет, поэтому я уверен, что, черт возьми, не теряю мозговое пространство с милыми сокращениями, которые описывают лучшие практики.

Посмотри на мой код. Спроси меня, как я буду делать вещи. Я буду рисовать дерьмо на доске, пока коровы не вернутся домой. Я напишу вам приложение. Не задавай мне вопросов по пустякам. Викторины всегда ударить или пропустить, и это никогда не является фундаментальным.

Satanicpuppy
источник
Я не склонен задавать много вопросов по эзотерическим знаниям при отборе интервью, но я должен проявить должную осмотрительность, чтобы убедиться, что кто-то не совсем некомпетентен. Соответственно, я ищу открытый вопрос, который позволяет мне проверить некоторый уровень знаний, позволяя кандидату показать свой собственный опыт. Я ожидаю, что «некоторые» откровенные знания, если кто-то говорит, что они знают технологию X в своем резюме; мой вопрос сводится к тому, какие знания я должен ожидать от программиста C ++, который является полезным входом в дальнейшие разговоры?
JasonTrue
4
@jason: Ну, я, наверное, смогу вспомнить аббревиатуру RAII на несколько месяцев. Это эфемерное знание делает меня компетентным, даже если я не касался C ++ годами? Это содержательные мелочи. Спросите их, как они справляются с блокировками, и убедитесь, что они понимают фактическое ЗНАНИЕ, а не странную аббревиатуру.
Satanicpuppy
1
@ Джейсон: я согласен. Я просто не согласен, что основы включают в себя такие мелочи. Идиот может знать это, а эксперт - нет. Вы выбираете что-то, что не имеет отношения к навыку.
Satanicpuppy
5
Знание того, что называется RAII, не является необходимым знанием. Но автоматически тянется к шаблону.
Btilly
2
RAII - это основополагающая концепция хорошего C ++, и этот термин существует не менее 20 лет. Я думаю, что отклонять это как пустяки несколько несправедливо. Хотя у вас могут быть хорошие разработчики на С ++, которые не знают этого термина, для меня это пахнет кем-то, кто не исследует свое мастерство.
Каз Дракон
1

Если ваша цель - быстро отсеять некомпетентных, попробуйте что-то вроде этого:

Тест FizzBuzz

Затем вы можете оставить концепции и практики C ++ для тех, кто в лучшем положении для оценки опыта C ++.

Гарольд Бамфорд
источник
1
Я часто использовал и получал этот вопрос и упомянул его выше в своем комментарии, но мне неловко спрашивать в 25-минутном телефонном разговоре.
JasonTrue
0

Это правильный вопрос, но не для проверки. Я использовал это как письменный вопрос, чтобы обсудить его на собеседовании. Вы можете получить представление о шаблонах мышления, предварительно уведомив об этом. В качестве проверочного вопроса это просто неприятная ловушка.

david.pfx
источник