«Конечные пользователи — мы с вами»: об Android-разработке в ЦФТ +14



В 2018-м, когда с помощью Android Pay возможно оплатить даже шаверму, смартфон оказывается для пользователя главным финансовым инструментом. Теперь люди хотят решать с его помощью вообще все вопросы, связанные с деньгами. А значит, соответствующие мобильные приложения стали особенно актуальны.

У финансовых приложений, разработанных в компании ЦФТ для различных заказчиков, суммарное число установок исчисляется миллионами — то есть немногие могут похвастаться таким опытом в этой сфере. Воспользовавшись тем, что компания присутствовала на нашей конференции Mobius, мы задали руководителю группы разработки Android приложений Михаилу Емельянову несколько вопросов о том, как в ЦФТ выглядит Android-разработка.

— Для начала расскажите кратко о «ЦФТ» для тех, кто раньше не слышал этого названия.

— Компания работает на рынке финтеха уже больше 25 лет: когда она появилась, не было даже понятия «финтех», но уже тогда она производила продукты и сервисы, которые теперь называют именно так. Собственно, само название «Центр Финансовых Технологий», появившееся в начале 90-х, до сих пор остаётся актуальным и говорит само за себя.

Конечно, за прошедшее время многое изменилось (кто в 1991-м мог представить себе Android?), но суть осталась той же: ЦФТ развивает и разрабатывает IT-решения и технологические сервисы, которые делают простыми и удобными финансовые операции (в том числе денежные переводы и платежи).?

Компания появилась в новосибирском Академгородке, и её главный центр разработки по-прежнему находится там. Но сейчас, кроме него, есть офисы во многих других городах России, а также в Кишинёве, Алматы и Душанбе. Рост продолжается: постоянно появляются новые сервисы и подразделения, активно развивается R&D-направление.

— А сколько человек занимаются конкретно мобильной разработкой, и можете ли привести примеры разработанных в ЦФТ приложений?

—У нас распределённая мобильная команда в Новосибирске, Томске и Санкт-Петербурге. Сейчас это более 50 человек, но планы в мобильной разработке у компании такие, что мы должны расти в два раза быстрее, чтобы им соответствовать.

Наши самые популярные приложения для iOS и Android — это «Денежные переводы» (более 1,3 млн скачиваний в Google Play), платёжные кабинеты карт «Билайн» и «Кукуруза».

Также более 100 кастомизированных мобильных приложений для iOS и Android есть у нашего провайдера онлайн-банкинга Faktura.ru. Всего командой Faktura.ru реализовано 340 проектов внедрения онлайн-банкинга для корпоративных и частных клиентов. А вообще на этой технологической платформе работают порядка 130 банков

— У работы с финансами есть своя специфика — чем Android-разработка в ЦФТ отличается от «среднестатистической» компании? ??

— Поскольку мы работаем с личными данными и финансами пользователей, одно из главных правил — строгие требования к защите информации. Мы регулярно имеем дело с такими темами, как обеспечение безопасности мобильного банкинга на уровне API и при передаче данных, биометрическая аутентификация, Keychain, SSL-пиннинг и т.д. Накопили много соответствующего опыта, поэтому на Mobius как раз и представили доклад «Основы безопасности мобильного приложения».

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

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

— Помимо защиты информации, вам ещё и нужно быть особенно стабильными: если у стартапа в продакшн могут пролезать ошибки, то от финансов ждут надёжности. Но при этом превратиться в медлительный «водопад» и согласовывать всё по полгода тоже нельзя. Как вы решаете эту задачу?

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

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

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

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



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

— Довольно многое пробуем. Когда Google выпустил версию Android Architecture Component, мы решили поэкспериментировать и внедрили её в один из новых проектов. Но наткнулись на грабли: например, не увидели в её ViewModel достаточно эффективного средства решения задачи жизненного цикла для нашего проекта. А вот LiveData нам показалась полезной для слоя представления.

После того, как результат AAC не оправдал ожидания, мы выпилили её, заменив более эффективным подходом. Благодаря чистой архитектуре нам не потребовалось переделывать все приложение, достаточно было доработать слой представления. Есть и другой пример с использованием новой ORM Room.

Мы сейчас активно разрабатываем на Kotlin. На Mobius многие задавались вопросом «почему повсюду Котлин», но это же напрашивается. Он даёт больше возможностей, чем Java, «из коробки»: кода стало гораздо меньше, функциональности — больше. Многое можно сделать одной строчкой кода, например, объявление классов. Сейчас также пробуем корутины в одном из проектов.

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

А ещё мы используем RxJava/RxKotlin, популярные Retrofit и Dagger 2, гугловский Data Binding, планируем попробовать RxBinding, долго можно всё перечислять. В общем, финтех не мешает вовсю играться с различными технологиями.

— Вам Android Architecture Components не подошли — а можете ли при этом рекомендовать их другим? Насколько ресурсозатратна оказалась миграция на них: давно существующим проектам стоит думать об этом, или это лучше оставить новым?

