Привет! Меня зовут Никита Спирьянов, я Head of mobile в Friflex.
У нас одна из самых больших Flutter-команд в России (на момент написания статьи — 28 человек). Мы постоянно расширяем нашу команду middle и senior разработчиков. Помимо этого, мы менторим, обучаем и онбордим джуниоров.
Расскажу, на какие моменты мы обращаем внимание на собеседованиях с кандидатами на позицию Flutter junior.
Flutter: не так прост, как кажется
На первый взгляд уровень вхождения во Flutter-разработку кажется довольно низким. И это, на самом деле, большая проблема. Многие начинающие разработчики, поверхностно изучив документацию, пробуют запустить свои первые Flutter-приложения. У них все получается, так как как основные инструменты довольно простые. И складывается ощущение, что разработка на Flutter не требует знаний основ программирования и Computer Science, что в корне неверно.
Flutter — это мощный фреймворк, который предоставляет обертку-абстракцию над нативной частью мобильных устройств. Он берет на себя всю работу по взаимодействию с нативными компонентами. Однако существующие плагины не могут на 100% покрыть все кейсы, которые необходимо реализовать. Особенно это касается нестандартных и сложных задач, для решения которых бывает нужно что-то поправить под проект или написать свой уникальный плагин, которого нет в pub dev. И здесь без нативных языков Objective-C/Swift или Java/Kotlin не обойтись.
По опыту, могу выделить такие пробелы начинающих Flutter-разработчиков:
Не разбираются в том, как работает сам фреймворк;
Не понимают, как отрисовывается картинка на экране;
Не знают, как происходит взаимодействие с нативной частью устройств;
Не умеют использовать известные паттерны.
Как попасть на собеседование
Наш HR-отдел рассматривает около 7-10 резюме в неделю. Есть отклики и от разработчиков с минимальным опытом, и от тех, кто хочет войти в мобильную разработку и выбрал Flutter. Бывают случаи, когда на Flutter переходят с другой кроссплатформы — например, с React Native. Нативные мобильные разработчики, которые перешли на Flutter, попадаются реже.
Для роста в IT важно попасть в коллектив с сильной командой разработчиков и выстроенными процессами. Если мы видим, что пробелы можно быстро восполнить, и есть мотивация работать и развиваться, то с таким кандидатом мы готовы работать, обучать и растить.
Кандидатов с небольшим опытом и недостаточной для понимания уровня кодовой базой на GitHub мы просим выполнить простое тестовое задание. Это задача с использованием любого стейт менеджмента. Например, мы предлагаем сделать приложение с двумя экранами. На первом экране — список городов. На втором — информация о погоде в выбранном городе. Такое задание можно выполнить за 1-3 часа. После его успешного выполнения кандидат попадает на собеседование.
Проводим собеседование
В нашей компании существует определенный стандарт проведения собеседований.
Собеседование состоит из трех блоков:
Рассказ кандидата о себе, своих ожиданиях, опыте, скиллах и проектах, который он выполнил. Тут нам важно понять, что кандидат ищет для себя, в чем хочет развиваться, кем видит себя через год-два.
Техническое интервью: самый сложный этап. Тут мы задаем вопросы по технической части, иногда просим решить задачи в прямом эфире.
Возможность задать вопросы представителю компании: в подробностях рассказываем о формате работы, корпоративных бонусах и возможностях роста.
Обычно на встречах мы присутствуем вдвоем — я и ведущий разработчик. Собеседования проходят в Zoom. Предлагаем общаться в видео формате, но не настаиваем: если кандидат откажется, отнесемся с пониманием. Длится такая встреча от 30 минут до часа. Обычно чем сильнее кандидат, тем быстрее он проходит собеседование.
Чек-лист «Проверяем скиллы кандидата на позицию Flutter junior»
Основные критерии для получения оффера от компании:
1. Знание языка Dart. Необходимо:
Знать и понимать механику языка, синтаксис, ключевые слова, уникальные возможности — например такие, как миксины и расширения;
Разбираться в том, как устроена null-безопасность в языке, для чего она нужна и как ее правильно использовать;
Понимать, как устроена асинхронность языка, что такое Isolate, Future, Stream.
2. Знание основ Flutter. Здесь важно:
Правильно применять виджеты и строить интерфейс;
Понимать, как устроена навигация: например, в чем разница между Navigator 1 и Navigator 2;
Понимать работу основных виджетов — StatelessWidget, StatefulWidget и InheritedWidget;
Уметь работать с одной из библиотек управления состоянием (bloc, redux, mobx).
3. Знание и понимание работы современных систем управления версиями (Git). В частности, работы GitHub.
4. Знание и понимание принципов SOLID и ООП.
5. Проявление дружелюбия и готовности работать в команде.
Мы задаем пять вопросов по Dart, пять вопросов по Flutter и два общих вопроса по программированию и процессам (gitlow/паттерны/принципы разработки и т. д.).
За каждый ответ выставляются баллы от 0 до 2: 0 — не ответил; 1 — ответил верно; 2 — дал развернутый ответ. Затем высчитываем процент полученных баллов от максимального количества. Собеседование считается успешным, если кандидат набрал больше 80%.
Бывает, что кандидат не может рассказать, например, про принципы SOLID и Git, но при этом показывает отличные знания Dart и Flutter. В таких случаях, определив уровень кандидата, мы рассматриваем возможность его обучения.
Мы набираем новичков не для того, чтобы учить их основам, а для того, чтобы из перспективных джунов растить отличных специалистов. Если вы готовы подтягивать знания, осваивать новые технологии, понимаете свои пробелы и горите желанием проявить себя — скорее всего, оффер вы получите. Добро пожаловать!
Присылайте ваши резюме на hr@friflex.com