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

Автор Ramzes2, 13 лет назад, По-русски

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

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
"спортивное программирование помогло при устройстве на интересную работу" - к этому пункту записывать только различные "на собеседовании меня спросили задачку, которая была в Петрозаводске 3 года назад", или же и "ну а после медалей финала мне пришло несколько интересных приглашений на работу"? Второй вариант к методам спортивного программирования отнести трудно.
  • 13 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    По поводу устройства на работу.

    или же и "ну а после медалей финала мне пришло несколько интересных приглашений на работу"?


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

    А вот уже опыт решения олимпиадных задач невероятно облегчит вам ту часть большинства технических интервью, где нужно решить и закодить какую-то задачку. И не только тем, что вы быстро придумаете хорошее решение, но и тем, что у вас уже есть опыт работы в стрессовой ситуацией. Но интервью заключаются не только в решении задач, поэтому даже если вы невероятно круты в олимпиадном движении и моментально решаете задачки на интервью, вам могут отказать по другим причинам.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Ну да...

      В целом понятно.

      У меня такой вопрос, может немного в сторону от авторского, может нет - не знаю. Адресован тем, кто уже занимается "полезным делом" в какой-то компании.

      Какие олимпиадные алгоритмы конкретно Вы использовали в своей работе, и для чего именно? Слышал истории, как люди, допустим, при разработке социальных сетей в том месте прикрутили простое паросочетание, а в этом - Ахо-Корасик, а вон там, наоборот, до них был тупой Кун, а они заменили на Диницу, который для 0-1 графов летает намного быстрее.

      Ну и почти боянистое "у них там был перебор по отсортированному массиву, а я написал бинарку".

      Думаю, найдутся разные интересные истории, ведь у каждого - своя уникальная работа и т.д.

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

        Что мне доводилось использовать на разных работах: максимальный поток (обычный и минимальной стоимости, при этом, нужны были продвинутые быстрые алгоритмы (push-relabel, incremental bfs),  а не просто абы что), алгоритм Дейкстры, динамическое программирование (рюкзак и не только), поиск в глубину (компоненты двусвязности, трехсвязности и т. д.), поиск в ширину.

        Из структур данных: кучи (при этом, иногда продвинутые), списки, деревья отрезков, disjoint set-union.

        Еще забавный момент: в практических реализациях быстрых алгоритмов часто приходится думать над следующим. Вот есть простой теоретически линейный алгоритм. Нередко весьма непросто понять, как его написать так, чтобы
        а) код был не слишком страшный,
        б) работало побыстрее,
        в) получше взаимодействовало с кэшом.
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        http://codeforces.me/blog/entry/2051

        В целом не совсем так. Многое зависит от направления деятельности компании, куда вы устроитесь. ;-)

        Безусловно есть отрасли в которых алгоритмические задачки будут попадаться, однако чаще всего либо примитивные, либо не совсем те что на соревнованиях. Из "похожих" мне приходилось писать нечёткие регекспы, из "непохожих" цифровые фильтры и геометрию. Но за 3 года это в общем довольно немного.

        Довольно большой рынок вакансий связан с разработкой приложений для предприятий и здесь сложные алгоритмы достаточно редки - "креативные" вопросы здесь скорее связаны с разработкой структуры БД, оптимизацией запросов к ней же, рожанием адекватного интерфейса. Впрочем этим не ограничивается - могут попасться и задачи с разработкой протоколов обмена данными внутри приложения или между ними, и с разработкой САПР, платформ, библиотек/фреймворков... и естественно с разработкой игрушек. ;-)

        В общем, если сможете, попытайтесь при устройстве на работу разобраться заранее чем придётся заниматься (это довольно трудно понять детально/достоверно)...

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

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

        Вот что реально может помочь в трудоустройстве, пожалуй - это участие в open-source проектах (см например http://sourceforge.net/people/), т.к. вы можете прямо дать ссылку на свои коммиты, рассказать о взаимодействии с координатором проекта, и привести, возможно, его отзывы о вас. Хотя если вас просто взяли в проект и не выгнали после первого коммита, то это уже говорит о многом.

        Главное что этим вы (в отличие от спортивного программирования) демонстрируете те навыки которые актуальны работодателю:
        - умение пользоваться средствами корпоративной разработки (пустячок а важно);
        - умение писать адекватный и поддерживаемый код;
        - и многочисленные т.п.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Хотелось бы выделить в отдельную ветку один существенный указанный Вами пункт:
          умение писать адекватный и поддерживаемый код;
          К сожалению, на практике часто бывает, что с уходом автора кода из команды, именно из-за отсутствия подобной поддержки возникает куча неприятных моментов как у пользователей, так и у оставшейся команды-разработчика.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Ну дык поэтому и предпочтительно работать с теми, чей код потом приятно сопровождать. И именно поэтому если человек показывает "а вот я участвовал в этом проекте, вот эти модули лично писал" - и технические специалисты компании-соискателя смотрят и говорят "да, если он и для нас будет так писать, то пожалуй это будет хорошо!"
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          "Насчёт того что успехи в спортивном программировании помогают в трудоустройстве... Ну в общем нужно быть готовым к тому что многие достойные работодатели не признают этих достижений, некоторые даже не слыхали. ;-)
          "
          Просто интересно - откуда Вы знаете? Неужели вы так часто на работу устраивались?  У меня есть немного иная статистика, хотя и не очень обширная. 
          • 13 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

            Я думаю что просто часто устраиваясь на работу такую статистику трудно набрать. Тем более вы же видите - я не спортсмен.

            Просто общению со (старшими) коллегами. Достаточно часто встречаю руководителей проектов и старших разработчиков которые с открытой предвзятостью относятся к спортивным достижениям. Ну например зайдите на javatalks.ru и поищите обсуждение насчёт RussianCodeCup... ;-)

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

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

            Кстати, на собеседовании в яндексе у меня глубоких алгоритмических вопросов не спрашивали. Правда я на глубоко не свойственную мне специальность автотестера собеседовался - и как я позже понял, на тот момент ещё сама эта вакансия не была ясна работодателю. Только сейчас появились замечания о том что нужны автотестеры на селениуме и что-то в этом духе конкретное.
    • 13 лет назад, # ^ |
      Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

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

      Позволю себе усомниться.

      Из опыта собеседований, задачи на них предлагаемые, разбиваются на две категории:
      - короткие примитивные вопросы от "напишите хелло-ворлд, покажите как его скомпилировать", до "напишите поиск наибольшего элемента в двоичном дереве" - прямо сказать семи пядей во лбу иметь не надо чтобы это писать, но поскольку часто это требуется сделать на бумажке, нужна внимательность и аккуратность;
      - длинные оффлайновые задания на недельку-две, из личного опыта я таких припомню несколько: "напишите поисковый движок для поиска фраз в большом файле, построения индекса и выдачи сниппетов, разумные требования и допущения определите сами", "разработайте БД с указанным набором сущностей (штук 7 всего) и небольшое J2EE приложеньице чтобы выполнять над этими сущностями заданные действия (использовать заданные технологии)", "напишите приложение проверяющее почту, выкачивающее письма с темами в заданном формате, разбирающее аттачи и производящее над ними какие-то операции" (у меня помню 80% программы занимал xml-конфигуратор который позволял описывать эти самые операции, не зашивая их тупо в программулину - что и повлияло на положительное решение работодателя) и т.п...

      UPD: Ещё смешное вспомнил - когда собеседовался на работу с POS-терминалами связанную, мне дали листочек с задачами на знание C++, а я посмотрел и говорю "а, эти задачи я год назад на другом собеседовании видел, правда я их плоховато решил - я в ++ слаб" - тогда ребята засмеялись и сказали "у нас та же ситуация, поэтому мы задачи из инета спёрли"... ну тогда лучше расскажите на английском языке, насколько помните, примерный порядок действий для работы с rfid-картами по протоколу Mifare". Я рассказал и меня взяли, хотя ни C++, ни детали протокола mifare ни английский язык в дальнейшем на этой работе почти не понадобились...
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
         "напишите приложение проверяющее почту, выкачивающее письма с темами в заданном формате, разбирающее аттачи и производящее над ними какие-то операции"
        В травел-агентствах это 100% не проверя.ют... :)
        • 13 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

          Там и приложения проще и зп ниже... Хотя это задание отнюдь не из крутой компании было... (это контора относящаяся к рекламе в сфере недвижимости - а предыдущее задание - из конторы работающей для сотовых операторов)... До действительно крутых я ещё не дорос... ;-)
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

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

    (Впрочем, на интервью учитываются разные качества человека, поэтому даже медаль АСМ или красный рейтинг на топкодере совсем не гарантируют успех.)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Это да. Но если вы в гугле работаете, не забудьте упомянуть чем там люди занимаются. Про питерский офис у меня какие-то сумбурные и забавные сведения, которые хотелось бы уточнить - в частности что рабочих мест там в 4 раза больше чем людей, но расширение не торопится - и что ребята погрязли в яваскрипте (для плагинов) и всё остальное уже и за программизьм не считают...
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Я не очень в курсе про ситуацию в питерском офисе. Но открытые вакансии там есть (см. http://www.google.ru/jobs/swe/index.html), значит расширение планируется - вопрос только в том, чтобы найти подходящих людей.

        Про то, чем примерно занимается московский офис можно прочитать вот здесь:
        http://googlerussiablog.blogspot.com/2010/12/google_21.html
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Ещё хотел добавить - в конторах связанных с разработкой приложений для предприятий гораздо чаще спрашивают не про алгоритмы а про паттерны. Так что если кто точно собирается собеседоваться на такие позиции, заранее ожидайте типичных вопросов:
      - написали синглтон и фабрику в одном лице и спрашивают, "а это что"?
      - а какие ещё паттерны вы знаете (стоит назвать хотя бы "фасад" и "конечный автомат" - и отстанут)?
      - представьте игру в тетрис или червячка, как бы вы это в идеологии MVC реализовали?
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Как требования к претендентам на интернатуру? Должны быть студентами, аспирантами? Может возрастные ограничения? Я никогда не пытался попасть на стажировку в компании, но, учитывая тот факт, что у меня последний год в ACM ICPC, надо этим стоит задуматься. =)
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Студентами или аспирантами. Возрастных ограничений нет.

        Но вообще мне не очень удобно перед Мишей превращать кодефорсес в форум вопросов и ответов про трудоустройство в Гугл, так что давайте впредь такие вопросы в личку.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          А почему, собственно, неудобно? Думаю, эта информация могла бы быть полезной многим. А codeforces, вроде, пока с Яндексом не аффилиирован. :)
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Да, собственно, мой коммент имел достаточно общий характер, поэтому я и спросил здесь. У кого-то, возможно, возникают такие же вопросы. Если бы я хотел спросить про конкретную возможность, в конкретную компанию, конкретно для меня, я бы уже, разумеется, писал в личку. :)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Сейчас подумал - а можно ли провести параллель, например, со спортсменами из других (более обычных) областей. Куда, например, устроится чемпион по штанге или спортивной ходьбе - и где его навыки будут востребованы?

