суббота, 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 и поэтому на третье собеседование не пошел. По-хорошему, надо было соглашаться и идти, я ведь уже говорил, что это полезное бесплатное занятие, но я побоялся, что может что-то произойти, что потом во второй раз они не согласятся меня пригласить на собеседование, а т.к. вакансий в этой области не так много, то я не стал рисковать.

пятница, 23 сентября 2011 г.

Впечатления о работе в Intel

Прошло больше года с предыдущего поста. За это время произошло многое, в частности мне посчастливилось поработать в Intel интерном (Undergraduate Intern Technical).

Получилось все случайно и спонтанно: я искал работу на лето и товарищ Фенстер предложил попробовать попасть в летнюю школу Intel. Для этого нужно было просто заполнить анкету, отправить её в компанию и ждать результата конкурсного отбора. Очень ответственно подошел к заполнению анкетки и выслал её, через месяц пришло письмо о том, что я им подхожу. Долго думал, идти или не идти, все-таки хотелось научиться программировать под iPhone, специально для этого даже уже был куплен самый дешевый поддержанный macbook по объявлению за 20к :)

В итоге после недолгих размышлений и разговоров с разными людьми я решил, что надо по-любому идти. Во-первых, это opportunity, которую упускать не комильфо:) Во-вторых, было безумно интересно посмотреть, как устроена работа в гигантской корпорации изнутри. В-третьих, была вероятность того, что мне там понравится работать и я захочу остаться. В-четвертых, это возможность завести связи и познакомиться с людьми, которые там работают (кстати, по договору я должен их всех забыть и удалить их телефонные номера, т.к. я больше там не работаю, поэтому этот пункт формально не работает :D). В-пятых, запись в трудовой книжке о том, что ты поработал в Intel, - это круто, а еще круче указывать это в резюме. В-шестерых, это просто прикольная ачивка: хотя бы раз в жизни поработать в крупной корпорации.

Школа длилась два месяца. Мне понравилось абсолютно все, что там происходило, работа была наслаждением: помню, что делал усилия, чтобы не работать больше, чем нужно, потому что боялся "перегореть" и потерять интерес:) Нравилась команда, адекватный менджер, ощущения от работы в настоящей команде программистов, делающих реальный коммерческий продукт с известным именем и то, что этим продуктом интересуются фирмы с громкими рэп именами -- ощущения, что ты находишься в центре всего и что именно рядом с тобой развивается вся эта невообразимо огромная IT индустрия, при этом другие крупные фирмы не кажутся чем-то недостижимым и абстрактным. Нравилась атмосфера в самой компании, нравились митинги, особенно с начальством на английском (это мой первый опыт, когда английский действительно был необходим для общения).

По окончанию летней школы мы с коллегой успешно выполнили проект и нам предложили остаться в Intel. Я согласился на full-time: работа отличная, з/п на тот момент мне очень нравилась -- что еще нужно?:) Для того, чтобы меня "оставить", меня пришлось уволить и нанять занова с новым трудовым договором (поэтому дни отпуска, которые я мог взять, "обнулились"). И вот эти формальности, пожалуй, самый большой (а также чуть ли не единственный) минус в корпорациях. Дело в том, что их достаточно, чтобы украсть у тебя время: ты должен проходить различные тренинги (чтобы получить доступ к чему-либо), после прохождения некоторых из них - ждать approval от менеджера, а в случае необходимости придется общаться с IT-шникаи и объяснять им в долгой переписке (потому что, как правило, они находятся далеко и рабочий день с ними мало пересекается) зачем тебе вдруг понадобился доступ к чему-либо.

Так получилось, что была возможность писать диплом там же, в Intel, чем я не мог не воспользоваться. Очень благодарен за это, в первую очередь, своему менеджеру Дмитрию Петунину, который согласился стать моим научруком, а так же команде за их помощь и ответы на мои бесконечные вопросы:) Дипломом я честно горжусь, был получен реальный такой результат, практический и полезный, который долго обсуждался (в том числе с коллегами по ту сторону океана) и велись споры на его основе. Конечно, можно было сделать еще больше и лучше, и тогда можно было бы вообще-вообще гордиться и "бить себя в грудь", но, как это обычно бывает, диплом писался в последние месяцы до защиты:) Защитил его, конечно же, на отлично.

Работа моя заключалась в написании различных тестирующих (и не только) скриптов (преимущественно на Perl, но были и на bash/shell), а так же поддержанием уже написанных скриптов. За 10 месяцев понял, что это не совсем то, чем я хотел бы заниматься: все-таки мне больше нравится принимать участие в создании продукта, а не следить за тем, чтобы программисты чего не испортили в нем уже работающего. Но в команде разработчиков хватало и нужны были как раз ресурсы для QA работы. Тем временем срок договора истекал и нам с Intel пришлось расстаться.

В общем, впечатления от Intel остались положительными. Не думаю, что еще где-нибудь в Новосибирске встречу такие же условия труда, какие существуют там: везде чисто, бесплатные чай-кофе-шоколад и фрукты, везде крутые яркие проекторы, доски с фламастерами, 100% оплачиваемые больничные, полностью белая зарплата - и еще очень много разных вкусных плюшек. А вообще, все сложилось идеально: последний курс обучения, работа и успешный диплом. Т.е. теперь я с высшим образованием, уже имею год стажа работы, при этом еще и тачку смог купить.

Кстати, работал я практически без отпусков, если не считать 4 дней перед самым увольнением, которые, состыковавшись с праздником и выходными, превратились в 9 дней отдыха. Без отпусков - это потому что я их планировал так, как если бы оставался работать и дальше. Из-за этого последняя зарплата получилась в 2 раза больше, а я, чувствуя, что уже вдоволь наработался и научился (диплом), решил нормально отдохнуть. Поэтому летом работу не искал и устроил себе каникулы целых на 2 месяца, о чем ни сколько не жалею :)