«Наше приложение как ТАРДИС: внутри больше, чем кажется снаружи» — Avito о мобильной разработке

в 13:00, , рубрики: android, iOS, kotlin, mobius, Блог компании JUG.ru Group, разработка мобильных приложений

«Наше приложение как ТАРДИС: внутри больше, чем кажется снаружи» — Avito о мобильной разработке - 1

С тем, что в Avito уделяют внимание мобильной разработке, не поспоришь: там принялись использовать Kotlin задолго до того, как это стало модным, а на нашей конференции Mobius регулярно выступают спикеры из этой компании. И накануне московского Mobius мы расспросили двух сотрудников Avito: Дмитрий divor Воронин рассказал нам как раз об опыте использования Kotlin, а Егор YourDestiny Толстой — о мобильной разработке в целом.

Дмитрий Воронин

«Наше приложение как ТАРДИС: внутри больше, чем кажется снаружи» — Avito о мобильной разработке - 2— Ранее у вас был доклад о Kotlin и Rx, основанный на опыте Avito — а чем именно вы занимаетесь в компании?

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

— Сейчас в Android-мире все полюбили Kotlin, но в Avito его начали применять намного раньше — а с какого именно момента?

— Первый класс на Kotlin в Avito появился в районе декабря 2014-го. Позже, в 2015-м, мы приняли решение весь новый код Android-приложений писать на Kotlin. Получается, мы используем Kotlin со времен beta-версий.

— Что изначально побудило его использовать? В Avito активно используют мобильные разработки Square, где работал большой энтузиаст Kotlin Джейк Уортон — это как-то сказалось?

— В 2014-ом казалось, что Java 6 будет с нами до конца. Никаких планов на тот момент Google не разглашала. После написания десятка классов на Kotlin в имеющемся проекте, взгляд на связку Java + Guava моментально вызвал уныние. Более читаемый код, плюс код с более строгой типизацией, плюс interop с имеющимся кодом — это выглядело как win-win situation.

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

— Многое ли изменилось в Kotlin-разработке за то время, что вы используете язык? Насколько удобнее стало, и приходилось ли регулярно «переучиваться»?

— Да, изменилось многое, с Kotlin стало заметно комфортнее работать. Начинали, когда не было инкрементальной компиляции для Gradle-проектов, настройки форматирования кода были из нескольких чекбоксов, приходилось отключать инспекции, из-за которых тормозила IDE. Сейчас всё это в прошлом.

Мы стараемся использовать новые возможности языка по мере их появления, однако до сих пор не подключили в проект coroutines и immutable collections, но думаю, что скоро и это появится. Подобные изменения не выкатываются разом на весь проект, а постепенно проникают в кодовую базу. Все успевают привыкнуть и обсудить целесообразность и подводные камни.

Переучиваться приходится в основном, когда открываешь исходник на Java: каждый раз забываю поставить точку с запятой в конце строки ;)

— А можете ли выделить «подводный камень» Kotlin, на который хочется обратить внимание тех, кто пока только раздумывает о использовании языка?

— Уточню, что речь про Android. Таких несколько:

  1. Annotation processing (kapt) — крайне ненадёжная часть Kotlin, до такой степени, что мы в некоторых модулях осознанно отказались от всех инструментов, работающих через кодогенерацию. До недавнего времени им вообще можно было пользоваться только на свой страх и риск, но ситуация улучшается. Связка Dagger 2 модулей и фабрик компонентов, написанных на Java + annotationProcessor из Android plugin for Gradle, до сих работает в нашем проекте производительнее, чем kapt.
  2. Tooling вокруг Kotlin до сих пор во многих ключевых аспектах отстаёт от Java. Наиболее болезненно сказывается отсутствие статических анализаторов (Android Lint только в следующей версии научится смотреть на Kotlin source-файлы), а встроенная в Android Studio поддержка Lint открывает новые челленджи по запуску в CI и имеет ряд неприятных багов.
  3. Производительность: Kotlin plugin на больших проектах оставляет желать лучшего. Issues на эту тему закрывают каждый новый релиз, но до Java ещё далеко.

У Артура Дрёмова есть отличный обзор этих и других недостатков.

— Как сказалась на использовании Kotlin официальная поддержка Google — что вы видели в сообществе до Google I/O, а что после?

— Мы организовывали встречу Android-разработчиков с участием Дмитрия Жемерова в 2016-ом, и видно было, что люди хотят попробовать новый язык в своих проектах, но неопределённость многих останавливала. Думаю, поддержка Google для многих открыла этот путь.

Появился некоторый фундамент уверенности. Если в JetBrains и так не приходилось сомневаться, то форк от Intellij IDEA под названием Android Studio всё больше уходил в сторону (немного instant run-магии тут, немного хардкода в classpath здесь...) и, казалось, Kotlin-поддержка не будет поспевать за этим. Теперь можно выдохнуть.

— Сейчас вышла Android Studio 3.0 с поддержкой Kotlin «из коробки» и другими нововведениями — а для вас этот релиз что-то существенно меняет или нет?

— Я, если честно, ничего не заметил. Выглядит так, как будто они добавили Kotlin IDE plugin, устаревшей на пару релизов версии, в список предустановленных.

Серьёзные изменения ждут нас в версии 3.1 с первой поддержкой Android Lint для Kotlin-файлов.

— Недавно появился прогноз, что в конце 2018-м Android-приложения станут чаще писать на Kotlin, чем на Java — насколько вам верится в такой прогноз, и чего вообще ждёте от Kotlin в будущем?

