Блог пользователя AlexSkidanov

Автор AlexSkidanov, 15 лет назад, По-русски
Я уверен, что многим, кто сейчас занимается АСМ, интересно, с каким классом задач им предстоит столкнуться в будущем, когда официальные старты закончатся и настанет пора думать, где бы заработать на красную икру с кока-колой. И что полезного они вынесут из того, чем сейчас занимаются.

Интересно:
1. Какой вы видели свою работу во времена ваших поездок на ICPC?
2. И какой класс задач реально встал после
3. Насколько вы круче своих коллег (чисто по ощущениям - кажется ли вам, что вы справляетесь с работой лучше их)
4. Какова роль полученных регалий в вашей жизни.

Это, разумеется, если вы уже закончили свою ICPC-карьеру. Иначе вопросы следующие:

1. Какой вы видите свою работу после ICPC?
2. И какой класс задач вы ожидаете решать?
3. Чего вы ожидаете от регалии, которую получите?
4. Как вы оцениваее свой шанс рано или поздно получить эту самую регалию, и какая регалия является вашей целью (попадание на финал, медаль финала, золотая медаль финала, чемпионство на финале)? Является ли вашей целью любая регалия или цель вообще иная?

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

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

Я уже видел их опыт и как только вернулся с второго финала, почти в тот же день подсуетился и написал в нужные места, и почти пустое резюме с медалью ICPC принесло мне отличную работу за рубежом, и класс задач очень приятный - модные нынче Data Mining и Machine Learning. Мораль из этого - медаль чемпионата мира имеет ОГРОМНЫЙ вес в глазах зарубежных гигантов. А с высоты вашего опыта интервью вы потом пройдете за нефиг делать. То есть, если нацеленность на результат есть, вы получите потом отличную работу.
А вот что, если нацеленность была, а разультата не получилось - я не знаю. Интересно было бы узнать судьбу ребят, которые пять лет занимались олимпиадками, а потом ничего не заняли по неудачному стечению обстоятельств.


Потому что, забыв о регалии, что мы имеем?
Я знаю один плюс, который реально помогает - это умение решать задачи, которые раньше не встречал. Я часто замечаю, что когда мы сталкиваемся с какой-то сложной задачей, я могу сразу предложить качественное решение, в то время как даже очень умные ребята могут потратить какое-то время на его поиск. Потому что это то, в чем я крут и на что я потратил пять лет. Но что кроме этого?
Много алгоритмов? Почти не пригождаются. Я не знаю задач на поток в реальной жизни, которые бы еще не были решены и требовали чьего-то вмешательства.
Командная работа? В чем заключается командная работа? На самом деле, есть ли кто-то, кто считает, что то, как работала их команда на ICPC, может действительно дать полезные навыки? Какие именно? Командная работа - это видимо то, в чем отличаются все команды. Я знаю, что то, как работала наша команда, было очень оптимизировано для ICPC, и не дало реального навыка для работы в команде над каким-то проектом. Если у кого-то это не так, мне было бы интересно узнать, а как тогда? Как должна работать команда, чтобы это приносило полезный опыт?
Знание языков и технологий - это вообще смешно, чаще всего на олимпиаде используются только базовые конструкции и несколько стандартных классов. Вспомнить хотя бы задачу J на ГП Удмуртии. Что, серьезно никто не знает, что в Java есть встроенный интерпретатор JavaScript? :о) И недавние примеры с задачами на определение, является ли число простым. Сколько человек знало про BigInteger.isProbablyPrime?

Это то, как это у меня. Я научился решать нестандартные задачи быстро,  и это все, что я получил из практических навыков, на первый взгляд. Глубже я не копал :о)


Еще интересный момент, которого бы хотелось избежать сейчас. Часто пишут, например, "если ты не встречал задач на поток, это не значит что их нет". Но никто же не спорит - но где они? Интересно же реальные примеры, а не общие слова. Предположений и я строил много, на деле все повернулось как-то не так, как предполагалось :о)

Более обобщенно, хотелось бы построить коллективное мнение о
а) том, что ждет олимпиадников в будущем - опыт уже прошедших и ожидания тех, кто пока вертится в этом всем
б) том, что полезного мы вынесем и как это реально потом пригодится
  • Проголосовать: нравится
  • +4
  • Проголосовать: не нравится

15 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

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


А что касается самого по себе программирования, то кажется очевидным, что олимпиадное и промышленное программирование дают почти пустое пересечение. Язык за время занятий олимпиадами скорее забывается, чем учится (по крайней мере, у меня). Олимпиады требуют огромного количества времени, и на проф. развитие его почти не остаётся. Не говоря уж про навыки написания грамотного кода, работа в коллективе, подход "не изобретать и реализовывать самому велосипед" - это всё абсолютная противоположность тому, что требуется в олимпиадах.


