Я уверен, что многим, кто сейчас занимается АСМ, интересно, с каким классом задач им предстоит столкнуться в будущем, когда официальные старты закончатся и настанет пора думать, где бы заработать на красную икру с кока-колой. И что полезного они вынесут из того, чем сейчас занимаются.
Интересно:
1. Какой вы видели свою работу во времена ваших поездок на ICPC?
2. И какой класс задач реально встал после
3. Насколько вы круче своих коллег (чисто по ощущениям - кажется ли вам, что вы справляетесь с работой лучше их)
4. Какова роль полученных регалий в вашей жизни.
Это, разумеется, если вы уже закончили свою ICPC-карьеру. Иначе вопросы следующие:
1. Какой вы видите свою работу после ICPC?
2. И какой класс задач вы ожидаете решать?
3. Чего вы ожидаете от регалии, которую получите?
4. Как вы оцениваее свой шанс рано или поздно получить эту самую регалию, и какая регалия является вашей целью (попадание на финал, медаль финала, золотая медаль финала, чемпионство на финале)? Является ли вашей целью любая регалия или цель вообще иная?
В Ижевске за всю историю было четверо программистов-олимпиадников, которые достигали мирового уровня, и вместе смогли в сумме пройти на четыре финала и завоевать три медали. Это меньше, чем во многих городах. Но историю можно проследить: первое поколение ребят остались после олимпиад в Ижевске, и работают в местных компаниях. Лучше ли они чем их коллеги? Один - заведомо да. Но не за счет олимпиад, а за счет упорства, которое сначала принесло медаль, а потом позволило быстро расти по карьерной лестнице. Про второго ничего хорошего не скажу :о)
Еще один молодой человек из того поколения, который не был так крут, как они, но получил медаль, будучи "участником-зрителем", качественно поюзал свою регалию и попал в огромную московскую фирму.
Я уже видел их опыт и как только вернулся с второго финала, почти в тот же день подсуетился и написал в нужные места, и почти пустое резюме с медалью ICPC принесло мне отличную работу за рубежом, и класс задач очень приятный - модные нынче Data Mining и Machine Learning. Мораль из этого - медаль чемпионата мира имеет ОГРОМНЫЙ вес в глазах зарубежных гигантов. А с высоты вашего опыта интервью вы потом пройдете за нефиг делать. То есть, если нацеленность на результат есть, вы получите потом отличную работу.
А вот что, если нацеленность была, а разультата не получилось - я не знаю. Интересно было бы узнать судьбу ребят, которые пять лет занимались олимпиадками, а потом ничего не заняли по неудачному стечению обстоятельств.
Потому что, забыв о регалии, что мы имеем?
Я знаю один плюс, который реально помогает - это умение решать задачи, которые раньше не встречал. Я часто замечаю, что когда мы сталкиваемся с какой-то сложной задачей, я могу сразу предложить качественное решение, в то время как даже очень умные ребята могут потратить какое-то время на его поиск. Потому что это то, в чем я крут и на что я потратил пять лет. Но что кроме этого?
Много алгоритмов? Почти не пригождаются. Я не знаю задач на поток в реальной жизни, которые бы еще не были решены и требовали чьего-то вмешательства.
Командная работа? В чем заключается командная работа? На самом деле, есть ли кто-то, кто считает, что то, как работала их команда на ICPC, может действительно дать полезные навыки? Какие именно? Командная работа - это видимо то, в чем отличаются все команды. Я знаю, что то, как работала наша команда, было очень оптимизировано для ICPC, и не дало реального навыка для работы в команде над каким-то проектом. Если у кого-то это не так, мне было бы интересно узнать, а как тогда? Как должна работать команда, чтобы это приносило полезный опыт?
Знание языков и технологий - это вообще смешно, чаще всего на олимпиаде используются только базовые конструкции и несколько стандартных классов. Вспомнить хотя бы задачу J на ГП Удмуртии. Что, серьезно никто не знает, что в Java есть встроенный интерпретатор JavaScript? :о) И недавние примеры с задачами на определение, является ли число простым. Сколько человек знало про BigInteger.isProbablyPrime?
Это то, как это у меня. Я научился решать нестандартные задачи быстро, и это все, что я получил из практических навыков, на первый взгляд. Глубже я не копал :о)
Еще интересный момент, которого бы хотелось избежать сейчас. Часто пишут, например, "если ты не встречал задач на поток, это не значит что их нет". Но никто же не спорит - но где они? Интересно же реальные примеры, а не общие слова. Предположений и я строил много, на деле все повернулось как-то не так, как предполагалось :о)
Более обобщенно, хотелось бы построить коллективное мнение о
а) том, что ждет олимпиадников в будущем - опыт уже прошедших и ожидания тех, кто пока вертится в этом всем
б) том, что полезного мы вынесем и как это реально потом пригодится
Интересно:
1. Какой вы видели свою работу во времена ваших поездок на ICPC?
2. И какой класс задач реально встал после
3. Насколько вы круче своих коллег (чисто по ощущениям - кажется ли вам, что вы справляетесь с работой лучше их)
4. Какова роль полученных регалий в вашей жизни.
Это, разумеется, если вы уже закончили свою ICPC-карьеру. Иначе вопросы следующие:
1. Какой вы видите свою работу после ICPC?
2. И какой класс задач вы ожидаете решать?
3. Чего вы ожидаете от регалии, которую получите?
4. Как вы оцениваее свой шанс рано или поздно получить эту самую регалию, и какая регалия является вашей целью (попадание на финал, медаль финала, золотая медаль финала, чемпионство на финале)? Является ли вашей целью любая регалия или цель вообще иная?
В Ижевске за всю историю было четверо программистов-олимпиадников, которые достигали мирового уровня, и вместе смогли в сумме пройти на четыре финала и завоевать три медали. Это меньше, чем во многих городах. Но историю можно проследить: первое поколение ребят остались после олимпиад в Ижевске, и работают в местных компаниях. Лучше ли они чем их коллеги? Один - заведомо да. Но не за счет олимпиад, а за счет упорства, которое сначала принесло медаль, а потом позволило быстро расти по карьерной лестнице. Про второго ничего хорошего не скажу :о)
Еще один молодой человек из того поколения, который не был так крут, как они, но получил медаль, будучи "участником-зрителем", качественно поюзал свою регалию и попал в огромную московскую фирму.
Я уже видел их опыт и как только вернулся с второго финала, почти в тот же день подсуетился и написал в нужные места, и почти пустое резюме с медалью ICPC принесло мне отличную работу за рубежом, и класс задач очень приятный - модные нынче Data Mining и Machine Learning. Мораль из этого - медаль чемпионата мира имеет ОГРОМНЫЙ вес в глазах зарубежных гигантов. А с высоты вашего опыта интервью вы потом пройдете за нефиг делать. То есть, если нацеленность на результат есть, вы получите потом отличную работу.
А вот что, если нацеленность была, а разультата не получилось - я не знаю. Интересно было бы узнать судьбу ребят, которые пять лет занимались олимпиадками, а потом ничего не заняли по неудачному стечению обстоятельств.
Потому что, забыв о регалии, что мы имеем?
Я знаю один плюс, который реально помогает - это умение решать задачи, которые раньше не встречал. Я часто замечаю, что когда мы сталкиваемся с какой-то сложной задачей, я могу сразу предложить качественное решение, в то время как даже очень умные ребята могут потратить какое-то время на его поиск. Потому что это то, в чем я крут и на что я потратил пять лет. Но что кроме этого?
Много алгоритмов? Почти не пригождаются. Я не знаю задач на поток в реальной жизни, которые бы еще не были решены и требовали чьего-то вмешательства.
Командная работа? В чем заключается командная работа? На самом деле, есть ли кто-то, кто считает, что то, как работала их команда на ICPC, может действительно дать полезные навыки? Какие именно? Командная работа - это видимо то, в чем отличаются все команды. Я знаю, что то, как работала наша команда, было очень оптимизировано для ICPC, и не дало реального навыка для работы в команде над каким-то проектом. Если у кого-то это не так, мне было бы интересно узнать, а как тогда? Как должна работать команда, чтобы это приносило полезный опыт?
Знание языков и технологий - это вообще смешно, чаще всего на олимпиаде используются только базовые конструкции и несколько стандартных классов. Вспомнить хотя бы задачу J на ГП Удмуртии. Что, серьезно никто не знает, что в Java есть встроенный интерпретатор JavaScript? :о) И недавние примеры с задачами на определение, является ли число простым. Сколько человек знало про BigInteger.isProbablyPrime?
Это то, как это у меня. Я научился решать нестандартные задачи быстро, и это все, что я получил из практических навыков, на первый взгляд. Глубже я не копал :о)
Еще интересный момент, которого бы хотелось избежать сейчас. Часто пишут, например, "если ты не встречал задач на поток, это не значит что их нет". Но никто же не спорит - но где они? Интересно же реальные примеры, а не общие слова. Предположений и я строил много, на деле все повернулось как-то не так, как предполагалось :о)
Более обобщенно, хотелось бы построить коллективное мнение о
а) том, что ждет олимпиадников в будущем - опыт уже прошедших и ожидания тех, кто пока вертится в этом всем
б) том, что полезного мы вынесем и как это реально потом пригодится
Согласен во всём: реальной пользы, кроме "накачки мозга для нетривиальных задач" - имхо никакой. Тренировку мозгам они дают и правда неплохую, какими ещё методами можно добиваться подобных результатов, я не знаю. А эта сообразительность в любом случае в жизни потом пригодится.
А что касается самого по себе программирования, то кажется очевидным, что олимпиадное и промышленное программирование дают почти пустое пересечение. Язык за время занятий олимпиадами скорее забывается, чем учится (по крайней мере, у меня). Олимпиады требуют огромного количества времени, и на проф. развитие его почти не остаётся. Не говоря уж про навыки написания грамотного кода, работа в коллективе, подход "не изобретать и реализовывать самому велосипед" - это всё абсолютная противоположность тому, что требуется в олимпиадах.
Поэтому моё мнение тоже несколько цинично - всё, что можно будет вынести из олимпиад - это медаль (если она "вынеслась" :))) ) и умение решать головоломки, которые нередко дают на собеседованиях, а также натренированную сообразительность. Чтобы где-то понадобились применяемые в олимпиадах алгоритмы - мне кажется, невероятная редкость. Гораздо чаще применяется множество других алгоритмов (например, тот же Data mining), которые почти полностью игнорируются олимпиадами.
Ну, конечно, нельзя забыть про то, что это всё-таки спорт, и от него можно просто получать удовольствие - это едва ли не основной момент, ведущий нас в олимпиады, так ведь?
Также часто приходится максимально оптимизировать код, улучшая асимптотику, т.к. в условиях написания системы для тысяч пользователей это становится важно.
Кроме того хотелось бы сказать, что я только в последний год участия в ICPC перешел с Delphi на Java но при этом успел изучить достаточно много стандартных классов, которые применял.И знания о них до сих пор преграждаются мне в промышленном программировании. Не знание BigInteger.isProbablyPrime это скорее упущение авторов задач и возможно участников, которые не использывали это, а не ICPC как такового.
Да и еще в научной деятельности часто использую знания из теории графов. Хотя в основном не сами алгоритмы, а то что я их хорошо чувствую после годов решения задач на эту тему.
Так что не все бесполезно, хотя я еще тоже не встречал задачи на потоки)))
P.S. сам всегда участвывал в олимпиадах только из спортивного интереса!
4. Какова роль полученных регалий в вашей жизни.
6 лет занятия олимпиадным программированием мне дали очень многое.
Во-первых, в течение учёбы в университет я был заметно сильнее многих своих одногруппников именно благодаря олимпиадам. Многие дисциплины мне давались гораздо проще, потому что я уже получил о них представление, решая задачи.
Во-вторых, это огромный опыт. Опыт написания работающего кода. За годы олимпиад многие мелкие алгоритмы оттачиваются до автоматизма. Олимпиадник знает множество нюансов используемого им языка программирования, о которых "простой смертный" даже не догадывается. Например, на днях я изучал программу одного студента-отличника, который учится на 4-м курсе и никогда не занимался олимпиадами. В своей программе он возводил 16 в k-ю степень с помощью команды Round(exp(ln(16) * k)). И он не понимает, почему это плохо.
Насчёт крутизны. Фирма, в которой я работаю, состоит целиком из бывших олимпиадников. У всех разные достижения - я был на двух финалах, а кто-то пару раз ездил на полуфинал. Но все равно мы все олимпиадники. И все, кто приходил к нам, не имея олимпиадного опыта, долго не задерживались. Они просто не дотягивали. И когда порой приходится переписывать их код, потому что он тормозит, видишь, что в нём не уделено внимание тем самым мелочам, которые часто отделяют "Time Limit" от "Accepted".
Я очень благодарен олимпиадам, именно благодаря им я многого добился в программировании. Конечно, только олимпиады не сделают из студента хорошего программиста. Потому что в реальном программировании совсем другие требования к коду и к процессу разработки. Но у меня с этим проблем как-то не возникло. Ещё в студенческие годы я проникся идеями структурного написания программ, логического именования переменных и т.д. Поэтому у меня не было особых проблем с вливанием в команду.
Я имел ввиду, что наличие медальки в резюме повышает шансы именно попасть на собеседование.
Кстати, не очень понятно - если чувак волнуется на собеседовании так, как он не волновался на финале? Это другая проблема - ведь чтобы получить медаль не обязательно пороть. Можно оказаться случайно в команте, которая порет :о)
"Помогает ли знание генетических алгоритмов в промышленном программировании и чем?"
Я не думаю, что решение марафонов является эффективным способом повышать свой скил. Тут как с решением обычных задач - тратить на них все свое время не эффективно, решать 2-3 в день - полезно. Тратить целиком две недели на марафон может быть не эффективно, потратить какое-то адекватное время вредным не будет.
Это имхо, я почти не участвовал никогда в марафонах.
Если Вы обсуждаете влияние АСМ и полученных там регалий на дальнейшую проф. пригодность, то с тем же успехом можно рассуждать о смысле получения высшего образования, например. Тоже по-своему регалия, тоже весьма далёкие от профессиональной сферы знания, и тем не менее мало кто ставит под сомнение его важность.
Участие в АСМ, даже без чемпионств и выходов в финал, - это то что может выделить разработчика из серой массы выпускников ВУЗа, по крайней мере в провинции точно. А что касается доводов о неактуальности задач и испорченном стиле (кстати, кто мешает дисциплинировать себя в этом, занимаясь АСМ?), то те кто фрилансят с младших курсов также затачиваются под специфические задачи и не блещут, когда попадают в серьёзный проект.
Не надо к тому же забывать, что знания приобретённые в АСМ, могут стать неплохим фундаментом для научной деятельности. Уверен, что среди бывших АСМ-щиков хватает кандидатов наук, что тоже в жизни не лишнее.
Если говорить лично о себе, то между выбором Фриланс vs АСМ, в сторону второго меня в своё время толкнул простой довод "вся жизнь впереди, наработаюсь ещё!". АСМ был и интереснее, и полезнее, правда пришлось пару лет пожить в общаге на макаронах :-)
P.S. У меня хорошая работа, неплохие перспективы в ВУЗе, и я готовлюсь к своему 4-му полуфиналу, так ещё и везу туда вторую команду в качестве тренера, так что не о чем жалеть.
Всё верно, конечно) Гарантий применимости знаний ноль, но лишними они не будут точно.
В любом случае заставить себя на 1-2 курсе серьёзно изучать хотя бы какие-то алгоритмы (и уж тем более LCA за O(1)) вне АСМ способны единицы. По крайней мере мне бы такое даже в голову не пришло.
Я конечно верю в "силу и незыблемость" нашего образования, но когда сверстники с алгоритмической базой размером в один халявно сданный семестровый курс и пару сомнительных статеек идут в аспирантуру работать над алгоритмами, моё миропонимание немного рушится :-)