Судя по отзывам на мою предыдущую статью о процессе прохождения интервью, многие хаброколлеги интересуются, как лучше подготовиться к поиску работы на западе. Хочу поделиться моим опытом и дать ссылки, которые будут полезны тем, кто думает о переезде или просто хочет узнать, как это работает в другом мире. Статья ориентирована на среднестатистического разработчика ПО, так что если у вас блестящие навыки разговорного языка и превосходные знания нужных технологий и языков программирования, то многие советы можно пропустить.
Итак, вы задумались о поиске новой работы.
Первое с чем надо определиться — это в какой области вы хотите работать.
К сожалению, многие интервью очень сильно технические, и есть большой шанс что вас будут спрашивать узкоспециализированные знания. Произвести хорошее впечатление при отсутствии таких знаний очень проблематично, особенно если есть некоторые барьеры в коммуникации (например, при недостаточных навыках разговорного языка). Так что нужно получить/иметь эти знания, и это значит, надо определиться с областью работы. Если у вас нет особых предпочтений, то можно просто проанализировать рынок труда и в целом всю область. Несколько примеров:
- заходим на monster.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 проектам (пополнение списка приветствуется):
- Google Summer of Code, например, список проектов на 2013: www.google-melange.com/gsoc/projects/list/google/gsoc2013
- sourceforge.net/ — выбираете популярные проекты, смотрите какие есть ошибки, и что вы могли бы исправить
- Проекты для новичков по улучшению ядра Linux: kernelnewbies.org/KernelProjects
Примеры исследований для профессионального блога:
- Числовые метрики по алгоритмам, библиотекам и языкам программирования (скорость, потребление памяти, количество строк кода и т.п.)
- Сравнение разных библиотек и языков программирования (как по числовым, так и другим метрикам)
- Детальный обзор какой-то узкой области (внутреннее устройство функций или подсистем каких-либо платформ)
- Оригинальные алгоритмы, специализирующиеся по определенным признакам (минимальное потребление памяти или ресурсов процессора, максимальное использование кэша процессора или его 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 пакета со всеми смещениями на память). Могут быть и другие крайности, про квадратные люки, но на своей практике я такого не встречал. В любом случае, готовиться надо и лучше быть готовыми к худшему.
Автор: nuald