September 2, 2021

Знай наших: Алексей Шабров

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

Алексей Шабров, лето 2021 года.

Знакомьтесь, это — Алексей Шабров, наш ведущий разработчик под Apple-платформы. Он пришёл к нам сразу после окончания вуза и за годы работы в компании на самых разных проектах вырос в большого знатока своего дела и одного из самых уважаемых мобильных разработчиков.

Далее — краткая история профессионального роста Алексея, записанная с его слов.

Начало

Ещё в школе я выбрал программирование своей профессией. Как и везде, изучал Бейсик, Паскаль. Мне нравилось, я даже принимал участие в олимпиадах. После школы поступил на специальность «программная инженерия» в Ижевский Государственный Технический Университет. Там уже писал на языках посерьёзнее — C# и на C++.

Мобильную разработку в ИжГТУ не преподавали, я познакомился с ней совершенно случайно. Мы тогда проходили летнюю практику, и нам попался странный проект: разработка мобильного приложения для изучения английского языка. Кто-то решил заказать такую разработку нашему университету. Опыта в этом не было вообще, мобильных устройств тоже не было. Но зато была возможность попробовать на эмуляторах сразу несколько платформ. Windows Phone сразу отпал — там всё было вообще в зачаточном состоянии, хотя на C# я уже успел много написать всяких лабораторных работ и сам язык знал. Android не зацепил. А вот iOS и Objective C зацепили. С этого всё и началось, и с тех пор я плотно занимаюсь именно мобильной разработкой.

Информацией обо всём этом тогда щедро делился Николай Ушков, сотрудник ЦВТ — подсказывал, показывал как правильно, много чего объяснял. Он вообще не работал над этим проектом и оказался рядом с нами совершенно случайно: просто помогал своему знакомому, который был нашим преподавателем и учился в аспирантуре. Но в итоге своими советами сильно помог стартовать карьеру.
Тот проект, кстати, тогда благополучно умер ещё на старте: ничего толком сделать, разумеется, не смогли. Так, написали несколько экранов и всё. Но получили опыт. И после окончания вуза я целенаправленно отправил резюме в ЦВТ по наводке Николая. Затем сделал тестовое задание, и меня взяли на работу.

Первые шаги в профессии

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

Моим первым проектом было приложение МПГУ (мобильный портал госуслуг) для Москвы. Его отличительная особенность — с бэка приходил очень навороченный JSON, в котором было уже всё необходимое для того, чтобы это просто отрендерить. Это была, фактически, разметка: ячейки, типы, динамические типы, поля для ввода информации, правила для валидации. С меня требовалось только правильно это всё визуализировать. Затем мне досталась разработка приложения ещё и для ЖКХ Москвы, это было примерно то же самое. Оба этих приложения были одного и того же типа: прокладка между бэком и пользователем. Только UI по утверждённым дизайн-макетам, никакой бизнес-логики. Вот на этом я сидел примерно год, прокачиваясь в UI и Objective C.

Первый онлайн-кинотеатр

А вот затем я написал свой первый онлайн-кинотеатр. У ЦВТ тогда начался проект с американским детским телеканалом, и они заказали нам тематические приложения для Губки Боба и Черепашек-ниндзя. Это были приложения, где можно было покупать и просматривать любые серии этих сериалов, а также скачивать себе на смартфон некий уникальный контент, вроде обоев или заставок.

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

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

Первый интернет-магазин

Следующим проектом был даже не совсем интернет-магазин, а приложение попроще: был каталог товаров, его можно было посмотреть, отложить что-то в корзину, а потом… просто оставить заявку на всё это. Без продажи и оплаты. В общем, это был чей-то такой странный стартап.

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

Но этот проект жил ещё меньше. Заказчик закрыл разработку. Похоже, стартап не взлетел.

Первое популярное приложение

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

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

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

Первый опыт в Swift

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

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

Зато я начал разбираться в Swift. Вообще, первые его версии были не очень удачные, работали медленнее, чем то же самое, написанное на Objective C, а особенно бесило то, что с выходом новых версий приходилось часто переписывать некоторые места — настолько быстро и непредсказуемо развивался язык. Но сейчас, наконец-то, всё стало хорошо, и на Objective C никто уже не пишет.

Первый полноценный онлайн-кинотеатр

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

При разработке пришлось серьёзно повоевать с системным плеером в плане его UI-кастомизации: нужно было написать поддержку своих жестов, свою реакцию на изменение ориентации и так далее. А системный плеер работает очень неочевидно и имеет много костылей. Очень часто приходилось искать решения в интернетах: на stackoverflow и в других местах. В итоге возня с плеером заняла процентов десять всей работы, не меньше. Но я его победил.

Также впервые пришлось столкнуться с In-App consumable покупками, но это не представляло собой какую-то серьёзную проблему. Куда тяжелее была борьба с рекламным SDK, который разрабатывала какая-то другая наёмная команда iOS-разработчиков. Этот SDK постоянно падал, мы регулярно писали на ту сторону баг-репорты и просили либо вылечить его, либо просто пристрелить из жалости. В какой-то момент мы со своими запросами превысили некий порог терпимости, и заказчик… просто отдал код и разработку рекламного SDK на нашу сторону. Нужно ли говорить, что с тех пор он больше никогда не падал?

Проект Videomore бы достаточно востребованный, но из-за ограниченности контентом СТС не настолько популярный, как мог бы быть. Сейчас он называется More.TV, и его разработкой мы уже не занимаемся.

Первый женский календарь

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

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

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

Первые инвестиции

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

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

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

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

А потом Тинькофф полностью забрал проект себе, и этот опыт тоже для меня закончился.

Первый Apple TV

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

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

Последнее слово

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

По большому счёту, мне интересен любой проект, и мне нравится смена проектов. Каждый новый проект интересен мне по умолчанию — он же новый! Вот выше я описал свой профессиональный путь — там много чего было, и это всегда было мне интересно. Это, кстати, одна из причин, почему я не ушел из заказной разработки. Вот, например, уйди я в Тинькофф, мне надоест писать Инвестиции, и что? Там сложно сменить проект, там всё одно и то же.

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

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

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

Информацию для повышения квалификации я черпаю, в основном, из небольшого количества источников. В первую очередь, из официальной документации, конечно же. Ещё — Хабр, где есть много хороших переведённых и оригинальных статей. Читаю также medium.com, https://www.raywenderlich.com/ и пару форумов.

Всем тем, кто хочет начать разработку под устройства Apple, я бы хотел сказать вот что:

  • Порог входа сюда выше, чем для других платформ: вам, как минимум, понадобится устройство от Apple. Хотя бы mac Mini. Ну, просто чтобы запустить XCode — основную среду разработки.
  • А ещё придётся купить лицензию для того, чтобы выложить приложение в Apple Store. Это что-то около $100.
  • Какие-то базовые вещи без покупок и партнёрских программ разрабатывать можно и на эмуляторах.
  • Самое главное: любое приложение может стать популярным. Главное — чтобы оно делало что-то реально полезное и нужное. И тогда о нём все узнают рано или поздно.