Куда катится MobAIle-разработка

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

В целом, информационное пространство мобильной разработки довольно обособлено. Не выходя из него намеренно, мы редко узнаём про новости из мира backend, web-frontend или ML. При этом со временем тренды приходят из одной области в другую. Как пример — мода на реактивное программирование, завезенная из мира Java и бэкенда, которая постепенно сменяется асинхронным программированием благодаря языку Kotlin, который теперь активно захватывает свою долю в мире бэкенда. Или UDF-архитектуры, которые перетекли к нам из фронтенда, сменив MVP-архитектуру, когда-то перенесённой из бэкенда.

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

Тренд. Хромающая демография


Первая группа трендов относится к демографии. Это не технологические изменения, но контекст важен, так как именно изменения в демографии диктуют повышение спроса на определённые продукты и сервисы.

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

Дефицит квалифицированных кадров


Ссылки:
— РБК. Кадровый голод и рост зарплат: как поменялся рынок труда и что его ждет
— РИА. «Уже некого набирать»:
Россия столкнулась с новой проблемой

Первый тренд — это стабильный дефицит квалифицированных кадров во всех сферах экономики. Мы наблюдаем его в IT своими глазами. В других сферах дефицит кадров может быть еще более явным и общественно-критичным: учителя, врачи, инженеры и т.д. Такие позиции чаще всего нельзя закрыть с помощью удалённого специалиста, а условия труда в них бывают менее привлекательны, чем в IT.

phs5soqcn-wdfbjuvquqc-kxcf0.png
Пустующий цех. Сгенерировано в Шедевруме

Я думаю, что мы застанем момент, когда общение с живым врачом будет роскошью и доступно только обеспеченным людям. Хотя в каком-то смысле это происходит уже сегодня: «хорошие» врачи с большей вероятностью предпочтут работу в частной клинике, доступной не всем, чем в бюджетной.

Стареющее население


Ссылки:
— РБК. Как старение населения повлияет на экономику России
— ТАСС. В России доля населения в возрасте 65 лет и старше увеличилась вдвое за последние 50 лет

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

nmffl_qle2hlimpuu3wr9pdil34.png

Важный момент: уже сегодняшние пенсионеры в целом оцифрованы, они умеют пользоваться смартфонами, цифровыми сервисами, у них есть социальные сети.

Что поменяется? Цифровые ассистенты в массы


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

d-ceuhd2bfpkhupxi0obiboqakm.png
Цифровой ассистент врача. Сгенерировано в Шедевруме

Наиболее перспективны те направления, где ассистент сможет помочь профессионалу заметно увеличить продуктивность. Там, где раньше работали трое, будет работать один человек с ассистентом.

Уже сейчас легко представить, как:

— ассистент врача проведет онлайн-консультацию;
— ассистент учителя поможет детям подтянуть английский;
— ассистент HR проведёт полный цикл найма сотрудника от вакансии до подписания документа;
— ассистент CEO поможет подготовить стратегию для инвесторов;
— ассистент программиста создаст шаблон фичи по описанию функционала экрана в заданных архитектурных ограничениях;
— ассистент аналитика опишет, как извлечь и отобразить на экране стороннее API.

Что делать?


Во-первых, реализовывать такие продукты. Держать в голове, что продукт, помогающий одному специалисту работать с эффективностью трёх, будет востребован в нынешних условиях. Да, так можно было сказать и 10, и 20 лет назад, но с внедрением технологий, которые мы затронем ниже, появляется возможность делать продукты с пониженными порогами входа, с которыми пользователь может провзаимодействовать более привычными каналами: речь, жесты, AR.

У нас хорошо оцифрованы digital-first сервисы (финтех, развлечения), что не всегда можно сказать о «commodity-сферах»: медицина, производство, социальные услуги, ЖКХ. Именно тут цифровые ассистенты могут заметно повысить эффективность труда.

Во-вторых, в условиях цифровизации и оптимизации труда нам нужно учиться работать с ассистентами (в разных проявлениях), чтобы самим не стать теми двумя, которые не научились :)

Тренд. Рост количества поверхностей взаимодействия с пользователем

gmxtxq8lnd2alyjb5uvui7z6so0.png

