19 мая команда СПбГУ из Санкт-Петербурга стала победителем международной студенческой олимпиады по программированию ACM ICPC 2016, финал которой проходил на Пхукете. Призеры получили приглашения на стажировки в исследовательских офисах компании IBM (выступила спонсором соревнования) и в других международных IT-компаниях.

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

С одной стороны, компаниям мирового уровня нужны такие люди (будущие рок-звезды), с другой стороны, от эти нестандартных сотрудников требуется выполнение весьма стандартных условий сотрудничества – работа в команде, работа в срок, постоянный режим труда (пусть даже удаленный), корпоративная культура. Что касается соблюдения субординации, здесь от молодого «гения» требуется выслушивать, и главное, выполнять указания непосредственного руководителя, который часто «гением» не является.

В период рассвета холиваров на тему «олимпиадников-программистов» были распространены два полярных мнения – «олимпиадники не годятся для промышленной прикладной разработки» и «олимпиадники работают за десятерых, на них держится половина ИТ-компаний мира».

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

Человеческий фактор


Команду СПбГУ к олимпиаде готовил Андрей Лопатин, известный своим участием в разработке социальной сети «ВКонтакте». При подготовке студентов к чемпионатам Лопатин старался учитывать не только талант, но и человеческий фактор — кто с кем сработается, что происходит в команде, как успокоиться перед финалом. Он понимал, что по-настоящему командная работа нелинейно увеличивает шансы на победу. Командная работа – это установка интересов коллектива выше собственных, это делегирование задач, признание своих слабых мест, и даже, в чем-то, принятие собственного бессилия.

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

Год назад Лопатин говорил, что навыки олимпиадников в работе помогают, однако их адаптация к работе над коммерческим продуктом проходит всегда непросто: «Чем ближе компания к стартапу, тем быстрее этот процесс происходит. А «ВКонтакте» долго жила именно в такой атмосфере», добавил он.

В этом году, 23 мая, Лопатин побеседовал с изданием «Секрет фирмы»:
– Мне кажется, компаниям стоит быть более открытыми и участвовать в конкурсах и олимпиадах. Нужно, чтобы люди из компаний постоянно встречались и общались с программистами. Ведь что такое олимпиада? Это один из путей становления программистов. Олимпиады многие критикуют, будто они оторваны от реальности. Это не так, задачи, которые решаются на соревнованиях, — часть каких-то больших задач.

Если соревнования (стараниями организаторов) и их участники (стараниями тренеров) будут так же настойчиво (как описывает Лопатин) приближаться к реальности, то шансы ИТ-компаний принять на работу адекватных и коммуникабельных «гениев» будут расти и дальше. В этом случае доля лиц, негативно настроенных по отношению к олимпиадникам, уменьшится.

Другое дело, что обычные ИТ-компании могут считать Google, Microsoft и даже «Яндекс» оторванными от реальности. Им не нужно думать о банальном выживании. Мол, они могут себе позволить проводить эксперименты, замахиваться на проекты, которые не в состоянии «потянуть» простые смертные. В этом случае олимпиадники подходят как нельзя лучше. Тем более, что большинство этих проектов все равно не дойдет до релиза, а после закрытия одного проекта олимпиадника переведут на очередной «перспективный» фронт работ — а вдруг все-таки случится технологический прорыв после (N+1)-й попытки?

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

От себя добавлю, что встречал, как минимум одного, олимпиадника-программиста, который основал свою ИТ-компанию и до сих пор ее возглавляет. Начинал он в команде АлтГТУ в 2005 году, но на старших курсах переключился на другие проекты: сначала устроился iOS-разработчиком на полставки, а потом и вовсе занялся заказным проектом для МВД. Закончив ВУЗ, вместе с одногруппником (который олимпиадником, кстати, не был) они запустили собственный проект, который стал полноценной ИТ-компанией через 2 года. Возможно, этот случай является исключением.

За что еще не любят олимпиадников-программистов


Один из пользователей сайта «Хабрахабр», основываясь на личном опыте, сформулировал негативные особенности сотрудничества с олимпиадниками-программистами в компаниях, занимающихся прикладной разработкой.

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

А это, вероятно, из наболевшего:
• Попытка сразу писать быстрый/нетребовательный к ресурсам код;
• Желание выжать из кода все, в ущерб остальным показателям;
• Вера в то, что O(n) вместо O(n^{2}) или замена всех операций умножения на 2 на побитовый сдвиг сделают из программы конфетку.

Нерушимый миф


Существует расхожий миф о том, что все спортивные программисты уходят в Google или, как минимум, в «Яндекс», где вдохновенно трудятся над поисковыми алгоритмами и иже с ними. Портал dev.by опросил 21 финалиста АСМ ICPC. Среди них нашелся один человек, занимающий должность в Microsoft, один – в Google и один – в «Яндекс». Остальные работают в менее «раскрученных» компаниях.

