Обо всем вышеописанном процессе я не имела ни малейшего понятия, когда, увидев объявление о вузовской олимпиаде по программированию, решила проверить свои силы, с наивностью закоренелой отличницы, и поучаствовать в ней.
Совершенно не помню задач внутривузовского этапа и самого процесса, кроме неимоверного азарта, интереса и своего то ли 5-го, то ли 7-го, то ли около того места – что среди пришедшего количества участников, не самого малого, на первый раз выглядело неплохо. После неожиданного успешного выступления руководитель команды по программированию предложил мне позаниматься в их группе. Именно тогда я узнала подробнее о вышеописанном процессе тренировок и источниках, получила ссылки на ресурсы для практики, набор задачек для новичков и отправилась готовиться к межвузовской олимпиаде.
Первые несколько вечеров я с упоением писала код для базовых задачек тренировочных ресурсов. Отправка решений, их прогон системой оценки и падение или прохождение были сродни увлекательному геймерскому квесту. Однако более сложные задачи, где явно чувствовалась потребность в эффективном обходе графа или сортировке, навевали на меня уныние. Погружаться во все дебри Кнута не казалось мне стоящим занятием.
На наступившей межвузовской олимпиаде я справилась с несколькими базовыми заданиями, но ключевые алгоритмические сдала без боя. Я до сих пор с улыбкой вспоминаю одну задачку, звучавшую примерно так: «У сороконожки сорок ножек. Если сороконожка делает шаг правой ножкой, то она наступает себе на 1 ножку, если левой – на 2 ножки. <далее, кажется, шли еще некоторые дополнительные условия.> Сколько ножек останется у сороконожки, если она начнет ходьбу с левой ножки? <и прилагалось, как водится, описание формата входных и выходных данных программы для прохождения тестов>». Суть решения данной задачи сводилась к набору единственной строчки кода, посылавшей в поток вывода цифру (нет, не 42): 40.
Итоговым местом той олимпиады похвастаться весьма сложно. Немного успокаивало наличие в конкурентах тех самых участников и финалистов международных олимпиад, щелкающих последние задания с профессиональным мастерством. Однако я была рада появившейся определенности в своем нежелании серьезно углубляться в спортивное программирование, прорешивать часами, как мне казалось, узкоприменимые задачи и становиться виртуозом оптимизаций алгоритмов. И еще немного тому, что сороконожка оказалась не по силам многим участникам, в том числе занявшим позиции в топе.
Важнее всего, что я не почувствовала энтузиазма и интереса, достаточных для достижения успеха. А где вы видели чемпиона, страстно не желавшего им стать, будучи никому не известным? Таких не существует в спорте. Без стартового рвения и инерции вам будет вдвойне трудно бороться с нарастающей сложностью позже. Честно оцените, готовы ли вы и способны ли углубляться в данную область на долгую перспективу.
Тогда же для меня неожиданно появилась возможность попробовать себя в реальной работе – научной библиотеке вуза требовались айтишники. Совмещать учебу, частичную занятость и добиваться серьезных результатов в спортивном программировании было довольно сложно. Справедливость этих соображений впоследствии подтвердил тот факт, что участники команды и мировых чемпионатов фактически перестали появляться на занятиях. Здесь всё или ничего. Свой, почти параллельный, мир.
Если у вас есть такая возможность, попробуйте.
Спортивное программирование для меня – отрасль, на 90 % оторванная от жизни, учебы и работы среднестатистического программиста. Единицы достигают успеха, но зато оказываются и востребованы на уникальных серьезных позициях в крупных компаниях.
Сейчас такие люди – участники и победители олимпиад – основа штата ключевых продуктов IT-отрасли, связанных с Big Data и машинным обучением. Все алгоритмически зависимые области – поисковые системы, оптимизации, рекомендации и задачи распознавания – в мировом сообществе так или иначе двигаются людьми, на «ты» обращающимися с каноническими алгоритмами и умеющими их модифицировать. Они – те, кто стоит во главе прогресса и кого с жаждой расхватывают Яндекс, Google и все главные игроки планеты.
Каждый выбирает, что ему ближе: стать ключевой фигурой в технической части передовых и поворотных продуктов – само собой, при трезвой оценке возможностей и наличия способностей – или же качественно решать массовые бизнес-продуктовые задачи, облегчая жизнь людей и радуя пользователей удобными интерфейсами и автоматизацией их потребностей.