Найти в Дзене
Яндекс Практикум

Найти первую работу во фронтенде за два дня. Это не статья с кричащим заголовком, а полезная инструкция от студента Практикума

Оглавление

Дисклеймер : меня зовут Никита Евдокимов и моя история — это, скорее, ошибка выжившего , помноженная на удачное стечение обстоятельств. Тем не менее, я хочу поделиться своим опытом, чтобы вы могли повысить свои шансы быстрее найти свою первую работу во фронтенде и избежать моих ошибок.

От команды Практикума: нам не нравятся статьи с кричащими заголовками: мы не даем пустых обещаний и быстрых легких побед. Поэтому вы можете сперва попробовать курсы веб-разработки от Яндекс.Практикума , где первые 20 часов занятий – бесплатные. Так вы успеете понять, нравится ли вам разработка, прежде чем отправиться с нами в большое путешествие по смене своей профессии.

Моя история не сильно отличается от истории других студентов Практикума: я решил изменить свою жизнь и стать фронтенд-разработчиком. Правда, чтобы показать серьёзность своих намерений, я уволился с работы, и посвятил всё свободное время учёбе.

Для этого я заранее подготовил финансовую подушку — отложил деньги на полгода жизни в режиме «умеренно затянутого пояса». Такой срок я выбрал не случайно: большинство работодателей ищут разработчиков со знанием хотя бы одного фреймворка, и по моим расчётам примерно к этому времени должен был закончится курс по React.

Дополнительно, за месяц до «даты Х», я записался в карьерный трек Практикума. Это специальная программа внутри Практикума, которую проводят HR-консультанты — специалисты, подбирающие сотрудников в ИТ-компании. И это был суперполезный опыт!

Подготовка

Я работал вместе с наставницей Юлей Яковлевой — большое ей спасибо за подсказки и поддержку!. В общих чертах программа выглядела так:

  • сперва она дала теорию — как ИТ компании отбирают сотрудников, как подготовить резюме и сопроводительное письмо, чтобы заинтересовать рекрутеров.
  • затем я подготовил эти документы, она их проверила и дала советы по улучшению.
  • после — провела тестовое собеседование, чтобы проверить мои навыки самопрезентации и дать обратную связь.

Я при всём желании не смогу выложить весь объём теории, но с радостью поделюсь принципами, которые помогли мне оформить резюме и сопроводительное письмо.

Несколько советов по оформлению резюме для разработчиков без опыта

→ Резюме не должно быть избыточно длинным, особенно у начинающего разработчика.

В поиске соискателя рекрутеры отсматривают десятки, если не сотни резюме. И они чисто физически не могут вникать в каждую строчку. Значит, текст должен быть лаконичным, по делу, без воды — а ещё лучше, если он подготовлен специально под эту вакансию.

По этой же причине не стоит утяжелять его нерелевантными достижениями. Например, в студенчестве я играл в театре, и наша труппа в 2011 году взяла гран-при на одном региональном конкурсе. Мне-то об этом приятно вспоминать, но для рекрутера эта информация, скорее, бесполезна. Значит, её стоит убрать.

→ Хорошее портфолио может компенсировать отсутствие опыта

В резюме не стоит говорить о том, что у вас нет коммерческого опыта — это понижает шансы попасть на собеседование: лучше покажите свои навыки, опубликовав ссылку на GitHub. В конце концов, про опыт можно рассказать уже во время собеседования, когда у рекрутера уже будет о вас какое-то впечатление.

Несколько советов, как оформить GitHub:

  • Сверстайте адаптивно и кросс-браузерно несколько лендингов, чтобы показать навыки вёрстки.
  • Найдите публичное API и сделайте на его основе мини-сервис, вроде генератора шуток или библиотеки лучших ужастиков. Так вы покажете, что умеете работать с REST и асинхронными запросами.
  • Также не стоит забывать о проектах из Практикума — их стоит оформить для просмотра людьми «извне» (хотя бы сделать красивое Readme).

→ В резюме стоит подробно рассказать о последнем месте работы

Перечислить основные достижения и коротко рассказать, как ваша работа повлияла на компанию. Это если, конечно, вам действительно есть о чём рассказать. Если нет — лучше не надо.

Такой рассказ может помочь, если вы ищете работу в той же сфере, в которой работали раньше: например, бывший бухгалтер будет находкой для сервиса, который разрабатывает инструменты для бухгалтеров. И это точно выделит его среди других новичков.