— Хотя AAC и не оправдали наши ожидания, они хорошо решают некоторые задачи: например, сохранение и восстановление данных при смене ориентации экрана. Так что, если в проекте с кучей legacy-кода неэффективно реализована поддержка смены ориентации, то стоит задуматься об использовании AAC. Но внедрить это нахрапом не получится, предварительно нужно подготовить архитектуру, исправить критические ошибки и найти точки интеграции, чтобы не перерабатывать все приложение.

— Упомянутый выше Room — довольно свежая технология, которую многие ещё не успели попробовать. Поэтому интересно: каков оказался ваш опыт с ней?

— Room нас порадовал. С помощью аннотаций можно легко описать создание таблиц, определить транзакции и т.д. Есть встроенная поддержка Kotlin, Rx, LiveData. Из минусов в текущей стабильной версии (1.1.0) — отсутствие команд для очистки БД и необходимость настраивать связи вручную. Еще были неудобные мелочи при использовании Room в Kotlin, но они постепенно решились с выходом новых версий. Например, дефолтные методы Transaction в интерфейсах стали поддерживаться только в 1.1.0-alpha2.

В общем, с Room работать с базами данных стало гораздо удобнее и эффективнее.

— Есть точка зрения «все эти ваши ORM от лукавого, абстракции всё равно протекают и приходится спускаться на уровень SQL» — что вы думаете об этом?

— В любой технологии для решения нетривиальных задач приходится писать код, даже SQL. Главное, чтобы это не превращалось в оверхэд. В Room тоже можно писать SQL-запросы руками (например, миграция или сложные запросы), но через аннотации это делать значительно удобнее. Например, можно вытащить данные из нескольких таблиц при помощи Relation.

— Поскольку ЦФТ старше самого Android, для вас наверняка актуален вопрос легаси. Часто ли занимаетесь рефакторингом?

— Конечно, в любом проекте будет существовать legacy-код. Да и популярное утверждение «любой код, написанный сегодня, завтра становится legacy» вполне справедливо.

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

Также и в использовании технологий. Например, в одном из наших проектов в качестве http-клиента использовали Volley. Технология не новая, и мы хотели перейти на OkHttp + Retrofit. Для этого мы проанализировали связи в проекте с rest-клиентом, подготовили архитектуру к переходу и за один раз переехали на него, не тратя на это много времени.

— У ЦФТ есть курсы, в том числе Android — а чему там учите? И чего, по вашему опыту, больше всего не хватает начинающим Android-разработчикам?

— Да, в ЦФТ есть несколько образовательных проектов. Для студентов младших курсов — Школа ШИФТ, в рамках которой мы провели курс базовой Android-разработки на базе НГУ. А для студентов старших курсов и джунов — проект Focus Start, где есть 6 разнонаправленных курсов, в том числе и мобильная разработка (Аndroid и iOS). В программе курса Android дают углубленные знания по Android, Java, Kotlin, Rx. Выпустили уже несколько наборов, некоторые из лучших выпускников стали нашими сотрудниками.

Зачастую начинающим Android-разработчикам не хватает опыта применения ООП, принципа SOLID. Некоторые не понимают отличие паттернов MVC – MVP – MVVM и принципов Clean Architecture, из-за этого неправильно понимают бизнес-логику.

Также встречаются пробелы в Android SDK, Java, понимании многопоточности и, как она реализуется в Android. Ну и базовые: понимание Rx, Dagger, Retrofit. Многие не стараются читать документацию различных технологий.