Поэтому моё мнение тоже несколько цинично - всё, что можно будет вынести из олимпиад - это медаль (если она "вынеслась" :))) ) и умение решать головоломки, которые нередко дают на собеседованиях, а также натренированную сообразительность. Чтобы где-то понадобились применяемые в олимпиадах алгоритмы - мне кажется, невероятная редкость. Гораздо чаще применяется множество других алгоритмов (например, тот же Data mining), которые почти полностью игнорируются олимпиадами.


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

15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А тема эта кстати поднимается регулярно, во всяких блогах/форумах и т.п. И, видимо, чёткого ответа на неё быть не может, как и в теме о смысле жизни :)
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Це надо найти еще такой форум/блог с хорошей аудиторией, чтобы достаточно широкое мнение получить. Видимо, codeforces станет неплохим ресурсом в этом плане.
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Максимум что я занимал на ICPC это 2-ой диплом в NEERC. Поэтому остался в своем городе. Работаю в одной из ведущих фирм по web разработке. Могу сказать, что за 2 года работы я 5-6 раза встречался с задачами, которые требовали олимпиадных знания. В основном правда по обработке текста, но были и на теорию графов. Конечно это не много, но нельзя сказать, что совсем нет.
Также часто приходится максимально оптимизировать код, улучшая асимптотику, т.к. в условиях написания системы для тысяч пользователей это становится важно.

Кроме того хотелось бы сказать, что я только в последний год участия в ICPC перешел с Delphi на Java но при этом успел изучить достаточно много стандартных классов, которые применял.И знания о них до сих пор преграждаются мне в промышленном программировании. Не знание BigInteger.isProbablyPrime это скорее упущение авторов задач и возможно участников, которые не использывали это, а не ICPC как такового.

Да и еще в научной деятельности часто использую знания из теории графов. Хотя в основном не сами алгоритмы, а то что я их хорошо чувствую после годов решения задач на эту тему.

Так что не все бесполезно, хотя я еще тоже не встречал задачи на потоки)))

P.S. сам всегда участвывал в олимпиадах только из спортивного интереса!
15 лет назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится
1. Какой вы видели свою работу во времена ваших поездок на ICPC?

У меня не было в жизни такого вот специального периода "ACM". Участвовать в соревнованиях я начал со школы и тогда же, наверное, были основные временные затраты и подготовка, то есть можно сказать, что у меня был период "IOI". Тогда о работе даже близко мыслей не было. Ну и время было совсем другое, не было доступного интернета, теория изучалась из нескольких книжек или просто передавалась из поколения в поколение, варились поэтому в собственном соку в основном (я про Беларусь).
А поступив в университет, я просто продолжил участие в соревнованиях, основным из которых был ICPC, конечно. Но нельзя сказать, что на него уходило много времени. Наверное, даже во время наших самых интенсивных тренировок перед вторым финалом мы не решали за месяц столько всего, сколько сейчас решают на одних петрозаводских сборах. В принципе, мы на 5 курсе вполне совмещали подготовку и full-time работу. С одной стороны и результаты у нас были относительно посредственные, но с другой - в обоих наших финалах все могло сложиться по-другому, и зацепить бронзу было более чем реально... 
Это я все к тому, что такого периода "ACM" у меня в жизни не было. Во-первых, участие в соревнованиях было заметной частью жизни, но не так уж много времени на это тратилось, чтобы появился вообще такой вопрос: "А что после ICPС?"; во-вторых, ближе к концу учебы я узнал о topcoder, мы командой сменили язык, появилось куча разных других соревнований, и ICPC был всего лишь одним из них. 

2. И какой класс задач реально встал после

Класс задач естественно другой. Но все же я иногда занимаюсь алгоритмической оптимизацией, вычислительной геометрией. Сейчас работаю над ПО для геодезии.

3. Насколько вы круче своих коллег (чисто по ощущениям - кажется ли вам, что вы справляетесь с работой лучше их)

Тут все слишком субъективно. Я знаю свои сильные стороны, есть и слабые. Про алгоритмическую сторону дела, я думаю, вспоминать не стоит. Тут все понятно. А так, выдавать довольно качественный код, видеть сразу потенциальные проблемы, находить ошибки в коде у меня, наверное, получается куда лучше, чем у  большинства. С другой стороны, в реальности иногда в краткосрочной перспективе лучше быстро набомбить код с кучей ошибок, а я так не умею :)

4. Какова роль полученных регалий в вашей жизни.