Футболистам проще - у них спорт это сам по себе бизнес. Боксёров или фехтовальщиков можно вышибалами в компьютерные клубы или банки устроить.

Плющенко, Кабаева и Каспаров экспериментировали с политикой, ха-ха. Карпов и Москаленко вроде бы успешно занимаются личным бизнесом...

Но в целом вы понимаете - велик шанс что их новая работа по "крутости" будет несравнимо ниже чем их прежние достижения. ;-)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Не думаю, что стоит сравнивать. Все-таки, более 90 процентов людей, которые занимались СП, идут в программисты, то есть те навыки, которые они уже приобрели, будут востребованы в той или иной степени. При том программист(если он хороший программист) будет иметь высокую зарплату. Программисты соревнуются, во многом, чтобы набраться опыта и зарекомендовать себя. В то время как спортсмены, после того как выходят на "пенсию", очень редко устраиваются работать "по-специальности".  Все-таки работа грузчиком-не мечта штангиста, так же как и боксер не мечтает работать вышибалой.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Программисты соревнуются, во многом, чтобы набраться опыта и зарекомендовать себя.

      Извините, но это полнейший бред.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Если бы это сказал я - яйцами бы закидали... ;-)

        Хотя тут не исключено такое - соревнуются то они именно за этим, но именно этого как раз не достигают. %)
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Я имел ввиду, что большинство спортивных программистов занимаются спортивным программированием (sic!) для фана. Мне вот очень нравилось изучать разные новые алгоритмы. Промышленный опыт и зарекомендовывание тут явно ни при чем.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Промышленный опыт явно ни при чём, но я думаю, что для многих олимпиадников строчка в резюме типа "advanced to acm icpc world finals" не на последнем месте в списке причин, по которым они занимаются спортивным программированием
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              И что же эта магическая строчка даст? :)
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                ну вроде бы чуть-чуть помогает при трудоустройстве
                • 13 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  ИМХО, если хочется оптимизировать трудоустройство, то надо получать как можно лучшее образование, а не заниматься много лет ACM'ом.
              • 13 лет назад, # ^ |
                Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

                "Я уже видел их опыт и как только вернулся с второго финала, почти в тот же день подсуетился и почти пустое резюме с медалью ICPC принесло мне отличную работу в Microsoft, и класс задач очень приятный - модные нынче Data Mining и Machine Learning. Мораль из этого - медаль чемпионата мира имеет ОГРОМНЫЙ вес в глазах зарубежных гигантов.
                Женя Кузяков, с которым мы получили золотую медаль, после своего второго финала тоже сразу разослал резюме и получил работу в FaceBook в Сан-Франциско."  Скиданов Алекс. 
                Источник
                • 13 лет назад, # ^ |
                  Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

                  Работать в "зарубежных гигантах" -- это вообще занятие своеобразное. Но и тут гораздо больше поможет хорошее образование, чем медаль.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Все-таки, более 90 процентов людей, которые занимались СП, идут в программисты

      Откуда такая статистика? Мне повезло учиться с ребятами которые были гораздо умнее меня - победители олимпиад, соревнований - но я знаю что в программисты как раз пошли далеко не многие... Они примерно разделились на инженеров-математиков, научных сотрудников (хотя между этим грань довольно тонкая) и бизнесменов. Программисты тоже есть, но в основном как раз те кто в спортивном смысле успехов не имели... ;-)
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Поправьте тему пожалуйста, не "примеры использованиЕ", а "примеры использованиЯ". Очень уж по мозгам бьет.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    не бъет, а бьет так-то :)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      не "бьёт так-то", а "бьёт, так-то", так-то.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Мне вообще американская культура во многом нравится меньше, чем русская, но вот что там нету граммар-наци меня очень радует. Интересно, только в России это явление развито?
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        ну это не такой уж граммар-наци, таких ошибок уже в младшей школе никто не делает.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Это явление развито везде. Да и сам термин граммар-наци это же побуквенный перевод с английского.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Граммар-наци граммар-наци рознь
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        Ну... не то чтоб по мозгам бьёт, но глаза действительно режет. С английским языком ситуация не сильно иная - на форуме на topcoder напишите что-нибудь типа "R u woonting 4 programen' caryyr" и какой-нибудь RustyOldMan вам сразу намекнёт... ;-)
        • 13 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

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