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

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

Добрый день! Я хотел бы обсудить такой интересный вопрос: должен ли программист знать математику? Является ли этот навык необходимым для простого кодера? Просто я выбираю куда поступать — в наш местный колледж энергетики, или ехать в большой город и поступать в серьезный институт с программой на уровне?

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

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

Казалось бы, причём тут битмаски...
А если по делу — если есть шанс — не вижу причин не попробовать.

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +29 Проголосовать: не нравится

    А вам помогла математика?

    • »
      »
      »
      11 лет назад, # ^ |
      Rev. 5   Проголосовать: нравится +27 Проголосовать: не нравится

      Вообще не ясно, как можно отделить математику и программирование. В моём понимании, программирование это часть большОй математики.
      На самом деле в этом возрасте очень полезно бывает проявить амбиции(а в вузе для этого явно больше шансов) — это сильно помогает мотивировать себя на большИе дела.

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится +16 Проголосовать: не нравится

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

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

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

          • »
            »
            »
            »
            »
            »
            11 лет назад, # ^ |
              Проголосовать: нравится +9 Проголосовать: не нравится

            Мне довольно часто кажется, что участие в ACM и решение всяких интересных задач(с того же КФ) развивает мышление не хуже матана и т. п. А что по этому поводу думают другие участники?

            • »
              »
              »
              »
              »
              »
              »
              11 лет назад, # ^ |
              Rev. 4   Проголосовать: нравится -114 Проголосовать: не нравится

              Правда? Неужели перепечатывание одного и того же набора алгоритмов развивает?

              Простите, если чьи-то чувства задел:D

              • »
                »
                »
                »
                »
                »
                »
                »
                11 лет назад, # ^ |
                  Проголосовать: нравится +17 Проголосовать: не нравится

                Ну тут же у нас не баян-задачи аля "напиши дейкстру", "реши баянистую задачку на дп" и т.д.

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

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

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  11 лет назад, # ^ |
                    Проголосовать: нравится +40 Проголосовать: не нравится

                  Уважаемый Neodym, Вам довольно ясно ответили в этом посте. Можно немного развить эту мысль. Процесс решения задач уровня А-див2 это не искусство, даже более того, алгоритмов для этого знать не надо. А минусы Вы получаете, скорее всего за то, что, решая в основном задачи A-B-див2, говорите об алгоритмах так, будто давно их выучили и научились применять (заметим, что эти 2 вещи — не одно и то же).

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

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  11 лет назад, # ^ |
                    Проголосовать: нравится +5 Проголосовать: не нравится

                  Я понял, что вы имеете в виду. Спасибо за развернутый ответ. Хотелось бы думать, что все 70 проминусовавших имеют такое же мнение, а не просто ткнули кнопку. Конечно же, существуют красивые задачи и методы, имеющие под собой глубокие идеи, достойные заслуженного внимания. Я просто хотел намекнуть, что решение значительной части задач олимпиадного программирования — это именно подгон под эти самые базовые алгоритмы + реализация, что хотя и развивает необходимый навык, но имеет мало общего с развитием какого-то особенного мышления. Надеюсь, что теперь я написал это максимально необидно.

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  11 лет назад, # ^ |
                    Проголосовать: нравится +28 Проголосовать: не нравится

                  Что входит в "подгон под базовые алгоритмы"?

                  Попросите какого-нибудь топового участника выбрать 30-40 различных задач на потоки. Нахождение потока — это, как я понимаю Вашу терминологию — базовый алгоритм. Так вот, возьмите эти 30-40 задач, и попробуйте сказать, как решается каждая из них. Зная, что в каждой из них на самом деле надо найти какой-то поток. Как думаете, результат будет весьма удачным?

                  Если нет, то вопрос — а что нужно, чтобы результат был удачным?

                  Конечно, на банальном знании набора стандартных однотипных задач не трудно выйти на финал, а при определенном стечении обстоятельств — и взять там медаль. Но это ведь далеко не показатель топовости. И людей, которые прямо на контесте придумывают неизвестный им базовый алгоритм сами — тоже никто не отменял. И те, кто решал когда-то, когда еще почти не было никаких разборов... Или и сейчас почему-то не использует готовое, а ко всему приходит сам... У них творческое мышление тоже отсутствует?

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

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  11 лет назад, # ^ |
                    Проголосовать: нравится +71 Проголосовать: не нравится

                  Сначала див2-А — не искусство... Потом приходит кто-то красный и говорит — див1 А..В это не искусство, какое искусство в том, чтобы написать очевидный бинпоиск, стандартную динамику или банальный перебор? Потом приходит еще кто-то, говорит — я смотрел задачи NEERC за такой-то год, на выход в финал ничего особенного не надо, несколько тупых халяв, какая-то скучная динамика, перебор, стандартная задача на бор.... Скукотище, словом.

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

                  Ну и так далее...

                  Все относительно) И не надо так категорично о div2-А) Я бы привел пример какой-нибудь спортивной гимнастики — некоторые на кольцах даже подтянуться не смогут. И "со стороны" какой-нибудь подъем силой с самолета в обратный крест — это очень даже искусство, и заставляет тех, кто за этим наблюдает, удивляться возможностям человеческого тела. А если спросить профессионального спортсмена — он скажет, мол, ОК, подъем, да, есть такой, умею, ну элемент как элемент, о каком искусстве вы говорите?

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  11 лет назад, # ^ |
                    Проголосовать: нравится -28 Проголосовать: не нравится

                  А ещё для слона провести несколько линий по холсту — тоже искусство. Но мы-то не слоны.

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

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

                  "Конечно, на банальном знании набора стандартных однотипных задач не трудно выйти на финал, а при определенном стечении обстоятельств — и взять там медаль."

                  по-моему, вы погорячились.

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

                  Просмотрел несколько прошлых полуфиналов наугад.

                  NEERC13, выход на финал — задача А, написать перебор того, что описано в условии, и навешать на него оптимизаций.

                  NEERC08, выход на финал — задача K, построить бор (ну и еще хэши для разнообразия).

                  NEERC11, выход на финал — задача C, очередная стандартная динамика; задача D — построить бор.

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  11 лет назад, # ^ |
                    Проголосовать: нравится +9 Проголосовать: не нравится

                  Можно полюбопытствовать, в скольких финалах лично вы поучаствовали?

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

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

                  Какая-нибудь задача "напишите Укконена" не становится менее стандартной от того, что большинство Укконена писать не умеют. И выше я привел несколько примеров полуфиналов, в которых "финальная" (т.е. наименее сдаваемая из тех, которых хватало для выхода в финал) задача — "стандартная" с точки зрения Neodym. И является искусством ровно настолько же, как приведенный мною выше пример с гимнастикой. Для наблюдателя — искусство. Искусство "знать такую задачу", искусство уметь это закодить, да еще и быстро. А для участника — инструмент для достижения результата и не более.

            • »
              »
              »
              »
              »
              »
              »
              11 лет назад, # ^ |
                Проголосовать: нравится -8 Проголосовать: не нравится

              Развивает, но в другую сторону.
              Матан и прочие позволяют спокойно рассуждать на уровне абстракций, которые сильно упрощают жизнь.

              • »
                »
                »
                »
                »
                »
                »
                »
                11 лет назад, # ^ |
                  Проголосовать: нравится -18 Проголосовать: не нравится

                А задачи аля "заметь палево" или "выведи на бумажке формулу и пусть компьютер ее выведет" — развивают?

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  11 лет назад, # ^ |
                    Проголосовать: нравится +36 Проголосовать: не нравится

                  Определённо да. В жизни постоянно нужно замечать палево и очень часто — выводить формулы.

        • »
          »
          »
          »
          »
          11 лет назад, # ^ |
            Проголосовать: нравится +156 Проголосовать: не нравится

          Вот тебе платят по 5 рублей за страничку, а тебе нужно 1000 собрать. Ты зарешал уравнение, и понял, что нужно сделать 200 страничек.

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

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

