Истории

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

Истории
Дарья Сидорова
Дарья Сидорова

Редактор отдела «Истории».

Дарья Сидорова

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

Хочешь создавать приложения для смартфонов и других устройств? Сравни и выбери программу обучения в каталоге курсов Android-разработки.

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 были и свои недостатки, которых можно было бы избежать.

Вывод

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

При этом я высоко ценю продуманные нативные приложения (мобильные и настольные) и уважаю разработчиков, которые создали их с помощью доступных инструментов. Просто я больше не хочу быть одним из них.

Источник.

Фото на обложке: Unsplash

Подписывайтесь на наш Telegram-канал, чтобы быть в курсе последних новостей и событий!

Нашли опечатку? Выделите текст и нажмите Ctrl + Enter

Материалы по теме

  1. 1 Android или iOS: что выбрать для старта карьеры в мобильной разработке
  2. 2 Как парни из Пензы делают миллионы на пиксельных раскрасках
  3. 3 «iPhone X — наконец хоть какой-то прорыв» — Дмитрий Рябинин (Hi-Tech Mail.Ru) о новом айфоне
  4. 4 Apple Pay, Android Pay, LG Pay, Samsung Pay – какой ещё Pay тебе нужен
  5. 5 Новые тренды в Android-разработке: отчет из Сан-Франциско
ArtTech — карта разработчиков арт-технологий
Все игроки российского рынка технологий для искусства
Перейти