суббота, 24 сентября 2011 г.

Собеседования на позицию iPhone Developer

Прочитав правильную книгу iPhone Programming: The Big Nerd Ranch Guide и выполнив все упражнения в ней (в результате чего было написано около 10 маленьких приложений) начал искать работу в качестве Junior iPhone Developer. На ngs.ru было 8 вакансий на позицию iPhone Developer, при этом некоторые позиции от одних и тех же фирм. В итоге после фильтрации (офис далеко от университета или не гибкий рабочий день и пр.) отправил резюме только в 3 конторы. Это кошмар:) Если бы я вместо iPhone Development подался в Java, я думаю разослал бы резюме минимум в 15-20 разных мест и неделю (или даже две) ходил бы только на собеседования, чтобы потом можно было нормально выбирать из Job Offers наиболее понравившееся. Возможно, кстати, некоторые фирмы не размещают информацию о вакансиях в интернете, а пользуются услугами кадровых агентств, и поэтому вакансий было только 8.

Я слушал много разговоров в подкастах от опытных людей о том, как нужно правильно искать работу: от составления резюме до прохождения интервью, поэтому сложилось некоторое представление о том, как это происходит. Первое, что меня удивило - все 3 фирмы среагировали сразу же (в течении суток) и пригласили меня на собеседования. Я, вообще говоря, был готов к тому, что моё резюме вообще может быть даже не прочитано/не замечено/потеряно/забыто и пр. из-за большого потока писем от других кандидатов. Как выяснилось позже, в Новосибирске просто не хватает iPhone Developer'ов: "найти iOS программиста очень сложно, не говоря уже о тех, у кого бы был стаж работы в этой области год или более". Думаю, именно по-этому моё резюме не потерялось и со мной быстро связывались, и если бы я пошел в Java, то количество ответов на моё резюме (и, что еще более важно, приглашений на собеседование) было бы меньше 100%. Хотя не факт, разговоры в подкастах касались темы поиска IT работы преимущественно за границей.

Т.к. количество посылаемых резюме от iPhone developer'ов крайне мало, то в принципе это позволяет кандидатам не сильно заморачиваться на счет резюме и составлять его как попало, за 5 минут: т.е. не будет такого эффекта, что HR менеджер открывает ваше резюме и, не увидев за первые секунды в верхних строчках нужные слова, удаляет его из почтового ящика. Я же, не зная этого, сделал все как надо (да и если бы знал, все равно сделал бы как надо:) ): нашел самый простой CV template для LaTeX, заполнил его только релевантной информацией. В итоге оно у меня получилось на полстраницы: ни одного лишнего пункта (типа там о хобби и прочем бреде), а ключевые фразы сразу же бросаются в глаза. На составлении резюме вообще время экономить не стоит, это формирует первое впечатление работодателя о кандидате.

Была не совсем удобная ситуация, когда меня позвали на 2 собеседования, назначенные в одно и то же время. В первый момент немного испугался и не знал, что делать:)) Потом перенес одно из них на следующий день, никаких проблем при этом не возникло и, по реакции HR менеджера, вообще возникнуть не могло.

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

Я слышал разные отношения к собеседованию: кому-то они сильно не приятны и им проще написать любое тестовое задание, чем отвечать на вопросы на собеседовании. Другие, к которым я сам себя хочу относить, любят собеседования, особенно не слишком удачные, т.к. они наиболее полезны - на них можно узнать, что ты плохо знаешь, какие знания от тебя ожидают, а еще ты узнаешь, сколько ты стоишь. Причем все это - за достаточно короткое время и абсолютно бесплатно. Чит? Чит! :D

Собеседовали меня сразу 2ое человек. Один из первых вопросов был про memory management в Objective-C, затем задавали вопросы почему-то по С++, операционным системам и многопоточности, в частности "Кто такие зомби", "Что нужно делать сразу же после того, как вы создали новый поток", и пр. Еще были вопросы по принципам ООАД и разным паттернам. Не совсем понял, зачем они проверяли эти слишком общие знания, при этом не прося писать код. Не ясно короче... т.е. если кандидат отвечает на вопрос типа "что такое полиморфизм?", то как они проверят, что кандидат на самом деле понимает, что это такое, и умеет этим пользоваться на практике? Наверное, задают, чтобы сразу отсеять тех, кто даже не знает определения - в таком случае вполне такой очень неплохой вопрос.
Дали задачку: посчитать количество единичных битов в integer'e - единственное задание, где нужно было написать код. Еще было 2 задачи на сообразительность (или эрудицию, не знаю) в стиле аля Microsoft и Google. Тоже не совсем понял, какой в этом смысл. Т.е. я понимаю, зачем это делают в Google, когда принимают кого-нибудь на должность главного менеджера по маркетингу в азиатском регионе и северной Африке, например. Но давать такие задачи Junior Developer'у, при этом сильно упрощенные (одна из задач задается в моей родной школе в 5ом классе на уроках математики), а потом без специального образования пытаться анализировать действия и ход мыслей кандидата - ...
После того, как вышел оттуда, были смешанные чувства: вроде все прошло нормально, но чувствовалось, что что-то не так. Были, безусловно, и позитивные моменты: я вспомнил принципы ООАД, и как некоторые из этих принципов проявляются в коде, ну и по мелочи узнал несколько вещей, которые помогли связать некоторые куски знаний в одно целое.

