Девять проблем мобильной разработки

Иногда выбранное направление разочаровывает на практике — экосистема слишком запутана, а технологии работают не так, как ожидалось. Пользователь 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-канал, чтобы быть в курсе последних новостей и событий!

    Android

    Дизайн

    Мобайл

    Разработка ПО

    Технологии

Источник: rb.ru

Рекомендованные статьи