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

Автор dened, 15 лет назад, По-русски
Я глубоко осознаю что для решения задач главное - это умение думать, но тем не менее меня давно интересует такой вопрос: насколько важное место занимает умение быстро печатать в олимпиадном программировании? Как это влияет на успешность выступления на соревнованиях? Каков минимум по скорости набора кода (символов в минуту) для программистов желающих занимать призовые места на соревнованиях? Каким образом лучше развить это умение?

Сам я понимаю, что очень важное в этом деле освоить метод слепого набора. Но основная проблема здесь - это то, что в отличие от набора обычного текста в наборе коде приходиться очень часто использовать специфические символы, которые не так же легко доступны. Вначале я пробовал решить эту проблему использованием специальной раскладки, а именно Programer's Dvorak, но позже отказался от этого, ибо проблема в том, что эта раскладка будет доступна в основном только на моем компе, и далеко не всегда может быть доступна на других.

Буду рад вашим мыслям и советам по этому поводу.
  • Проголосовать: нравится
  • +12
  • Проголосовать: не нравится

15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Умение набирать код быстро и без ошибок важное, но не первостепенное.
Помню сам когда то поражался , как люди набирают "слепым методом". Но время шло - я всё больше занимался и вот сам не заметил, как начал неглядя набирать текст с приличной скоростью.
Где то читал, что весьма вожно, чтобы кодер как можно меньше "подключал голову" во время написания. То есть многие вещи должны быть доведены до автоматизма. Поэтому я никогда не таскаю код из одного проекта в другой. Каждый исходник набирается полностью сам. Это как раз и тренерует автоматический набор алгоритмов. Ну и тренеровка для скорости набора.
Можно попробовать поработать на "Соло на клавиатуре". Очень хорошая программа.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Олимпиады это хорошо. И наработки олимпиадные это тоже хорошо. Только думать всегда полезно. А умение найти и скопировать проверенный участок кода из другого места мне кажется гораздо важнее умения быстро накодить десяток стандартов.
    • 15 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      А умение найти и скопировать проверенный участок кода из другого места мне кажется гораздо важнее умения быстро накодить десяток стандартов.

      Ага-ага, особенно во время онсайт контеста. :) :)

    • 15 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Смотря чего хотеть.

      Если именно тренироваться к онсайтам, где старый код можно использовать весьма ограниченно (например, бумажный Team Notebook на финале ICPC, полчаса настройки на TCO), то лучше как раз уметь быстро и безошибочно набирать известный код. К тому же задачи, где нужно модифицировать известный алгоритм, а не использовать его как чёрный ящик, я бы как раз и назвал “наиболее олимпиадными”. А в таких задачах модификация известного кода часто не имеет большого преимущества перед написанием его с нуля.

      Для всех других целей полезно уметь пользоваться написанным ранее, конечно.
      • 15 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Я про то, что умение накодить десяток стандартов важнее умения скопипастить готовый код.

        Но важность копипаста никто не отменял, да-да.

      • 15 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Речь в комментарии господина OSt шла про отключение головы, что несовместимо с тем, чтобы не использовать алгоритм как чёрный ящик. Чтобы мой комментарий стал более адекватным, надо заменить слово "быстро" на слово "автоматически".
        • 15 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Но всё равно умение "автоматически накодить десяток стандартов" важнее умения "найти и скопировать проверенный участок кода из другого места".

          Или я не прав? :-)

          • 15 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Думаю, на крупном соревновании эти вещи принесут пользу с примерно одинаковой вероятностью (она недалека от 0, кстати).
            Вот с умом накодить десяток стандартов реально может быть полезнее на соревновании. А в реальной жизни это умение заменится на копирование и модифицирование с умом же.
            В общем, в любом случае автоматически что-то делать не то что не важно, а просто вредно практически во всех ситуациях.
      • 15 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Кстати, "Смотря чего хотеть.", мне кажется довольно странным подходом. То есть можно хотеть исключительно участвовать в олимпиадах и больше никогда не программировать. Довольно уныло как-то. Скорее нужно сказать "Смотря в какой ситуации". А это уже довольно бессмысленно, потому что если я говорю, что А лучше, чем Б, но А в данной ситуации невозможно, то и говорить не о чем.
        • 15 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Не совсем так. Можно хотеть максимизировать результат на конкретном соревновании настолько, что на остальное забить. А уж потом можно будет и (поучиться) программировать что-то другое, кроме олимпиадных задач.
          • 15 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Я за универсальность в общем. Но в частном можно адаптироваться. Конечно, на соревновании можно делать то, что наиболее выгодно. На тренировках уже спорный вопрос. Наверно, надо по-всякому пробовать. То, что ты говоришь, даёт мгновенный выигрыш, а если интересует глобальный, то это скорее неправильно. То есть вопрос "уже потом" это после соревнования или после олимпиад вообще. По-моему, правильно первое.
            Если это перевести на язык контекста нашего обсуждения, то на соревновании можно что-то сделать автоматически, если это действительно выгодно. Но на тренировке нельзя так делать, иначе на соревновании автомата не получится.
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Интересная тема. Могу сказать за себя. 10-пальцевым методом не владею. Код я набираю 4-6 пальцами, но получается достаточно быстро, т.к. пишу вслепую, и все-таки всякие автокомплиторы хорошо помогают. В некоторый момент времени даже убедил себя, что так лучше - вроде как если бы поднял скорость набора, то голова бы не успевала бы за руками и увеличилось бы число багов.

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

    У меня, как мне кажется, пока наоборот - очень часто руки не успевают за головой, и я понимаю, что набор отнимает слишком много драгоценного времени, отведенного на решение задачи, которое я бы мог потратить на более глубокое продумывание алгоритма. Особенно это ощущается на TopCoder'е, где на решение отводиться сравнительно немного времени.
    • 15 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Это время можно тратить на дополнительную проверку кода. Поскольку в TopCoder результат приходит не сразу, отсутствие багов особенно важно. То есть в данном случае это почти что преимущество, потому что другим участникам приходится намеренно снижать скорость набора, чтобы убедиться в правильности каждой строчки.
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Скорость печати просто приходит с тренировками. Каждому хочется побыстрее сдать задачу и от этого прогресс идёт быстрее. То есть скорее не скорость печати влияет на успешность выступления, а наоборот). Я почти всегда во время печати половину времени уделяю экрану, половину клавиатуре. И вроде ничего.
Если очень хочется потренировать, есть туча тренажёров, только такое ощущение, что они дают серьёзный эффект только в начале пути.
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Печатать быстро и в слепую в любом случае полезно =). На соревнованиях это может дать время написать еще решение "в лоб" для проверки основного решения или попробывать несколько подходов.
Сейчас взял решения жюри с NEERC задач, которые решила команда Петразаводска - получилось около 30000 байт (с вычетом шаблона). Если набирать со средней скоростью 200 символ/минута, то уйдет пол контеста, так что видимо, чем выше скорость - тем лучше =)
  • 15 лет назад, # ^ |
      Проголосовать: нравится +12 Проголосовать: не нравится
    Полно гораздо более важных факторов. Я же не отрицаю, что неплохо бы печатать быстро, я просто говорю, что того же эффекта как правило легко можно добиться другими путями. Например, подумать 10 минут головой прежде, чем час писать 30 кило, в которых с огромной вероятностью найдётся ошибка даже если их перепечатывать с листочка.
    • 15 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Это ясно, что факторов других больше, а еще есть два сокомандника, которые могут думать параллельно.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Хм, с какого года NEERC? на NEERC 2007  самый длинный исходник был в 10542 байт, и то там использовались пробелы вместо табов, т.е. реально набираемых символов примерно вдвое меньше.
    • 15 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      2009. 30000 - это в сумме по задачам.
      • 15 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        а эти решения есть в открытом доступе? я на сайте neerc.ifmo.ru нашел только для 2004 и 2007 годов ("Runs" in section "Past")
        • 15 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          я брал решения _жюри_ (они есть там: http://neerc.ifmo.ru/regional/index.html)
          • 15 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            На java наверняка? Там же половину автокомплит дает.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Как показывает практика: можно набирать быстро и 6 пальцами, но считаю, что НУЖНО научиться набирать 10 пальцами. Плюсы очевидны. Это не так уж и сложно. Пару месяцев попотеть и придет совсем другая культура набора текста. Я прошел русскую и английскую раскладку в "СОЛО на клавиатуре" и всем рекомендую!

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

Одно из самых последних. Слабо. 150-200 зн/с будет достаточно. Тупыми упражнениями, отказом от пользования мышью и викторинами на IRC.

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

15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Главное - не думать о клавиатуре во время набора... Если такой уровень достигнут - дальнейшее увеличиние скорости особого прироста производительности не приносит.
15 лет назад, # |
  Проголосовать: нравится +7 Проголосовать: не нравится
Всегда считал, что это очень важно, и гордился тем, что херачу очень быстро. Частенько у меня бывал лучший результат по 250 на топкодере (не всегда правда она потом получала Passed :о))

Но сейчас я все больше и больше убеждаюсь, что скорость набора не имеет вообще никакого значения. Важно уметь написать сравнительно короткое решение - если вы КМП пишете на три страницы, то никакая скорость допустим не поможет :о) Но именно скорость вбивания буковок вообще не решает. Писать надо, как уже сказали, так, чтобы мысль поспевала за кодом :о)
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
     Умение очень быстро набирать позволяет сразу кодить решение, которое первым пришло в голову (пусть оно даже будет далеко не оптимальным с точки зрения размера кода), не тратя время на придумывание более короткого алгоритма. Особенно если решение состоит из кучки стандартных методов, которые пишутся "автоматически", можно реализовать решение не задумываясь, а в процессе написания порассуждать о всяких граничных случаях и т.п. На тех же 250 топкодерских или SNxS может быть очень полезно. Конечно, надо при этом постараться не бажить :)
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    > Писать надо, как уже сказали, так, чтобы мысль поспевала за кодом :о)

    Ага, но и чтоб код не сильно отставал от мысли. :)

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