Когда-то смартфоны перетянули у персональных компьютеров большую долю времени аудитории. Почему? Потому что удобно. Не всегда и не во всех сценариях. Но для большинства задач формат карманного устройства позволяет быстрее их решить.

Последние 10 лет мы наблюдаем за появлением новых устройств, которые забирают у смартфона долю времени аудитории. Почему? Потому что удобно.

Голосовые интерфейсы доступнее

g-s19cqwbatzlwcbo2jpua4cmai.jpeg
Умные колонки стали обычным атрибутом современной квартиры

И эффективнее в решении некоторых задач:

— Поставить напоминание
— Выключить свет в комнатах
— Включить сказку перед сном

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

Весна в AR/VR

ztbfumdcxz2ozwyp12vzvvfep5i.png
Создатели Apple Vision Pro дали надежду на массовость подобных устройств в будущем

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

— Смотреть графики котировок на стене, поглядывая за ребенком
— Смотреть видео, пока идешь на работу, не опуская голову
— Видеть подсказки от виртуального Михалыча при обучении работе на токарном станке

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

Альтернативные экраны

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

Они позволяют делать ту же самую работу, но благодаря другому форм-фактору, удобнее: на пробежку удобнее взять часы, а маршрут удобнее смотреть на экране за рулем. Обычно они не заменяют смартфоны, а «продолжают» их в своих сценариях: уведомление о новом сообщении быстрее посмотреть на часах; фильм, выбранный на смартфоне, удобнее посмотреть на экране телевизора.

Несмотря на то, что это почти смартфоны, это поверхности с другими требованиями к UX/UI:

— На мультимедиа автомобиля нельзя делать «глубокие» сценарии, чтобы не отвлекать водителя от дороги
— На экране часов мало места, поэтому всё, что не первично, в приложении отбрасывается
— В телевизоре пользователю неудобно вводить кнопками много текста

Что изменится?


Тренд продолжится. Количество поверхностей и разнообразие операционных систем к ним будет расти.

Что делать?


1) Закладывать в архитектуру своего продукта потенциальное множество поверхностей. Вот пример вопросов, которые можно себе задать:

— Можно ли будет использовать продукт на нескольких поверхностях, дополняющих друг друга?
— Можно ли реализовать голосовой сценарий?
— Как удобнее пользоваться приложением в автомобиле?
— Получиться ли запустить в AR-гарнитуре?

2) Посмотреть в сторону мультиплатформенных фреймворков.

Большой вопрос: поможет ли тут вообще мультиплатформенная разработка? С одной стороны, она создана именно для того, чтобы помочь переиспользовать наш код между несколькими поверхностями и операционными системами. Но будет ли она успевать за таким количеством поверхностей? Только время покажет, являлось ли применение мультиплатформенных фреймворков в данном вопросе панацеей.

op6ugjkeioz-f4kj0l8vtvwxgeq.png

Тренд. AI в массы


Адаптация мультимодальных нейросетей


На момент выхода поста для пользователей стала доступна ChatGPT-4V — мультимодальная нейросеть.

Это значит, что на вход можно подать не только текст, но и картинку, чтобы:

— Проанализировать дорожную ситуацию и подсказать, как действовать.
— Распознать человека и выделить его отличительные черты в формате json.
— Подсказать, сколько нужно заплатить в ресторане, по фотографиям стола и меню.

463wpwpzhqilg2mgw64qyzecura.png
Screenshot из публикации про GPT-4V

Оригинальная статья с примерами решаемых задач: The Dawn of LMMs: Preliminary Explorations with GPT-4V

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

Что изменится? Новый подход к Accessibility


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

У текущего решения есть недостатки:

— Accessibility требует отдельных трудозатрат разработчика: работа с фокусом, устранение вложенности View — дорого
— Пользователям приходится взаимодействовать с изначально визуальным интерфейсом, «прошагав» (прослушал озвучку, передвинул фокус, прослушал озвучку, выбрал кнопку) — это долго