Однако на Geektimes нашлась еще одна история олимпиадника, подтверждающая данный миф. Более того, этот человек, Александр Куприн, попал сначала в «Яндекс», а потом в Google.

Приводим самые интересные фрагменты его истории:
В теории всё было не очень страшно. Страшно было на практике. На меня обвалилось столько ужасно незнакомых вещей, что даже гитом [репозиторий Git] пользоваться не приходилось – вместе с ребятами я один-единственный раз выкачал репозиторий, а потом всё делал локально. Забегая вперёд, скажу, что в последний день летней стажировки [в «Яндексе»] отправил свой код на почту начальнику, а не что-то куда-то внедрил.

Задание начальство подобрало с душой. Нужно было каким-то образом научиться сравнивать документы на похожесть, ввести определение похожести и делать это всё достаточно быстро – ну, в предположении, что у нас овер 10^9 документов.

С горем пополам и божьей помощью декомпозировав задачу, я приступил к поиску решения. Ребята советовали разные статьи. Но как должен поступить настоящий олимпиадник? Конечно же придумать что-то своё!

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

В итоге, на своё первое ревью я «отправил» нечто, состоящее из 300+ строк кода. В свою защиту могу сказать, что эти 300+ строк полностью решали поставленную задачу. Ребята бились в истерике. Артём Бабенко плакал кровавыми слезами и говорил, что больше пяти раз он не станет принимать мой код.

В дальнейшем мой код рос и ширился. Это было как-то глупо и странно, учитывая, что функциональность не менялась. Пять раз быстро исчерпались, и со мной существенную часть времени проводил другой начальник Егор Самосват. Несмотря на то, что я чувствовал себя идиотом и выглядел ничуть не умнее, происходящее мне нравилось. Фактически, я учился в одновременно комфортных и боевых условиях.

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

Прогнозы


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

На фоне исследований и опросов (например, опрос компании Universum или исследование Smart Start) современные тенденции таковы, что студенты, и студенты-программисты в том числе, становятся все более прагматичными и «приземленными», меркантильными.

Относится ли данная история к олимпиадникам-программистам? Меняются ли они в ответ на вызовы времени? Или они продолжают жить где-то в своей «параллельной Вселенной», как думают многие?
Поделиться с друзьями
-->