→ Раздел «О себе» — один из самых важных

Потому что он позволяет показать себя живым человеком, а не просто «функцией для отрисовки интерфейса».

Расскажите о своих хобби и увлечениях: любите играть в консоли? Круто! А во что именно? Читать? Классно! Что сейчас читаете? И так далее.

Для меня это стало открытием, но сейчас рекрутеры больше обращают внимание на soft-skills. Это слово сложно однозначно перевести на русский язык, но в общих чертах оно означает черты личности, характер и убеждения.

Блок «О себе» как раз позволит рекрутеру хотя бы косвенно понять, что вы за человек — и задать дополнительные вопросы уже во время собеседования.

→ Опционально: резюме стоит украсить фотографией

Советую выбрать то, на котором вы одеты, а фон радует глаз. Это самый спорный пункт, но к сожалению дела обстоят так, что встречают по одёжке, нравится нам это или нет.

-2

Пара слов о сопроводительном письме

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

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

Своё я составил по такой структуре:

  • Приветствие.
  • Абзац о том, какие технологии из вакансии я знаю.
  • Абзац о том, с какими технологиями я пока не работал, плюс отработка возражения — я быстро учусь и смогу в них разобраться самостоятельно.
  • Ссылка на проекты и предложение отправить тестовое задание по такому-то каналу связи.
  • Прощание.

Небольшой совет — пробуйте разные приветственные фразы и наблюдайте за тем, на какие отвечают чаще всего. Такой вот «A/B-тест на минималках» позволит найти оптимальную подачу.

Например, на мои письма, которые начинались с фразы «Добрый день, я начинающий фронтенд-разработчик, сейчас заканчиваю курсы» отвечали реже, чем на письма без этого уточнения.

Приступаем к поиску

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

Я решил не откликаться на все вакансии подряд, в которых есть слово «фронтенд-разработчик» — на мой взгляд, это всё равно как стрелять из пушки по воробьям: лишняя трата времени и для меня, и для рекрутера.

Вместо этого я тщательно отбирал вакансии, чтобы откликаться максимум на 5-6 в день. Это позволило больше времени уделить «кастомизации» резюме и сопроводительного письма, чтобы повысить вероятность ответа.

Мои «критерии отсева» были такими:

  • Вакансия подходит под мой фреймворк — React/CRA . Я решил, что для первого места работы стоит откликаться на вакансии, которые помогут углубить знания, приобретённые в Практикуме. Я не против выучить Vue или Angular, но как по мне лучше это сделать позже, когда как следует набью руку в React.
  • Требуемый опыт работы — 1-3 года или «без опыта» . Это на самом деле спорный фильтр, поскольку очень часто работодатели заполняют эту графу рандомно: в «без опыта» попадают и вакансии для синьор-позиций. Я пошёл от обратного — исключил из выборки те позиции, для которых я явно не подойду по опыту — 3-6 лет и 6+ лет.
  • В вакансии нет явного указания, что нужен миддл или синьор . Понятно, что это абстрактные уровни оценки: навыки разработчика, который считается миддлом в одной компании, могут соответствовать навыкам джуном в другой. Но я для себя решил, что если рекрутер точно определяет, что джун не подойдёт, то я не буду тратить время, чтобы его переубедить.
  • Если указана зарплата, то она должна быть «в рынке» . Медианная зарплата джуна-фронтендера — 50 000 рублей. Я решил не откликаться на вакансии, в которых зарплата ниже этой суммы и выше 70 000 рублей.

Искать работу гораздо легче, если воспринимать процесс как игру: любая игра даёт обратную связь, которая позволяет корректировать стратегию и продвигаться дальше по уровню.

Поэтому я решил сделать поиск работы более «фановым» и завёл для себя табличку, разделив этапы поиска работы на 4 «уровня». Соответственно, у меня была простая цель — хотя бы раз достичь четвёртого уровня.

И каждый раз, когда я «срезался», то пытался проанализировать, что именно я сделал не так, и как можно улучшить результат. «Да, у этого парня своеобразные представления о фановости», — наверняка подумаете вы, и я с вами полностью согласен!

Всего за три дня я отправил 16 откликов. Статистика такая:

Это не оригинал таблицы, в оригинальной я добавил ссылки на вакансию, уровень зарплаты и примечания.

