У меня было подозрение, что этим все и кончится, что я напишу именно то, что пишу сейчас. Но я сделан из того же теста, что и любой другой инженер-программист, поэтому я вскочил на подножку уходящего поезда, обрадовался, потом обрадовался еще больше и даже стал евангелистом. Евангелистом Flutter. Те, кто следит за мной на Medium и LinkedIn, знают, о чем я говорю. Я рекламировал Flutter как второе пришествие, я был в восторге от него и использовал его примерно 3 года. Но сомнения потихоньку закрадывались, и сегодня, спустя годы, я должен стать столь же честным, сколь был восторженным, и признаться — у меня есть сомнения в жизнеспособности Flutter.
Позвольте мне начать с того, что концептуально Flutter по-прежнему — на мой взгляд — лучший кроссплатформенный фреймворк всех времен, и прямо сейчас я не вижу никакой реальной альтернативы. Хотя, никогда не говори никогда. Мы также не видели альтернативы до тех пор, пока не появился Flutter. Скептики также утверждали, что он никогда не приживется, пока это не произошло. И я был бы слишком самонадеянным, чтобы утверждать, что Flutter станет последней кроссплатформенной средой разработки.
Мои растущие сомнения относительно Flutter не имеют ничего общего с самим Flutter. Они касаются всего вокруг него.
Владелец Flutter, Google
Если мы, разработчики, чему-то и научились за последнее десятилетие, так это тому, что Google похож на неразборчивого зависимого от наркотиков родителя, борющегося с раздвоением личности. Это, безусловно, одна из самых ненадежных компаний из всех, что занимаются разработкой программного обеспечения, что производят инструменты и фреймворки для разработчиков.
Миграция с Angular.js на Angular 2 была полным дерьмом, от которой у всех нас до сих пор посттравматический стресс. Сопутствующим ущербом для этой королевской херни является React, расширение Chrome Manifest V3 — абсолютное дерьмо, разработка приложений для Android прошла через все виды подростковых истерик, и даже на сегодняшний день она далека от того, как выглядит и ощущается опыт разработки для iOS. Затем, конечно же, есть Go, Kotlin, Carbon и Dart — все языки, разработанные или одобренные Google с большим или меньшим успехом. Последний язык, Dart, — это тот, на котором построен Flutter.
Короче говоря, у Google ужасный послужной список разработки программного обеспечения.
Kotlin Multiplatform
Как будто приведенный выше список еще не является достаточным основанием для того, чтобы не прыгать слишком быстро в постель с армией «дроидов» Пичаи, теперь у нас еще есть Kotlin Multiplatform, о котором нужно беспокоиться. И когда я говорю «беспокоиться», я действительно имею в виду беспокойство, потому что просто чтение домашней страницы быстро делает вас косоглазым, а ваши губы говорят: «Какого хрена?!?» Хотя в настоящее время технология все еще находится в бета-версии, обещания, которые она дает, очень похожи на то, что уже предлагает Flutter.
Нужно спросить — во что именно играет Google? Конечно, возможно, одним из ключевых отличий Kotlin Multiplatform является использование нативного кода для создания пользовательского интерфейса для различных платформ, таких как iOS, Android и веб, поэтому в теории невозможно обойтись одним инженером, как в случае с Flutter. Несмотря на это, цель остается почти такой же — иметь единую кодовую базу, которую можно компилировать в приложения на нескольких платформах. С точки зрения бизнеса цель экономии времени, сложности и, следовательно, стоимости идентична.
Фрагментация
Когда дело доходит до Android, хорошо понятен тот факт, что это чрезвычайно фрагментированная платформа, возможно, даже в большей степени, чем Windows, и уже одно это доставляло разработчикам множество проблем на протяжении долгих лет. Однако в экосистеме разработки Android существует еще один вид фрагментации, и, как ни странно, он тоже связан с Google. Снова…
Вскоре после появления Angular хорошие ребята из Ionic поняли, что в сочетании с PhoneGap это может быть приемлемым решением для создания гибридных приложений. Так что теперь у нас был Angular.js, а затем решения для разработки мобильных приложений на основе Angular.
Затем, конечно же, появился Flutter, звезда этой истории, и многие из нас согласились, что Flutter лучше, чем Ionic. При этом Ionic тоже неплох и вполне может удовлетворить определенные потребности, особенно когда все, что у вас есть, — это JavaScript-разработчики.
И, наконец, Kotlin Multiplatform, который пытается учиться на прошлых ошибках и быть «лучшим» решением. Но теперь у нас есть не один, не два, а целых три способа разработки одного и того же мобильного приложения. Все решения продвигаются или предлагаются самим Google, и, откровенно говоря, в той или иной степени это запутывает.
Dart
Мы не можем не поговорить о Dart. Мне нравится Dart. Я был совершенно открыт к языку в прошлом. Если вы писали на JS или TS более пары месяцев, вы можете быстро освоить новый язык. Это, однако, не обязательно означает то, что разработчики будут делать это или что они могут себе это позволить.
Dart, как язык, не представляет никакого реального барьера для входа, сам язык не является проблемой. Проблема в усталости разработчиков. Многие разработчики доходят до того, что последнее, что они хотят — это изучать еще один язык. Безумно воодушевленные разработчики, которые любят изучать новый язык каждый месяц, на самом деле составляют крошечную часть общей аудитории программистов. Кроме того, когда речь идет о компаниях и инженерных организациях, часто последнее, что вы хотите предложить — это новый стек. Не тот холм, на котором вы хотите умереть.
Исполнение
Хорошо, позвольте мне повторить это еще раз, прежде чем я навлеку на себя гнев всех энтузиастов Flutter. Концептуально и архитектурно Flutter великолепен, на самом деле это один из лучших фреймворков, с которыми мне довелось работать. Однако когда дело доходит до реализации — о Боже, я никогда не видел, чтобы все превращалось в беспорядок так быстро.
Я один из тех инженеров-программистов, которые не совсем верят, что открытый исходный код хорош. Глядя на NPM и горы мусора, которые у нас там есть, как бы я ни любил JavaScript как язык, я вынужден сказать, что окружающая экосистема выглядит как трущобы.
Но JS уже 27 лет. И можно сказать, что у него есть какое-то оправдание накоплению неуправляемого мусора. Flutter, с другой стороны, едва исполнилось 6 лет, и он все еще должен быть в первозданной виде. Но это не так, и впервые я ощутил, насколько шаткой может быть вся экосистема Flutter, когда была введена null-safety. Не поймите меня неправильно, это не единственный фреймворк с такими проблемами, и Dart не единственный язык с подобными критическими изменениями. У меня есть проблемы и с Python.
Но тут плагины ломаются направо и налево, не обновляются, не поддерживаются, цепочки зависимостей распадаются, плагины приносят больше вреда, чем пользы, — все это спустя всего четыре года. Это стало тревожным звоночком, я не ожидал увидеть это так быстро.
Я прагматичный инженер, я не ожидаю совершенства, проблемы являются частью разработки программного обеспечения. Но если я вижу, что Flutter через 6 лет достиг того же, что и JavaScript за 27 лет, то это не наполняет меня уверенностью.
Является ли Flutter хорошим выбором?
Два года назад я бы сказал, что да, скорее всего, хорошая ставка. Сегодня я гораздо менее уверен. Я бы все равно не стал отбрасывать его как вариант, но он становится куда менее привлекательным, чем пару лет назад. На данный момент он точно не заброшен. Flutter 3.7 был выпущен в январе 2023 года, поэтому я ожидаю, что у него все еще будет как минимум 2 года для разработки, даже если это будет самая последняя версия, которую когда-либо выпускал Google.
Если вы пытаетесь проверить идею, делаете приложение для малого бизнеса или небольшое приложение в крупной компании, предназначенное для того, чтобы посмотреть, является ли бизнес-направление жизнеспособным или нет, Flutter потенциально все еще может быть хорошим вариантом. Но за пределами этого я бы не стал делать долгосрочные ставки на Flutter.
Я бы дважды подумал, прежде чем ставить долгосрочное будущее бизнеса на Flutter. Я думаю, нативная разработка снова останется королем.