Но наша практика показывает, что обучающие интенсивы закрывают пробелы достаточно оперативно и качественно для работы в IT. ??
?

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (9):

  1. AndreyHenneberg
    /#18791229 / +1

    «В 2018-м, когда с помощью Android Pay возможно оплатить даже шаверму, смартфон оказывается...» не содержит модуля NFC, цена которого, вместе с платой для быстрого монтажа, стоит 170 р. в РОССИЙСКОМ магазине. И это при том, что гораздо менее нужные Bluetooth и GPS есть в каждом утюге.

    • phillennium
      /#18791627

      Ну, Xiaomi разбили мне сердце отсутствием NFC в Mi A1, но предполагаю, что в большинстве андроидфонов на руках у россиян модуль всё-таки есть.

      • AndreyHenneberg
        /#18791739

        Вы очень зря так делаете. В смысле, такое предполагаете. Попробуйте найти смартфон с NFC, который покупался бы просто как средство связи, а не как платформа для игры и приготовления сашими из понтом. Для пример — выборка в DNS (выборка для Томска, как приделать сюда скриншот, чтобы он через неделю не потерялся, я пока не придумал). Только 1 (один) смартфон с ценой ниже 7000. Тот, который 6999 — это всё равно 7000, а -1 р. — маркетинговый ход. При этом, качество этого DEXP весьма сомнительное, а NFC там, подоздеваю, для единственной цели — приготовления сашими из понтов. Массово найти смартфоны с дешёвым, на самом деле, каналом NFC в диапазоне $100 мне не удалось, хотя ищу давно. Именно поэтому эта технология до сих пор в глухом загоне и не рассматривается как что-то серьёзное и массовое, кроме как для изготовления проездных для метро. Ну ещё в последнее время начали массово появляться удобные для обкрадывания бесконтактные банковские карты.

        • shep
          /#18791889

          https://market.yandex.ru/catalog/54726/list?hid=91491&glfilter=7013269%3A1&onstock=1&deliveryincluded=0&local-offers-first=0&priceto=7000


          10 вариантов до 7000р. Среди них не только китай, но и Sony, LG, HTC.

          • AndreyHenneberg
            /#18792589

            Как я уже писал, -1 р. — не считается, поскольку маркетинговый ход. -10 р. — аналогично. Рабочий фильтр вот. Я всего лишь поставил пороговую цену == 6900. И при этом добавилась всего лишь одна позиция.

            Итого, 4 (четыре) варианта, из которых только один присутствуют в Томске, а «не будет доставлен через неделю» и только один честно, а не «на грани», укладывается в $100. А под одному я даже не нашёл доставки из Москвы — там даже номер телефона только московский. И только один имеет оценки пользователей, то есть известно. что он из себя представляет. Кстати, оценки — так себе: 3,5/5.

            Итого, имеем только один реально доступный смартфон запрошенной категории, то есть такой, который действительно может быть массово доступен и укладывается в цену $100. Остальные три… Можно отнести их к «подающим надежды», но и только. Почему? Потому что новинки и не известно, что они на самом деле из себя представляют. Возможно — посредственность вроде Jingo Pass (тот самый единственный), возможно — УГ, возможно — «конфетку». Посмотрим. Но пока канал NFC не станет столь же обязательным, как и Bluetooth, он так и останется функцией для приготовления сашими из понтов. Хотя то, что инфраструктура для использования этой технологии уже появляется, это радует: ещё года три она и вправду станет обязательной. Удивляет только то, что до сих пор не стала.

            • vanso
              /#18793305

              Проблема, на самом деле, вызвана во многом тем фактом, что в Китае, где большинство этих платформ разрабатывается, производится (в том числе и для OEM) и маркируется, бесконтактные платежи очень распространены, но базируются не на NFC, а на QR-кодах, с помощью которых (ввиду распространенности и меньших требований к инфраструктуре) можно реально расплатиться за что угодно, в том числе и p2p.

              До тех пор, пока эти производители различной степени мелковатости не будут заниматься дополнительным R&D и бизнес-анализом ЦА в России (а они не будут, пока берут и так) или пока NFC не будет тупо частью всех SoC, стандартных для рынка, такая ситуация будет иметь место быть.

              Между прочим, что такое сашими из понтов?

              • AndreyHenneberg
                /#18793491

                Сашими — нарезка из, преимущественно, рыбы. Тонкая. Крутость повара измеряется тем, насколько тонко он может её нарезать. В общем, нарезка с понтами.

                Не знаю, что там у китайцев с QR-кодами, но вот передача кода и цены товара или «корзины» с помощью звука точно есть — видел в каком-то видео. А вот почему QR-код не используют у нас, мне непонятно, потому что идея организации оплаты того же проезда в транспорте с помощью кода с привязкой к электронным кошелькам у меня бела ещё лет 6-7 назад. Жаль, не умею проталкивать такие идеи, потому что сейчас начинают что-то такое делать (в Томске, наверное, и года не прошло, как начали), но это либо карту втыкать, либо нужна бесконтактная, с которой деньги легко увести, а терминал стоит явно дороже минимального смартфона для кондуктора.

                Китайцам, конечно, пофиг, что мы тут думаем, пока покупаем то, что дают. Но для того, чтобы что-то стало частью каждого SoC, надо, чтобы это попало в нижний ценовой сегмент, а для этого кто-то должен был начать такое выпускать. Вот сейчас начали. То есть ещё год или два и, вероятно, это будет в каждом смартфоне. И даже, вероятно, в каждом телефоне, потому что сейчас большая часть их делается на MT6260-MT6261 или их аналогах, так что тут унификация уже достигнута.

        • phillennium
          /#18792451

          Средняя цена проданных в России в 2017-м смартфонов составила более $200.

          Поэтому думаю, что предположения о «большинстве андроидфонов на руках у россиян» вряд ли стоит строить на основании смартфонов дешевле $100.

          • AndreyHenneberg
            /#18792697

            Может быть. Но стоит так же помнить о том, что покупают их очень по-разному: кто-то каждые три месяца покупает новый iPhone последней модели, а кто-то пользуется аппаратом, пока тот не помрёт. У моих детей есть знакомые из первой категории, моя знакомая недавно покупал новый смартфон из-за того, что старый дохнуть начал, и говорила. что планирует брать такой, чтобы могу отработать лет пять. Мой рекорд — 3,5 года с предыдущим аппаратом. Сменил потому, что старый попросту разбился, упав на ступеньку трамвая. Тому, который сейчас у меня — 2,5 года и он меня устраивает. Разве что, NFC нет, а мне бы пригодилось для работы с оборудованием.

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