Комментарии (11)


  1. vsb
    31.05.2016 00:18
    +8

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


  1. ZOXEXIVO
    31.05.2016 00:27
    +7

    Такое ощущение, что олимпиадников миллионы и у работодателей нескончаемый поток кандидатов, а те думают — брать или не брать?
    Неужели не можете соотнести задачи олимпиады и реальной жизни и все встает на свои места, и не нужно писать такие опусы, рассчитанные не понятно на кого и зачем?
    Если не соотнесли, то отвечаю — Причем тут олимпиада, если все зависит от человека?


  1. DistortNeo
    31.05.2016 01:07
    +5

    Моё мнение: программист-олимпиадник — это, в первую очередь, математик-теоретик, а не программиист-практик. Разница почти как между разработчиком и системным администратором. Со стороны обоих незаывают программистами.

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

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


  1. blackstrip
    31.05.2016 07:40
    +5

    Олимпиадники собирают в голове решение задачи из вызубренных алгоритмов. Кто больше назубрил — тот и победил. В их деле нет творчества. Варятся в собственном соку и непонятно для чего они вообще это делают.


    1. WingedFlame
      31.05.2016 10:16
      +5

      А много ли творчества у промышленного программиста? Найти нужные методы в манах (по фреймфорку/языку/ОС — неважно) и поставить их в нужной последовательности. Творчество в олимпиадном программировании зачастую состоит в том, что нужно свести задачу к какой-то формальной модели, которая поддается уже применению на ней вызубренных алгоритмов. И часто задачи можно смести к абсолютно разным моделям и подходам — одна и та же задача может быть решена, например, как с помощью графов, так и с помощью «динамики» или строковых алгоритмов.
      И опять же — в чистом виде «по учебнику» алгоритмы на серьезных соревнованиях почти не встречаются — часто нужно придумать, как модифицировать стандартный алгоритм, чтобы он решал конкретную задачу.
      Сам я занимался ACM с 8 класса школы, с переменным успехом участвовал и на всероссийских соревнованиях. Сейчас уже почти 2 года работаю над встраиваемыми системами, собственно на 4 курсе универа понял, что просто устал от олимпиад и прочего и хочется «прикладухи».
      На практике, конечно, очень редко требуются сложные алгоритмы, но иногда, читая код коллег, ловлю фейспалмы. Потому что даже не используя какие-то хаки, которые делают код нечитаемым и неподдерживаемым, «олимпиадное» мышление позволяет писать более эффективный и красивый код.
      И еще не нужно забывать про такой аспект олимпиадного мышления, как критическое отношение к коду. Умение находить самые сложные случаи для программы и видеть намного больше плохих случаев входных данных может избавить от многих часов дебага в поисках логической ошибки в программе. И когда «обычный» программист проверит программу на десятке самых популярных вариантах, олимпиадник сразу сгенерирует пол-сотни самых плохих случаев.


  1. pro_co_ru
    31.05.2016 07:44
    +2

    Расскажу на своём примере.

    В 2001 году участвовал в ACM олимпиаде по программированию, добрался до такого уровня благодаря тому, что участвовал в районных, городских, областных олимпиадах. Первые места не занимал, но и иногда попадал в списки с призовыми местами, т.е. занимал 3, 6, 9 места. Так же посещал летние школы программирования от ИСИ СО РАН (ВЦ, Новосибирск, Академгородок).

    Сейчас, уже более 10 лет работаю программистом, занимаюсь разработкой, проектированием.

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

    Наверное, мне в те послестуденческие годы помогло легко и быстро найти работу то, что вместе с алгоритмизацией, структурами данных, курсами по решению олимпиадных задач и прочей программистской математикой я пробовал свои силы в ООП, и на одной из олимпиад выиграл книгу «Приемы объектно-ориентированного проектирования. Паттерны проектирования» авторов Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес, и я довольно рано начал пробовать совмещать проектирование с алгоритмизацией в своих учебных разработках.

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


  1. mbait
    31.05.2016 07:59
    +7

    Никогда не понимал этого спора:


    • Сотрудников нанимают не рядовые программисты, а кадровиков едва ли заботят подобные проблемы.
    • Вероятность пройти собеседование никак не изменяется от того факта, что человек занимался олимпиадным программированием.
    • Уровень задач в финале не сопоставим в уровнем задач на собеседовании.
    • В 95% случаев новые алгоритмы на работе никто не придумывает.
    • Работа в крупной компании не означает автоматически высокий уровень знаний конкретного сотрудника.
    • Для кого-то предел мечтаний — просто попасть в компанию Х, для других важна конкретная область
    • Никто не садит олимпиадников на исследовательские проекты (инфа 100%) без соответствующих знаний.

    Сухая статистика:


    • Олимпиадники думают, что они круты везде, раз их охотно берут во всякие гуглы.
    • У не-олимпиадников батхёртит, что их не приглашают во всякие гуглы, а вместо этого они вынуждены читать книги "Как пройти собеседование в гугл" и решать дурацкие задачки.
    • Компании нанимают олимпиадников, чтобы укрепить свой статус крутой компании №1.
    • Over 100500 статей на тему "настолько ли круты олимпиадники в программировании?".
    • Олимпиадники приходят в гуглы и занимаются разработкой фронтальной страницы в google news.
    • Олимпиадники вырастают за несколько лет и занимаются тем же, чем и все остальные.
    • Все пишут говнокод (даже я, только тсссс!).

    И это норма! Потому что на соседнем форуме про боевые искусства никак не утихнет спор "победит ли боксёр каратиста". И тот спор уж точно старее вашего.


  1. Zoolander
    31.05.2016 08:25

    Возможно, олимпиадников следует направлять на написание каких-то компонентов, которые действительно требуют оптимизации? Может быть, им лучше идти к корням — в программирование на ассемблере, написание драйверов, каких-то небольших компонентов? И пусть они всю оставшуюся жизнь их поддержкой сами и занимаются :)


  1. kiloper
    31.05.2016 08:54
    +2

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

    Сейчас у меня небольшая компания и когда я разговариваю с заказчиком, то на половине разговора о том, что ему нужно, я уже представляю что нужно сделать, какие модули написать и сколько это времени займет.


  1. Viacheslav01
    31.05.2016 09:32
    +1

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


  1. vlaeda
    31.05.2016 19:41
    +1

    Где все понаходили олимпиадников, которые стремятся писать наиболее эффективный с точки зрения потребления ресурсов код? Это неправильные олимпиадники! Ну либо они просто занимаются ерундой от скуки в виду отсутствия интересных задач, мотивации или неудачного положения звезд на небе.

    Чему олимпиады действительно учат — это решать задачи быстро и просто (ака надежно). Почему? Потому что на олимпиадах обычно очень полные тесты, покрывающие действительно все случаи, штрафы за неправильные попытки и постоянный цейтнот. Ни один олимпиадник на контесте если ему необходимо, к примеру, проверить есть ли среди 100 отрезков на плоскости пересекающиеся не будет писать выметающую прямую, а напишет брутфорс за н квадрат.

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

    P.S: я учился программировать исключительно учавствуя в олимпиадах. Закончил олимпиады в 2012. Сейчас — техникал лид в Гугле. Я не думаю, что я заметно улучшил свои навыки написания кода с момента начала работы в Гугле. Тоесть навыков полученных в олимпиадах мне полностью достаточно для промышленного кодинга.