Иногда выбранное направление разочаровывает на практике — экосистема слишком запутана, а технологии работают не так, как ожидалось. Пользователь Medium и бывший мобильный разработчик Никлас Клайн рассказал, чем его разочаровала мобильная экосистема, по каким причинам он решил сменить карьерный путь и почему веб-разработка превосходит мобильную. Приводим адаптированный перевод его статьи — она пригодится как начинающим мобильным разработчикам, так и тем, кто планирует окунуться в эту сферу.
Девять проблем мобильной разработки
Дарья Сидорова
Когда я учился в университете, мобильные ОС Android и iOS были новинкой. Они интересовали многих, а небольшое Android-приложение можно было создать практически на каждом семинаре по программированию. Так я сделал первые шаги в экосистеме Android и, вероятно, по этой причине стал мобильным разработчиком.
Однако в процессе работы я разочаровался в мобильной экосистеме и решил сменить профессию. Я ушел из мобильной разработки несколько лет назад и надеюсь, что с тех пор многое изменилось к лучшему. В статье обсудим недостатки, с которыми я столкнулся, используя следующие технологии:
-
Android SDK (Android Software Development Kit) — инструменты для разработки приложений под Android;
Flutter — технология для создания приложений под Android и iOS.
Некоторые из рассмотренных ниже пунктов можно отнести и к iOS SDK.
Фрагментация Android
Фрагментация Android возникает из-за различий между версиями Android и версиями приложений, работающих на устройстве. Это большая проблема для каждого разработчика, использующего эту ОС.
Мне так и не удалось понять, почему большая часть инструментов SDK (в особенности связанных с пользовательским интерфейсом) не являлась зависимостью приложения, а была встроена в устройство. Из-за этого приходилось использовать библиотеки поддержки и отлаживать приложение для каждого целевого уровня API (Application Programming Interface). Уровень API — это целое число, однозначно идентифицирующее версию API, предлагаемую Android.
Кроме того, я постоянно сталкивался с поломкой кода на устройствах Samsung и Huawei, который отлично работал на эмуляторе и тестовых девайсах.
Дизайн-система Material Design
Material Design — дизайн-система от Google, которая помогает создавать единый визуальный стиль для интерфейсов всех ее продуктов и сервисов. Читая комментарии на HackerNews и Reddit о Material Design, иногда я думаю, будто эта библиотека не нравится никому, кроме меня. Я доволен не только ее внешним видом, но и проработанной документацией.
Представь концепцию продвижения Москвы на Moscow Travel Create и поборись за призовой фонд 1,2 млн рублей. Подробнее по ссылке
Material Design появилась в 2014 году, заменив стиль Android Holo. Казалось, будто компания выпустила новинку в спешке. В первые годы в официальной библиотеке поддержки Material Design отсутствовали простейшие виджеты, несмотря на то что они появлялись в приложениях от самой Google. Разработчикам приходилось создавать собственные виджеты или использовать альтернативную реализацию (сомнительного качества) из GitHub.
Библиотека поддержки Material Design с ее изрядным количеством визуальных несоответствий и ошибок, вероятно, впервые заставила меня задуматься о состоянии экосистемы Android.
Android SDK
Создать надежное Android-приложение — трудная задача. И по большей части проблема в Android SDK.
В теории приложение для Android может неограниченное количество времени работать в фоновом режиме, не потребляя системных ресурсов, и вернуться в предыдущее состояние по желанию пользователя. По крайней мере это возможно, если разработчику удалось успешно реализовать управление состояниями и жизненный цикл, что достаточно сложно сделать с помощью Android SDK.
Мне всегда хотелось, чтобы Google признавала эти проблемы и пыталась решить их вместе с сообществом.
Шаблоны проектирования и аннотации для абстракций
Разработчики быстро осознали, что невозможно создать реальное приложение на основе абстракций, которые предоставляет Android SDK.
В качестве решения появились новые шаблоны проектирования, которых, вероятно, становится больше с каждой неделей, — MVC, MVP, MVVM, MVI и многие другие. Из-за невозможности использовать обычные вызовы конструктора для управления зависимостями моей команде приходилось разбрасывать аннотации по всей базе кода. Во всем этом не должно быть необходимости.
Языки Java и (тем более) Kotlin достаточно выразительны, чтобы просто и прозрачно смоделировать все эти элементы. Однако Android предпочитает огромные XML-определения и рефлексивное создание экземпляров. Из-за этого девелоперы вынуждены запутывать код, добавляя аннотации и спорные шаблоны проектирования.
Отставание от конкурентов
В некотором смысле разработка для платформ iOS и Android конкурирует с веб-разработкой.
Однако у первых есть значительное преимущество — каждая из них принадлежит одной корпорации. У веб-разработки, в свою очередь, есть много заинтересованных участников, желающих, что она развивалась в соответствии с их потребностями. Тем не менее она обладает более живой и инновационной экосистемой.
Читайте по теме: Сколько стоит разработка такого приложения, как Clubhouse
Возьмем, к примеру, React — JavaScript-библиотеку с открытым исходным кодом для разработки пользовательских интерфейсов. Трудно отрицать, что компонентный подход к пользовательским интерфейсам — самая разумная абстракция, существующая на данный момент.
В течение многих лет Android игнорировала эту тенденцию. Затем в 2019 году Google выпустила Jetpack Compose — набор инструментов для создания Android-приложений на языке программирования Kotlin. Примерно то же самое происходило и в мире iOS.
Разработка пользовательского интерфейса
Красота приложения заключается в пользовательском интерфейсе. Приходилось ли вам когда-нибудь устранять сбой на сайте? Для этого нужно просто открыть инструменты разработчика в браузере, выбрать поврежденный элемент и поэкспериментировать со свойствами CSS и HTML. В сравнении с этим Android — недоступный черный ящик.
Векторная графика
До Android 21 (5.0) векторная графика просто не поддерживалась. Дело в том, что большое разнообразие Android-устройств нуждается в графике, которая тщательно адаптирована под потребности каждого уровня. Конечно, прагматичные разработчики создали инструменты, преобразующие формат SVG в PNG. Но в конечном итоге Google все же представила новый класс VectorDrawable, поддерживающий SVG.
Туманные перспективы
С годами я начал все больше беспокоиться о том, что мои знания устареют в обозримом будущем. Большая часть из них была применима только в мире Android и лишь в редких случаях — в более широкой области разработки ПО.
Читайте по теме: Разработка без кода: какое будущее ждет сферу приложений
Учитывая сложности нативной мобильной разработки, я думаю, что в долгосрочной перспективе она, возможно, перестанет существовать. Это породило мысли о том, насколько полезны приобретенные мною навыки.
Flutter
Flutter, выпущенный в 2017 году, обещал исправить основные недостатки Android SDK и предоставить кроссплатформенную поддержку. Вместе с коллегами мы начали переносить наше Android-приложение на Flutter. Оказалось, обещания были не напрасны.
Фрагментация Android полностью устранилась благодаря встроенному конвейеру рендеринга.
С самого начала Flutter включал обширную библиотеку высококачественных виджетов Material Design.
Функция горячей перезагрузки ускорила создание и тестирование интерфейсов.
Приложения выглядят отлично на разных платформах.
Однако у Flutter были и свои недостатки, которых можно было бы избежать.
Вывод
В определенный момент я осознал, что не хочу больше работать с этим типом технологий. По моему мнению, современный хорошо спроектированный сайт дает гораздо больше возможностей. Он использует единую базу кода и работает на каждом клиенте.
При этом я высоко ценю продуманные нативные приложения (мобильные и настольные) и уважаю разработчиков, которые создали их с помощью доступных инструментов. Просто я больше не хочу быть одним из них.
Источник.
Подписывайтесь на наш Telegram-канал, чтобы быть в курсе последних новостей и событий!
Источник: