Почему я верю в востребованность кроссплатформы и Flutter в частности?
Итак, здравствуйте! Меня зовут Никита Синявин, я разработчик мобильных приложений и лид команды Flutter-разработчиков в компании BetBoom. Также я веду свой личный блог, развиваю фреймворк для реализации подхода BDUI во Flutter, и являюсь администратором сообщества мобильных разработчиков Mobile Broadcast | Калининград. Вы попали сюда, потому что вам тоже небезразлична судьба кроссплатформенных технологий, в том числе и Flutter. Поэтому я предлагаю вам ознакомится со статьей и оставить свое мнение в комментариях. Поехали!
Сколько помню себя, в IT никогда не утихали споры насчёт ультимативности одного стека технологий для мобильной разработки по отношению к другому. Что же лучше: Android/iOS vs ReactNative/Flutter, React Native vs Flutter, KMM против всех и иже с ними? В разные периоды времени эти споры то разгораются, подогреваемые релизом новых технологий и их обновлений, то затухают, когда спорщики в итоге остаются при своем мнении. Но холивар — не цель этой статьи.
Сегодня я хотел бы порассуждать на тему того, почему я считаю кроссплатформенную разработку (в контексте мобильных устройств) востребованной на длительном горизонте времени и почему я считаю Flutter одним из бенефициаров этого тренда.
В свете того, что последние пару лет стали очень «урожайными» в плане анонса и релиза новых мобильных ОС, как построенных поверх AOSP, так и самостоятельных решений, я считаю возможность простой (относительно) интеграции с платформой одним из самых важных фактором при выборе технологического стека на горизонте 3–5 лет.
Пару слов о Flutter
Что такое Flutter?
Flutter — комплект средств разработки и фреймворк с открытым исходным кодом для создания мобильных приложений под Android и iOS, веб-приложений, а также настольных приложений под Windows, macOS и Linux с использованием языка программирования Dart, разработанный и развиваемый корпорацией Google.
Фреймворк позволяет писать единый UI и бизнес-логику приложений сразу под множество поддерживаемых платформ на одном языке (Dart) и предоставляет интерфейсы для двунаправленного взаимодействия с API целевой платформы.
Первая версия Flutter вышла в 2015 году и с тех пор поддерживается и развивается как командой Google, так и open-source сообществом.
Используется же эта технология как для простых приложений (вроде доставки пиццы), так и крупными игроками IT-рынка (Yandex Pro).
Архитектура — залог успешной интеграции
Flutter состоит из трех основных слоев: Framework, Engine и Embedder.
Framework предоставляет инструменты для работы с UI и бизнес-логикой приложения, а также высокоуровневым API для взаимодействия с целевой платформой.
Engine служит промежуточным слоем между платформой и фреймворком, обеспечивая их взаимодействие, управляя рендерингом, планированием задач и обработкой событий.
Embedder — специфичный платформенный слой, на уровне которого производится работы с API платформы.
Архитектура Flutter
Благодаря такой архитектуре Flutter может быть использован для работы с другими, не поддерживаемыми официально, платформами и ОС, в том числе и IoT-устройствами. Все, что требуется для того, чтобы подружить фреймворк с платформой — это предоставить собственную реализацию Embedder слоя.
Порт Flutter под Aurora OS — один из ярких примеров описанного выше подхода. Команда успешно использовала заложенную в фреймворк архитектуру, чтобы использовать Flutter для разработки под Аврору.
Сообщество
Не секрет, что сообщество Flutter очень активно участвует в жизни фреймворка: создает свои пулл-реквесты и issues, разрабатывает и публикует библиотеки, а также делится экспертизой.
Во многом это заслуга Google и его политики по отношению к Flutter:
Они ведут официальный канал Flutter на YouTube.
Одна из наиболее проработанных документаций на свете, которая содержит информацию по большинству вопросов, которые могут возникнуть у разработчика, имхо.
Понятный и прозрачный Contributing Guide.
Несмотря на недавнюю новость о сокращении штата разработчиков Flutter, мы верим в то, что этот инструмент продолжит активно развиваться. На наш взгляд, фреймворк уже прошел тот период своего развития, когда он мог попасть на кладбище проектов Google. А недавно Hixie (человек, максимально погруженный во внутреннюю кухню разработки фреймворка) опубликовал статью о том, сколько же человек работает над Flutter.
Экономический фактор
Большие компании часто сторонятся технологий для кроссплатформенной разработки. Это можно списать на следующие причины:
Переход требует существенных трудозатрат.
Отсутствие экспертизы в конкретной области знаний.
Мифы о низкой производительности кроссплатформенных приложений и их ограниченности.
«Исторический» фактор и инертность (у нас уже 5–10–15 лет развиваются Android/iOS приложения — не можем же мы все так бросить).
Все это — достаточно веские основания для того, чтобы продолжать действовать в устоявшейся парадигме. Но мы достаем гроссбух и начинаем считать :)
Одна команда разработки вместо двух. Со строго экономической точки зрения для бизнеса это отличная мотивация: мы тратим меньше, а сэкономил — считай, заработал. Тут есть свои подводные камни, из которых растут ноги проблем кроссплатформенных технологий — слишком большой акцент на кроссплатформу в ущерб знанию тонкостей нативной разработки. Изменение этого положения потребует титанических усилий от всех участников процесса, начиная HR и заканчивая СТО/Техлидами. На мой взгляд, создание команд, в которых компетенции в области нативной разработки объединены со знаниями в области Flutter могут быть гораздо более эффективными, чем простые команды Flutter-разработчиков. Обладая нужными навыками они самостоятельно смогут обеспечивать свои нужды при разработке приложений. Например, самостоятельно создавать библиотеки с необходимым API, не ссылаясь на то, что «такого нет на pub.dev». Но кто захочет запариваться с этим? :)
Производительность. Flutter не стоит на месте. Уже сейчас новый графический движок Impeller, оптимизированный специально под нужды фреймворка, по умолчанию включен для iOS приложений и в формате превью для Android. Он решает ряд старых болячек технологии (например, посадки fps при рендере первого кадра после запуска приложения), использует современный графические API и улучшает общую производительность.
Поэтапный переход. В официальной документации Flutter представлен гайд по тому, как добавить экран/группы экранов в Andoid/iOS приложения. Это позволяет постепенно переходить на использование новой технологии без нужды в том, чтобы коренным образом менять направление разработки. Таким образом, процесс перехода становится итеративным и дает возможность проверки гипотез и таки определиться — нужен ли нам Flutter.
Многообразие мобильных платформ. Китайские производители смартфонов начали процесс перевода своих устройств на собственные ОС и верить в то, что это чисто китайская история по меньшей мере наивно, как мне кажется. Рано или поздно и на наш рынок (как и на мировой) пойдут телефоны, на которых наши приложения просто перестанут работать. Смартфон стал неотъемлемой частью нашей жизни, и лишать часть пользователей доступа к приложениям, разрабатываемых нами, из-за того, что их устройство работает на другой ОС, сулит бизнесу лишь убытки. Возвращаясь к вопросу о количестве команд, мы приходим к необходимости выделения дополнительных ролей для людей, обладающих очень специфичными знаниями (работа с целевой ОС). Это тоже не позволяет сэкономить на разработке. Flutter частично решает эту проблему, благодаря заложенной в него архитектуре: для интеграции достаточно реализовать Embedder слой.
Вместо заключения
Выше я описал то, что по моему мнению сыграет важную роль в том, как в ближайшие 3–5 лет будет развиваться мобильная разработка. Я не Ванга и не хочу делать прогнозов, но лично для себя я решил, что Flutter будет одной из тех технологий, которые получат максимальный буст от сложившихся условий, и смело делаю на него ставку.
Каким вы видите развитие технологий для кроссплатформенной разработки? Как на ваш взгляд будет развиваться мировой рынок мобильных ОС? Чем ответит KMP на перечисленные выше вызовы? Предлагаю дать ответы на эти вопросы и высказать свое мнение о статье в комментариях!
И конечно же:
Вступай в сообщество мобильных разработчиков Mobile Broadcast!
Подписывайся на мой телеграм-канал Boltology Tech