Математика для программиста -15



Вступление

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

Основная мысль

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

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

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

Программисты, которые работают в этих сферах и пишут на JavaScript, Python, PHP и т. д. зарабатывают хорошие деньги, работают в высокоуровневом программировании, знают несколько технологий и не выполняют сложных математических вычислений. В большинстве случаев. Всё это хорошо, особенно, когда люди знают, что хотят. И когда им задают вопрос, «Нужна ли математика» говорят, что нужна лишь базовая для такого рода работ, а вот для более сложных проектов и технологий стоит дополнительно изучать что-то и посложнее школьной программы.

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

Вполне логично. Однако стоит подумать про одну важную деталь, которую почти никто никогда не озвучивает. Дело в том, что ведь все компьютеры и ЭВМ работают с помощью математики. И что у истоков всего программирования стоит математика.

Вся программная арифметика связана с числами. В компьютерах используется бинарный код (1 и 0). Именно на этом коде и работают системы, начиная от операционных и заканчивая нейронными сетями. Всё, что связанно с вычислениями, всегда взаимодействует и цифрами.

Когда приходилось делать сложные вычисления, использовали карандаш, бумагу и ум. Но в процессе прогресса, понимая, что подобные решения требуют много времени. Потому и начали создавать ЭВМ для автоматизации определённых процессов. А чтобы эти процессы были автоматизированы, необходимо было разработать шаблоны. Ведь все компьютеризированные аппараты работают на основе созданных ранее паттернов. Так и вышло, что созданное сегодня информационное пространство - модернизированные шаблоны прошлого.

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

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

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

Вывод

Задумайтесь, все сложные вещи пишутся на низких языках и включают математические знания. Конечно, нет необходимости учить весь курс вышмата, но если вы серьёзно захотите создать, например, свою ОС, написать крутой фреймворк, или уникальный искусственный интеллект, то без хороших математических знаний и соответствующих навыков в ЯП это будет сделать почти невозможно.

Отвечая на вопрос, «Нужна ли математика программисту? », я могу смело дать ответ: «Да». Каким бы ни был программист и что бы он ни делал, чем больше знаний в точных областях он будет знать, тем лучше для него, как специалиста.

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