Я тут вот что хотел сказать. Имхо, для подавляющего большинства работодателей строчки в резюме: "ICPC Gold Medal", "IOI Bronze Medal", "ICPC Finals", etc. обозначают одно и то же. Я про то, что наличие какой-то медали как таковой вряд ли кого волнует. Ведь большинство работодателей вообще слышали про эти соревнования разве что из новостей, да и то не факт. Эти строчки для них максимум обозначают, что у человека есть хорошая математическая и алгоритмическая подготовка, но это может помочь разве что для приглашения на собеседование, а вот уже на собеседовании все и решится. Поэтому придавать такое большое значение любой медали, имхо, не стоит. С другой стороны сам факт участия в более-менее серьезных соревнованиях, конечно, может помочь в трудоустройстве. Особенно в компании типа Google/Microsoft, где собеседовать вас могут бывшие участники соревнований :)
Мне лично при трудоустройстве, конечно, с какими-то моими "достижениями" было проще, я считаю. Ну а вообще, олимпиадки многим в Беларуси пригодились в жизни. У нас тут сейчас можно построить жилье по льготным ценам, если являешься лауреатом президентского фонда, что некоторые уже и сделали.
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
При виде в списке справа "А что после ICPC? И в чем вообще смысл? " так и хочется сказать: "После ICPC жизни нету!"
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Жизнь все равно продолжится даже без нас :).
15 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится

6 лет занятия олимпиадным программированием мне дали очень многое.

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

Во-вторых, это огромный опыт. Опыт написания работающего кода. За годы олимпиад многие мелкие алгоритмы оттачиваются до автоматизма. Олимпиадник знает множество нюансов используемого им языка программирования, о которых "простой смертный" даже не догадывается. Например, на днях я изучал программу одного студента-отличника, который учится на 4-м курсе и никогда не занимался олимпиадами. В своей программе он возводил 16 в k-ю степень с помощью команды Round(exp(ln(16) * k)). И он не понимает, почему это плохо.

Насчёт крутизны. Фирма, в которой я работаю, состоит целиком из бывших олимпиадников. У всех разные достижения - я был на двух финалах, а кто-то пару раз ездил на полуфинал. Но все равно мы все олимпиадники. И все, кто приходил к нам, не имея олимпиадного опыта, долго не задерживались. Они просто не дотягивали. И когда порой приходится переписывать их код, потому что он тормозит, видишь, что в нём не уделено внимание тем самым мелочам, которые часто отделяют "Time Limit" от "Accepted".

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

15 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
>> Мораль из этого - медаль чемпионата мира имеет ОГРОМНЫЙ вес в глазах зарубежных гигантов. А с высоты вашего опыта интервью вы потом пройдете за нефиг делать.

Могу рассказать, как выглядит этот процесс с другой стороны - я сам интервьюрую людей в один из "зарубежных гигантов" (преимущественно в его московский офис).

Отчасти, это верно - медаль ACM привлекает внимание к кандидату, но ни в коей мере не является гарантией чего-бы то ни было. У нас были случаи когда люди с золотой медалью АСМ или с рейтингом 2500+ на топкодере заваливали интервью.

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

Что касается остальных, то когда дело доходит до интервью, на первый план выходят немного другие качества, нежели в олимпиадах. И сама по себе медаль не дает особых преимуществ - гораздо важнее пройденная школа, полученный опыт, умение совладать с нервами (был случай когда финалист АСМ на интервью волновался на столько, что не мог объяснить почему у некоторых квадратных уравнений есть только один корень.)

Кроме того важен кругозор, умение решать нестандартные и неожиданные задачи. На мой взгляд, опыт участия в IPSC / ICFPC или Marathon Matches может оказаться более полезным, чем несколько лишних сотен очков в рейтинге топкодера.

В любом случае, в стране где нормальное образование в области CS в вузах отсутствует или только зарождается, олимпиады являются очень хорошей возможностью частично восполнить этот пробел.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Да, я имел ввиду немного иное.
    Я имел ввиду, что наличие медальки в резюме повышает шансы именно попасть на собеседование.

    Кстати, не очень понятно - если чувак волнуется на собеседовании так, как он не волновался на финале? Это другая проблема - ведь чтобы получить медаль не обязательно пороть. Можно оказаться случайно в команте, которая порет :о)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Люди, которые занимаются TopCoder Marathon, такой вопрос: а помогают ли умения, полученные в результате решения марафонов в промышленном программировании и чем?
  • 14 лет назад, # ^ |
      Проголосовать: нравится +2 Проголосовать: не нравится
    Переформулирую вопрос для тебя:
    "Помогает ли знание генетических алгоритмов в промышленном программировании и чем?"
    • 14 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится
      Мне показалось, что мой вопрос был шире, хотя ответ на этот вопрос мне до сих пор интересен.
      • 14 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится
        Если твоя цель получить опыт, необходимый в "промышленном программировании" - проще всего заняться промышленным программированием. Фрилансом например. Или какой-то сделать свой проект.
        Я не думаю, что решение марафонов является эффективным способом повышать свой скил. Тут как с решением обычных задач - тратить на них все свое время не эффективно, решать 2-3 в день - полезно. Тратить целиком две недели на марафон может быть не эффективно, потратить какое-то адекватное время вредным не будет.
        Это имхо, я почти не участвовал никогда в марафонах.
