Добрый день читатели! Не так давно я начал искать работу на позицию junior разработчика. Даже благодаря моему скромному резюме мне удалось побывать на не малом количестве собеседований за сравнительно малый промежуток времени. Из каждого собеседовании я выносил для себя что то новое, где то были мои проколы, но гораздо интереснее было замечать фэйлы меня собеседующих. Собственно о таких проколах я и хотел бы рассказать.
Здесь не будет представлено типичных вопросов-ответом, и наверняка данный материал будет больше полезен собеседующим, нежели тем, кого будут собеседовать. Хотя в конце статьи я выделил несколько, на мой взгляд, хороших правил при проведении собеседования. Думаю, с ними будет полезно ознакомиться всем.
Думаю стоит заметить, что данный материал не претендует на истину в последней инстанции. На хабре время от времени появляются статьи на данную тематику. Я решил описать поиск работы с позиции junior developer’а, в поисках определенной вакансии, которая соответствовала определенным требованиям (кто сейчас подумал про деньги – у вас плохой подход к набору персонала:)). Для обобщения названия компаний опущены.
Сразу оговорюсь, что я рассматриваю именно собеседования на вакансию junior разработчика, и заранее соглашусь, что многое сказанное здесь может быть не применимо или не так актуально к позиции middle/senior. Все положительные или отрицательные моменты, которые мне запомнились, я решил сгруппировать и дать им название. Получилось нечто похожее на паттерны и антипатерны, с ними я и предлагаю ознакомиться.
Антипатерны собеседования
1) Шаблонные вопросы
Вот скажите на милость, зачем senior программисту а тем более тимлиду утруждать себя выдумывая новые коварные вопросы если можно зайти и просто вбить в поиск что то наподобие ”вопросы на позицию C# junior developer”. Это же так чудесно, когда через секунду ты можешь распечатать эти стандартные вопросы, которые в полной мере отображают требуемые знания. Все мы можем представить идеальный вариант, когда собеседующий программист спрашивает с листа список вопросов с сайта, который кандидат читал 15 минут. Тут уж точно можно надеяться на полное взаимопонимание. Конечно, это случается крайне редко, ведь Google/Yandex/Bing не выдают одинаковые результаты кандидатам на вакансию и людям проводящим собеседование.
Если говорить абсолютно серьезно, на мое мнение, единственный человек, который имеет право задавать стандартные вопросы – это HR. Все технические вопросы можно и нужно изменить (именно «изменить» а не «заменить»), чтобы заставлять думать отвечающих а не произносить один и тот же текст по сто раз.
Я свое первое собеседование полностью можно сказать провалил, поскольку не ответил на несколько таких вот вопросов, зато второе напомнило мне проверку таблицы умножение. У меня иногда возникало чувство, что собеседующие меня люди и правда читали туже статью что и я 15 минут назад. Но самое печальное, что кроме этих шаблонных вопросов мне так нечего и не задали.
2) Зачем спрашивать по вакансии?
Данный антипатерн, как мне подсказывает логика, встречается крайне редко. Но когда он вам попадется, знайте вам попалась большая удача. Когда дорастете до тим- лида сможете рассказывать истории в стиле а вот мне как то раз на собеседовании….
Суть его заключается в банальной вещи. Вас просто не спрашивают по вакансии. Вообще:). Все, что Вы готовили, все к чему готовились, оставьте при себе. Бывает такое, когда в компании просто нет специалистов вашего направления, но зато есть другие хорошие специалисты. Скажем в компании нет iPhone программистов, зато есть Android разработчики, которые с удовольствием поспрашивают вас о тонкостях activity lifecircle). Сюда же можно причислить замечательный вопрос собеседующего: “Я не знаю как это реализовано на языке X, но на языке Y это реализовано так и так. Сравните мне, пожалуйста, реализации.” Если честно, то на таком собеседовании
Если учесть что вы идете как раз на позицию junior разработчика, возникает резонный вопрос: а у кого собственно вы будете учиться и на чьем примере повышать свой скил? На этот вопрос антипаттерн ответа, к сожалению, не дает.
3) Проведем собеседование всей компанией)
Хорошо когда вас в начале собеседования PM рассказывает о проекте и компании и параллельно исполняет роль HR (отсутствием такового). Плохо когда потом при техническом интервью, когда тебя должен спрашивать тех. Специалист, PM сидит рядом и внимательно смотрит то на тебя то на тех. специалиста. Опять же из собственного опыта, мне кажется, что на таком собеседовании технарь переживает даже больше нежели тот кого собеседуют. По сути, он же проводит собеседование на глазах у начальника). К тому же в данном случае тот кого собеседуют толком не знает перед кому отвечать. Если вообще игнорировать PM, то получается что то вроде допроса под. наблюдением за стеклом, только без стекла.
Этот антипатерн скорее мое личное убеждение как должна протекать собеседование, но все же, может, кто то найдет его резонным.
4) Повторенье мать ученья.
У вас никогда не было чувство дежавю при прохождении очередного собеседования? Особенно когда приходиться отвечать в очередной раз что такое singleton и с чем его едят. Наверное, бывает. Особенно если приходиться отвечать 2 раза в одной и той же компании, да еще а на одном и том же собеседовании. Случается такое когда ПМ решает что он(или она) универсален, и тоже может проводить тех интервью. Особенно забавно, когда такое интервью идет после собеседования с настоящим технических специалистом, а в содружестве с первым, представленным антипатерном, получается вообще комбо.
Не секрет, что иногда, когда не правильно отвечаешь на вопрос, тебе тут же говорят правильный ответ. В случае с данным антипатерном предоставляется уникальная возможность завалить все технические вопросы, а затем сразу же исправиться.
5) Никогда не давайте тестовые задания домой. Никогда!
Думаю, тут пояснять нечего не нужно. Опять же зачем тратить драгоценно время работающих людей для разбора чьего то тестового задания. Ведь на собеседовании все уже выяснили, и главное, что человек согласился работать за еду). Подумаешь, сущий пустяк, что у него все переменные называются не длиннее 5 символов (3 из которых обычно одинаковые).
Да и вообще опять же это тестовое задание нужно еще придумывать, и кто этим должен заниматься? А что, тимлиду больше всех надо? У него и так работы хватает. Кандидат же ответил правильно на все вопросы на собеседовании (опять вспоминаем первый антипатерн). Подумаешь, большое дело, что человек не понимает почему нужно писать
List values = new ArrayList();
вместо ArrayList values = ….;
Ну и кому же не хочеться увидеть названия в стиле ArrayList arrayList = new ArrayList();
и улыбнуться. Жаль только, что с применением данного антипатерна, все эти, вызывающие улыбку, вещи обычно обнаруживаются после приблизительно месяца работы.
Существует также частный случай. Когда предлагают выполнить какое нибудь “легкое” задание тут же. Конечно, при этом кандидат должен за секунду привыкнуть к новой раскладке (идеально если это еще и нетбук, чтобы кандидат смог показать весь свой solve problem скил), и если этого окажется недостаточно, можно еще дать другую среду разработки (да для .Net не много вариантов:), но есть же блокнот. Ведь я надеюсь все знают как компилировать С# программу через консоль?)
6) Та это вообще не проблема.
«Так это вообще не проблема» или «У нас много вариантов»(без уточнения этих самых вариантов) — такой ответ можно получить на очень много вопросов.
Обычно данный антипатерн встречается в маленьких компаниях, или компаниях недавно основанных. В первом случае там просто большая дружная семья и они знают, что у них все эти проблемы решаются очень легко, во втором случае даже сами основатели еще не знают как они решают (будут решать) подобные проблемы. Но не в первом и тем более во втором случае рассказать кандидату о подходах к решению проблем не получается.
Наверное, следует сказать, что чем больше бюрократии в компании, тем реже можно услышать подобный ответ. Так как в больших компаниях все как правило ясно налажено.
BestPractices собеседования
Не секрет, что подход к разработке ПО меняется со временем. Так же меняется и подход к найму сотрудников. И если HR’ы, хоть как то стараются улучшить свои навыки собеседования (я в это искренне верю, все таки им за это деньги платят), то с технической стороны вопросы «Чем отличается ArrayList и LinkedList?” еще долго не уйдут со сцены. Сейчас я хотел бы привести несколько пунктов, из которых, по моему мнению, должно состоять хорошее собеседование.
1) Распараллеливание задач.
Сразу оговорюсь, что это довольно специфический пункт. Особенно для вакансии типа junior. Но так как я искал работу мобильного разработчика, то он подошел идеально, когда на технической части меня собеседовали двое специалистов. Один спрашивал стандартные вопросы по языку, коллекциям и паттернам. Короче стандартное junior stuff интерв’ю. А второй специалист спрашивал именно по тонкостях мобильной платформы.
Сразу виден минус для компании виде потери работоспособности сразу двумя сотрудниками, но с другой стороны исключается субъективное мнение и интервьюеры имеют больше возможностей лучше подготовить свою часть.
2) Про все что вы не спросили – должен рассказать вам HR.
В описании одного антипатерна я оговаривал, что единственным человеком со стандартным набором вопросов должен быть HR. Причем он должен сказать вам ответы на эти вопросы, даже если вы их (вопросы) не задали. Почему то никто не забывает оговорить размер ЗП, но не все вспоминают спросить про рабочий график, дрескод, возможность командировок, оплаты за переработки и т.д. Собственно тут вина частично ложится и на плечи того кто ищет работу. Ведь компания не может знать, что вас устроит, а что нет, поэтому лучше всего, если вы это будете выяснять заранее и сами. Думаю, само собой понятно, что HR’а также рассказать и про все плюсы, которые присутствуют в компании.
3) Все плюшки компании сразу.
Я думаю HR’ам не нужно рассказывать как хантить людей. Но штука в том, что хантить на позиции junior никто обычно и не спешит. И, обычно, кандидат узнает о компании максимум информации именно при собеседовании с HR’ом (исключая конечно крупные компании и всевозможные порталы с отзывами). Когда то слышал в одном интервью, что компания предоставляла место в детском саду и это было неслабым бонусом для «семейных» программистов. Если вы даете MacBook и Android девайс в личное пользование, не забудьте сказать об том. 2 монитора на рабочем месте тоже преимущество. Поверьте, так и есть. Когда то на хабре была статься про стулья. Так вот там были ссылки на стулья вплоть до 1000$. Не каждый программист позволит себе такой даже домой. Бывал я в компаниях, где такие стулья у каждого и никто не сказал об этом как о плюсе компании(!!).
4) Четко определенные цели и задачи.
Здесь хорошо если обе стороны понимают что они хотят от кандидата/позиции.
Компания, которая берет себе junior программиста должна четко понимать, кого она хочет из него сделать через лет 3-4. Приблизительно это понимание и должен рассказывать кандидату HR или PM. Хорошо если кандидату объяснять чем он будет заниматься на ближайшем проекте, но еще лучше если ему расскажут что из него выйдет через год – полтора работы на данной должности (опять же, если все, что вы можете сказать это «зарплаты будут выше средних по рынку», то я бы к вам в компанию не пошел).
Кандидату важно понимать, что он хочет от этой работы. Я понимаю, что многие устраиваются работать на позицию junior фактически на первую работу, набраться опыта в ООП, в работе в команде, поучаствовать в реальном проекте в конце концов. Но почему то мало кто осознает, что эта первая работа определяет все дальнейшее карьерное развитие (в большинстве случаев) и ваш профессиональный язык в программировании. Сейчас поясню на примере. Скажем вы любите программировать на java и довольно неплохо знаете этот язык, но на 3 курсе находите работу (читаем: вас готовы взять) только junior C# програмиста. Ну и что вы пойдете или нет? Я бы пошел, и приблизительно 2 года познавал тонкости .Net программирования. И вот вы заканчиваете этот осточертевший за 5 лет универ и у вас в запасе 2 года .Net программирования, вполне возможно что вы уже и не junior вовсе. И захотите вы менять работу чтобы снова стать junior программистом но уже java junior? Конечно нет. Если вы четко уверены, что хотите быть, скажем, iPhone разработчиком, то очевидно вам нужно искать вакансию не “Android/iPhone/WinPhone developer” а четко “iPhone developer”. Надеюсь, мне удалось донести мысль.
5) Вопросы по вакансии, а не по резюме.
Этот пункт напрямую касается предыдущего пункта с точки зрения компании. Конечно каждый несет ответственность за то, что у него написано в CV. И я понимаю, что если у меня указаны C++ или JavaScript меня могут спросить по любому из этих языков, даже если они не есть моими профильными.
С другой стороны компания должна понимать кто именно ей нужен. И если в случае с маленькими компаниями человека могут брать как универсального разработчика (соответственно чем больше у него всего указано в резюме, тем лучше), то большие компании должны быть заинтересованы в найме высококвалифицированных узкопрофильных специалистов. Мы все знаем, как выглядит типичная вакансия, скажем, на middle позицию. Но я ни разу не был на собеседовании, на котором спрашивали все, то что указано в вакансии, зато меня не раз спрашивали по всему поему CV, где половина всего вообще никак не связана с желаемой должностью. К сожалению, так бывает в большинстве случаев. Здесь возможны 2 варианта, либо компания не понимает кто ей нужен, либо ей подходят абсолютно все и вакансию HR набросал копи пастом за 10 минут.
6) Не надо ждать фидбэк. Никогда.
Я долго думал написать по этому пункту тут, или в антипатернах.
Думаю ни для кого не секрет, что письмо по результатам собеседования в компании дает очень много опыта (особенно если это письмо с отказом, особенно если там указываются причины отказа). Особенно много опыта дает наличие ответного письма как такового). Поверьте, компания, которая проводит грамотную переписку, заметно выделяется на фоне остальных.
Может возникнуть резонный вопрос, чем это письмо так важно? Для ответа на этот вопрос стоит немного отойти от основной темы. Я позволю себе процитировать Якова Файна: “Поиск работы состоит из 4 ступеней. Составление резюме. Поиск вакансии. Прохождения собеседования. Рассмотрения предложения”.
Вы же не будете соглашаться на первый попавшийся вариант (или будете?). Поэтому нужно всегда держать в уме в желательно еще на собеседовании согласовать с HR’ом, когда стоит ждать фитбэка. Каждый кто хочет найти работу (не просто работу, с которой он уйдет через пол года, а правда хорошее место), должен приблизительно представлять когда у него будет основная часть результатов собеседований. Другими словами, если я за две недели был на 20 собеседованиях (пусть некоторые дают ответ через неделю, некоторые через 2), то я понимаю что в конце месяца уже можно и нужно выбирать job offer. И идти в конце третьей недели на собеседовании глупо (если это конечно не гугл:)), или хотя бы нужно сразу договариваться, а сроках фитбека, поскольку, пока вы будете ждать результата собеседования с этой компании, все другие предложения о работе могут стать неактуальными.
Был случай, когда после двух недель я решил поинтересоваться результатами моего собеседования (в большей степени меня тогда интересовало, где именно у меня были пробелы и что мне следовало подтянуть для последующих собеседований). После переговоров с PM’ом в скайпе он пообещал выяснить, почему ответное письмо не было отправлено и пообещал, что я получу фидбэк в скором времени. Сейчас, по прошествии почти трех месяцев, письма я так и не получил).
7) Определение размера ЗП и сроков ее пересмотра.
Да я полностью согласен, что junior не должен гнаться за зарплатой. Но компания работодатель должна понимать реальную ситуацию. Скажем одно дело, если предложить ЗП на процентов 10-20% ниже среднерыночного и совсем другое, если предложить все эти 10-20% от средней зарплаты. В больших компаниях все проще. Все знают, что там пересмотр зарплаты 2 раза в год. К тому же, крупные компании, как правило, готовы сразу платить неплохие деньги на junior позиции. По крайней мере туже средне рыночную ЗП там можно просить без зазрения совести. Просто поскольку крупная компания может себе позволить вложить в вас деньги авансом.
Маленькая же компания обычно не готова покупать кота в мешке. Довольно часто приходиться слышать слова «у нас гибкая политика пересмотра зарплат», «когда я вижу результат, так сразу зарплата и повышается» и т.д. Можно конечно войти в положение маленьких компаний, к тому же junior’и, по моему убеждению, должны работать на набор опыта, а не зарплаты. Но все же, совсем по-другому воспринимаются, например такие слова «сейчас твоя зарплата будет такая, но после 3 месяцев мы ее пересмотрим, основываясь на твоей работе». Неплохо также, когда при собеседовании обговариваются две сумы, одна на испытательный срок и основная ЗП.
8) Идеальные вопросы.
Я решил выделить в отдельный пункт вопросы, которые, я бы хотел услышать на собеседовании. По крайней мере, задавшей их сразу заметно выделил бы свою компанию. В такую компанию хотелось бы пойти, просто потому что там есть люди, у которых можно учиться, а это для junior программиста является все таки приоритетной задачей, независимо от языка или платформы.
Пример кода;
Например, спросить, что выведет код, объяснить почему. Взять хотя бы такой вот:
public class Main {
String variable;
public static void main(String[] args) {
System.out.println("Hello World!");
B b = new B();
}
public Main(){
printVariable();
}
protected void printVariable(){
variable = "variable is initialized in Main Class";
}
}
public class B extends Main {
String variable = null;
public B(){
System.out.println("variable value = " + variable);
}
protected void printVariable(){
variable = "variable is initialized in B Class";
}
}
А что будет если вместо String variable = null; написать просто String variable; ??
Такой код, заставляет думать, и он явно показывает как тот кто отвечает ориентируется, в данном случае, в полиморфизме и выделении памяти в JVM.
Cтатьи на хабр;
А кто из проводящих собеседования спрашивал, писал ли кандидат что либо на хабр. А читает ли вообще он этот хабр? А какой у него рейтинг на stackoverflow. Или, например, не проходит кандидат, какие-то онлайн курсы. Согласитесь это может о многом сказать.
Плох тот солдат который не мечтает стать генералом. Поправимо если отсутствует опыт разработки на реальном проекте, но если человек увлечем программированием то это как раз и можно выявить с помощью таким вот вопросов.
Есть ли акаунт на github;
Еще одни вопрос который никогда не довелось услышать. А меж тем даже без отсутствия опыта, положительный ответ дает представление, что кандидат знает что такое система контроля версий. Сюда же можно отнести и вопросы разряда, участвовал ли кандидат в open source проектах. Насколько я знаю, в более менее серьезных проектах очень жесткие требования к форматированию кода, и если человек участвовал в чем то подобном, это не могло не сказаться положительно на качестве кода.
Последняя прочитанная техническая книга;
Конечно, на при ответе на этот вопрос отвечающий может и соврать. Но с другой стороны, если собеседующий сам читал названую книгу, можно начать разговор о самой книге. Ведь главное задача собеседующего определить насколько кандидат является фанатом своего дела, и что в сущности с него может выйти через тот же год-полтора.
5 любимых рефакторингов;
Чаще всего используемые комбинации в IDE;
Эти два вопроса я оставил напоследок, так как они, наверное самые нестандартные из всех приведенных выше. Хотелось бы мне увидеть лицо человека, которого спросили эти два вопроса, особенно если он абсолютно не знает на них ответа, зато знает, чем отличается ArrayList от LinledList’а :). Я убежден, что они всего лишь действительно позволяют находить программистов из всей той массы людей которые приходят к вам на собеседования. Ведь есть люди, которые занимаются этим, потому что это им интересно, а есть люди, которых просто привлекают перспективы IT сферы и существующие здесь зарплаты. Просто ответив на эти два вопроса, человек может показать программирует он что либо для себя или просто сидит и ждет, когда попадет на работу (иногда правда почитываю для разнообразия «Основные вопросы на junior собеседовании»).
Статья получилась больше, чем я предполагал изначально. Спасибо всем кто дочитал до конца в надежде увидеть хоть одну картинку).
Сразу отвечу на возможный вопрос в комментариях, что да – работу я нашел. И даже не одну)). Если у кого то есть свои примеры хороших паттернов/антипатернов – прошу в комментарии.
Автор: mitaf