Комментарии (50):

  1. altai2013
    /#23755737 / +17

    Позвольте мне кратко пересказать статью: «Я занимаюсь программированием и 3D-дизайном, приступил к изучению основ кибербезопасности. На вопрос: «Нужна ли математика программисту?», я могу смело дать ответ: «Да»». Смелость — это, конечно, прекрасно, но хотелось бы какие-то аргументы увидеть.

    • YaroslavSasim
      /#23755935 / -8

      Спасибо, за конструктивный комментарий. Будут ещё 2-3 статьи с пояснениями и примерами. В ним будут ссылки на эту статью. Т.е. грубо говоря цикл статей, т.к. такую тема довольно большая.

    • nick1612
      /#23756017

      Каких аргументов вам не хватает? Автор четко дает понять, что в "серьезном программировании" без математики никак:

      Реальное программирование - это "низкоуровнево, сложно, математично", а не эти всякие там ваши Бекенды с Фронтендами.

      • elektroschwein
        /#23757095 / +1

        Большинство "сложно и математично" как по мне, на практике оказывается скукой смертной, а в бэкенде, между тем, нередко можно найти очень интересные задачи, особенно если мы пилим не сайт-визитку и не очередную ERP/CRM, а что-то посложнее.

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

  2. fzn7
    /#23755741 / +34

    С такой доказательной базой вам в ТикТок

    • Sdima1357
      /#23755809 / +5

      "Мамой клянусь, треугольник"

  3. Sdima1357
    /#23755759 / +7

    "Я думал , я на самом дне, но тут постучали снизу."

    А где же математика?

    " Так мы и не выслушали начальника транспортного цеха"

  4. Suvitruf
    /#23755785 / +9

    Конечно, большинство современных разработчиков предпочитают уходить больше в Frontend, Backend и не создавать себе проблем с изучением языков никого уровня.
    ????
    Вся программная арифметика связана с числами. В компьютерах используется бинарный код (1 и 0).
    Уже есть квантовые компьютеры на кубитах.
    все сложные вещи пишутся на низких языках
    Нет.

  5. balu736
    /#23755787 / +6

    Лучший способ объяснить трудный материал - обратиться к аналогии.

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

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

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

    Аналогично с программистами. Человек, работающий в сетях гипермаркета, вряд ли ощутит недостаток знаний в математике. А программист, разрабатывающий программу для анализа событий на адронном коллайдере, без знаний математики и физики ничего не сделает.

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

    • forthuser
      /#23755813 / +3

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

      Позвольте вопрос,
      а при этом каким языком программирования он пользуется?
      Выбирает он и его под решаемую задачу и если да, то как? :)

      • funca
        /#23755825

        Выбирает он и его под решаемую задачу и если да, то как? :)

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

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

      • balu736
        /#23756175

        А как вы понимаете, что с вами говорят на французском, а не на английском?

      • JINR
        /#23758771

        Всё уже написано до вас. ;)

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

        https://root.cern/

    • Fen1kz
      /#23755823 / +4

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

      Он пользуется питоном и на любую математику говорит "а сейчас мы импортируем numpy и он нам все посчитает" /s

      • balu736
        /#23756631

        В действительности все проще - физики пишут миллионы строк собственного аналитического программного обеспечения, отличного от языка, используемого специализированным отделом программистов. Среди инструментов - numpy, scikit-learn, TensorFlow, др.

      • geher
        /#23757963

        Он пользуется питоном и на любую математику говорит "а сейчас мы импортируем numpy и он нам все посчитает"

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

        @funca

        Есть такая штука как интреференция опыта. Это когда полезные в одной области привычки становятся препятствием для освоения другой. Чистые математики, в прикладном плане, не лучшие программисты.

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

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

    • unsignedchar
      /#23755843 / +2

      Человек, работающий в сетях гипермаркета, вряд ли ощутит недостаток знаний в математике.


      Ощутит, как только касса не сойдётся, например.

      • eisaev
        /#23755867 / +5

        Если речь конкретно о кассе, то вы переоцениваете значение высшей математики в данной области - там самая сложная математика на уровне 7-го класса. Там важнее знать тонкости законодательства.

    • LARII
      /#23755861 / +3

      Вы про гипермаркет погорячились. Видимо вы малознакомы с РАУЗ, абстракциями в виде узлов и ребер графа и СЛАУ.

    • mikhailian
      /#23755971

      монтёра

      Э... Элементарная математика монтёру очень нужна. И куча специальных знаний и умений. Вы знаете, почему к розетке подводятся 3 провода, ведь можно обойтись и двумя, а при определённой сноровке и одним?

      • balu736
        /#23756179

        И про два, и про три, и даже про четыре знаю.

        • mikhailian
          /#23756213 / -1

          Я тоже думал, что знал. А потом прочитал вот это http://amasci.com/amateur/whygnd.html и понял, что ничего не знал. Показал знакомому электрику – а он плечами лишь пожал. Ему это было очевидно.

          • balu736
            /#23756231 / +2

            Вынужден предположить, что вы не знаете "Теоретических основ электротехники".

        • Semy
          /#23758065

          Даже пять :)

          UPD: картинка не загружается: L1, L2, L3, N, PE

          • slepnoga
            /#23758911

            Ну нет.

            А cos f тогда по какому проводу? :)

    • avkudrin
      /#23755975 / +1

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

  6. Serge78rus
    /#23755837 / +8

    Когда-то у нас в школе в кабинете математики висел плакат с цитатой М. В. Ломоносова:

    „А математику уже затем учить следует, что она ум в порядок приводит.“
    Честно говоря, не особо вникал в то, что именно имел ввиду автор цитаты, но по опыту своей жизни я с этой цитатой согласен абсолютно.

    • funca
      /#23755849 / +2

      Как говорил другой авторитетный товарищ (не дословно): "все яд, все лекарство, результат зависит от дозы."

      Есть такая штука как интреференция опыта. Это когда полезные в одной области привычки становятся препятствием для освоения другой. Чистые математики, в прикладном плане, не лучшие программисты.

      • AlexNis
        /#23757293 / +2

        Более правильно фраза звучит так: "Всё есть яд, и ничто не лишено ядовитости; одна лишь доза делает яд незаметным". Согласитесь, что это несколько меняет смысл...

    • elektroschwein
      /#23757059 / +3

      Это просто во времена Ломоносова ещё программирования не было.

    • GospodinKolhoznik
      /#23757181 / +2

      А я не согласен с этой цитатой Ломоносова.

      Вот есть исследование проведенное UCL Institute of Education, в котором исследовали влияние не математики, но очень близкой дисциплины на мозги детей - игры в шахматы.

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

      • unsignedchar
        /#23757245 / +1

        А какая связь математики и шахмат?

        • GospodinKolhoznik
          /#23757287

          Да ладно! Шахматы по сути и есть область математики, с аксиоматикой определённой в виде правил игры.

          • funca
            /#23762237

            Шахматы, как и математику, можно воспринимать в виде аксиоматической формальной системы https://en.m.wikipedia.org/wiki/Formal_system. Но FS, насколько я понимаю, это не раздел математики, а абстракция уровнем выше.

  7. Rutel_Nsk
    /#23755915 / +1

    Думаю, обязательно потребуется только «арифметика» и «логика», все остальное опционально и зависит от решаемой задачи. Программирование позволяет применять даже очень сложные разделы математики, совсем не понимая как они устроены и как работаю.
    Например шифрование, можно применять на уровне задачи: Захотел зашифровать данные, вызвал библиотечную функцию, получил результат.
    А аот если ты хочешь создать такую функцию или произвести анализ ее работы, то да…
    Для «рисования сайтов», генерации отчетов, бухгалтерских документов ничего кроме логики и арифметике в базовом варианте не требуется.
    Можете посадить школьника с 5 класса и выше (и школу бльше не посещать) и он через год два станет средним программистом, только будет одна проблема — Глубина знаний, кругозор будет минимальными.

  8. drmrmom
    /#23755979 / +1

    Поддерживаю! Однозначно нужна! Да просто как конкурентное преимущество. Вообще для современного прогресса нужны мультизнания, т.к. самое интересное и перспективное рождается на "стыке наук".

  9. K36
    /#23756165 / +3

    Все сложные низкоуровневые языки программирования базируются на математике

    Поэтому зачастую все стараются избежать изучения С/С++, Java и других подобных языков

    Писал проекты на ассемблере, и бывало даже в машинных кодах. Математика не пригодилась.

  10. maxkomp
    /#23756205 / +7

    Задачи у программеров бывают разные. Для огромного числа реально встречаюшихчя в жизни задач, знаний математики в пределах школьной программы для 8 класса - выше крыши хватит. Отсюда и появляется такие посетители отделов кадров, которые с порога заявляют "я видел, как мой одноклассник программы пишет. Сидит и кнопки нажимает. Я тоже так умею, хочу зп 180 тыс руб".

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

    Кто пробовал написать простенькую софтинку для автоматического управления освещением в умном доме - это подтвердит.

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

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

    Чуть более сложная задача в бухгалтерии - и здравствуй, линейное программирование. И системы линейных алгебраических уравнеий. Как их решать? Смотрим гугл, находим десяток-другой методов. Какой лучше применить для вашей задачи?

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

    Любая задача по обработке сигналов - с вероятностью 146% потребует применения преобразования:Фурье. Библиотек, которые выполнят за вас быстрое преобразование Фурье вы найдете в ассортименте. Но ни одна библиотека не объяснит вам, когда можно применять бпф, а когда этот трюк использовать не стоит, потому. что... в этом случае надо будет честно интеграл считать. А кк его считать? Привет, теория функций комплексного переменного. Без тебя тут никак не обойтись.

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

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

    Причем вроде как для освоения реляционной алгебры само по себе знание теоремы Коши и правила Лопиталя не нужны. Но... как тут верно заметил @Serge78rus. Это мозги в порядок приводит.

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

    Никакого тайного знания тут нет.

    • funca
      /#23762441

      Программирование и математика это разумеется пересекающиеся множества знаний. Однако ни одно из них не является строго подмножеством другого. Отсюда весь этот холивар.

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

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

  11. Mikluho
    /#23756241 / +1

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

    PS. тут уже напомнили цитату Ломоносова про порядок в уме. И это главное, что может дать математика большинству программистов.

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

    • michael_v89
      /#23756427 / +2

      И это главное, что может дать математика большинству программистов.

      Как ни странно, программирование может дать то же самое.

      • Mikluho
        /#23759195

        Ах, если бы.... :(

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

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

  12. elektroschwein
    /#23757077 / +5

    Два десятка лет занимаюсь разработкой ПО. На высокоуровневых языках (Delphi, C#, C++), на низкоуровневых - C и немного ассемблера. В совершенно разных прикладных областях - embedded (телекоммуникационные железки), системное программирование (драйвера устройств), бэкенд, десктоп.

    За все эти годы математика требовалась только на уровне 10-го класса школы плюс дискретка (но и там нет особо рокетсайнса, большинство вещей интуитивно понятны). И всё.

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

    А статья вообще ниочем.

    • unsignedchar
      /#23757355

      большинство вещей интуитивно понятны

      При наличии некоторого background'а ;)

  13. siberiano
    /#23757429 / +3

    Проблема в этом эссе (а текст написан по канонам эссе для западных тестов типа GRE) -- что это умозрительные рассуждения. Даже делая оговорки, ставя под сомнение своё мнение, автор всё равно выходит на него же через спорные логические конструкции:

    1) есть настоящее программирование, на низкоуровневых языках

    2) в нём нужна математика (правда не уточняется, какая именно)

    В итоге это всё читается как "всё-таки надо математику знать (перечень обоснований), хотя конечно, иногда можно и без неё, но надо".

    Полезно было бы задаться вопросами о практических выводах: насколько, например, увеличится производительность? Насколько снизится число ошибок в коде от "математики"? Можно было бы поискать исследования, на каком уровне по факту программисты владеют ею.

  14. spooky
    /#23761173

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

  15. lair
    /#23761349

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

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


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

    Это утверждение нуждается в формализации и последующем доказательстве.