— Прогноз вполне реалистичный, не вижу никаких препятствий. Появится больше поддержки Kotlin в популярных библиотеках (nullability-аннотации в android support library — отличный пример).

Уже известно, что в Kotlin версий 1.2 и 1.3 разработчики сосредоточились на производительности компилятора и инструментах разработки, изменений в языке немного. Для меня это хороший знак: подтягиваются проблемные места.

С интересом поглядываю на Kotlin/Native, однако, в наших реалиях сомневаюсь, что мы будем первыми, кто зашарит код между платформами. Ждём историй успеха от коллег-хипстеров!

Егор Толстой

«Наше приложение как ТАРДИС: внутри больше, чем кажется снаружи» — Avito о мобильной разработке - 3— Чем вы занимаетесь в Avito?

— Весь прошедший год я отвечал за всю мобильную разработку в Avito — построение инженерной культуры, разработку и реализацию стратегии развития команды, ответственность за стабильность работы наших приложений и непрерывность их релизов. В какой-то момент я стал использовать одну простую метафору, чтобы не пускаться в долгие объяснения. Если представить, что мобильная разработка – это экскаватор, то моя роль состояла в том, чтобы он исправно работал, мог копать без сбоев и топливо в баке не кончалось.

Совсем недавно ситуация поменялась. Теперь в зоне моей ответственности команды, отвечающие за техническое развитие всех платформ, на которых работает Avito — Web, Mobile Web, iOS и Android. Мы отвечаем за релизный цикл этих платформ, развитие их архитектуры, создание полезных инструментов для разработчиков и ряд других проектов. Если вернуться к метафоре с экскаватором, то, помимо его обслуживания, я теперь выступаю и в роли его водителя.

— Вы ведёте одновременно два телеграм-канала со ссылками на тексты: Android Good Reads и iOS Good Reads. Тут не удержаться от полусерьёзного вопроса: а голова не разрывается активно следить за двумя мирами сразу? Как с этим живётся?

— Да не особо сложно, я привык сохранять в Pocket все интересные ссылки и периодически их читать. Ну а выложить в каналы самое интересное недолго. Хотя, конечно, многие вещи просматриваю по диагонали, и если увиденное кажется потенциально полезным подписчикам — тоже публикую.

— А для мобильной разработки в Avito в целом типична такая ситуация, когда человек одновременно следит за разными мирами, или царит более типичное разделение?

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

Мы сильно верим в важность T-shaped skills и то, что для действительно крутых разработчиков смена языка и фреймворков не является проблемой.

— Помимо телеграм-каналов, вы участвуете в подкасте «Подлодка», выступали на Mobius как спикер, теперь участвуете в его программном комитете — это всё «просто для себя», или ощущаете, что это благотворно сказывается на работе?

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

— Вы выступали с докладом о code review, а как этот процесс выглядит конкретно в Avito?

— Работа над Avito проходит параллельно в нескольких десятках команд, каждая из которых отвечает за определённую часть функциональности продукта или удовлетворение каких-то потребностей пользователя. Каждая из команд максимально независима и полностью отвечает за качество и сроки реализации своих фичей. Чтобы исключить зависимость от других людей на этапе code review, мы стараемся замыкать этот процесс в рамках одной команды.

Это одна сторона code review. Другая состоит в том, что все-таки мы пилим один продукт, из-за чего часто встречаются ситуации, когда ребята из одной команды должны внести изменения в код, за который отвечает другая. Для предотвращения хаоса мы активно прорабатываем систему автоматического определения code owner’ов и возможности подписываться на изменения в определенных файлах, модулях или папках. Благодаря этому те, кто должен знать о произошедших изменениях, не пропустят их.

— Со стороны может показаться, что Avito требуется простое приложение (грубо говоря, «возьми каталог и отобрази»), но если вникать, сразу обнаруживаются нюансы: например, вы написали и опенсорснули собственный медиапикер Paparazzo. А можете ли привести ещё примеры неочевидных задач?

— Люблю эти истории про «простые приложения». В Uber вообще один экран, а работают над ним больше сотни мобильных разработчиков. Приложение Avito как ТАРДИС: внутри гораздо больше, чем кажется на первый взгляд снаружи.

Мы любим рассказывать про интересные задачи, с которыми сталкиваемся в работе. Несколько примеров:

Две наши команды, Mobile Architecture и Mobile Speed, вплотную занимаются задачами технического развития мобильной разработки. Вот у них практически каждый день встают нетривиальные челленджи — модульная архитектура, компонентные тесты, автоматизация релизов, ускорение компиляции и много чего ещё. И обо всём этом мы тоже скоро будем рассказывать.

— Вы состоите в программном комитете Mobius, и уже видели доклады на репетициях — хочется ли обратить внимание участников конференции на какой-то конкретный доклад, который не стоит пропустить?

— Понятное дело, что я в первую очередь рекомендую идти на доклад Макса Соколова из Avito. Он делится очень крутым опытом создания мобильного мессенджера, который может пригодиться разработчикам и в других продуктах. К Глебу Новику тоже загляните. Не потому, что он тоже ведёт наш подкаст, а именно из-за его доклада. Реализация сервисного слоя на операциях – это бомба, я этим подходом очень активно пользовался и получил немало профита.

Да и вообще, все доклады у нас очень крутые. Отбор был максимально жёстким, и то, что осталось в программе — это реально лучшие из лучших. Я изначально сильно верил в историю с проведением Mobius в Москве, и текущий состав спикеров и их доклады подтверждают будущий успех.​

— Спасибо! Будем ждать вас на московском Mobius, а пока напомним читателям ваш доклад о code review с петербургского:

Автор: Евгений Трифонов

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js