Из пяти компаний, которые заинтересовались резюме, три сразу пригласили на собеседование по телефону, а две — отправили тестовые задания. Тестовые мне выполнять не пришлось — их прислали уже после того, как я получил два предложения о работе. По той же причине я отказался и от одного телефонного собеседования.

На всякий случай покажу, что требовалось сделать в тестовых:

Тестовое задание №1

Задача: Реализовать прототип библиотеки для отображения линейных графиков с использованием WEB Canvas.

  1. Представить свой API для задания массива «графиков». Каждый «график» должен иметь: a. Наименование параметра; b. Массив точек (X,Y).
  2. Библиотека должна поддерживать следующие функции: a. Отслеживать изменение собственных размеров и обеспечивать автовписывание; b. Отображать оси, с указанием отображаемых на осях параметров; c. Отслеживать положение мыши с отображением всплывающей подсказки по точкам; d. Масштабирование области графиков.

Срок выполнения: 1,5 недели.

Тестовое задание №2:

Задача: Сверстать и запрограммировать страницу интернет-магазина.

Функции:

  1. Слайдер
  2. Фильтрация по типам товаров
  3. Сортировка по убыванию и возрастанию цены
  4. Добавление товара в корзину
  5. Открытие и закрытие модального окна с корзиной
  6. Изменение количества товаров в корзине
  7. Расчет стоимости товаров в корзине
  8. Удаление товара из корзины

Требования:

  1. Адаптивность
  2. Минимальная кроссбраузерность (последние версии Chrome и Safari)
  3. Сохранение пропорций изображений при изменении ширины экрана
  4. Соответствие макету
  5. Не использовать Bootstrap и jQuery
  6. Круто, если используете Pug
  7. Из JS-фреймворков / библиотек можно использовать только Vue.js (при желании)

Срок выполнения: неделя.

Собеседования

В первый же день поисков со мной связалась рекрутер компании, которая занимается переводами документации. Она задала несколько уточняющих вопросов (какие именно — уже не помню, но ничего неординарного не было), и предложила на следующий день (3 ноября) созвониться с руководителем отдела ИТ-разработки.

Спустя несколько часов мне написал представитель стартапа, который разрабатывает новый премиальный дейтинговый сервис. Он поинтересовался, когда мы можем созвониться — а я решил ковать железо пока горячо и предложил прямо сейчас, через Zoom.

Обычно первым делом рекрутеры проводят «скоринговое» интервью, чтобы как раз оценить soft-skills кандидата. И если всё в порядке — с ним проводят уже техническое интервью. Поэтому я немного растерялся, когда включилась камера, и на меня уставились три человека — тот самый представитель (оказалось, что он — один из сооснователей), его партнёр, а по совместительству финансовый директор, и бэкенд-разработчик.

Они рассказали коротко о продукте — точнее о том, что его пока нет, но есть инвестиции, дизайн-макет, бэкенд и горячее желание его разработать, — порасспрашивали меня о том, почему я решил уйти из медиа во фронтенд и тут началась техническая часть.

Я не ожидал, что собеседования начнутся так быстро, поэтому к техническому интервью не готовился — пришлось рассчитывать на остаточные знания. Вот что спрашивали:

— Знаю ли я алгоритмы? Какие именно?

— Как оценивается их сложность?

— Чему будет равна временная сложность алгоритма Х?

— Основные принципы ООП?

— Что такое чистые функции? Что такое замыкание?

— Что происходит, когда мы вводим название сайта в адресной строке?

Я волновался, но меня подбадривала реакция бэкендера на мои ответы — он выглядел не как экзаменатор, а, скорее, как одногруппник, который наблюдает за товарищем на зачёте: радуется удачным ответам и переживает за неудачные.

Ребята мне сразу понравились. Не могу сказать, чем именно — просто почувствовал, что хочу работать вместе с ними и создать этот проект. Они позже сказали, что я тоже произвёл хорошее впечатление — умением рассуждать и «общей адекватностью».

Мы договорились встретиться на следующий день (3 ноября) в офисе и пообщаться лично. И уже после этого принимать решения. В тот же день, на пару часов раньше, у меня было то самое собеседование с переводческой компанией.

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

— Проверим, знакомы ли вы с ООП. Назовите основные принципы? — Наследование, полиморфизм и инкапсуляция. — Прекрасно, теперь расскажите о том, как реализовать их в JS. — { рассказываю } — Замечу, что вы перепутали полиморфизм и наследование. Но пойдём дальше.

