Что компании ждут от фронтендера-джуниора

2019 · Дискуссия · На митап! № 3 · HTML Academy

В одной вакансии джуниора ждут React, в другой Angular, в третьей просят знать JavaScript. Начинающему разработчику трудно понять, сколько ещё нужно выучить, прежде чем откликаться. Особенно когда за словами «базовые знания» на собеседовании обнаруживается совсем не тот объём, на который он рассчитывал.

На третью встречу «На митап!» в марте 2019 года я пригласил Андрея Мелихова. Он участвовал в найме фронтендеров и мог рассказать, что происходит с другой стороны собеседования. Мне хотелось разобраться и в требованиях к новичку, и в том, что сама команда готова ему дать.

Зачем команде джуниор

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

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

В команде Андрея за новым сотрудником закрепляли наставника. Причём помощь с устройством проекта нужна и опытному разработчику: знание языка ещё не означает знания конкретной системы. У новичка должен быть человек, к которому можно прийти с вопросом, не разыскивая каждый раз того, кто согласится отвлечься.

Что скрывается за базовыми знаниями

Я несколько раз возвращаю Андрея к требованиям: что именно должен уметь человек, который приходит к нему на первую работу? Ответ «знать базу» для начинающего слишком неопределённый.

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

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

Андрей обращал внимание и на то, понимает ли кандидат происхождение инструментов. Зачем в проекте Babel, что делает webpack, чем уже принятые возможности языка отличаются от предложений, которые ещё обсуждают. Для него это позволяло увидеть, насколько осознанно человек собирает приложение.

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

В HTML Academy мы начинаем с практики и постепенно добавляем знания, которые нужны для следующей задачи. Усвоить всё устройство языка заранее трудно. Но и повторять знакомые действия бесконечно не получится: в какой-то момент приходится разбираться, почему решение работает. Требования конкретной команды помогают понять, каких знаний пока недостаёт.

Самостоятельность видна в законченной работе

Разницу между джуниором и мидлом Андрей описывает через самостоятельность. Мидл может разобраться в задаче, оценить её и довести до результата. Джуниору чаще требуется помощь; он ещё ошибается в оценках и может не заметить часть условий. Это ожидаемая часть его работы.

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

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

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

Что писать, когда опыта ещё нет

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

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

В разговоре появляется идея выдать учебную работу за фриланс. С этим я не согласен: выдуманный заказчик не превращает учебный проект в коммерческий. Начинать отношения с работодателем с такой истории мне кажется плохой затеей. Отсутствие опыта можно обсудить; недостоверный опыт придётся поддерживать новыми объяснениями.

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

Предыдущий опыт не исчезает при смене профессии

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

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

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

О том, что делать с накопленным опытом в нашей профессии, мы отдельно спорили с Олегом Моховым в «Старикам тут не место?». В разговоре о джуниорах тот же вопрос возникает с другой стороны: что из прежней жизни человек приносит в новую работу?

Первая команда задаёт условия для роста

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

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

Мне ближе поиск первой работы именно с этой стороны. Кто будет смотреть код? Можно ли задавать вопросы? Есть ли время на ошибки и разбор решений? Если от новичка сразу ждут самостоятельного результата и некому ему помочь, само присутствие других разработчиков ещё не делает это место подходящим для обучения.

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

Я вижу в таком пути возможность познакомиться с компанией и постепенно подготовиться к переходу. Но внутренний кандидат всё равно проходит собеседование. Знакомство с продуктом помогает, а технические требования остаются.

На собеседовании выбирают обе стороны

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

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

У Андрея найм начинался с короткого удалённого разговора, за которым следовало более подробное техническое собеседование с участием руководителя команды. Отказ не обязательно был окончательным: человек мог разобраться в недостающих темах и вернуться. Для новичка такая обратная связь полезнее общего сообщения о том, что он не подошёл.

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

Когда перестаёт хватать сил

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

Андрей рассказывает о личных встречах с руководителем, возможности сменить задачи или команду. На этих встречах можно заметить трудности раньше, чем сотрудник решит уйти. Мне и при выборе первой работы хотелось бы понимать, с кем можно будет обсудить такие вещи.