Единственный косяк, который я мог бы избежать, но забыл как это делать - это то, что я ответил на вопрос "Сколько вы хотите получать?". Как известно, кто первый называет цену, тот проигрывает:) Правильный ответ на этот вопрос (если вы не знаете, сколько вы стоите на рынке, и вам еще никто не сделал Job Offer - мой случай) - "Я уверен вы справедливо оцените мои навыки и я готов рассмотреть любое адекватное предложение о работе". Есть и другой правильный ответ, но это если вы пользуетесь услугами кадровых агентств. Т.е. (как я себе это представляю) вы приходите в агентство и говорите "хочу много зарабатывать, вот что я умею", затем агентство само ищет для вас работу, чтобы платили побольше (чем больше зарплаты вы будете получать, тем больше они получат за вас, т.е. они заинтересованы, чтобы вам предложили нормальный Job Offer). Затем, когда на собеседовании заходит разговор о зарплате, вы просто отвечаете "обсудите этот вопрос с моим агентом" или что-то в этом роде, но чтобы они уже общались по этому поводу с агентством: оно знает лучше, сколько вы на самом деле стоите на рынке. Единственное что - надо сказать агентству, чтобы они обязательно, перед тем, как выслать резюме в какую-либо компанию, сообщали об этом вам. Это нужно для того, чтобы из разных мест в одну компанию 2 раза не попало ваше резюме (например, если вы тоже сами ищете работу, или если пользуетесь услугами сразу нескольких агентств). Но я не имею опыта работы с агентствами и вообще не представляю, как они работают в России, и стоит ли вообще ими пользоваться. Кто может что-то сказать по этому поводу - можете отписаться в комментах.

Второе собеседование было на следующий день, было меньше волнения и я шел туда уверенным в себе, с настроем, что я могу помочь этой компании и она точно выйграет от того, что я в ней буду работать. Это очень правильный настрой, и если его нету - то это плохо. Т.е. если нет уверенности, что ваши знания могут помочь работодателю - не нужно было вообще тогда идти в IT. Это очень жестокая позиция, но надо просто хорошо знать техническую часть: сейчас в доступе есть любые книги на любом языке, это не 90ые - вам не надо по знакомым спрашивать нужную книгу и, если вам повезло и вы её нашли, ксерокопировать её, чтобы прочитать. Все, что нужно сделать - посадить зад на стул, открыть Google (или оплатить Safari Books Online) и просто читать книги/форумы/блоги. Это все. Абсолютно ничего сложного, было бы желание. То же самое, кстати, и с изучением английского. Благодаря инету сейчас так много возможностей, но так мало людей, которые ими пользуются.