Вот ещё несколько вопросов с того собеседования:

— Что такое Event Loop?

— Как интерпретатор обрабатывает синхронный и асинхронный код?

— Что такое побочные эффекты у функций?

— Что такое промисы? Какими состояниями они обладают?

— Основные HTTP-методы?

— Основные коды состояния в HTTP-ответе?

И многое другое. Большинство атак я отбил, но впереди было финальное сражение — вопросы на знание React.

— Расскажите, что такое props drilling и какие способы решения этой проблемы вам известны. — Я ни разу не сталкивался с этим термином. — Хорошо, а какие вообще проблемы с пропсами существуют? — Когда их приходится прокидывать из родительского компонента вглубь дочерних. — Отлично, вот вы и назвали, что такое props drilling. И как его избежать? — С помощью хука createContext, который создаёт новый контекст, и хука useContext, который позволяет дочернему компоненту подписаться на контекст. — Замечательно. Вижу, что с Context API вы знакомы, а теперь расскажите Наталье [рекрутеру], что такое, собственно, хуки.

Дальше было полегче:

— Из каких библиотек состоит React?

— Какие основные компоненты существуют в библиотеке Router DOM?

— Какие хуки есть в Router DOM?

— Где React рендерит код — на сервере или на клиенте?

— Какие компоненты бывают в React?

И так далее. С этим вопросами я тоже справился. А вот последний прорвал мою линию защиты как нож масло.

— Хорошо. А что же такое JSX? — Синтаксис, который позволяет использовать HTML внутри React. — Тут вы ошибаетесь, конечно — никакой HTML внутри React не используется. Разметка да, но не HTML. Это описание интерфейса — с помощью Babel JSX-код транспилируется в вызовы метода React.createElement, то есть это своего рода синтаксический сахар. В общем, учите матчасть.

На этом собеседовании у меня снова было ощущение, что я сдаю зачёт — правда на этот раз не лояльному преподу, но я благодрен ему за развёрнутые комментарии моих ошибок: это очень крутое чувство, когда ты находишь пробелы в знаниях и можешь тут же их заполнить.

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

Я попросил отсрочку до вечера — и поехал на второе собеседование в стартап и в конце концов выбрал его. Правда, через месяц решил уйти, но это уже другая история.

Финальные советы

→ Если вам отказывают после собеседования или тестового задания — просите обратную связь.

Если причина именно в навыках — это отличная возможность, чтобы их прокачать. Может я мазохист, но мне нравится ошибаться — исправляя ошибку, лучше разбираешься в нюансах, узнаешь больше разных штук.

Чтобы прокачать технические навыки, советую порешать задачки на CodeWars или попроходить тесты на Skillotron .

→ Не расстраивайтесь, если получаете отказы

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

Я рассуждал так — если я не подхожу компании, значит и она мне не подходит. И отказ означает только то, что я стал на шаг ближе к месту, в котором мне будет классно и круто.

→ Прохождение интервью — это навык

И его тоже можно прокачать. Рекрутеры задают плюс-минус одинаковые вопросы — подготовьте ответы (а лучше истории) заранее. Чтобы пройти техническое собеседование — посмотрите на ютубе записи публичных интервью с фронтендерами: какие вопросы им задают и как они на них отвечают.

→ Не бойтесь откликаться на вакансии

Если они подходят по стеку/навыкам/зарплате, но из описания возникает ощущение, что компании нужен фронтенд-супермен. Компании чаще всего приукрашивают сложность и «идеальность» портрета кандидата.

Не страдайте от «синдрома самозванца» — рискните, вы же всё равно ничего не потеряете. Возьмут — хорошо, не возьмут — см. совет №1.

От команды Практикума: нам не нравятся статьи с кричащими заголовками: мы не даем пустых обещаний и быстрых легких побед. Поэтому вы можете сперва попробовать курсы веб-разработки от Яндекс.Практикума , где первые 20 часов занятий – бесплатные. Так вы успеете понять, нравится ли вам разработка, прежде чем отправиться с нами в большое путешествие по смене своей профессии.*

*да, мы повторили сообщение из начала статьи для тех, кто дочитал. просто поразительно, какой вы любопытный человек! Специально для таких автор статьи даже рассекретил свое резюме .