Можно поручить эту работу продукту с мультимодальной нейросетью, способным взаимодействовать с интерфейсом. Accessibility-assistant, притворяясь пользователем, озвучит всё, что «видит» и делает. Скорее всего, эта возможность станет частью ОС — заранее установленным системным сервисом. А быть может, это станет продолжением стандартного голосового ассистента на устройстве. Возможно, ассистент сможет прокликать нужные экраны и кнопки на основе озвученной потребности пользователя.

Что изменится? Новый подход к UI-тестам


Тут все то же самое. Зачем описывать сценарий в коде UI-теста, если можно описать ИИ агенту желаемый сценарий.

4qy_aqkrrt0_driw0sxuaqodhfm.png
Пример проекта no-code UI-тестов TestRiggor

Что делать?


Простые, логичные интерфейсы! Теперь они должны быть очевидны не только для пользователя, но и для робота.

— Без скрытых механик.
— Без внезапно всплывающих элементов.
— С логичной навигацией.

Не расстраивай skynet!

Эволюция речевых технологий продолжается


Поговорим про речевые технологии. С внедрения распознания (Text-To-Speech) и генерации (Speech-To-Text) голоса в смартфоны прошло уже немало времени. Каждый год мы наблюдаем, как эти технологии развиваются и становятся легче / быстрее / менее требовательным к ресурсам, а также точнее и универсальнее.

Посмотрим на свежие примеры:

Яндекс Станции Миди. Умеет распознавать шёпот, детские голоса, различать их и отвечать в зависимости от контекста. Но самое интересное — это распознавание русской речи оффлайн, Это, конечно, не инновация: уже есть и были смартфоны, в которых встроено распознавание речи, но это первое устройство с такой функцией среди голосовых колонок (где более вариативная речь по интонации, удалённости и внешних шумов по сравнению со смартфонами).

a9ei8dj3phgj4qqybiwqkyclg04.png
Яндекс Станции Миди

Retell AI. В начале 2024 года Telegram-каналы облетело видео, где человек пытается записаться в клинику, разговаривая с виртуальным ассистентом. Тут, с одной стороны, интересно, как помогает ассистент, а с другой — интересно, насколько быстро распознается и как живо генерируется речь. Скорость распознания и качество генерации речи создали эффект общения с живым человеком.

nzzfnzr2voaagzt8wojjqkkafta.png

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

v8eibahltyiplug4raqttivnjqm.png
Устройства для синхронного перевода от waverlylabs

Уже не кажется фантазией МФЦ недалекого будущего, в который пришел иностранный гражданин и решает свои дела, свободно общаясь такое устройство.

Что изменится? Языковые границы сотрутся в работе


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

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

Русский — Я не сплю
Немецкий — Ich schlafe nicht

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

Что изменится? Языковые границы сотрутся в продуктах


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

Да, уже сейчас есть много платформ для локализации мобильных приложений (например centus или crowdin или localise) и во многих есть возможность использовать машинный перевод. Но они требуют, во-первых, отдельных действий от разработчика, а во-вторых, дополнительного контроля со стороны носителя языка.

Представьте, что на новые строковые ресурсы переводы на все существующие языки появится автоматически, а вы будете уверены в их корректности!

Быть может, скоро мы увидим, как сама ОС в runtime будет переводить слова в интерфейсе на требуемый язык. Сейчас в устройствах на ОС Android есть возможность переводить приложения с помощью Google Переводчика в режиме «Быстрый перевод», но это требует выделения текста пользователем.

Что делать?


1. Готовиться к глобальной конкуренции на рынке труда в профессиях, совместимых с удалённой работой.

Задать себе вопрос:
— Чем я буду ценнее иностранца с бОльшим опытом и меньшими ожиданиями к ЗП, если он завтра сможет пройти собеседование на мою должность на моём языке?

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

2. Развивать речевые интерфейсы. Может, интерфейс в вашем продукте можно заменить голосом и получить тот же результат. Голосовые сценарии постепенно захватывают свое место у визуальных, возможно, часть пользователей выберет ваш продукт, потому что с помощью голоса он решает его задачу быстрее.

ngya5qjsisrueg6ton9qiyhd3i4.png

Gen-AI становится доступнее и дешевле


Если пару лет генеративную языковую модель (далее — ЯМ) могли позволить себе те, кто владеет большими вычислительными мощностями (читай деньгами), то сегодня никого не удивляет, что можно бесплатно (или почти бесплатно) обратиться к помощи ЯМ или генератору изображений через API или web-интерфейс. Генеративный AI стал общедоступным и активно становится частью нашей новой реальности.

Для более требовательных и железо имущих в Open Source есть модели, которые можно до-обучить под свои специфические задачи.

В этом году Google открыл миру экспериментальное MediaPipe LLM Inference API, которое позволяет запускать языковые модели на устройства разных платформ (включая Android и iOS) и сами модели. Вероятно скоро мы увидим новые продукты на основе локальных языковых моделей.

Тренд. Адаптации Gen-AI в повседневную жизнь.


Как следствие вышесказанного — сегодня делать продукт на базе ЯМ может себе позволить небольшая компания без ML-инженеров. Достаточно иметь разработчика, который в состоянии сделать сетевые запросы (любой разработчик).

Но и это не всё. Кроме того, что это стало доступным, сообществом разработчиков выработан подход, который позволяет получать от языковых моделей не просто ответ, основанный на «каких-то» данных, а генерировать ответ на основе нужных бизнес-данных. Название ему RAG — Retrieval Augmented Generation, генерация, дополненная поиском. Это подход формирования prompt, позволяющий подсказать LLM, как сформировать результат на основе своих данных.

00ec2dd06f47578f25306cb56cd3a1d8.png
Схема работы RAG, взята из этой замечательной статьи

Если объяснять на пальцах, то в prompt (сообщение к ЯМ) добавляются релевантные отрывки текста, на основе которых можно попросить сделать ответ. Эти отрывки текста извлекаются из векторной базы данных, способной для фразы найти наиболее близкие по смыслу документы. Подробнее про это можно почитать тут или тут. Таким образом пользователь получает не произвольный ответ, а ответ на основе актуальных данных из его контекста.

Что изменится? Каждому по ассистенту


В каждой компании, даже самой консервативной и чувствительной к приватности данных, будет свой персональный помощник (Copilot) для написания кода, который будет иметь доступ к приватной кодовой и документации.

Github Copilot → {company_name} copilot

Возможность развернуть ЯМ в контуре в сочетании с возможностью не дообучать модель, а использовать RAG открывает двери к применению ЯМ даже в таких чувствительных к теме безопасности и приватности данных компаниях, как банки. В контексте информационных технологий эти ассистенты могут выполнять такие задачи, как:

— генерация кода и документации;
— подсказки для улучшения кода;
— исправление ошибок;
— конфигурация проекта;
— поиск по базе знаний;
— обучение (buddy);
— получение обратной связи о работе (1-to-1);
— взаимодействие с внутренними ресурсами компании — task tracker, calendar, planner.

Что делать? Готовиться к приходу ассистентов


Сначала хотелось бы написать банальности. Пишите понятный, читаемый и предсказуемый код. Документируйте его. Содержите актуальными базы знаний.
Это и так нужно делать всегда. Но теперь появилась еще одна причина — ассистенту нужны «чистые» данные для того, чтобы лучше помогать вам и вашим коллегам.

Не новость, что ЯМ хорошо справляются с задачами на декларативных языках (например, написать SQL-запрос). Это логично и ожидаемо, если вспомнить, что задача ЯМ — продолжить поданный на вход текст.
Так что, если мы хотим, чтобы наша команда имела в обойме качественно-помогающих ассистентов, есть смысл выбирать такие библиотеки и архитектурные решения, которые соответствуют декларативному стилю.

— Декларативный UI
— Декларативные запросы
— Декларативная конфигурация
— Декларативные тесты

Если наш ассистент будет «смотреть» на декларативный код, то ему будет проще генерировать работающий код, близкий к требуемому.

Что изменится? Code-review от языковой модели


Линтеры (lint checks) давно используются разработчиками как инструменты контроля нового кода на предмет соответствия кода заданным правилам и ограничениям. Однако lint checkers могут быть недостаточно эффективными для выявления сложных ошибок или проблем, связанных с логикой кода.

Языковая модель может предоставить разработчикам более мощный инструмент для анализа и улучшения кода. Разработчику локально будет помогать «lite» языковая модель, в то время как на CI будет подключена «тяжёлая» версия.

«Lite» языковая модель может быть использована для быстрого анализа кода и выявления простых ошибок. Она может помочь разработчикам быстро исправить ошибки и улучшить качество кода.
«Тяжёлая» языковая модель может быть использована на CI для более глубокого анализа кода и выявления сложных ошибок. Она может предложить разработчикам более точные рекомендации по улучшению кода и повышению его качества.

Примеры использования языковой модели на CI:
— Анализ кода на наличие ошибок: ЯМ может анализировать код и выявлять ошибки, связанные с синтаксисом, семантикой и логикой. Это может помочь разработчикам избежать ошибок, приводящих к сбоям в работе программы.
— Рекомендации по улучшению кода: ЯМ может предложить разработчикам рекомендации по улучшению кода, такие как использование более эффективных алгоритмов, оптимизация кода и улучшение структуры кода. Это может помочь разработчикам повысить качество кода и сделать его более читаемым.
— Автоматическое исправление ошибок: ЯМ может автоматически исправлять некоторые ошибки — синтаксические и опечатки… Это может ускорить процесс разработки и повысить качество кода.

Наравне с настройкой CI/CD у сеньоров и тимлидов появится ещё одна задача — настраивать утилиты на основе ЯМ: для написания документации / тестов / lint checks / исправления кода / код-ревью / подсказок.

Что делать? Изучать работу с ЯМ + RAG


Ключевые слова:

Языковая модель — LLM, Large language model
RAG — техника сбора prompt-а на основе «своих» данных
Prompt-engineering — это процесс создания эффективных и точных запросов для языковых моделей.

Бонус. А что дальше?


Из описанных выше трендов у меня сложилось видение того, как изменятся операционные системы, для которых мы делаем приложения.

Что изменится? User-data oriented OS


Операционные системы станут лучше работать с персональными данными и давать для этого новые инструменты. У пользователей всегда есть потребность решать свои задачи с минимальной затратой ресурсов (усилий)

С реализацией описанных выше трендов появляется возможность оффлайн / быстро / приватно:

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

d6ctzme-5lvtpmrynrn0narhdvw.png
Человек за операционой системой недалекого будщего. Сгенерировано в Шедевруме

Пользователь будет давать приложению Permissions на доступ к конкретным данным, а разработчики — учитывать это в продукте.

— Доступ к составу семьи.
— Доступ к результатам распознавания камеры без получения изображения.
— Доступ к документам пользователя.
— Доступ к физическому статусу пользователя: занимается спортом / сидит в баре / сидит с детьми.

Примеры сценариев:

— покупка билетов для всей семьи с помощью одной голосовой команды.
— предложение записать пользователя в автосервис и к стоматологу на основе его TODO-листа и календаря
— на основе истории браузера за период делать статистику наиболее волнующих тем и коротких summary.
— обращение в гос. органы с заявлением от лица пользователя.

Как это будет работать? RAG + локальные/смешанные ML-модели.
«Разметкой» и систематизацией данных пользователя будет заниматься сама ОС,
а прикладные разработчики в коде будут обрабатывать структурированные «разрешенные«данные.

Что изменится? Deeplinks на стероидах


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

yj3ysajfq3pqlqa97ugiarcajc8.png
Смартфон с ИИ. Сгенерировано в Шедевруме

Примеры сценариев:

— «Хочу посмотреть свежий комедийный сериал» (Открытие экрана кино-приложения пользователя)
— «Когда я последний раз посещал стоматолога?» (Запрос данных в календарь)
— «Сколько стоит доехать на такси до Патриков?» (Запрос в несколько приложений такси)

Иными словами, мобильные приложения и голосовые навыки ассистентов сольются в единый продукт.

Как это может выглядеть? Приложение в манифесте будет объявлять рядом с диплинками языковой контекст / прототип текстового запроса, который маппится на этот диплинк.

Посмотрим на примере Android Manifest-a. Как мы объявляем deeplink сейчас?


    
        
    

Как это может трансформироваться в будущем:


    
        
    


    
        
    

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

Заключение


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

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

А на какие еще тренды и технологические достижения стоит обратить внимание по вашему мнению?

© Habrahabr.ru