С тем, что в Avito уделяют внимание мобильной разработке, не поспоришь: там принялись использовать Kotlin задолго до того, как это стало модным, а на нашей конференции Mobius регулярно выступают спикеры из этой компании. И накануне московского Mobius мы расспросили двух сотрудников Avito: Дмитрий divor Воронин рассказал нам как раз об опыте использования Kotlin, а Егор YourDestiny Толстой — о мобильной разработке в целом.
Дмитрий Воронин
— Ранее у вас был доклад о 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. Таких несколько:
- Annotation processing (kapt) — крайне ненадёжная часть Kotlin, до такой степени, что мы в некоторых модулях осознанно отказались от всех инструментов, работающих через кодогенерацию. До недавнего времени им вообще можно было пользоваться только на свой страх и риск, но ситуация улучшается. Связка Dagger 2 модулей и фабрик компонентов, написанных на Java + annotationProcessor из Android plugin for Gradle, до сих работает в нашем проекте производительнее, чем kapt.
- Tooling вокруг Kotlin до сих пор во многих ключевых аспектах отстаёт от Java. Наиболее болезненно сказывается отсутствие статических анализаторов (Android Lint только в следующей версии научится смотреть на Kotlin source-файлы), а встроенная в Android Studio поддержка Lint открывает новые челленджи по запуску в CI и имеет ряд неприятных багов.
- Производительность: 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?
— Весь прошедший год я отвечал за всю мобильную разработку в 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 как ТАРДИС: внутри гораздо больше, чем кажется на первый взгляд снаружи.
Мы любим рассказывать про интересные задачи, с которыми сталкиваемся в работе. Несколько примеров:
- Леша Шпирко, backend driven UI
- Тимур Юсипов, работа с диплинками
- Артем Разинов и Инесса Воронина, мобильная дизайн-система
Две наши команды, Mobile Architecture и Mobile Speed, вплотную занимаются задачами технического развития мобильной разработки. Вот у них практически каждый день встают нетривиальные челленджи — модульная архитектура, компонентные тесты, автоматизация релизов, ускорение компиляции и много чего ещё. И обо всём этом мы тоже скоро будем рассказывать.
— Вы состоите в программном комитете Mobius, и уже видели доклады на репетициях — хочется ли обратить внимание участников конференции на какой-то конкретный доклад, который не стоит пропустить?
— Понятное дело, что я в первую очередь рекомендую идти на доклад Макса Соколова из Avito. Он делится очень крутым опытом создания мобильного мессенджера, который может пригодиться разработчикам и в других продуктах. К Глебу Новику тоже загляните. Не потому, что он тоже ведёт наш подкаст, а именно из-за его доклада. Реализация сервисного слоя на операциях – это бомба, я этим подходом очень активно пользовался и получил немало профита.
Да и вообще, все доклады у нас очень крутые. Отбор был максимально жёстким, и то, что осталось в программе — это реально лучшие из лучших. Я изначально сильно верил в историю с проведением Mobius в Москве, и текущий состав спикеров и их доклады подтверждают будущий успех.?
— Спасибо! Будем ждать вас на московском Mobius, а пока напомним читателям ваш доклад о code review с петербургского:
Комментарии (2)
neko_nya
12.11.2017 13:36Это все очень круто, но почему же, действительно, приложение становится уродом? Я специально пользуюсь старой версией без пиханной рекламы, с нормальным отображением товаров и с возможностью поиска только в названиях. Вы просто доиграетесь до того, что люди уйдут на «Юлу».
Smolensk
Регулярно пользуюсь Avito и каждый раз при удачной сделке мысленно посылаю лучи благодарности сервису. Но мобильное приложение давеча удалил с проклятиями за назойливость. Постоянно всплывающие псевдо-информационные сообщения вроде «много новых предложений ждут вас» достали, отключить их можно только вместе с информированием по реальным перепискам, а без реальных переписок оно нафиг не надо. Так что ловите фидбек вместе с пожеланиями дальнейших успехов в мобильной разработке!