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

Итак, вы задумались о поиске новой работы.

Первое с чем надо определиться — это в какой области вы хотите работать.



К сожалению, многие интервью очень сильно технические, и есть большой шанс что вас будут спрашивать узкоспециализированные знания. Произвести хорошее впечатление при отсутствии таких знаний очень проблематично, особенно если есть некоторые барьеры в коммуникации (например, при недостаточных навыках разговорного языка). Так что нужно получить/иметь эти знания, и это значит, надо определиться с областью работы. Если у вас нет особых предпочтений, то можно просто проанализировать рынок труда и в целом всю область. Несколько примеров:
  • заходим на monster.com ( dice.com, indeed.com), вводим географическое положение, и смотрим опубликованные вакансии
  • www.glassdoor.com — также поиск компаний по местоположению (как бонус есть ревью и зарплаты)
  • индекс TIOBE www.tiobe.com/index.php/content/paperinfo/tpci/index.html — хотя индекс и по языкам программирования, некоторые языки чаще используются для каких-то определенных целей (например, Objective-C для разработки приложений под iOS)
  • stackoverflow.com — популярные вопросы и вакансии


В целом, если кандидат следит за новостями, или даже просто читает Хабр, то он уже сможет составить мнение о современных тенденциях. Однако, это совершенно не означает что вам нужно следовать этим тенденциям, просто это может помочь в нахождении интересующей вас области.

Повышение сетевого присутствия



Здесь придется пожертвовать своим временем и силами, но оно того стоит. Перечислю примеры в порядке важности (от большей к меньшей):
  • Собственные проекты (например на github-е)
  • Участие в других проектах, в основном OSS. Важно, чтобы можно было отследить историю ваших коммитов.
  • Участие в тематических конференциях и на специализированных сайтах (угадайте, почему зачастую ответы на stackoverflow.com такие развернутые и содержательные)
  • Ведение собственного профессионального блога. На блоге лучше не злоупотреблять копированием других или публикацией очевидных и простых вещей. Советую делать исследования в интересующей вас области и публиковать их.
  • Иметь профили на специализированных сайтах типа linkedin.com


Прозвучу капитаном очевидность, но советую поискать себя в поисковиках. Учтите, что реиндексирование непопулярных ресурсов происходит не так часто, так что озаботьтесь этим вопросом заранее. Также если на вас есть какой-то компромат в социальных сетях (например, фотки с ваших оргий в Лас-Вегасе), лучше его удалить, или скрыть от публичного доступа. Хотя шанс, что ваши персональные данные будут смотреть, достаточно низкий, лучше перестраховаться.

Несколько ссылок по OSS проектам (пополнение списка приветствуется):


Примеры исследований для профессионального блога:
  • Числовые метрики по алгоритмам, библиотекам и языкам программирования (скорость, потребление памяти, количество строк кода и т.п.)
  • Сравнение разных библиотек и языков программирования (как по числовым, так и другим метрикам)
  • Детальный обзор какой-то узкой области (внутреннее устройство функций или подсистем каких-либо платформ)
  • Оригинальные алгоритмы, специализирующиеся по определенным признакам (минимальное потребление памяти или ресурсов процессора, максимальное использование кэша процессора или его MMX/SSE инструкций, векторизация, lock-free и т.п.)


Учтите, что индексация вашего присутствия займет некоторое время (вплоть до нескольких недель), так что могут потребоваться некоторые SEO-навыки (например, давать нужные ссылки на популярных сайтах).

Подготовка резюме



Есть большой шанс, что резюме будет анализироваться автоматически и будет извлекаться информация в текстовом виде. Это не означает, что надо отсылать простой текстовой файл, все-таки хорошее оформление тоже что-то говорит о кандидате. Советую готовить резюме в pdf-формате (например, я использую LaTeX), и при просмотре скопировать текст в буфер и смотреть что получилось. LaTeX позволяет играть с представлением как я хочу, но конечно, можно использовать и некоторые менее экзотические технологии, как например, просто сделать HTML-страничку. Учтите, что печать в PDF из браузеров может отличаться (например, Chromium меня не особо радует под линуксом), так что попробуйте несколько вариантов.

