«Я стал вторым человеком в минском Juno». iOS-разработчик о том, как запустить проект на ещё зарождающемся языке

25 комментариев
«Я стал вторым человеком в минском Juno». iOS-разработчик о том, как запустить проект на ещё зарождающемся языке

Мобильной команде Juno под началом iOS-разработчика Дениса Филеева выпало запускать сервис на Swift — тогда ещё «сыром», только зарождающемся языке. Он признаётся, от такого предложения Игоря Магазиника, «внутри похолодело», но команда рискнула.

dev.by Денис рассказал, каково было запускать такси-сервис, сколько шишек набила команда и какими решениями гордится.

«Даже не понимал, что создал свою первую программу»

Мой первый опыт программирования пришёлся ещё на начальные классы. Помню, вернулся как-то домой — а папа с другом с телевизором возятся: крышку сняли, детали достают, паяют что-то. Так в доме появился компьютер «Квант».

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

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

Затем забава эта подзабылась, к программированию я вернулся только в старших классах. Я учился в знаменитой Лужеснянской школе-интернате-гимназии для одарённых и талантливых детей. Её преподаватели отбирали способных учеников и «натаскивали» их для участия в олимпиадах, в том числе международных. Я, например, дополнительно занимался математикой, хотя звёзд с неба не хватал.

Чтобы перейти в 10 профильный класс нашей гимназии, нужно было сдать экзамены. Но был и другой способ — пройти по результатам олимпиад, и по трудозатратам он казался мне оптимальным. Я засел за решение задач. А следующие два года очень плотно занимался олимпиадным программированием, из-за чего, конечно, чуть подзабил на другие предметы, в том числе на физику. Поэтому когда встал вопрос поступления в университет, я понял — нужно действовать по проверенной схеме.

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

«Не было опыта мобильной разработки — надо было поднять большой пласт»

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

Первую работу по специальности нашёл на втором курсе — в подразделении «БелХард», которое делало ПО для внутреннего рынка. Поработал несколько недель, а потом у другого отдела появился мобильный заказ — и меня как «молодого и перспективного» перенаправили на другой проект.

У меня не было опыта мобильной разработки, да и опыт программирования на Java был небольшим — надо было поднять большой пласт. Но мне нравилось! С тех пор я с мобильными технологиями работаю много лет.

Было сначала в новинку, что программы, которые ты пишешь, можно у себя же на телефоне запускать. Ещё мне нравилось в те времена, что у мобильного разработчика много разных девайсов: сначала у меня были Java-устройства, потом — Blackberry-и Symbian-девайсы, затем телефоны под управлением ОС Windows Mobile, а также первые iPhone.

«Взял от работы в Wargaming, что было нужно, не видел смысла оставаться»

Когда в Беларусь пришла разработка под iOS, я работал с одной классной командой. Работы у нас было очень много, у каждого разработчика — не менее 2-3 проектов, в компании даже была в ходу фраза: «если у тебя всего 1 проект, считай, ты в отпуске». Это была школа — я много программировал, работал с разными технологиями, трогал разные фреймворки.

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

Отдел разрастался — и спустя 3 года в Wargaming я уже мало программировал. Руководил как менеджер командой из 16 человек: учился управлять людьми, ходил на HR-тренинги, изучал теории мотивации.

Если честно, всё это сильно мне надоело. Я взял от работы в Wargaming, что было нужно, не видел смысла оставаться в компании — я соскучился по программированию, по работе с классными, увлечёнными разработчиками, чью мотивацию не нужно поддерживать искусственно, потому что они сами горят своим делом.  

«Не хватало кульминации в карьере, крутого проекта, чтобы «заморочиться»

Я ушёл. Год нигде не работал. Много путешествовал, делал с друзьями «стартап на коленке». И если бы в тот момент мне кто-то сказал, что скоро я вернусь в офис, — рассмеялся бы и не поверил.