Если же рассмотреть поближе любой сложный проект, то Вы найдете там математику в немалом количестве. Например, для разработки графических движков для игр нужно хорошо знать геометрию (далеко за рамками школьного курса). Ранжирование запросов поисковыми системами основано на математической статистике. Поиск пути от точки А до точки Б на автомобиле с учетом пробок на улицах основан на теории графов. И таких примеров можно найти еще огромную кучу.

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

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

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

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

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

      А пример я привел самый крайний из тех, что мне известны.

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится -8 Проголосовать: не нравится

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

        P.S. Я на пхп не писал, но слышал про его косяки.

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    быть кодировщиком быдлосайтов

    Из этой пламенной речи как-то напрашивается что сайты может ваять любой дурак и дедуктивный вывод что любой кто ваяет сайты — дурак :)

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

    Впрочем нужно сразу огорчить автора поста — все действительно интересные отрасли в любом случае требуют довольно много времени тратить на учёбу / практику / саморазвитие. :)

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится -15 Проголосовать: не нравится

      А вот не надо перевирать мои слова. Кодировщик быдлосайтов и разработчик серьезного веб-проекта — это совершенно разные вещи.

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится +9 Проголосовать: не нравится

        Готовы дать определение, показать разницу между серьёзными и быдлосайтами?

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

          Дать определение не готов, т.к. то и другое — понятия с нечетким объемом, между которыми существуют переходные формы.

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

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

            Я не прошу чёткого разграничения. Просто "своими словами" выразите общий собирательный образ "быдлосайта", пожалуйста. Это, наверное, не так трудно?

            Только не заставляйте меня пересказывать лекции Яндекса

            На этот счёт не парьтесь, на курсере видел :D

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

              В данном контексте я бы дал такое определение: сайт, созданный быдлокодером или группой таковых. Вспомните, какие из известных Вам сайтов были созданы подобными людьми (исходя из user experience, а не личного знакомства с авторами).

              • »
                »
                »
                »
                »
                »
                »
                »
                11 лет назад, # ^ |
                  Проголосовать: нравится +8 Проголосовать: не нравится

                Исходя из user experience? Неожиданно.

                Ну посмотрим например на иные сервисы гугла — google-code, google-sites, blogger — работа с ними у продвинутого юзера вызывает естественное раздражение.

                Нужно ли сделать вывод что "их делали быдлокодеры"?

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится

      Из того, что небо голубое не следует, что все голубое — это небо

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

