Хабрахабр

«Могу рассказать про общую боль всех iOS-разработчиков» — 10 вопросов программисту, выпуск 2

И мы по-прежнему уверены, что ребята, которые не попадают в объективы камер, столь же интересны, как и ИТ-звезды. Пилотный выпуск вам, кажется, понравился. На этой неделе мы задали 10 вопросов человеку, который скромно стоит за «Яндекс.Картами» для iOS. А может и еще больше, потому что они рассказывают о реальных проблемах и их решениях.

Начал с HTML и Basic в девятом классе.
Николай Лихогруд (likhogrud) из Москвы. Вместе с Any Void перешел в «Яндекс», последние 2,5 года работает тимлидом группы разработки «Яндекс.Карт» для iOS. Потом самостоятельно изучал C#, поступил на ВМК МГУ, а следом попал в команду Any Void.

1. Расскажи о фиче, которую ты реализовал и которой гордишься.

— Тут надо разделять командные фичи и мои личные. Из личных — самое запоминающееся — это то, что я полтора года назад в два раза ускорил время запуска приложения. И рассказал коллегам об этом. Раскопал некоторые особенности iOS, которые не были нигде описаны. Там была проблема из-за того, что Swift тянет за собой очень много динамических библиотек. Для каждой из них нужно проверять подпись на старте — это тормозит. Полезную работу провел — это реально сказалось на жизни пользователей. Я тогда даже выступил на Mobius.

Я такого, наверное, больше и не видел. А что касается командной разработки, то «Карты» — это огромный проект с кучей разных фичей. Почти в каждом новом релизе мы какие-то новые прикольные вещи делаем, и я всем этим горжусь. И если сесть разбираться, то я могу показать штуки, о которых многие даже не догадываются — там очень много всего! Мы это называем гидом по городу. Сейчас мы стараемся прокачать в «Картах» не исторически сложившиеся сценарии поиска и маршрутизации, а такие, которые больше рассказывают о том месте, где ты находишься. И очень здоровская фича — дополненная реальность в картах. В общем, больше не справочной информации, а познавательной, развлекательной. Успели прямо на запуске iOS 11, раньше других команд. Мы быстро ее сделали: сразу все получилось, все взлетело. Было приятно.

Пышка плывет по Неве, ничего необычного

2. А теперь — про самый лютый факап.

Факап был. Это было в начале, когда я только на «Карты» перешел: проект незнакомый, предыдущая команда полностью разошлась, некому было меня проверять. И в одном релизе я заддосил серваки геокодера, потому что забыл проверочку одну добавить. После некоторых манипуляций в приложении на каждое обновление позиции пользователя отсылался запрос к серверу, который возвращал данные о том, где юзер находится. А таких изменений геопозиции может быть 10 раз в секунду. И с учетом того, сколько у нас пользователей, даже если каждый сотый или тысячный выполнял эти действия, у нас возникала большая нагрузка на сервер.

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

3. Опиши свое рабочее пространство: от кресла и монитора до сред программирования и любимых утилит.

— Кресло у меня какое выдали, стол — тоже. На нем стоит монитор Thunderbolt и лежит ноут. И еще беспроводные клава и мышка, чтобы можно было только с монитором работать.

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

4. По какому принципу ты выбираешь работу? Стек, продукт, бытовые условия, деньги?

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

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

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

5. Что в технологиях и языках, которые ты используешь, ты бы хотел исправить?

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

С Objective-C нормально работает, а со Swift — плохо. Даже наша работа зависит от того, что Xcode долго компилирует. Сейчас мы разрабатываем больше в тестовых проектах, а не в основном приложении. Если бы он это нормально делал, не пришлось бы разбивать приложение на модули — нам пришлось проинвестировать в это. Хотя это в итоге пошло на пользу всему проекту, были некоторые затраты на то, чтобы так научиться работать. Потом из тестовых проектов закидываем в основное.

6. Где лучше перенимать чужой опыт — в вузе, на конференциях, на хабре? Еще где-то?

— Самое эффективное — это когда у тебя есть конкретная проблема и ты ищешь решение. «Перенимать опыт» — я не очень понимаю, что это значит. А вот «где искать решение проблемы» — это понятно. Там, где оно найдется. Просто в «Гугле» набиваешь и смотришь, что он тебе ответит.

Есть уже некоторый опыт в части ведения большого проекта, который многих интересует. А с конференциями как-то так получается, что я даже не перенимать чужой опыт туда еду, а своим делиться. У меня спрашивают: как побили на модули, как организован code review, как там у вас CI работает. Таких приложений, как наше, можно сказать, единицы, поэтому и опыт в своем роде уникальный.

