Уже чуть больше полугода я работаю в поиске Яндекса релиз-инженером. И чуть ли не с первого рабочего дня хочу написать о том, как отзывался на вакансию, как проходил собеседования, что мне в этом процессе понравилось, а что — не очень. Но сначала я входил в курс дела, а потом каждый день в моей работе появлялись такие интересные задачи, что я даже не был готов отвлечься от них на этот рассказ.
А еще год назад у меня в жизни была вроде бы похожая, но в то же время совсем другая ситуация — времени на хобби не хватало, задач было много, но они не приносили мне никакого удовольствия. В итоге я решился на перемены. На самом деле, эта позиция в Яндексе не была первой, которую я рассматривал. За то время, которое прошло до моего первого рабочего дня, я освежил в голове очень много тем. И перед финальным собеседованием мне пришлось взяться ещё за несколько. Сейчас я понимаю, какие ошибки совершил в этом процессе, поэтому хочу поделиться своим опытом с вами. Буду рад, если кому-то это будет полезно. Хочу сказать, что это не официальные рецепты от рекрутеров Яндекса, а только мои собственные выводы. В конце поста я поделюсь списком литературы, которая мне помогла в подготовке, и еще добавлю те источники, которые считаю полезными, оглядываясь назад.
Каждый космический дальнобойщик знает, что идеальных космических кораблей в реальном мире не бывает. Всегда что-то идёт не так: если у корабля мощные двигатели – значит, наверняка забыли смонтировать на корабле противометеорные пушки; если в избытке кают для экипажа – значит, жди беды с трюмами для багажа.
А ещё опытные космические волки наверняка замечали, что процесс сборки звездолёта из кусочков канализационных систем и прочих подручных средств имеет определённое сходство с подготовкой к собеседованиям и другим важным событиям человеческой жизни. Задумывался ли я об этом, когда прошлой осенью впервые припланетился в офисе Яндекса?
You look so tired and unhappy
Конечно, не задумывался. В Яндексе тогда работал mkot, а мой собственный звездолет в то время я случайно припарковал в одной небольшой компании, занимавшейся разработкой микроконтроллерных систем сбора данных. На собеседовании я просто показал, чем занимаюсь в свободное время, и меня взяли. Каждый день, как любой обычный пилот межгалактического крейсера разработчик, я работал с утра до ночи, а иногда и во сне. Руководство требовало невозможного, мечтало о производственных подвигах, и я старался изо всех сил.
Понимание вреда ежедневных подвигов для здоровья пришло не сразу. Сначала я обнаружил, что мне не хватает времени на хобби, потом начался цикл бессмысленных командировок, и времени не осталось даже на жизнь. Спустя месяцы я (наконец!) понял, что цели руководства (заработать побольше денег) не совпадают с моими собственными (сделать людей счастливее). Ощущение пустоты собственной жизни не может компенсировать никакая зарплата. Я был полон решимости завести трактор звездолет, даже купил чемоданы, вот только не знал, куда направиться. И тут у меня зазвонил телефон.
I'm gonna put on a iron shirt
Звонок IT-рекрутера выбил меня из колеи. Я был настолько поглощен мыслями об увольнении с текущей работы, что даже и не думал о поиске новой. Рекрутер искал кого-то для Лаборатории Касперского, и я решил, что было бы интересно попробовать свои силы. IT-рекрутер очень настаивал на необходимости представить резюме, которого у меня, конечно же, не было, в течение ближайших двух часов. Я послушал его, и допустил самую значительную и одновременно самую счастливую ошибку в этой истории: сделал некачественное резюме на скорую руку. Из ЛК мне так и не позвонили.
Трудно было не сделать два простых вывода. Первый: я могу работать там, где пожелаю, если постараюсь. Второй: нужно хорошее резюме. На несколько недель я погрузился в раздумья. Наконец, в голове щелкнуло: «Я очень-очень хочу работать в Яндексе». И я принялся за составление серьёзного резюме. Потратил на него, кажется, целый день. Выбрал самую интересную вакансию, отправил заявку, и уже на следующий день получил приглашение на скайп-собеседование.
И вот тут я впервые превратился в космического дальнобойщика. У меня было три недели на подготовку к собеседованию, и огромное количество тем, которые нужно было освежить в памяти: *nix, shell-скриптинг, Python, awk, системы контроля версий, TCP/IP, тестирование, алгоритмы и структуры данных (почти полный список в конце этой статьи). Я не знал, что из этого более важно, а потому постарался «нахватать как можно больше разных блоков». Возможно, это не лучшая идея, но других у меня не было.
Собеседование заняло около часа. Прошло без блеска, но вроде бы достойно. Много спрашивали про bash и алгоритмы, но, я думаю, могли спросить о чём угодно – а я был, как мне казалось, чертовски хорошо готов к вопросам, хотя и волновался.
На следующий день (14 мая) я получил письмо:
Приглашаем Вас на собеседование в пятницу, 23 мая в 12-00. Место встречи — офис Яндекса на улице Льва Толстого.
Eight tons of armored steel and any weapon you will need
На подготовку к очному собеседованию оставалось меньше двух недель, и я вновь принялся собирать свой «космический корабль» из знаний. На этот раз я решил сфокусироваться на «Advanced BASH scripting», «Алгоритмах» Кормена и «Python» Лутца. Какое-то руководство по администрированию Linux-систем я читал уже в самолете.
Вот что я написал в своём блоге на следующий день:
Подъём в 4 утра, такси до аэропорта, взлёт, посадка, аэроэкспресс, метро — всё стандартно, и всё по расписанию. Я надеялся посидеть с 10 до 12 в каком-нибудь кафе, и очень рассчитывал на Cабвей, отмеченный на картах Яндекса. К сожалению, Сабвея не оказалось, и пришлось идти в Макдоналдс. Заполнив желудок тонной джанк-фуда, я отправился к офису Яндекса пешком — и оказался там на час раньше назначенного времени. Очень неловко получилось, в общем. Пришлось подождать немного, меня встретила Ольга из отдела персонала (или как он правильно называется?), и началось очное собеседование.
Сначала разговор на общие темы: как добрался, не проголодался ли, что делал на работе. Потом к разговору присоединились остальные интервьюеры. Сначала поговорили про «домашнее задание» — стыдно и забавно, что простую задачу я не смог решить на скайп-собеседовании. Хоть для нахождения правильного решения понадобилась всего минута, эта минута была уже после скайп-собеседования. Потом — пара задачек на сообразительность (и тервер).
Затем мне предложили пару приближенных к реальности задач. Задачи, как мне кажется, в первую очередь были темами для беседы. Боюсь, что отвечал я не очень хорошо — но, кажется, мои ответы всех более-менее устроили. Наконец, мне дали возможность реализовать решение задачи. Самоуверенно сказал, что «минут 40 мне хватит». Времени не засекал, но, кажется, копался вдвое дольше. Под конец допустил в коде несколько досадных ошибок — одну по незнанию lockfile, и две из-за невнимательности. В своё оправдание я могу сказать лишь, что к тому моменту был на ногах 12 часов, и очень устал. Хотя, такие ошибки можно пропустить и без перелета, просто невнимательно перечитывая написанный код.
Код я писал в абсолютном одиночестве; когда дописал — снова пришли интервьюеры (кстати, очень приятные люди), посмотрели на код, и сказали, что больше мучить меня не будут. Всё собеседование заняло примерно пять часов. Наконец, мне пообещали, что свяжутся со мной, и попрощались.
Сейчас у меня есть несколько комментариев к этой истории.
Первую серьёзную ошибку я совершил ещё за неделю до собеседования, когда покупал авиабилеты. Мальчики и девочки, не стоит делать два гиперпрыжка перелета в один день. Поездка на такси в аэропорт в четыре часа утра и двухчасовой перелёт вряд ли скажутся положительно на вашем самочувствии. Перед собеседованием очень важно выспаться и отдохнуть.
Вторая и третья ошибки связаны со временем. Совершенно случайно я пришёл в офис за час до назначенного времени, о чём сообщил HR'ам, и собеседование началось уже в 11:20. Гораздо полезнее было бы отдохнуть, расслабиться и порассматривать лошадок перед офисом, не говоря о том, что мне было стыдно из-за нарушения договоренностей и чужих планов. Когда я прикидывал, сколько времени мне понадобится на решение задачи, кажется, лучше было бы умножить оценку трудозатрат на два (а то и на три).
Четвертая ошибка заключалась в том, что я не следил за своим самочувствием, и работал на отказ. Если бы я выключил кондиционер (честно говоря, за пять часов под ветерком я чуть не умер от холода), и время от времени делал перерывы на чай, то определенно чувствовал бы себя лучше.
Enjoy yourself, it's later than you think
В жизни любого космического дальнобойщика однажды наступает момент, когда его посудина оказывается в открытом космосе с единственным работающим двигателем. Так и я чувствовал себя, когда бесконечно долго ждал ответа от Яндекса. Лето, работа. Лето, работа.
Спустя месяц после собеседования я заметил в своём блоге:
Как бы не хотелось мне сказать «But if you try sometime you may find/You get what you need», сегодня не тот случай. Из Яндекса намекнули, что перспективы не очень радужные.
Да. Я старался, и получил вежливый отказ, что-то вроде «Мы бы хотели вас взять, но не можем». Возможно, это было связано с закрытием
Знаете, что такое «сложность: хардкор» в испытании «сборка космического корабля из подручных средств»? Скайп-собеседование назначили через два дня, а мне было просто необходимо освежить в памяти знания C++, алгоритмов и структур данных, bash и методик тестирования.
Hold your breath and count to ten
Спустя две недели после второго скайп-собеседования мне предложили работу мечты. Вот так:
Дмитрий, добрый день!
Давайте закрепим письмом наши предварительные договоренности. ООО «ЯНДЕКС» предлагает Вам должность Релиз-инженера в Группе обеспечения стабильности поиска.
Конечно, приключения на этом не закончились. Мне пришлось пройти веселый бюрократический процесс увольнения, подарить друзьям и родственникам почти всё накопленное за много лет имущество, пройти много километров с чемоданами по Москве, и долго-долго искать квартиру. В общем, хватило бы на ещё одну статью.
All they've got's imagination
Кто-то (кажется, Костя Горский) сказал примерно следующее: «Первые полгода в Яндексе мне казалось, что я попал на космический корабль».
Но оглядываясь вокруг, я понимаю, что для меня Яндекс в первую очередь – это множество талантливых и интересных людей. И вот о чем я вдруг подумал: может быть, дело совсем не в модулях космического корабля, а в его пилоте?
Вместо постскриптума
Вот какие материалы я использовал, когда готовился к собеседованиям:
- М. Купер — «Advanced BASH scripting guide»
- Язык обработки структурированных текстов AWK
- Т. Кормен — «Алгоритмы. Построение и анализ»
- Б. Керниган, Р. Пайк — «Практика программирования»
- М. Лутц — «Изучаем Python»
- С. МакКоннел — «Совершенный код»
- Э. С. Реймонд — «Искусство программирования для UNIX»
- У. Стивенс, С. Раго — «UNIX. Профессиональное программирование»
- ISTQB Foundation level syllabus, Test Analyst Syllabus
- Learn Git branching
- Linux from scratch
- Книги про Linux-администрирование (много разных)
- Книги, manpages и RFC про TCP/IP и сетевые протоколы
Вот какие материалы я использовал бы для подготовки к собеседованиям, если бы знал о них:
- Лекции КИТ Яндекса
- Г. Саттер, А. Александреску — «Стандарты программирования на С++»
Автор: sourcerer