Опыт, не память

318f44ea36bc577755d0e731e37752f4.jpg

К написанию статьи подтолкнул прекрасный с технической точки зрения пост про вопросы и ответы для собеседований на позицию frontend-разработчика. В дополнение к нему я предлагаю несколько иной подход к вопросу найма. Ведь мне всегда казалось, что на собеседовании надо пытаться понять всего две вещи: реальный опыт кандидата и соответствие этого опыта имеющимся в компании задачам. Но никак не то, способен ли человек тупо заучить эти прекрасные книги по JS [1, 2, 3]. Софт скилы мы на этот раз трогать не будем. Равно как и вопросы про фреймворки.

Ниже я приведу группы вопросов и дам пояснения по их смыслу и ожидаемым ответам. Любые комментарии и конструктивная критика приветствуется.

Общие вопросы 

Назови несколько источников, откуда ты получаешь информацию про frontend?  

Привет Веб-стандартам! Есть куча грамотных разрабов, которые по странным причинам остались в прошлом и совсем не хотят заниматься профессиональным саморазвитием. Могут ли они подойти вам и решать насущные задачи? Да. Вовлечены ли они в свою профессию? Нет. Не имея вовлеченности (внутренней мотивации) такой работник быстрее выгорит, будет менее заинтересован к решению нетиповых задач и больше ориентирован на деньги. Но если у тебя легаси код из 2010-х, то может большего и не надо?

Какие спецификации ты изучал в последние месяц-два?  

Чем чаще разработчик обращается к первоисточникам, тем выше у него уровень. На уровне middle+ посты из рассылок про JS или со Smashing Magazine будут приносить куда меньше для понимания сути, чем детальное изучение спек. Есть исключения типа блога V8, но это именно исключение.

Какая часть frontend тебе наиболее интересна?  

Согласитесь, что копаться в верстке, делая ее по всем канонам WCAG, HTML и CSS спецификаций, работать с WEBRTC, думать про предметную область и UX, заниматься дебагом и оптимизацией или делать анимации с Three.js — это не одно и тоже. Вполне возможно, что у вас просто иной набор задач, чем интересы у соискателя. 

Браузер 

Представь, что у тебя есть сайт, состоящий из html, css, js файлов и одной картинки. Когда пользователь ввел в браузере адрес сайта, что происходит в браузере по шагам?  

Вопрос на миллион, и тут важно то, как рассуждает кандидат. Что он вообще понимает про OSI, DNS, TCP/IP, TLS, HTTP, critical rendering path, а также API, которыми можно измерить скорость работы этого процесса. 

Какие метрики производительности сайта ты знаешь?  

Насущный вопрос в мире побеждающего SSR (привет PHP). Нужна SEO оптимизация? Вот метрики Web Vitals. Гоните рекламу на сайт? Давайте посмотрим на ваш каскад. Появились фризы? Пойдем профилировать JS.

Какие способы оптимизации ты знаешь?  

Огромная тема для обсуждения, которая не заканчивается на lazy loading, батчингом или созданием виртуальных списков. И пообщаться можно не только про client side. Вообще в ответе вашего API может возвращаться очень много лишней информации, а вместо heart beat на HTTP можно поднять Web Socket. 

HTTP

Какими запросами ты пользовался и для чего они были нужны?  

Базовый вопрос, который я предлагаю взамен так полюбившегося HR-ами стандарта: «Мне команда поручила спросить у вас, чем отличается GET от POST?». Интересно, что в голове возникает у вашего собеседника при слове идемпотентность. Ответ на вопрос позволит понять, работал ли кандидат с авторизацией, куками, использовал ли URL API, с какими проблемами декодинга сталкивался. Не ровен час ваш кандидат и gRPC на клиенте юзал или про JSON-RPC слышал. 

Какие есть статусы ответов и как ты их обрабатываешь?

Не только показывает понимание того, какие стандарты есть, но и то, как была организована работа с бэком в части API. Как отдавались кастомные ошибки 200 OK + { error: true }, были ли и где хранились ошибки для пользователя и так далее. 

Как сделать онлайн обновление на странице по инициативе сервера?  

Игра в пинг-понг — это основа веба, но есть еще и такие умные слова, как Long pooling, SSE, WS. Поймем, какой кругозор у кандидата и какие типы задач он решал.  

HTML

Что такое и зачем нужна семантическая верстка?  

SEO, скрин ридеры, лучшая читаемость кода, помощь браузеру, наконец. Не страдает ли кандидат диватозом, читал ли он стандарт HTML?  

Как ты проверяешь, можно ли вложить тег в тег, например, в