Журнал / Герои

Сложности в разработке: мнения яндексоидов

Писать код не так-то просто: специалисты из Яндекса делятся опытом работы в индустрии и рассказывают о трудностях, с которыми сталкивались

Женя Карташев, ML-инженер в службе компьютерного зрения

Сложно концентрироваться

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

  • Помодоро. Классический инструмент тайм-менеджмента. Много кто им пользуется, я в том числе. Ставлю на телефоне таймер на 30 минут и погружаюсь в задачу, потом пятиминутный перерыв. Обычно я делаю четыре таких слота, после них — один большой перерыв на 15–30 минут.

  • ABC-анализ. В его основе лежит принцип Парето: 20% усилий приводят к 80% результата. И наоборот: 20% результата могут потребовать 80% усилий. Например, если у меня много дел на сегодня, я делю их на три группы: A — 20% самых важных задач, B — 30% задач со средним приоритетом, С — наименее важные. Начинаю работу с группы А и максимально фокусируюсь именно на них.

Также задачи, над которыми ты работаешь, должны быть не слишком сложными и не сильно простыми. Если задача пугает своим объёмом, можно разбить её на несколько и начать с более простой. Быстрая и постоянная обратная связь тоже важна, нужно понимать, правильно ли ты выполняешь задачу.

Женя Карташев.webp

Просто писать код недостаточно

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

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

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

Чем выше уровень, тем больше пересечение областей

В разработке есть много подводных камней. Изначально я был специалистом по компьютерному зрению, а сейчас работаю в команде RnD (Research and Development). Мы занимаемся не только разработкой, но и исследованиями: работаем на стыке области компьютерного зрения (CV) и обработки естественного языка (NLP).

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

Раньше я писал только на Python, но на практике мне понадобилось знание C++. Пришлось быстро учиться. Индустрия развивается, и чем больше знает специалист, тем он круче.

Можешь написать функцию — классно, но нужно ещё уметь её использовать, оборачивать в какую-то оболочку и рассчитывать нагрузку на сервис, чтобы всё работало и ничего не падало.

Арсений Бородулин, стажёр-разработчик в бригаде A/B-тестов рекламных технологий

Страшно ошибиться

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

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

Арсений Бородулин.webp

Не видишь результатов

Результат твоей работы не всегда видно. Поначалу тебе дают задачи небольшого объёма. Представьте: вы пишете код, а он, например, не сильно меняет сервис. Это может демотивировать, вызывать чувство бесполезности. Слышал от коллег, что поэтому бэкендеры становятся фронтендерами. Да, можно сменить нишу — или запастись терпением и расти!

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

Саша Паволоцкий, руководитель Яндекс Лицея

Архитектура кода

Разработка бывает разной, и сложности у всех специалистов свои. Я с 1998 года учу детей программированию (постоянно — с 2002) и сам был разработчиком. По моему опыту, самое сложное в разработке — продумать архитектуру проекта таким образом, чтобы иметь возможность переделать её в будущем, если понадобится. Потому что если неразумно спроектировать модель приложения или системы, то при добавлении какой-то новой функциональности возникнут проблемы.

Александр Паволоцкий.webp

Оптимизация кода

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

Если задача кажется сложной и непонятной, лучше сначала сделать прототип. Пусть он будет странным, кривым и тяжёлым, но с его помощью можно хотя бы начать. Убедившись, что прототип работает, его уже стоит улучшать. Бывает, что доработать прототип не получается. Тогда важно понять, подходит ли он для конкретной задачи. Может, и не нужно тратить время на улучшения сейчас?

Ирек Гиниатов, Android-разработчик приложения Яндекса

В разработке есть много моментов, которые могут выбить из колеи. Я Android-разработчик в команде супераппа, занимаюсь Яндекс Браузером и приложением «Яндекс — с Алисой», поэтому буду говорить преимущественно о мобильной разработке под платформу Android.

Ирек Гиниатов.webp

Адаптация для разных устройств

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

Как справиться? Важно держать под рукой несколько моделей телефонов, чтобы проверять, как приложение на них выглядит, — это первое. Второе — не перегружать интерфейс, ведь красота в простоте.

Работа в команде

Бывает, что разработчику приходится не только решать технические проблемы, но и договариваться со смежными специалистами: дизайнерами, тестировщиками, менеджерами. У каждого свой взгляд на проблему и требования. Например, дизайнеры могут принести вам макеты, которые красиво смотрятся в Figma, но реализовать это на устройстве будет сложной задачей с морем нюансов. Если дизайн слишком сложен для реализации, важно уметь доходчиво объяснить коллегам, почему это невозможно, и предложить компромиссные варианты.

Задачи большого объёма

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

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