должен ли программист знать математику?

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

Субъективно, многим интересным инженерным занятиям релевантны знания по алгоритмам, структурам данных, автоматам, формальным грамматикам и сложности (список далек от того, чтобы быть исчерпывающим, конечно) — и после того, как убого все эти вещи были прочитаны в моем бакалаврате, мне трудно представить, чтобы их сносно объясняли в колледже.

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

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится

    Придется, наверное, как всегда все самому учить, раз оно того стоит

»
11 лет назад, # |
Rev. 3   Проголосовать: нравится -51 Проголосовать: не нравится

Если уж обращаться к теме математики и программирования — почему в некоторых задачах происходит полная подмена второго первым? Какой смысл в таких задачах? Взаимодействие этих наук может иметь лишь два вида: первое помогает второму, как уже было сказано, в геометрии или какой-нибудь криптографии. Второе первому — в решении разных задач оптимизационного характера, когда надо что-то найти(как здесь или здесь). Задачи с решением в стиле cout<<(a + 1)/b не удовлетворяют ни одному из этих типов — программерские навыки не развиваются, а математикам не нужны такие программы, ибо числа в формулу не так уж и сложно подставить

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

    числа в формулу не так уж и сложно подставить

    А если нужно сто раз подставить числа в формулу? А если тысячу?

    Это самый простейший пример автоматизации процесса вычисления. На таких вот кирпичиках и строится всё остальное.

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится -39 Проголосовать: не нравится

      На этом все строится?

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится +24 Проголосовать: не нравится

        Конечно, и на этом тоже!

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

        • »
          »
          »
          »
          »
          11 лет назад, # ^ |
            Проголосовать: нравится +4 Проголосовать: не нравится

          Резон в ваших словах есть. Однако, мне все равно грустно, когда вся "математика" выглядит именно так

          • »
            »
            »
            »
            »
            »
            11 лет назад, # ^ |
              Проголосовать: нравится +23 Проголосовать: не нравится

            Ну это прямо вкусовщина какая-то. Если вам нравится какая-то другая математика — занимайтесь ей — возможностей масса.

»
11 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
По - моему, как в анекдоте, правы обе стороны.  Судить я могу не на основе собственного опыта (я к программированию имею весьма отдаленное отношение), а на основе своих бесед со студентами - выпускниками за очень много лет. Правда ВУЗ наш (СибГУТИ, Новосибирск) - средний в своем городе, но программисты всегда востребованы и примерно половина их работает вполне по специальности. Так вот, математика для простейшего и среднего уровня практически нигде не бывает востребована, для более высокого - тоже не очень часто. А если брать непрерывную математику, так только один мой выпускник использовал что-то вроде численных методов (он писал программы для строительной конторы). Другое дело, что тренировать мозги и общаться с умными людьми всегда приятно и полезно (в том числе и в утилитарном смысле - многие серьезные организации ведут отбор через различные олимпиады а тут уже без математики никак).
  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +9 Проголосовать: не нравится

    Давно было интересно, зачем вы всегда пишете свои комментарии, оформляя их как код?

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

      Просто человек очень любит моноширинный шрифт :)

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +9 Проголосовать: не нравится

    Вдогонку к предыдущим комментариям: моноширинный шрифт лично мне читать намного труднее, когда вокруг всё написано стандартным и глаз привык. Лучше не надо так.

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится -8 Проголосовать: не нравится

      А код у вас в редакторе не моноширинным шрифтом?

      P.S. Просто интересуюсь

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится +16 Проголосовать: не нравится

        Моноширинным. Но это код. Читать текст "подряд" гораздо удобнее, когда буквы не растянуты и не сжаты. Для сравнения:

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

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

        • »
          »
          »
          »
          »
          11 лет назад, # ^ |
            Проголосовать: нравится +8 Проголосовать: не нравится

          Пользуясь случаем, хочу поинтересоваться) Кто-нибудь знает, что за шрифт используется на codeforces при просмотре кода?

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

            Я тут посмотрел через chrome developer tools, шрифт в листинге задается тегом pre, а явно в CSS codeforces'а не прописан. То есть тут зависит все от браузера. У меня например в user agent stylesheet написано font-family: monospace;. То есть какой-то моноширинный, в моей системе это Consolas.