Но случилось вот что: я только вернулся из Чили, как мне позвонила близкая подруга. «Зайди, пожалуйста, в Space — хочу познакомить тебя кое с кем», — сказала она. Загадочными кое-кем оказались Игорь Магазиник и Тальмон Марко. Они собирали в секретном режиме мобильную команду для нового проекта и искали людей на ключевые позиции.

О проекте толком не рассказывали, но дали понять, что он будет крутым. Я поверил — такие люди знают, о чём говорят. Уже во время беседы с Игорем и Тальмоном понял, что следующие несколько лет проведу в Juno. Хотя названия у компании ещё не было, да и минский R&D-офис открылся только через 2,5 месяца. Из сотрудников первым пришёл директор Лёша Минкевич, я стал вторым.

Почему я занялся этим проектом — я понимал, что мне не хватает кульминации в карьере, какого-то очень крутого международного проекта: долгого и сложного, чтобы можно было «заморочиться» и сделать хорошо. Ради приличия я взял пару дней на размышления, но уже спустя эти два дня мы с Лёшей начали проводить собеседования с разработчиками.

«Внутри похолодело: Swift был в зачаточном состоянии — ещё беты»

На первом рабочем совещании новой команды Игорь спросил: «Денис, кстати, на чём будем писать приложение?» Всю свою карьеру iOS-разработчика я программировал на Objective C, остальные ребята тоже — ответ был очевиден. Но Игорь вдруг сказал: «А почему не на Swift?»

Если честно, у меня внутри чуть-чуть похолодело: Swift на тот момент был в зачаточном состоянии — ещё беты, даже версии 1.0 не было. Было понятно, что за Swift будущее, но начинать проект на совсем ещё сыром языке как-то не очень хотелось. Но раз СТО предлагал рискнуть, и мы не станем отказываться.

Мы «наелись» с ним сложностей: это и медленная сборка, и компилятор, который крэшится, и ещё много набитых шишек. Да, что-то пришлось придумывать заново, но зато у нас получилось сразу начать думать на новом языке. И несмотря на проблемы со средствами разработки у нас всё получилось — через год мы запустились.

«Старались работать так, чтобы при запуске не офигеть от количества проблем»

Ещё в первые дни было понятно, что в мобильные проекты на iOS- и Android-платформах мы будем закладывать принципы функционального реактивного программирования.

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

Первый год в Juno был очень творческим, рок-н-ролльным. Мы работали в секретном режиме в здании, напоминающем бункер. Много трудились, фонтанировали идеями, всё время что-то разбирали, обсуждали, рисовали на доске… Старались делать так, чтобы, когда сервис запустится, не офигеть от количества проблем, возникших при масштабировании. «Топили» за качество, даже иногда упрекали друг друга в излишней паранойе по этому поводу.

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

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

Чем ещё мы гордимся — что с момента публичного запуска прошло 2,5 года, а у нас, тьфу-тьфу-тьфу, ещё не было серьёзных проблем, связанных с качеством мобильного приложения. Было несколько инцидентов, но их очень быстро разрулили. Количество пользователей, у которых приложение вылетало, пренебрежительно мало — какие-то десятые доли процента.

«Женить в одном проекте Objective C и Swift — значит приобрести головную боль»

Сейчас я понимаю, что решение работать на Swift было абсолютно верным: чем дальше развивается язык, тем проще нам на нём программировать и избавляться от устаревшего кода.

Женить в одном проекте и Objective C, и Swift — значит приобрести в итоге серьёзную головную боль: это потребует больших трудозатрат. Проще иметь кодовую базу на одном языке — и мы это сделали сразу с нуля.

С января мы распространили на всех пользователей версию Juno 2.0, но работать над ней начали почти год назад. Было непросто: в одном проекте приходилось поддерживать в разных местах два дизайна, две ветки поведения — это как два приложения в одном. Но я горжусь тем, что мы не писали его заново — древовидная структура приложения как раз идеально заточена под наращивание новых «веточек».  Сейчас версию 1.0 можно уже удалять, я занимаюсь «садоводством» — купирую старые «веточки», в проекте остаётся более современный код.

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

«Главный навык программиста — навык управления уровнем стресса»

