Меня зовут Ринат. В этой статье расскажу о том, как проходили мои собеседования на фронтенд-разработчика, и какие бы я вопросы сам задал начинающему себе. Но начну издалека.

По образованию я связист, и я работал в службе при Роскомнадзоре, которая на уровне оборудования проверяет, соблюдают ли мобильные операторы правила блокировок сайтов. Большую часть времени я ездил по командировкам по Башкирии, мы лазили по сотовым вышкам и проводили измерения. Это физическая работа, и по две недели в месяц меня не было дома. В итоге я устал от этого и решил сменить специальность. В итоге мой путь с нуля до сеньора занял четыре года.

Всё началось в 2015 году. Я нашёл сайт Академии и начал проходить интерактивные курсы, которые давались очень легко. После этого я прошёл интенсив «JavaScript, уровень 1» и защитился на 100 баллов. Это было настоящее испытание, и такого удовольствия после защиты я не испытывал давно.

Интенсив тогда сломал мое привычное мышление, может быть, в этом заслуга моего наставника Александра Бренчева. Наставник — это процентов семьдесят успешной сдачи интенсива. Важно не только его наличие, но и то, как он настроит процесс обучения со студентом, и насколько правильно он будет всё объяснять.

После защиты первого проекта я был горд собой, казалось, что сделал что-то нереальное. После этого я прошёл ещё три интенсива и защитил проекты на них.

В 2017 году я сделал первый свой сайт. Как говорится, с нуля, «в блокноте». Это был сайт тортов на заказ для жены, она тогда занималась этим. Помню, как к нам домой пришёл покупатель за тортом. А у нас дома окна меняют рабочие, дети бегают, грязь везде и жена ему торт выносит, а он говорит: «Я думал, что это самая лучшая кондитерская в городе. У вас сайт такой. Не ожидал, что всё так плохо». Это наверное был самый лучший комплимент, который только мог быть.

В 2019 меня взяли в нефтяную компанию после двух собеседований. И я до сих пор работаю на должности Senior frontend developer, под моим руководством два младших разработчика. Хотя для себя я понимаю, что до сеньора мне ещё далеко. Но самое главное, я никогда в жизни не был ещё так счастлив от того, что делаю.

Я часто собеседую фронтенд-разработчиков. И каждый раз вспоминаю, что все вопросы, которые я задаю, упорно вбивали мне в голову на первом интенсиве по JavaScript. Как гвоздь в камень: долго, но верно. Самым сложным в освоении был метод массивов reduce, и я старался решать задачи без его использования. Сейчас наоборот пытаюсь использовать его везде, где это имеет смысл.

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

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

В 2018 году мне позвонили из онлайн-университета и позвали преподавателем по вёрстке и JavaScript. Это был, наверное, единственный для меня вариант набраться опыта, ведь собеседования я продолжал успешно проваливать.

Однажды я сделал морской бой на JavaScript в качестве тестового задания. Игра получилась классная, там даже компьютер имел подобие ИИ, обстреливая раненную палубу. Но всё-таки отсутствие опыта играло свою роль.

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

Как прошло собеседование в нефтяной компании

У них нет градаций, как в модных IT-компаниях, и с должностями всё проще — специалист, главный специалист. Но какая-то ассоциация есть:

  • Junior — начинающий специалист.
  • Middle — специалист отдела разработки.
  • Senior — ведущий специалист.

Я пришёл на должность специалиста отдела разработки программного обеспечения. На собеседовании были простые вопросы по вёрстке, например, просили написать структуру HTML-документа. По JavaScript было интереснее — там было около 18 вопросов, например:

  • Как получить с помощью JavaScript дату следующего вторника?
  • В каком порядке выведется console.log, если какие-то функции обернуты в SetTimeout, а какие-то нет?
  • Как поведёт себя SetTimeout на ноль секунд?
  • В чем заключаются характерные отличия стрелочных функций?
  • Можно ли добавить свойство в объект, объявленный через const?

Как бы я собеседовал себя

Много раз после вопросов ловил себя на мысли, что знаю ответ, но не могу правильно объяснить. Со временем на практике какие-то вещи стали понятными — в личных проектах, во время преподавания вёрстки. В итоге всё встало на места, и кусочки головоломки сложились.

Я считаю, что младший разработчик должен знать несколько вещей:

  • Всплытие событий. Это не самая важная тема в реальных процессах, но человек должен быть с этим знаком, и понимать, как это работает.
  • Замыкания. Хотя бы своими словами, но нужно объяснить на каком-нибудь элементарном примере что это, и как их применять. И привести пример того, когда мы можем воспользоваться замыканием и извлечь из этого выгоду.
  • Методы массивов. Я не знаю, есть ли проекты, где можно обойтись без использования методов массивов, поэтому я считаю, что человек должен знать и уметь работать с массивами и объектами.
  • Глубокое копирование объекта (или хотя бы неглубокое), и как избежать ссылочной зависимости при копировании.

Совет бывалого: учить ли фреймворки?

Учить, но не в самом начале. По крайней мере, до тех пор, пока не появится уверенность и силы написать что-то подобное морскому бою на чистом JavaScript. Это могут быть пятнашки или несложная карточная игра.

Конечно, маркетинг сильно влияет на людей, и громкоговорящая реклама «Изучите React.js или Vue.js за две недели и зарабатывайте 100 000+ рублей» заставляет людей, только косвенно знакомых с JavaScript, сразу изучать фреймворки. Но, по опыту, это почти гарантирует провал и часто убивает желание осваивать фронтенд дальше.

Как меняется мышление у разработчиков

Со школы мы знакомы с математикой, и в математике 0,1 + 0,2 = 0,3.

Конечно, там мы не сталкиваемся с тем, что 0,1 + 0,2 может быть не равно 0,3. В JavaScript подобные моменты постоянно возникают и когда ты пытаешься напрямую решить вопрос, это может оказаться заведомо неправильным. Тогда нужно подойти с другой стороны, и всё оказывается намного проще. Тогда же понимаешь, что у любой задачи есть несколько способов решения, и не всегда самый очевидный оказывается лучшим.