Пилотный выпуск вам, кажется, понравился. И мы по-прежнему уверены, что ребята, которые не попадают в объективы камер, столь же интересны, как и ИТ-звезды. А может и еще больше, потому что они рассказывают о реальных проблемах и их решениях. На этой неделе мы задали 10 вопросов человеку, который скромно стоит за «Яндекс.Картами» для iOS.
Николай Лихогруд (likhogrud) из Москвы. Начал с HTML и Basic в девятом классе. Потом самостоятельно изучал C#, поступил на ВМК МГУ, а следом попал в команду Any Void. Вместе с Any Void перешел в «Яндекс», последние 2,5 года работает тимлидом группы разработки «Яндекс.Карт» для iOS.
1. Расскажи о фиче, которую ты реализовал и которой гордишься.
— Тут надо разделять командные фичи и мои личные. Из личных — самое запоминающееся — это то, что я полтора года назад в два раза ускорил время запуска приложения. И рассказал коллегам об этом. Раскопал некоторые особенности iOS, которые не были нигде описаны. Там была проблема из-за того, что Swift тянет за собой очень много динамических библиотек. Для каждой из них нужно проверять подпись на старте — это тормозит. Полезную работу провел — это реально сказалось на жизни пользователей. Я тогда даже выступил на Mobius.
А что касается командной разработки, то «Карты» — это огромный проект с кучей разных фичей. Я такого, наверное, больше и не видел. И если сесть разбираться, то я могу показать штуки, о которых многие даже не догадываются — там очень много всего! Почти в каждом новом релизе мы какие-то новые прикольные вещи делаем, и я всем этим горжусь. Сейчас мы стараемся прокачать в «Картах» не исторически сложившиеся сценарии поиска и маршрутизации, а такие, которые больше рассказывают о том месте, где ты находишься. Мы это называем гидом по городу. В общем, больше не справочной информации, а познавательной, развлекательной. И очень здоровская фича — дополненная реальность в картах. Мы быстро ее сделали: сразу все получилось, все взлетело. Успели прямо на запуске iOS 11, раньше других команд. Было приятно.
Пышка плывет по Неве, ничего необычного
2. А теперь — про самый лютый факап.
Факап был. Это было в начале, когда я только на «Карты» перешел: проект незнакомый, предыдущая команда полностью разошлась, некому было меня проверять. И в одном релизе я заддосил серваки геокодера, потому что забыл проверочку одну добавить. После некоторых манипуляций в приложении на каждое обновление позиции пользователя отсылался запрос к серверу, который возвращал данные о том, где юзер находится. А таких изменений геопозиции может быть 10 раз в секунду. И с учетом того, сколько у нас пользователей, даже если каждый сотый или тысячный выполнял эти действия, у нас возникала большая нагрузка на сервер.
Это был такой момент, который стал заметен вне рамок моей команды. Приходили люди, говорили: ну что же вы так! Но, кстати, нормально разрулилось — подняли сервак, чтобы с нагрузкой справиться. Баг нашли быстро, исправили быстро, а потом уже и обновление выложили. Правда ревью в AppStore заняло неделю примерно. Сейчас-то с этим стало попроще. Мне тогда больше самому обидно было: как же так, только начал работать! Но все всё понимали: что проект большой, я там один, и некому было мне подсказать…
3. Опиши свое рабочее пространство: от кресла и монитора до сред программирования и любимых утилит.
— Кресло у меня какое выдали, стол — тоже. На нем стоит монитор Thunderbolt и лежит ноут. И еще беспроводные клава и мышка, чтобы можно было только с монитором работать.
Стол завален бумажками, где записаны все мои мысли и планы. На всякие Trello и Dapulse я так и не перешел. Когда я начинал, этого всего еще не было, ну и вообще бумага как-то привычнее. Конечно, я еще заметки на ноуте делаю, но вот так написать, а потом зачеркнуть — это приятнее. На столе еще обычно много вещей, которые просто со временем откуда-то накапливаются, но недавно я их убрал. Лего еще вокруг стоит — уют. Вообще, я свое место считаю уютным. А когда смотрю на столы коллег, где вообще ничего не лежит — монитор и ноутбук, — мне кажется, что я бы так не смог.
4. По какому принципу ты выбираешь работу? Стек, продукт, бытовые условия, деньги?
— Я бы ответил, наверно, на вопрос «если бы я выбирал...». Ведь по сути я никогда еще не менял работу. Я уже врос в «Яндекс» — больше пяти лет работаю. У меня сейчас хорошая должность, команда, обязанности, много планов.
Так вот, если бы я выбирал, то, наверное, делал бы это по команде. То есть, чтобы заранее знал людей, с которыми буду работать. А если ты их знаешь, то, как правило, ты знаешь и какой продукт будешь разрабатывать. Если человек фигней не занимается, то можешь быть уверен, что и проекты у него хорошие. Важно быть в комьюнити: чтобы тебя знали, а ты — других. Чтобы не было такого, что ты в ноль куда-то уходишь, в неизвестность. Ведь даже и задачи зависят от людей. Если нового сотрудника неудачно направят, ему быстро может стать неинтересно.
Еще важен денежный вопрос. Но тут вроде плюс-минус у всех все одинаково. Я много собеседований провожу и знаю, сколько примерно предлагают в других компаниях.
5. Что в технологиях и языках, которые ты используешь, ты бы хотел исправить?
— Могу рассказать про общую боль всех iOS-разработчиков. В Swift не оптимизирован компилятор, не доработана среда разработки. На нашем проекте, где 400 тысяч строчек кода, все просто тормозит. Индексация тормозит, открытие файлов тормозит, открытие проектов тормозит. Компиляция идет долго, она очень ресурсоемкая.
Даже наша работа зависит от того, что Xcode долго компилирует. С Objective-C нормально работает, а со Swift — плохо. Если бы он это нормально делал, не пришлось бы разбивать приложение на модули — нам пришлось проинвестировать в это. Сейчас мы разрабатываем больше в тестовых проектах, а не в основном приложении. Потом из тестовых проектов закидываем в основное. Хотя это в итоге пошло на пользу всему проекту, были некоторые затраты на то, чтобы так научиться работать.
6. Где лучше перенимать чужой опыт — в вузе, на конференциях, на хабре? Еще где-то?
— Самое эффективное — это когда у тебя есть конкретная проблема и ты ищешь решение. «Перенимать опыт» — я не очень понимаю, что это значит. А вот «где искать решение проблемы» — это понятно. Там, где оно найдется. Просто в «Гугле» набиваешь и смотришь, что он тебе ответит.
А с конференциями как-то так получается, что я даже не перенимать чужой опыт туда еду, а своим делиться. Есть уже некоторый опыт в части ведения большого проекта, который многих интересует. Таких приложений, как наше, можно сказать, единицы, поэтому и опыт в своем роде уникальный. У меня спрашивают: как побили на модули, как организован code review, как там у вас CI работает.
7. Будь у тебя неограниченные ресурсы (время, деньги, мощности, люди), каким проектом ты бы занялся?
— У меня есть большой списочек «давно хочу, но времени нет» — того, что хочется сделать в «Картах». Есть куски, которые хотелось бы улучшить.
А вообще было бы интересно связаться с космической отраслью. Идея человека вне Земли, познания вселенной — это меня очень интересует. Радуюсь, когда какие-то успехи происходят в этом направлении. Наверное, под iOS там ничего не нужно писать, но где-то я мог бы пригодиться со своим навыком управления командой. Да я хоть кофе пошел бы варить, если за идею.
8. Как ты отдыхаешь? Что делаешь кроме работы?
— Перезагружаться нужно — сто процентов. Этот режим 5/2 придумали реально умные дяди. Если вовлечен в проект, горишь, болеешь за него, то если ты и на выходных будешь им заниматься, будет плохо. У тебя в итоге потеряется запал, а нужно его наоборот стабильно поддерживать, чтобы работать месяцами и годами.
На выходных я выбираю поделать что-нибудь простенькое: погулять, посмотреть телевизор, ничего экстремального. Хотя я, может быть и хотел бы, просто компании подходящей нет. Пару раз мы с ребятами выбирались кататься на байдарках на Клязьме, было здорово. Иногда бывает пейнтбол. Но это все не регулярно, потому что активная трата энергии. Конечно, ты получаешь взамен эмоции какие-то… Но пять дней работать, а затем еще два дня где-то там плавать-бегать и потом снова пять дней работать? А у тебя уже как бы тело болит! Думаю, я бы не смог.
Еще я трачу время на ремонт. Маленький и бесконечный. Это отдельный мир со своими технологиями, уникальным опытом. Там бывает очень интересно.
9. Расскажи про 3 любимые книги — учебную, научно-популярную и художественную.
— С учебными книгами у меня не сложилось. По работе я, можно сказать, ни одной книжки не прочитал. В самом начале, может быть, это были книги по C++. Помню, ездил в детский лагерь: у народа были нормальные, а у меня — по C++. В итоге я ничего толком не прочитал, потому что компьютера под рукой не было. Читаю — вроде понятно, а как это к своим задачам применить? Как опыт приобретать? Я больше практик, а не теоретик. Может быть, я не знаю каких-то интересных терминов, которыми другие ребята оперируют, но при этом я умею делать свое дело. Этому я научился, просто решая тяжелые задачи. Опыт и решения я искал всегда просто в интернете.
Я бы сказал тем людям, которые концентрируют много внимания на чтении литературы и блогов, что то, что вы прочли и увидели, — это еще не гарантия того, что вы можете воспроизвести это сами. Нужно не отрываться от собственных задач, чтобы всегда чтение сопровождалось практикой.
Из научпопа я читаю «Википедию», там обо всем можно читать. Я очень люблю историю и могу читать там от Рюрика до Ивана Грозного, от первого Романова до дворцовых переворотов. А потом случайно прыгнуть по ссылочке на Александра Македонского. Могу на 2–3 часа залипнуть. Есть про оружие интересные статьи, про технологии обработки металлов. Жаль, я воспроизвести это не могу, но понимать, как люди до всего этого додумались — от сыродутной печи до бессемеровского процесса — это круто.
А художественной литературы сейчас в моей жизни мало. Такие книги вытеснили, наверное, фильмы. Потому что, по сути, предназначение у них схожие, но фильмы компактнее. Хотя одну книгу, пожалуй, упомяну — это «Обломов» Гончарова. Очень расчувствовался, когда давно ее читал. Кажется, даже плакал. Сейчас ее было бы интересно перечитать. Теперь я бы подумал, наверное, что так ему и надо, Обломову.
10. Если прямо у тебя на глазах в ИИ проснется сознание, что ты ему скажешь?
— Вопрос, что значит «сознание»? Если оно просто сделано, чтобы пройти тест Тьюринга — это еще не сознание. Но если в такие детали не вдаваться, то я бы спросил о решении каких-то конкретных проблем. Я все-таки человек практики. «Как сделать Xcode побыстрее?» :).
Но обязательно нужно начать с «Привет, как дела?». «Как дела?», «Что делаешь?» — ответы на эти вопросы могут содержать некоторые нотки рефлексии. Как реально машина оценивает свои дела и настроение? И что она сейчас делает?
Вопрос от предыдущего героя: изучение какой технологии вызвало у тебя наибольшее удовольствие в процессе?
— Вот прям удовольствие? Получать удовольствие от работы и учебы я еще не научился. Я научился спокойно к ним относиться и выполнять хорошо. iOS SDK, например, у меня особого интереса не вызвал, потому что он в общем-то простой.
Интересно было в университете, когда я в проекте использовал машинное обучение. Интересно было понять, что ничего сложного в ML по сути нет. Зная входные параметры, ты можешь более или менее предсказать результат. Наверное, отчасти из-за этого я не испытываю той эйфории от ИИ, которую многие испытывают. Я знаю, что это все просто алгоритмы.
И еще было когда-то интересно разбираться в компиляторах с автоматическим распараллеливанием. Это очень развитая технология, очень много разного в компиляторах есть. Они на самом деле умные и делают намного больше, чем вы себе можете представить. Например, сложнейшие преобразования над синтаксическим деревом. Или сложнейшие оптимизации генерации кода, когда компилятор работает под конкретное железо и процессор.
Здорово, что сейчас есть опенсорсный фреймворк LLVM, который позволяет создать свой компилятор. Вы можете свой язык придумать! Написать для него парсер, который будет заниматься лексическим и синтаксическим анализом, а потом воспользоваться мощью современного компилятора, чтобы получить машинный код.
Бонус: задай любой вопрос другому разрабу.
— Зная, что обратно не вернуться, полетел бы ты на Марс в первой экспедиции?