Чем ещё я по-настоящему горжусь — своей командой: многие из нас ещё с того «бункера» на Комаровке. 

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

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

Хотите сообщить важную новость?

Пишите в наш Телеграм

Читайте также

10 курсов, чтобы научиться программировать для iOS
10 курсов, чтобы научиться программировать для iOS
10 курсов, чтобы научиться программировать для iOS
iPhone вновь стал самым продаваемым смартфоном в мире, а DigitalDefynd сделал подборку курсов для тех, кто хочет научиться создавать приложения для него.
12 топовых языков мобильной разработки по версии IEEE
12 топовых языков мобильной разработки по версии IEEE
12 топовых языков мобильной разработки по версии IEEE
Авторы TIOBE назвали С «языком программирования 2019 года»
Авторы TIOBE назвали С «языком программирования 2019 года»
Авторы TIOBE назвали С «языком программирования 2019 года»
5 комментариев
Реинкарнация года. Голосуем за восставших из пепла
Реинкарнация года. Голосуем за восставших из пепла
Реинкарнация года. Голосуем за восставших из пепла
2 комментария

Обсуждение

4

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

1

Золотые слова.

7

А тот странного вида пухлый паренёк, который хотел чтобы гнилые кишки разлетались на празднике у Оперного ещё там работает? Если так, то гордиться командой, как минимум, аморально.

Katerina Kozlova
Katerina Kozlova Program Manager в Lyft
5

Он больше не работает в компании

3

Тогда успехов Денису!

5

Зато в компании теперь работает человек, у которого ключевая задача - отвечать в комментах, что пухлый паренек с радикальными взглядами больше не работает в компании!

2

Уже неплохо что отвечают, а то вечно открытые и увлекательные личности и конторы выдают монологи, а комментарии игнорируют, нефаундерское и нелидерское это дело

-6

а какая связь между гордостью за профессиональные успехи и личными взглядами участников команды?

0

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

Александр Флахбарт
Александр Флахбарт программист в BELHARD
3

Я все равно упорно не понимаю, что я должен вынести из подобных интервью.

0

аналог рубрики "я пиарюсь" с хабра

Александр Флахбарт
Александр Флахбарт программист в BELHARD
3

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

damavik
damavik mobile technical lead в Kibo
3

Ах, посмотрите какой Филеев офигительный!

1

красавчик

3

А это не у них была тема, что расхваленные опционы немного оказались метафорическими?

0

помню только вот такое, насчёт опционов хз
https://dev.by/news/dorofey-meniaet-rabotu

2

Я помню Дениса после РТИ, как он мне с C# помогал...Прикольно. Давно правда не общаемся.
Удачи - Денис!

agentcooper
agentcooper PM в SK hynix memory solutions Eastern Europe
2

Редактор девбая в курсе, что стать вторым человеком в компании - не то же самое, что стать вторым сотрудником ? Или кликбейтим ? :)

kong_en_ge
kong_en_ge пенсионер в Сад и Огород
1

похоже, дизайнер сайта, уходя, увел за собой и редактора

2

Колоритненько, лайк!

1

ехал в NYC, хотел попробовать Juno, но не смог зарегистрироваться - SMS с verification code так и не пришла (Velcom, пробовал несколько раз в разное время), а другого способа нет (iOS)... мда уж...
Uber Win

Katerina Kozlova
Katerina Kozlova Program Manager в Lyft
1

А напишите, плиз, в личку подробностей - будем разбираться:)

0

Скачал приложение, Iphone, iOS 12.1.xx, нажимаю Sign up, указываю свой номер Belarus, 29 677xxxx.. идёт отсчёт 30 сек и ничего не приходит ( нахожусь в Гомеле при этом). Вот и весь сценарий. Может Velcom что то блокирует, не знаю. Хорошо бы добавить ещё посылку кода по email , may be

Katerina Kozlova
Katerina Kozlova Program Manager в Lyft
1

Проблему решили:) Спасибо вам!

0

да, спасибо!!

Спасибо! 

Получать рассылки dev.by про белорусское ИТ

Что-то пошло не так. Попробуйте позже