Mobius 2016: мобильная разработка по-новому
В этом году продажи айфонов впервые перестали расти, мобильный рынок в целом тоже не хвастается прежним бурным ростом, а новые смартфоны и новые версии их ОС уже не поражают воображение. Не означает ли это, что в мобильной разработке настаёт время застоя? Не начнут ли доклады о ней полностью повторять то, что говорили в предыдущие годы на тех же самых конференциях?
Прошедшая в Петербурге конференция Mobius позволила получить ответ и на этот вопрос, и на многие другие. Под катом — подробный рассказ о том, что там было.
Конференция стала частью «Летнего фестиваля разработчиков»: днём раньше неё состоялся DotNext, днём позже — HolyJS. Получалась возможность сравнить три разных вселенных: в .NET-мире за масштабные изменения сейчас отвечает .NET Core, JavaScript-мир вообще известен постоянными потрясениями, а может ли противопоставить этому что-то громкое мир мобильной разработки?
У открывающего keynote от Вибе Элсинга была заявлена тема #UXmatters, и можно было подумать, что зрителей ожидает сплошное «капитанство»: ну да, UX важен, кто же с этим спорит-то? Однако среди приведённых примеров «плохого user experience» встречались и неочевидные, и даже холиварные. Спикер смело атаковал гигантов, например, критикуя Uber за перебарщивание с анимацией при запуске: «Я говорил с человеком, сделавшим это, и он объяснял, что надо чем-то развлечь пользователя, пока в фоне подгружаются данные. Но когда ты в аэропорту, борясь с джет-лагом, пытаешься вызвать такси через плохое интернет-соединение, анимация совсем не в тему».
Более того, гордое звание Google Developer Expert не помешало Вибе критиковать свежий редизайн от самой компании Google. Недавно в приложении «Google Фото» помимо «гамбургера», по которому выезжает меню слева, появилась ещё и панель внизу с выбором из трёх основных разделов. По мнению спикера, одновременное присутствие того и другого запутывает пользователя: поначалу все бегают глазами, не понимая, куда нажимать.
Даже с конструктивным предложением спикера «изучать отзывы на свой продукт в магазинах приложений» вряд ли все однозначно согласятся. Многие считают, что такие отзывы пишут не самые умные пользователи, а самые крикливые, так что не стоит обращать особого внимания. Но, по мнению Вибе, противоречия здесь нет: «да, отзывы могут быть глупыми, но полезную информацию из них все равно можно извлечь».
Затем другой Google Developer Expert, Денис Неклюдов, рассказывал о представленном в мае на Google I/O, где он лично побывал. В самом начале доклада спикер прямо сказал «Если вы следили за новостями с I/O, можете идти в другой зал», но его выступление не было заученным повторением чужих слов.
В Google знают, что keynote I/O будут смотреть по всему миру, и стараются впечатлить рядовых пользователей, а у Дениса речь шла о важном для разработчиков. Поэтому о громко представленном Google Assistant он говорить вообще не стал (у него нет SDK), по темам вроде VR-платформы Daydream пробежался бегло (до её расцвета ещё дожить надо), зато быстро завёл речь про Instant Apps (запуск Android-приложений без установки). Упомянуто оказалось и то, о чём Google вообще умолчал на keynote: возможность запускать Android-приложения в ChromeOS, в одночасье делающая мобильных разработчиков ещё и десктопными.
А самыми интересными для разработчиков стали новости о Firebase (как было написано на слайде Неклюдова, «на самом деле вся мякотка тут»). Комментируя многочисленные нововведения платформы, он приводил такие юзкейсы, до которых в самом Google могли бы и не додуматься: «С помощью Remote Config теперь можно удалённо управлять внешним видом приложения для отдельных категорий пользователей. Например, сделать так, чтобы на 8 марта у женщин ваше приложение стало розовым». В общем, тут в мобильной разработке происходят ощутимые изменения — пусть даже обычные пользователи, смотревшие YouTube-трансляцию I/O, этого и не заметили.
Затем Кирилл Попов (Одноклассники) рассказывал о том, как библиотека Fresco помогает при работе с изображениями в Android. Кому-то может показаться, что тема выеденного яйца не стоит: если нужно просто показывать картинки, о чём тут разговаривать час? Но Попов на примере приложения Одноклассников наглядно объяснил, как в реальном проекте «простая задача» превращается в очень непростую:
«Вот аватара пользователя. Нам нужно запросить картинку, проверить кэш, скачать картинку, положить её в кэш. При этом мы показываем аватары не квадратными, а кадрируем с помощью кривой Безье со специальными коэффициентами. Значит, нужно ещё модифицировать изображение, опять положить в кэш, и тогда отобразить. Но за это время пользователь уже может успеть что-то увидеть, так что ещё нужен плейсхолдер. Теперь посмотрим на задний фон: он ведь тоже сделан из аватары, но в этом случае не кадрированной, а размытой (при этом мы не хотим делать новый запрос на сервер, так как эту аватарку уже качали). А дальше при скроллинге надо быстро подгружать новые картинки, и всё это может быть открыто на устройстве с маленьким количеством памяти...»
Неудивительно, что возникла потребность в мощном инструменте, и Fresco оказался единственным, в котором нашлось сразу всё требовавшееся: оптимальное использование памяти, работа с прогрессивными jpeg, многоуровневое кэширование, постобработка изображений, гибкость в использовании. Впрочем, как признал Кирилл, для маленьких проектов всё это изобилие может оказаться ситуацией «из пушки по воробьям». Кому-то будет достаточно на порядок более простого Glide, и сложность в освоении Fresco превысит выгоду от его использования.
В перерывах конференции, как это обычно бывает, многие решали задачки со стендов компаний, и набор задач от EPAM особенно привлекал внимание. Вместо знания специфики там требовалось умение алгоритмически мыслить, так что над этим с одинаковым азартом ломали головы зрители с самым разным опытом разработки. Вот в качестве примера:
Вариант «расположить инфицированные клетки по диагонали» приходил всем в голову быстро, поэтому ответ «n» напрашивался. Но даже написав его под задачей, люди продолжали терзаться вопросом «точно ли нельзя уменьшить это число, и как это доказать». Можно было заметить, как кто-то пытается решить одну из подобных задач, сидя на докладе, и услышать, как их обсуждают за обедом.
А не за обедом услышать можно было Матвея Малькова (Nexters) с докладом «Искусство реактивного программирования». Он уже во вступлении начал легко троллить аудиторию: «Мобильным разработчикам приходится думать о фрагментации устройств. К счастью, теперь и в iOS тоже с этим страдают!» В основной части тоже хватало сарказма, но не заменяющего собой серьёзные тезисы, а делающего их более хлёсткими. Например, среди слайдов про составляющие RxJava был такой:
Subjects
— соединение императивного и реактивного мира
— использовать, когда невозможно сделать по-другому
— это ваш случай? НЕТ!
О реактивном программировании речь шла ещё и в докладе Евгения Ртищева (Сбертех) «Реактивный MVVM». И в результате возникала перекличка между всеми конференциями «Летнего фестиваля разработчиков»: о «реактивщине» вспоминали на DotNext, и было ясно, что на HolyJS без неё тоже не обойдётся.
А сразу в трёх других докладах речь заходила о языках, посягающих на привычный статус-кво «на Android — Java, на iOS — Objective-C».
Ян Жуланов (JetBrains) объяснял, почему Kotlin актуален для Android-разработчиков. Android известен тем, как неторопливо появляется там поддержка новых возможностей Java, так что этот слайд наверняка бил многим по больному:
Тот же Матвей Мальков и вовсе делился своим опытом разработки Android-приложения на Scala. Впрочем, как он сам признавал, доклад получился «холиварным», так что при перечисленных им достоинствах Scala («безопасность», «разделение и переиспользование», «хорошая архитектура», «лёгкое построение DSL и работа с UI») кто-то наверняка остался совершенно не убеждённым.
А вот доклад Максима Соколова (Avito) про использование дженериков в Swift аудитория дружно одобрила: он не только собрал много хвалебных отзывов, но и возглавил топ-10 выступлений Mobius по оценкам зрителей.
- Максим Соколов — Advanced Swift Generics — перейдем на <T>
- Кирилл Попов — O Fresco и как его готовить, а также о картинках в Android в целом
- Евгений Мацюк — Пишем тестируемый код
- Александр Коршак — Опыт разработки Cardboard приложения для 3D-реконструкции медицинских данных
- Ирина Дягилева — Типографика в iOS
- Ян Жуланов — Android-приложения на Kotlin: почему это хорошо
- Матвей Мальков — Scala для Android: миф или реальность?
- Матвей Мальков — The Art of Rx
- Денис Неклюдов — Горячие новости с Google I/O 2016
- Евгений Ртищев — Реактивный MVVM
И если посмотреть на этот топ-10, становится очевидно, что о застое говорить не приходится. Доклады о смене привычного языка программирования на более актуальный, о молодой библиотеке (Fresco меньше полутора лет), о разработке для Cardboard, о «реактивщине», один доклад и вовсе целиком из новостей — в общем, сплошные тренды. Ещё год назад докладов о Swift на Mobius не было, а теперь именно такой оказался наиболее тепло принятым. Неудивительно: за прошедший год язык дошёл от «перспективно, но пока рано» до активного использования в iOS-разработке, и дальше его роль явно продолжит расти.
Так что на Mobius, как и на DotNext, нашлось место большим переменам. А чем на это ответил JavaScript-мир? Скоро станет известно из текста о HolyJS.