В начале резюме надо указать ФИО, адрес электронной почты, телефон, адрес проживания. Никаких данных о семье и возрасте, фотографий тоже не надо. В конце список контактов или «References are available upon request», в ��сновном это ФИО, должность и телефон контакта. Электронная почта не используется по очевидным причинам.

В самом резюме обычно указываются знакомые технологии, методологии, библиотеки и языки программирования. Включается информация об образовании и предыдущих местах работы. Если у вас есть блоги и OSS-проекты, надо включить список ссылок тоже. Списки могут варьироваться, например, если вы устраиваетесь на работу веб-разработчиком, то указывать знание C++ не обязательно. Не надо указывать слишком много, лучше фокусироваться на главном. Эту ошибку я достаточно много вижу, рассматривая резюме от русских кандидатов — у них очень длинные и детальные резюме. Поверьте, никто особо это не читает, и акцент делается только на ключевых словах. Так что ограничивайте свое резюме 2, максимум 3 страницами (только в крайнем случае, если вы поменяли с десяток работ, и все они важны для новой позиции).

Когда отсылаете резюме, желательно также включить Cover Letter или просто сделать приписку в сообщение, где вы немного рассказываете о себе, какой вы замечательный специалист и как вы будете рады работать с этой компанией. Желательно описать, какой именно опыт у вас есть в той области, на которой специализуется компания. Если например, они занимаются сетевой безопасностью, можно написать, что вы имеете опыт написания скриптов и 0-day эксплойтов под платформу Metasploit.

Иногда нужно будет торговаться о зарплате. Многие эту информацию скрывают, так что приходится пользоваться такими ресурсами как www.glassdoor.com чтобы знать к чему быть готовым. Также э��у информацию можно использовать для вычисления границ своих зарплатных требований. Не бойтесь завышать, но не перегибайте палку, иногда это может отпугнуть ту сторону (например, могут подумать, что у вас завышенная самооценка и вы будете плохим командным игроком).

Собственно поиск работы



Просто несколько советов:
  • Не бойтесь отсылать резюме несколько раз в одну и ту же компанию — если вы не подходите сейчас, то можете подойти позже (открылась вакансия, HR не проспал и наконец-то увидел ваше резюме во второй раз и т.п.)
  • Будьте готовы к разговору по телефону. Если у вас английский хромает, то советую почитать вслух свое резюме, чтобы быть уверенными как это произносить на нужном языке правильно (особенно если работали в каких-то компаниях с русским названием или имели должность, которая не существует на западном рынке, например «ведущий специалист»)
  • Освежите знания, особенно теоретические (алгоритмы, структуры данных, паттерны проектирования и т.п.)


Например, вот список вопросов, которые могут встретиться на интервью для кандидата в Си-программиста (просто привожу пример, какие детальные знания могут понадобиться):
  • Для чего нужен gperf и как его использовать
  • Напишите реализацию какой-либо структуры данных (стек, дерево, очередь) с использованием массива и/или связных списков
  • Рассчитать O какого-либо алгоритма (включая написанные вами на интервью, и дальше может идти вопрос про оптимизацию)
  • Обратить односвязанный список без использования дополнительной памяти. Почему рекурсивная реализация (это одна из возможных) не использует стек потока выполнения при компиляции на gcc.
  • Как gcc прооптимизирует такой-то код, и какие вообще оптимизации он проводит.
  • Как включить информацию отладки в gcc и какие дополнительных механизмы отладки предоставляет компилятор
  • Какой порядок вычисления аргументов функций использует gcc, и можно ли на это повлиять.


Т.е. некоторые вопросы могут быть достаточно общими, но в реальной практике программисты с этим не сталкиваются. Другие вопросы весьма специализированны под инструментарий. Лично я не согласен с такими методиками проведения интервью, но такое бывает (даже бывает хуже, когда просят описать формат TCP/IP пакета со всеми смещениями на память). Могут быть и другие крайности, про квадратные люки, но на своей практике я такого не встречал. В любом случае, готовиться надо и лучше быть готовыми к худшему.