14 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

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

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

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

Если говорить лично о себе, то между выбором Фриланс vs АСМ, в сторону второго меня в своё время толкнул простой довод "вся жизнь впереди, наработаюсь ещё!". АСМ был и интереснее, и полезнее, правда пришлось пару лет пожить в общаге на макаронах :-)

P.S. У меня хорошая работа, неплохие перспективы в ВУЗе, и я готовлюсь к своему 4-му полуфиналу, так ещё и везу туда вторую команду в качестве тренера, так что не о чем жалеть.

  • 14 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится
    > знания приобретённые в АСМ, могут стать неплохим фундаментом для научной деятельности
    среди бывших АСМ-щиков хватает кандидатов наук

    А вот это вопросы не менее спорные, чем те, которые поднимает SkidanovAlex о связи олимпиад с промышленным программированием.

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

    По поводу фундамента  для научной деятельности все тоже не так просто. Конечно, занимаясь олимпиадами, студенты узнают многие алгоритмы, которые они, возможно, вообще бы не узнали иным способом (потому что эти алгоритмы не включены в учебные планы по существующим в вузе специальностям, хотя в разных вузах и на разных специальностях дело обстоит по-разному). Но полноценным фундаментом это считать нельзя. Что представляет собой теория, которую мы изучаем в связи с олимпиадами? Это набор отдельных знаний, которые хотя и связаны отчасти между собой, подчинены для олимпиадника определенной цели - применимости к олимпиадным задачам. В олимпиады проникают в первую очередь те разделы науки (причем не целые разделы, а только некоторые части), которые образуют благодатную почву для придумывания олимпиадных задач. Это алгоритмы, с одной стороны, не очень сложные (чтобы можно было решить задачу за 5 часов), с другой стороны, которые можно связать с нестандартными идеями (динамика, потоки). Наука же идет своим путем и действует своими методами. Ее цель - дать ответы на возникающие вопросы, даже если эти ответы получаются технически сложным, громоздким и не содержащем нестандартных идей способом. Из одного только ACM-а нельзя вынести полноценной базы ни по одному разделу науки. Наше представление о существующих алгоритмах весьма ограничено.

    Например, мы всегда пишем ответ на запрос LCA за O(log n), хотя в науке существует метод за O(1). Мне его даже рассказывали на олимпиадных лекциях, но я ни разу не писала и не давала олимпиадных задач на него. Почему? Потому что гораздо интереснее дать олимпиадную задачу, где ответ на запрос LCA будет все лишь подзадачей, а хитрость задачи заключается в правильном построении дерева и сведению данной задачи к LCA. И заставлять людей много времени тратить на реализацию этой подзадачи методом, который дает незначительную (при наших обычных ограничениях) разницу по сравнению с O(log n) не имеет смысла. Хотя, безусловно, с точки зрения науки метод за O(1) лучше, и он будет лучше работать при ответе на запросы с большими объемами данных.

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

    Чтобы добиться успехов в науке, нужно заниматься наукой. Чтобы добиться успехов в промышленном программировании, нужно заниматься промышленным программированием. А заниматься ACM-ом нужно, чтобы, с одной стороны,  добиться успехов в ACM-е, и потому что ACM развивает полезные навыки решения задач (развивают мозги, то есть), которые потом могут пригодиться и в промышленном программировании, и в науке.

    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Всё верно, конечно) Гарантий применимости знаний ноль, но лишними они не будут точно.

      В любом случае заставить себя на 1-2 курсе серьёзно изучать хотя бы какие-то алгоритмы (и уж тем более LCA за O(1)) вне АСМ способны единицы. По крайней мере мне бы такое даже в голову не пришло.

      Я конечно верю в "силу и незыблемость" нашего образования, но когда сверстники с алгоритмической базой размером в один халявно сданный семестровый курс и пару сомнительных статеек идут в аспирантуру работать над алгоритмами, моё миропонимание немного рушится :-)