{"id":14286,"url":"\/distributions\/14286\/click?bit=1&hash=d1e315456c2550b969eff5276b8894057db7c9f3635d69a38d108a0d3b909097","title":"\u041f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u043c\u0438 \u0418\u0422-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0441\u0442\u0440\u0430\u043d\u044b","buttonText":"","imageUuid":""}

KMP vs Flutter: 4 сценария, когда нужно сделать ставку на Kotlin Multiplatform, а не Flutter

Привет, это Максим Павлов— управляющий партнёр KTS. Мы создаём IT-продукты для бизнеса.

Кроссплатформенные инструменты помогают бизнесу не писать код два раза под iOS и Android, а переиспользовать его на обеих платформах. В статье — о том, чем Kotlin Multiplatform отличается от Flutter и в каких случаях он переигрывает и уничтожает Flutter.

При переходе от нативной разработки к кроссплатформенной многие выбирают Flutter, мы выбрали KMP. Я поспрашивал у нашего руководителя мобильной разработки Максима Мялкина, почему мы выбрали его, а не попсовый Flutter — делюсь результатами.

Максим Мялкин 
Руководитель мобильной разработки KTS

Kotlin Multiplatform (KMP) — раньше был известен еще как Kotlin Multiplatform Mobile‎ (KMM).

Кратко про KMP

KMP — это технология, которая помогает разработчикам переиспользовать общий код на языке Kotlin в обеих версиях мобильного приложения: для iOS и Android. KMP разработали в компании Jetbrains, которая сделала язык Kotlin — основной язык разработки приложений под Android.

Приложение на Kotlin Multiplatform состоит из трех частей:

  • общего кода, который описывает логику сразу для двух платформ,
  • кода интерфейс под iOS,
  • кода интерфейс под Android.

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

У вас будет интерфейс (отдельно под Android, отдельно под iOS), причем довольно простой: два поля ввода, кнопка «далее» и место для ввода кода из SMS.

При этом, за таким простым интерфейсом будет скрываться и своя логика: таймер, который отсчитывает время отправки кода, правила, по которым его нужно отправлять — это будет общий код, одинаковый и для iOS, и для Android.

Кратко про Flutter

Flutter — это более популярный кроссплатформенный фреймворк.

Главная особенность Flutter заключается в использовании одной кодовой базы на языке Dart вместо нескольких для Android и iOS платформ.

То есть, тогда как KMP фокусируется на бизнес-логике и позволяет использовать нативные инструменты каждой платформы для создания пользовательского интерфейса, Flutter предоставляет собственную систему виджетов для создания UI, которая позволяет создавать единый пользовательский интерфейс для всех платформ.

4 сценария, когда вам подойдет KMP

Выбор Flutter может быть предпочтительным, если вам нужно разработать приложение в короткие сроки и вы готовы мириться с ограничениями по дизайну. Согласно данным Surf, разработка на Flutter экономит до 40% времени по сравнению с нативной, тогда как у KMP этот показатель у нас в KTS варьируется между 20-25%.

Однако есть ситуации, когда стоит сделать выбор в пользу KMP.

#1. Вы не хотите долго искать разработчиков

Для работы на Flutter требуется знание языка программирования Dart. Разработчиков на Flutter тяжело найти на рынке — по данным того же hh.ru, сейчас их всего 1877 человек в России. Вы, конечно, можете нанять обычных Android- и iOS-разработчиков, но тогда надо будет потратить время на их переучивание. Без этого они и строчки не напишут.

Для работы на KMP не нужны «специальные» разработчики. KMP требует знание языка Kotlin, а значит вам подойдёт любой Android-разработчик: их, в настоящее время, по данным hh.ru, на рынке более 29 тысяч человек.

Если говорить про iOS-разработчиков, то iOS-интерфейс для KMP-приложений они могут сделать, не изучая KMP. Если вы хотите, чтобы помимо интерфейса, они смогли разработать еще и логику, то нужно закладывать от одного до четырех месяцев на их погружение в KMP с нуля. Но вы можете этого не делать и оставить реализацию логики Android-разработчику.

#2. Вам в приложении нужно использование блютуса, приём звонков и другие нативные фичи

Поскольку Flutter работает с языком Dart, то для настройки интеграции с нативными фичами — звонками или блютусом — придётся разрабатывать бриджи. Это механизмы, которые обеспечивают связь между нативным кодом, который сможет работать с этими фичами, и кроссплатформенным кодом на Dart.

В KMP же эта функция реализована нативно, следовательно SDK от производителя оборудования легко подключить. В итоге вы можете быстрее настроить интеграцию.