Пришел заранее на 2-3 минуты, как и в первый раз. В начале собеседования ответил на 2-3 вопроса от HR менеджера по поводу предыдущего места работы и о себе. Потом она ушла и началась техническая часть интервью с менеджером и программистом. Вопросы задавал в основном программист, начав, как и в первом собеседовании, с memory management. Ответив теорию, перешли к практике: мне дали листинги функций, лист бумаги и ручку - мне уже это сильно понравилось - и задали пару вопросов о коде в функции (найти ошибки, недочеты, избыточный код и пр.). Потом попросили написать для класса методы, которые эквивалентны в C++ конструктору, деструктору и оператору копирований (присваивания). Немного тупил - Xcode сильно развращает, из-за грамотного IntelliSense очень было трудно на листочке написать сигнатуру метода, например. Очень сильно понравилось отношение менеджера и программиста к этому затруднению: понимание того, что именно этот момент роли не играет, а как раз очень важен сам код - тело метода. Потом попросили написать все виды геттеров и сеттеров, которые могут быть в Objective-C (там они называются properties). Задачка очень маленькая и простая, при этом охватывает все виды работы с памятью и, следовательно, позволяет узнать, понимает ли человек принципы memory management в Objective-C на практике. В итоге узнал достаточно много интересных фишек языка и iOS SDK прямо на собеседовании (за бесплатно:) ). Например, когда надо правильно убить поле объекта (которое является тоже объектом), то этому полю посылается сообщение release и потом указателю на это поле присваивается значение nil (аналог NULL в С++). Эти две операции могут быть заменены одной операцией (точнее, вызовом метода, или, в терминологии Objective-C, посылкой сообщения): просто через сеттер присвоить полю nil, а сеттер сам сделает release, если это требуется. Т.е. в принципе никакого выйгрыша нет (в обоих реализациях делается release и присваивание nil), но код становится элегантней, короче, красивее и выразительней. Таких фишек я в книге не видел (или по невнимательности просто не заметил/не обратил внимания) и ими не пользовался, и не узнал бы о них, если бы не сходил на собеседование. Еще один пункт в пользу любви к собеседованиям: можно узнать что-то новое:) Этим собеседованием остался очень доволен и понял, чем оно отличалось от первого.

В первом (мне так показалось, это субъективное мнение и я не утверждаю, что это на самом деле было так) мне задавали вопросы с желанием найти проблемы в знаниях, хотели найти ответ на вопрос "почему этот кандидат не получит эту работу". Во втором же было наоборот: "задать необходимые вопросы и выяснить, почему этот кандидат должен получить эту работу". С этой точки зрения объясняется то, что в первом случае задавались странные вопросы не из той технической области и давались задачки на сообразительность, а во втором не было ни одного лишнего вопроса и была видна последовательность собеседования: сначала задали вопрос по теории о memory management, затем проверили, могу ли я писать код, как я его пишу и как я применяю теоретические знания (которые изложил в ответе на первый вопрос) на практике. Сразу было четко понятно, что эти вопросы непосредственно связаны с работой и их незнание делает невозможным в принципе работу на этой позиции. В первом же случае такого понимания не было: ну не ответил я на вопрос о том, кто такие зомби, и что это значит? Могу ли я работать после этого? Нужно ли вообще это знание? Т.е. с тем же успехом можно было бы спросить "В чем различие в управлении памятью в Windows NT 3.1 по сравнению с Windows 2000?" и задаваться теми же вопросами. Ну и еще одним: "При чем тут винда?.."

И да, на втором собеседовании я тоже неправильно ответил на вопрос о зарплате, сказав, что хочу в районе Х рублей. Х примерно на 25-30% больше, чем я получал в Intel. Я называл эту сумму из расчета, что в любом случае мне будут платить меньше, чем я хочу, и будут предлагать 60-80% от Х (с учетом, что у меня нет опыта работы в iPhone Development). Таким образом, дав мне даже 60% от Х, я бы с удовольствием согласился на Job Offer, т.к. главная цель, которую я перед собой поставил - получить опыт работы в этой области (при некоторых обстоятельствах я бы даже согласился работать бесплатно), а не срубить побольше бабла - это такой короткий отрезок в начале карьеры, когда зарплата не играет решающую роль. На мой взгляд, лучше за год получить очень хороший опыт работы и изучить как можно больше всего, но получать в 2-3 раза меньше, чем в другом месте, где работа тебя не развивает. Таким образом, через год (или два, или три) можно будет поменять приоритет с получения опыта работы на получение максимальной зарплаты и это более выйгрышная стратегия.

На следующий день утром в почтовом ящике обнаружил Job Offer от второй компании с зарплатой 140% от Х. Был сильно приятно удивлен, при том, что сама компания мне понравилась и я туда хотел попасть. Сразу согласиться не мог, т.к. ждал ответа от третьей крупной компании и думал получить еще ответ от первой компании, которая обещала сообщить своё решение в течении недели. Как потом оказалось, третья компания мне звонила заранее еще до того ,как я получил Job Offer, но я пропустил звонок, а на e-mail они мне ничего не прислали. Когда они позвонили во второй раз, я уже согласился на Job Offer и поэтому на третье собеседование не пошел. По-хорошему, надо было соглашаться и идти, я ведь уже говорил, что это полезное бесплатное занятие, но я побоялся, что может что-то произойти, что потом во второй раз они не согласятся меня пригласить на собеседование, а т.к. вакансий в этой области не так много, то я не стал рисковать.

Комментариев нет:

Отправить комментарий