7. Будь у тебя неограниченные ресурсы (время, деньги, мощности, люди), каким проектом ты бы занялся?

— У меня есть большой списочек «давно хочу, но времени нет» — того, что хочется сделать в «Картах». Есть куски, которые хотелось бы улучшить.

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

8. Как ты отдыхаешь? Что делаешь кроме работы?

— Перезагружаться нужно — сто процентов. Этот режим 5/2 придумали реально умные дяди. Если вовлечен в проект, горишь, болеешь за него, то если ты и на выходных будешь им заниматься, будет плохо. У тебя в итоге потеряется запал, а нужно его наоборот стабильно поддерживать, чтобы работать месяцами и годами.

Хотя я, может быть и хотел бы, просто компании подходящей нет. На выходных я выбираю поделать что-нибудь простенькое: погулять, посмотреть телевизор, ничего экстремального. Иногда бывает пейнтбол. Пару раз мы с ребятами выбирались кататься на байдарках на Клязьме, было здорово. Конечно, ты получаешь взамен эмоции какие-то… Но пять дней работать, а затем еще два дня где-то там плавать-бегать и потом снова пять дней работать? Но это все не регулярно, потому что активная трата энергии. Думаю, я бы не смог. А у тебя уже как бы тело болит!

Маленький и бесконечный. Еще я трачу время на ремонт. Там бывает очень интересно. Это отдельный мир со своими технологиями, уникальным опытом.

9. Расскажи про 3 любимые книги — учебную, научно-популярную и художественную.

— С учебными книгами у меня не сложилось. По работе я, можно сказать, ни одной книжки не прочитал. В самом начале, может быть, это были книги по C++. Помню, ездил в детский лагерь: у народа были нормальные, а у меня — по C++. В итоге я ничего толком не прочитал, потому что компьютера под рукой не было. Читаю — вроде понятно, а как это к своим задачам применить? Как опыт приобретать? Я больше практик, а не теоретик. Может быть, я не знаю каких-то интересных терминов, которыми другие ребята оперируют, но при этом я умею делать свое дело. Этому я научился, просто решая тяжелые задачи. Опыт и решения я искал всегда просто в интернете.

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

Я очень люблю историю и могу читать там от Рюрика до Ивана Грозного, от первого Романова до дворцовых переворотов. Из научпопа я читаю «Википедию», там обо всем можно читать. Могу на 2–3 часа залипнуть. А потом случайно прыгнуть по ссылочке на Александра Македонского. Жаль, я воспроизвести это не могу, но понимать, как люди до всего этого додумались — от сыродутной печи до бессемеровского процесса — это круто. Есть про оружие интересные статьи, про технологии обработки металлов.

Такие книги вытеснили, наверное, фильмы. А художественной литературы сейчас в моей жизни мало. Хотя одну книгу, пожалуй, упомяну — это «Обломов» Гончарова. Потому что, по сути, предназначение у них схожие, но фильмы компактнее. Кажется, даже плакал. Очень расчувствовался, когда давно ее читал. Теперь я бы подумал, наверное, что так ему и надо, Обломову. Сейчас ее было бы интересно перечитать.

10. Если прямо у тебя на глазах в ИИ проснется сознание, что ты ему скажешь?

— Вопрос, что значит «сознание»? Если оно просто сделано, чтобы пройти тест Тьюринга — это еще не сознание. Но если в такие детали не вдаваться, то я бы спросил о решении каких-то конкретных проблем. Я все-таки человек практики. «Как сделать Xcode побыстрее?» :).

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

Вопрос от предыдущего героя: изучение какой технологии вызвало у тебя наибольшее удовольствие в процессе?

— Вот прям удовольствие? Получать удовольствие от работы и учебы я еще не научился. Я научился спокойно к ним относиться и выполнять хорошо. iOS SDK, например, у меня особого интереса не вызвал, потому что он в общем-то простой.

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

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

Вы можете свой язык придумать! Здорово, что сейчас есть опенсорсный фреймворк LLVM, который позволяет создать свой компилятор. Написать для него парсер, который будет заниматься лексическим и синтаксическим анализом, а потом воспользоваться мощью современного компилятора, чтобы получить машинный код.

Бонус: задай любой вопрос другому разрабу.

— Зная, что обратно не вернуться, полетел бы ты на Марс в первой экспедиции?

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть