Набросаю несколько мыслей по тому, каким я вижу правильное собеседование на вакансию software developer.
На собеседовании работодатель должен предложить кандидату чашечку кофе/чая. Это обязательно! И с этого нужно начинать. Кофе располагает к беседе. Кандидат чувствует себя комфортней, мозг начинает работать лучше. За одной чашкой можно предложить другую, третью, в зависимости, как пойдет беседа. Удивительно, но в силу недоразвитости культуры проведения собеседования, работодатель игнорирует это элементарное действие… Я уже молчу про то, что в идеале бы угостить бокалом вина. =). И далее, соответственно, как пойдет ). Таким образом, из скучной рутины мы превращаем процесс в увлекательное действие. Это первый сценарий.
- Не нужно кандидату взрывать мозг хитроумными задачками. На собеседовании его мозг уязвим и откровенно высосанные из пальца задачи только навредят.
- Идиотские вопросы, типа что такое стек, сколько бит в байте, маразматические – можете ли написать демона под линукс – оставьте себе. Это может обидеть кандидата.
- Если это C++ вакансия – всю сиплюсплюсную лажу оставьте при себе. Вы испортите впечатление о конторе, спросив, можно ли вызвать чисто виртуальную функцию и сказав, что у нас такое часто бывает, выскакивают разные предупреждающие ассерты.
- Все вопросы по COM – держите при себе. Вы устарели. Кандидату неприятно будет это осознавать.
- Хардкорные вроде того, что как узнать, является ли число степенью двойки за O(1) это конечно клево, но кто способен сходу, не зная, родить решение? Зачем это спрашивать?
Ок, что же тогда спрашивать? Элементарно. Никаких заготовок, тестовых заданий, задач на бумаге за отведенное время. Спрашивать нужно о том, что сделал кандидат на предыдущих работах. Конкретно. Никаких абстрактных задачек на поиск пути (хотя можно =), а просто, приближенно к реальности, что и как и почему им было сделано.
Создать контекст и быть внутри этого контекста. Это сложно? Нет. Так почему же лишь единицы это понимают? (единица! =).
И только уже исходя из предпосылок – сделанной кандидатом работы – можно спрашивать связные по теме вещи.
Как-то так. Навеяно ).
Ваша задача, как работодателя, найти, понять, что интересно кандидату. Интересен ли он вам? И смотреть, пересекаются ли ваши интересы, в каких областях и насколько.
комментарии (154)
После этой фразы может очень долго не хватать.
Ваши желания и желания работодателя не совпадает, работодатель должен по своим критериям понять подходим ли ему кандидат или нет. Про волнение на собеседование опытные обычно все знают и готовы делать на это скидку. Любые обиды на простой вопрос должны очень легко обходится. Если кандидат вдруг строит оскорбленного ему просто сообщается «представляете, иногда приходят люди которые немогут ответить на этот вопрос».
Лично я обязательно спрашиваю вопросы самые простые вопросы, даже если уверен что этот кандидат уж точно знает ответ. Сколько раз натыкался на то что человек с хорошим резюме, бэкраундом и производящим впечатление опытного разработчика не может объяснить что такое виртуальные функции или еще что-нибудь из самых основ.
Обычно для начала говорят что-то вроде что виртуальные функции позволяют по указателю на базовый класс вызывать методы фактического производного класса.
Тут скорее был общий вывод сделанный мною для себя: нужно задавать простые вопросы.
Ну а то что наравится, это ожидаемо. Мне бы еще понравилось если бы собеседование бы проводила девушка с 3м размером груди в джакузи, но увы боюсь те специалности где это реально поможет выделить мой уровень мне не интересны.
Вот только думаю после того как вы перейдете на другую сторону стола, вам резко перестанет нравится.
в требованиях C#, MsSQL, владение ООП
в общем, станадартнее некуда)
> обидить
Если убрать все остальные фразы — информационная наполненность топика не изменится.
Ибо он очень наглядно показывает как человек может говорить. Сможет ли он потом на конференс коле сделать нормальную краткую презентацию текущего состояния проекта, сможет ли обрисовать общую картину проблем в проекте. И вообще — может ли нормально общатся. В данном вопрос практически не важно ЧТО человек говорит, важно КАК он это говорит.
ИМХО обязательный вопрос, если конечно соискатель претендует на что-то большее чем просто кодер.
1. приходит шеф к совему специалисту «завтра придет человек напиши 20 вопросов для него, а я поспрашиваю, ну и сделай правильные ответы для меня на отдельном листике»
2. «завтра в 13-00 прийдет человек, никуда не уходи, будем собеседовать, ты по специальности я орг-вопросы»
так вот, первый вариант самый распространенный и самый идиотский… какие я могу написать вопросы да и еще что-бы с однозначными ответами, только такие над которыми простебался топикстартер. второй это чего все хотят но почему-то мало кто делает… видимо руководство боится говорить с собеседуемым о деньгах при сотруднике. хз.
П.С. я «проводил» оба типа собеседований
«я не знаю, но я бы сделал так...»
Пример вопроса: 'что будет, если вызвать метод new File(«foo.txt»).delete()' для залоченного файла?"
«Я не знаю» — достойный ответ, 3 балла.
«Я не знаю, но думаю, что возникнет исключение» — неправильный ответ, но 5 баллов, поскольку именно так и должен был бы вести себя метод, если бы не головотяпство разработчиков из Sun.
Просто незнание — хреново. Незнание + честность — приемлемо. Незнание + мышление — то, что нужно. Доучить — не проблема.
1) Если я беру на вакансию кодера, то мне важно знать, в какой команде он раньше работал и какие системы багтрекинга знает. Так как все задачи будут вполне конкретны и результат ожидается чёткий.
То же относится и к тестировщикам.
2) Если я беру на вакансию тимлиа и прочих архитекторов. Мне не важно какой инструмент человек знает, а важно как он думает. Привести пару задач на собеседовании и послушать, какие решения человек предлагает. Если тишина, то или он ничего не знает, или необщительный. Далее ветвление по профпригодности.
Это так просто. А всякие глупые вопросы спрашивают те, кто не заинтересован в кандидате совсем и не будет драться за закрытие вакансии.
Вы риальне берете на работу людей, которые не могут освоить новую систему багтрекинга за один день?
Само собой, что таких нет смысла дообучать — проще нанять новых.
Со временем это вылечивается.
… и если он начинает при этом вставать в позу «да как вы вообще посмели спрашивать меня про виртуальные функции и вообще ваш COM давно устарел» — это самый лучший момент напомнить себе, что дешевле не брать, чем потом увольнять.
Есть у меня, к примеру, в арсенале типовые вопросы про JDBC. И есть опыт принятия на работу двух человек, которые не стали про него рассказывать — первый сходу сказал, что это устаревшая фигня, а второй честно сказал, что никогда с JDBC не работал и использовал только iBATIS. Первый был уволен через 3 месяца ко всеобщей радости (оказалось, что кроме изучения новых технологий ничего делать не может), второй работает уже больше двух лет.
Эт' да, самый страшный кретинизм интервьюера — жесткое бездумное сравнение с эталонными ответами. Написано у него в опроснике, что правильной оценкой для функции вычисления факториала int f(int n) будет O(n) и за решение с O(1) сразу ставит минус. К сожалению, встречается такое сплошь и рядом.
Понятно, что абстрактное время выполнения зависит линейно от n, но если уж говорить про сложности алгоритмов и асимптотики, то О(n) здесь как-то бессмысленно.
Что забавляет — так это маниакальное упорство, с которым неприменимые для какого-либо разумного использования примеры кочуют из книжки в книжку…
P.S. Кстати, у правильной реализации, считающей факториал для любого «int n», оценка будет существенно хуже O(n).
Ага, я тоже подумал про факториал для длинных чисел :) По моим прикидками что-то вроде O(n^2 log n) получается.
Время прямого обращения по индексу не зависит от длины массива, соответственно это O(1).
А по-моему, не так уж тяжело и додуматься — вопрос ведь скорее на логическое мышление.
Я бы предложил, скажем, вариант ((a^(a-1))>a).
А есть какие-то другие?
Да, это явно вопрос на логическое мышление. Другое дело, что его для отвлечения собеседуемого можно преподнести под видом «словесной головоломки» или какой-нибудь простенькой геометрической задачки (ну, скажем, знаменитой Гарднеровской с дыркой в шаре длиной 6 см)
Возможно, вы с неправильными людьми общаетесь :)
Это не хардкорный вопрос. Это в принципе совершенно тупой вопрос.
Любой человек, умеющий думать головой, способен пройти цепочку «Надо за О(1) -> надо в несколько операций -> битовая арифметика -> чем отличается степень двойки от нестепени? -> тем, что в ней ровно один единичный бит -> за одну операцию можно его убить -> маска n — 1, получим ноль»
Впервые я на него ответил не зная ответа.
Логика мышления была простая:
0. O(1) т.е. простые преобразования и сравнение
1. 2^x это 1 и x нулей в двоичной системе — рисуем это на бумажке
2. Раз перешли к двоичной системе -> битовые операции
3. Как можно убедится что у нас и 1 и 0 на месте точно -> AND
4. С чем нужно сделать AND -> c 0 в начале и (x-1) единичек -> рисуем это на бумажке
5. Ой, да это же у нас 2^x-1
6. Ответ
На все примерно минута, собеседования я проходил на втором курсе.
Более того, на другом собеседовании когда мне спросили как лучше сохранять двухцветные картинки я предложил построчное RLE, еще не зная о таком.
Если нет (ах, какая жалость, ах, какой сюрприз:), то предложил бы считать количество единиц выполняя побитовый сдвиг и операцию and с единицей. Поскольку, для работы целыми числами в современных процессорах мы используем слово в 32 бита или 64, то количество выполняемых операций будет C*32 либо C*64, таким образом, сложность нашего алгоритма О(1).
Если бы не согласить с этим решением и предложили еще подумать, не знаю догадался бы я до минус 1 (не согласен с комментаторами, что оно такое уж очевидное).
В любом случае, был бы удивлен, если бы отказали в работе из-за того, что не нашел точного решения. Формалисты, ну их нафиг, будут и работать требовать по свистку. Хотя в моей практике такого, конечно, никогда не было, с той стороны сидят точно такие же люди, и им важно не столько решение задачи, сколько отношение к ситуации (главное, без паники, всего знать все равно не возможно, для этого есть интернет/коллеги о чем и нужно разъяснить интервьюерам:)
Вообще, формулировка задачи какая-то странная. Что вообще имеется в виду под О(1), независимость от чего? Если, например, от числа бит, то ответ про (a-1) — неправильный, потому что эта операция будет O(n) от числа бит. А если число бит ограничено, то получится О(1) даже если просто двойку в цикле в степень возводить. Может, имелось в виду решение «в одну строчку», а О(1) для красоты нарисовали?
— реализовал инвертированный индекс
— ух ты, а что это? как это работает? как реализовали? почему так? какой дизайн? и тд. почему решили сделать «так», ведь «вот так» же эффективней, не? а что с многопоточностью? и тд.
Вот вы упомянули многопоточность, вы точно уверены что разбираетесь в ней? Можете назвать три главные проблемы, объяснить их суть так чтобы поняла моя мама, которая едва разобралась с мобильным? Точно можете? А перечислисть примитивы синхронизации и описать назначение каждого? А то же самое, но опять для мамы?
Все же мне видится что это другая крайность.
Есть вопросы-изюминки, совершенно нелепые с точки зрения знающего, но незнающий на них срезается. Их мало, они ценны. Надо понимать психологию обучения: что в учебнике читают, а что пропускают, что запономинается, а что нет.
Я не спрашиваю напрямую о сложных вещах, а обрисовываю жизненную ситуацию, предлагая решить её, опять таки, в рамках истории далёкой от IT. Это позволяет проверить не вызубренные формулировки, а навыки решения проблем.
Кроме того, ставить кандидата в стресс, в том числе заумным вопросом, в зависимости от должности (старший разработчик), может быть вполне нормально. Впадёт ли человек в панику или постарается упорядочить процесс решения? Будет тратить время на безуспешные попытки или потратив заранее определённый лимит времени остановится? Эта разница гораздо важнее правильного ответа.
Т.е. с одной стороны мне проводящему интервью очень хочется их задать — но есть понимание того, что можно во первых заранее сильно разочароваться, во вторых можно отрицательно настроить пришедшего.
Как проходящему собеседование, я тоже предпочел бы их не слышать.
Вот такой диссонанс.
На последнем моем собеседованияя меня в ступор поставил вопрос битовое представление -1 в float. Я неожиданно для себя понял что с битовыми операциями и представлениями не работал уже лет пять (ну исключая сдвиги). Все что я выдавил из себя это то что там отдельный бит на знак. Так же я еще завалили парочку подобных вопросов. Впрочем, я прошел интервью в результате.
И скорее нужно поискать где используются другие представления, чем этот стандарт.
Или я вас не понимаю… и вообще не очень могу вспомнить представление float без знакового бита.
Пускай он технический геней — но если он внятно не может разговаривать, не может поддержать беседу, не имеет чуства юмора и т.п., то он в команде не желателен. И все это нужно проверить на интервью.
Практика применения agile-техник показывает, что 100% программистов умеют полноценно вербально общаться.
Проблема обычно либо в наборе кодеров-за-пятачок-пучок вместо программеров или в менеджменте, который в состоянии только врываться к программерам и орать на них. А так — все они могут.
просто нужно уметь выделять для него задачи
пусть себе сидит хмурый в углу и щелкает задачки, которые оказались непосильными для остальной общительной и юморной части команды
Т.е. в идеальном случае гений все же не нужен… в реальности да — как правило ему место находится. Но это только потому что делать все идеально дорого, а не от того что так хочется.
Взяте на работу гения это попытка экономить на самом деле — разумная, но плохая.
Т.е. наличие гения в команде сокращает время разработки, но увеличивает риски.
Плюс правильно решенная задача с точки зрения гения это не всегда то что хорошо поддерживается. Он элементарно может применить алогоритм который он считет очевидным, но потом когда потребуется модификация кода с этим алгортмом простой программист будет разбиратся долго. И вот тут очень тонкий баланс — а стоит эти 0,2% ускорения в общей системе от сложного алгоритма, если потом его модификация занимает человеко-месяцы.
Сроки нарисуем исходя из того, что у нас средненькая по уровню команда, а гений нам поможет эти сроки сократить. Разве это плохо? Раньше закончили проект, раньше взяли другой — в единицу времени заработали больше денег. А если уж неразговорчивый гений нас неожиданно покинул, то просто сделали задачу в срок.
И обращу Ваше внимание, я сверху написал «не будет лишним в большой команде».
А насчет того что задачку никто не сможет поддерживать.
У нас было заведено (когда я работал в офисе) решения сложных задач описывать. Даже если этот гений с трудом поддерживает беседу на отвлеченные темы, в профессиональных терминах он решение объяснить сможет. Ну не видел я людей которые не умеют рассказать как они это сделали. Описывается это и в коде и в документации, а для особо интересных задач можно провести семинар, где докладчик расскажет что и как сделал — поднимет эрудицию всей команде.
Хотелось бы подетальнее узнать, как вы предлагаете выяснить уровень подкованности кандидата в тех или иных областях.
1. как реализовали?
2. как тестировали?
3. зачем изобрели велосипед?
4. с какой нагрузкой справляется? и тд.
Идея плясать от сделанной работы и уже в этой канве выяснять уровень владения технологиями мне нравится. В общем то так и собеседуемому будет проще вспомнить чем он владеет.
Но для такого разговора нужно самому, что называется, быть в теме. А это не всегда возможно, например если если вы нанимаете узкого специалиста. Тут уже он может Вам лапши навешать сколько угодно. А вопросы на общую эрудицию помогут отсеять «балаболку», несложные задачи на соображалку покажут остроту и гибкость ума. Можно не делать их обязательными, дабы не утомлять кандидата, который Вам подходит по другим критериям, но если он согласится их взять и успешно решит — это дополнительный плюс.
И… в очередном номере «Новости ОТР» под обложкой нашёл последний номер Playboy. Это правильное собеседование?
Что Вы имели в виду, когда это написали?
А грамотный человек ответит на это не особо задумываясь, последовательность шагов известна.
Имхо, грамотный человек на вопросы с подобной формулировкой должен отвечать «могу» не задумываясь, даже если он не делал такого раньше ни разу.
Один лично мне знакомый человек каждого спрашивает про оператор присваивания. Начинающие — путанно рассказывают, профессионалы — просто рассказывают, юные гениальные дарования, непригодные для работы — встают в позу. Сам этим вопросом не пользуюсь, но идея мне нравится.
Молодой человек, вы еще очень мало собеседований провели сами.
У яндекса в свое время был вопрос в онлайн-тесте для перлистов о том, что вернет функция defined для пустой строки, и несколько вариантов ответа, из которых надо выбрать правильный. Функция настолько часто используемая, что неправильно ответить на нее может только полный чайник. Оказалось, что половина пришедших людей не может ответить на этот вопрос или объяснить решение хоть как-нибудь! Половина!
Я к тому, что собеседование нужно начать «как с умным человеком». А на вопросы про биты в байте скатываться уже позже.
Так что если дошли до битов в байте — это явно идет анализ «ну может хоть помощником младшего кодера взять?»… :)
Кандидату приятно чтобы ему принесли кофе, спросили что он делал раньше, и, независимо от ответа, сказали «берем!».
Если вы такой обидчивый кандидат — покатайтесь в общественном транспорте.
Ах, да.
Кандидату это неприятно :)
Удачи в поисках работы
3й коммент.
А что вы делали на предыдущих работах?
«Если это C++ вакансия – всю сиплюсплюсную лажу оставьте при себе».
«Все вопросы по COM – держите при себе. Вы устарели.»
Налейте мне чаю и ничего не спрашивайте…
Учтем, что у нас есть хотя бы модульное тестирование. Буду признателен за пример.
Есть и другие вопросы. Некоторое количество ошибок (в том числе и на этот в общем-то простой вопрос), естественно, допустимо. Всё по-доброму :)
Я так понимаю, что кошерный кандидат должен сразу при цифре 8 представить в голове байт, и количество возможных значений каждого бита в двоичной системе?
Молодец, в таком случае.
> Я так понимаю, что кошерный кандидат должен сразу при цифре 8 представить в голове байт, и количество возможных значений каждого бита в двоичной системе?
Я вам гарантирую, что кандидат, который плотно программировал на C (или чём-то настолько же низкоуровневом) нечто большее чем лабы в университете, может неправильно ответить на этот вопрос исключительно по рассеянности или другой подобной причине чисто психологического характера (волнение и т. п.).
Вот нас в группе три человека: два программиста ассемблер+С и электронщик.
Электронщик тоже навскидку называл 256 автоматом, хотя программировать он не умеет вообще никак и ни на чем.
Просто если начинаешь задумываться «а почему 256?», то мы оба программиста вспомнили в первую очередь про десятичную математику (я — 16*8*2, он помнил что 2^10 это 1024 и два раза на два поделил) и только во вторую мы вспомнили про байт и т.д.
Мне интересно, говорит ли это о том, что мы ошиблись с выбором профессии или еще о чем-то?
P.S. Я просто увидев ваш комментарий, представил себя на месте человека которому задали вопрос про 2^8 степени, ну и немного меня смутило что байт пришел в голову именно во вторую очередь.
С порога кандидату даются 6 задачек, совершенно несложных, которые надо решить за любое (разумное) время.
У нормального претендента задачи вызывают плохо скрываемую улыбку и на них уходит минут 15 времени.
У ненормального претендента эти же задачи вызывают напряжение и попытку объяснить, что «тут есть стопицот вариантов решения и надо точнее формулировать условия».
Собственно говоря, решение этих задач определяет дальнейший ход разговора. Если они не решены, или решены неправильно, то и говорить особо не о чем. И время не потрачено, и усилий не приложено.
А если все сделано более-менее верно, то тогда можно и прошлых заслугах разговаривать, и о жизненных интересах.
Потому что часто на собеседование прорывается такое количество откровенного шлака с «прекрасными» резюме, что кофия на всех не напасешься.
После того, как какой-нибудь кандидат будет утверждать что два, вы поймете, что вопрос все-таки не теряет актуальности :-)
У меня на собеседовании такое было :-)
Вопрос правда не напрямую задавался, а кандададат спросили почему он такой-то путь решения задачи предложил. Ну, он и говорит — что в этих восьми разрядах может быть только еденица или ноль, два положения :) Вопрос несколько раз переспросили… Кандидат стоял на своем :) Меня до сих пор терзает вопрос — что так могло кандидата сбить с понталыка?..
1. бутыль шнапса
2. вопрос: «Ты меня уважаешь?»
А вообще топик клевый, чего уж там…
-Хай, я к вам на работу.
-Хай, ок принят, через месяц выпнем.
на мой взгляд надо смотреть опыт и возможность найти и использовать нужную информацию… или ваши программисты должны сами все изобретать? не должны… значит, они должны либо вспоминать то, что уже использовали, либо быстро усваивать новый материал…
программист это вообще не знание какого то языка, а знание возможностей его… при таком подходе программисту будет по барабану, на чем писать… за месяц что угодно усвоит. не на супер уровне, но…
int fputcsv ( resource $handle, array $fields [, string $delimiter = ',' [, string $enclosure = '"' ]] )
Какая разница, если человек знает что есть такая функция и это дело 3 секунд посмотреть в справочнике. Тем более редакторы подсказывать умеют :-)
А в одной конторе вообще попросили написать класс для ведения реестра домов (разные типы домой, разная этажность, число квартир) и класс, который будет предлагать конкретнеы квартиры в зависимости от числа жильцов и т.д.
Написал за 40 минут. В итоге выяснилось что я не правильно задание понял.
Но ведь не переспросил же «а правильно ли я понял?» :)
Некоторые критерии, которые я применяю на практике.
1) Не стоит делать один шаблон под всех людей и все типы вакансии. Для вакансий старшего разработчика и помощника старшего разработчика стиль беседы и тесты могут очень сильно отличаться.
2) Большинство критичных для найма на работу вещей можно узнать и до собеседования. А именно:
— я прошу прислать пример кода. Можно небольшой кусочек. Очень часто по примеру присланного кода можно вообще не встречаться, т.к. присланное не соответствует озвученному в резюме. И наоборот — студент(редко) может прислать очень хороший код.
— я прошу рассказать кратко о 2-3 крупных проектов. Статистически чудеса редко бывают. Если до 30 лет(в пик работы мозгов) разработчик не сделал ничего интересного, например, разрабатывая и суппортя пару мелких проектов для туристической компании, то вряд ли его амбиции и профессионализм будут полезны при серьезной разработке.
— я прошу прислать информацию о рекомендациях от предыдущих работодателей. Если таких нет, то это весьма странно. Например, при 5-7 летнем опыте.
3) Собеседование для меня это в первую очередь просто общение с человеком. На основные нужные мне скилзы и качества я уже его\ее проверил. На собеседовании я просто общаюсь с кандидатом, проверяя общий кругозор, комфортность общения. А также рассказываю кандидату про компанию и работу. Решение в первую очередь принимается о том, насколько комфортно будет работать с человеком и впишется ли он в команду.
Вопросы лучше подбирать без подвохов, такие где до простого решения можно додуматься самому. Ключевое слово — додуматься, как правило, не надо спрашивать то что требует очень узких знаний. Хорошо если вопрос можно углубить — это поможет отличить очень хорошего специалиста от просто хорошего.
Я всегда прошу в одном из вопросов писать код, т.к. к сожалению видел много людей которые либо уже разучились код писать и считают себя крутыми архитекторами либо еще не научились но считают себя крутыми хакерами.
Вопросы про разработку архитектуры приложения, системы или сервиса спрашиваю только достаточно толковых/опытных. С остальными это как правило выброшенное время, да и с более слабыми кандидатами на это редко хватает отведенного на интервъю времени.
Собеседование — это проверка на прочность. Чем больше тебя «отдерут», тем лучше. Я вспоминаю свое собеседование на текущую работу. Это было самое сложное и приятное событие. Без всех этих что любите/умеете/хотите/мечтаете, а конкретно по делу — как работает/исправляется/делается.
А домашняя работа для соискателя — это было бы, во-первых, интересно, во-вторых, проверяло бы, готов человек работать вне рабочего времени сперва на себя, а потом на работодателя. Не хотите такое делать? Ну так не приходите на собеседование и не делайте. Правила устанавливает тот, кто ищёт себе хорошего работника, а не наоборот. При этом не стоит потом друзьям говорить о «сволочах, которые моим неоплаченным трудом хотят заработать», к которым вы в итоге из гордости и глупости не пошли.