Как это реализуется на практике, можно посмотреть в нашем разборе мобильного приложения для управляющей компании застройщика Мангазея. Там мы написали приложение на KMP и без труда подключили в приложение модуль, который поставляет производитель домофонов.

#3. Вам важна нативность интерфейса

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

Да, конечно, во Flutter можно постараться и создать нативно выглядящий интерфейс под каждую платформу, а в KMP — использовать compose multiplatform, который позволяет делать единый интерфейс для обеих платформ. Но это скорее исключения из общепринятых подходов.

Вывод: если вам важен максимально нативный интерфейс для пользователей платформы или вы стремитесь сделать премиальный продукт, то выбирайте KMP.

#4. Вам важен плавный переход с нативного приложения

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

Также KMP — подходящий вариант, так как вам не нужно будет переписывать всё приложение с нуля, как того потребует Flutter.

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

Пример: у вас уже есть два нативных приложения. Вы можете встроить новые экраны, которые написаны на KMP, в старые приложения без необходимости переписывать весь апп. Следовательно, вам не нужно инвестировать много времени в переезд на KMP.

Кто и почему использует КМР

Сейчас KMP используют Avito, Google, Netflix и Тинькофф. Число компаний, которые его используют, растет с каждым годом.

Мы в KTS выбрали КМР по 3 критериям:

  • нет ограничений на реализацию интерфейсов — они нативны
  • простота подбора команды: используем тех же Android-разработчиков, что уже работают в штате над другими проектами, а iOS-специалистов быстро доучиваем
  • экономия денег клиентов: большая часть наших проектов связана с бизнес-приложениями, в которых логика занимает основную часть разработки

Если совсем коротко

Flutter — это решение для быстрого запуска небольшого продукта в том случае, если вы готовы мириться с ограничениями готовых компонентов.

Однако если у вас:

  • премиальный продукт и вы хотите повысить комфорт пользователя,
  • есть планы нанять разработчиков в штат
  • в команде есть готовые разработчики на Android и iOS,
  • уже есть нативное приложение,
  • вам нужно использование блютуса, приём звонков и другие нативные фичи,

то лучше использовать KMP, позволяющий создать максимально привычный интерфейс.

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

0
89 комментариев
Написать комментарий...
Сергей Сергей

Мелкий и средний бизнес выбирает flutter, поскольку он значительно экономит финансы на разработку. Не "нативность" UI он часто не принимает во внимание, когда речь идёт о каком-то каталоге товаров или условном небольшом личном кабинете. А учитывая, что этот же разработчик ещё может и веб админку сверстать, делает его (разработчика) очень ценным для бизнеса. Поэтому спрос на такие скилы очень высокий и думаю будет расти и дальше. Что делает flutter технологию весьма востребованной у этого сегмента рынка. И мне как разработчику очень важен этот аспект и я бы предпочел развиваться именно в эту сторону . Имхо у flutter и kmp разные сегменты рынка и я не вижу острой конкуренции между ними. Они играют на разных полях

Ответить
Развернуть ветку
Максим Павлов
Автор

С точки зрения разработчика хорошая стратегия, стать одним из 1900 человек, которые умеют во flutter:)

А с точки зрения заказчика/работодателя получается наоборот))

А насчёт разных рынков вы правы, для этого и написали статью, чтобы подсветить кейсы, в которых KMP лучше решает задачу чем Flutter

Ответить
Развернуть ветку
Георгий Хромченко

Только в русскоязычном Dart & Flutter чате в телеге 6500 человек, и там явно далеко не все. Ну и ситуация на рынке труда такая, что сейчас скорее нужно отсеивать кандидатов, чем искать их.

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

Ответить
Развернуть ветку
Максим Павлов
Автор

Так речь-то не про размер комьюнити, а количество доступных разработчиков.

Из 1900 соискателей на hh далеко не все ищут работу. Это просто сильно меньше рынок, чем KMP

Ответить
Развернуть ветку
Георгий Хромченко

Так на hh.ru и Kotlin разработчиков всего 5000, не сильно отличаются цифры.

Ответить
Развернуть ветку
Максим Павлов
Автор

Ну в 2 раза так-то:)

Ответить
Развернуть ветку
Роман

Из моих знакомых все в телеграм или линкедин сидят, никто hh не использует для поиска работы, такой себе показатель, нужно оценивать рынок в целом.
Само собой за 10 лет монополии котлин разрабов больше накопилось, но как мы видим все больше во flutter мигрируют.

Ответить
Развернуть ветку
Максим Павлов
Автор

Собственно, о чём и речь — Kotlin разрабов больше, это факт как ни крути - хоть по hh, хоть по каким-то другим источникам, которые нельзя объективно оценить

А вот насчет "как мы видим всё больше во flutter мигрируют" это вы выдаете желаемое за действительное :))

Ответить
Развернуть ветку
Роман

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

Понятны ваши опасения, вы собрали команду нативных спецов, они просят много, продавать их нужно за дорого и еще объяснить заказчику, что он должен одну работу несколько раз оплачивать. Как менеджер, чтобы как-то сохранить команду и сэкономить бюджет заказчика, вы ищете лазейки, идете к cto, который только SWIFT и тот без swift ui знает, и котлин. Спрашиваете что делать взять flutter или kmm, он говорит kmm, как самый безболезненный переход для него(не нужно изучать новый стек). Теперь чтобы объяснить заказчику что КММ неплох, вы идете и пишите статью, с заголовком как из желтой газеты, чтобы ваши продажники могли ее скидывать заказчикам, на вопрос почему не flutter(который сейчас уже каждый 2 заказчик задает).

Ответить
Развернуть ветку
Максим Павлов
Автор

Чтобы утверждать о геометрических прогрессиях, нужно как минимум ссылочку на эту статистику скидывать, без неё это все ещё "желаемое" или "я так чувствую" или "а вот все мои знакомые ищут работу не на hh, а в линкедине"

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

Так что давайте всё-таки начнём с пруфов, а то даже если там геометрический рост со 100 человек до 200, то это ещё долго таких спецов будет не хватать.

Это значит, что мы опять приходим к первому и главному критерию - если заказчик хочет иметь возможность нанимать не через 5-10 лет, когда специалистов возможно станет больше, а в течение ближайшего года двух, то выбор KMP как инструмента для лёгкого масштабирования команды очевиден

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

Настало время рассказать про кейсы, в которых KMP переигрывает Flutter:)

Ответить
Развернуть ветку
Роман

https://survey.stackoverflow.co/2023/
https://stackoverflow.blog/2022/02/21/why-flutter-is-the-most-popular-cross-platform-mobile-sdk/
Как минимум stackoverflow вами котируется, я предполагаю

Ответить
Развернуть ветку
Максим Павлов
Автор

Риторический вопрос:
На сколько часто опытные разработчики заходят на Stack Overflow и отвечают на опросы?

Но даже по этим данным респонденты отвечали на вопрос:
"Какие языки программирования, сценариев и разметки вы использовали за последний год и над какими языками вы хотите работать в следующем году? (Если вы оба работали с языком и хотите продолжать это делать, установите оба флажка в этой строке.)"

И по этим данным нет никаких данных о геометрическом росте, есть просто данные, что по Kotlin в 1,5 раза больше голосовали чем по Dart. Что я бы даже в плюсы котлина не записал, потому что это просто опрос, и тот с очень неточным вопросом

А вот в чем точно есть рост, так это в зарплатах Dart-разработчиков и это ответ на четкий вопрос "какой ваш годовой доход". К счастью, рост не геометрический (на сколько вообще можно об этом судить по двум точкам?), но это точно не аргумент для заказчика в пользу того, что надо использовать Flutter :)

Ну а статья в блоге — присмотритель внимательнее. Там единственная фактура — это количество вопросов на Stack Overflow по технологии и сравниваются React Native и Flutter :)

Внимание, вопрос:
Можно ли из "по этой технологии задают всё больше вопросов на сервисе вопросов и ответов" сделать вывод, что по этой технологии больше опытных разработчиков и что разработчики "массово переходят на Flutter"?

Не думаю:))

Ответить
Развернуть ветку

Комментарий удален автором поста

Развернуть ветку

Комментарий удален автором поста

Развернуть ветку

Комментарий удален автором поста

Развернуть ветку
Роман

И про сотрудников, напомню что 5000 андройд разработчиков, не значит KMM разработчиков. Большинство уже на собесе отказываются, когда узнают, что КММ проект, а не нативка

Ответить
Развернуть ветку
Максим Мялкин

По нашему опыту другая ситуация - ребятам интересно с этим работать. И отказов из-за KMP не было. Если у вас есть статистика на большом масштабе, было бы интересно взглянуть.

Что касается порога входа - андроид разработчику не составляет никаких проблем перейти на KMP: сменить несколько библиотек, изучить несколько нюансов как написать код, чтобы в ios было легко с ним работать (можно делать в процессе дальнейшей разработки уже, если не сталкивался до этого). В остальном все очень схоже, если у разработчика есть опыт работы с актуальным стеком на android.

Ответить
Развернуть ветку
Роман

У нас было 3 попытки перевести часть разработчиков на КММ, чтобы сохранить нативных андройд разработчиков, по итогу текучка у таких сотрудников была под 80%, либо на flutter, либо в другие компании.

Ответить
Развернуть ветку
86 комментариев
Раскрывать всегда