Как математика связана с программированием
Как связано программирование и математика?
Я ученик 9 класса. Занялся изучением программирования 4 года назад на спецкурсах. В начале пути мне говорили многие, что программирование тесно связано с математикой, а кто-то говорил, что вообще без высшей математики суть программирования не понять.
На спецкурсах я изучал создание сайтов и программирование на java. В качестве проектов создавал сайты на php&mysql и js и простенькие игры на java, например, одним из моих проектов на java была “змейка”. С пониманием языков программирования у меня не было никаких проблем. Математика при этом не была высшей (но с пониманием алгебры с геометрией у меня тоже все нормально).
Что за связь программирования и математики?
Самая очевидная в том, что там слова одинаковые есть (функция, переменная)? Или в чем?
Понятно, что нужны как минимум базовые понятия алгебры для того, чтобы , например, в игре расчитать размер объекта или при написании той же игры сделать расчеты все по математической модели какого то закона физики, что б вывести формулы расчета, что все в конечном итоге сводится к каким-то вычислениям, расчетам. Это ясно, без этого никак.
Но мне говорят, что ключ понимания сути программирования целиком и полностью в понимании математики, и лучше высшей математики. Что имеется в виду?
На этом сайте сидят компетентные в программировании люди и я надеюсь получить ответ с конкретными примерами решения каких-либо задач, где вот можно сказать явно, что “здесь без понимания математики никак”, потому что абстрактных объяснений и так много на просторах интернета.
И так как связано программирование и математика?
Программирование и математика
Добрый день! Мучает такой вопрос. По специальности я эникейщик, хочу обучиться на программиста, но.
Высшее образование (математика + программирование)
Здравствуйте! Закончил десятый класс, пытаюсь определиться с вузом. Раньше много времени уделял.
С++ программирование массивы дискретная математика
Подсчитать число перестановок из чисел 1,2,…, N<=15, в которых разность между соседними числами.
Математика и программирование
Здравствуйте ув форумчани. Я студент первого курса института. По чуть-чуть изучаю язык С. Но.
Дискретная математика и программирование
Здравствуйте. Учусь на первом курсе в политехе на программиста. Мы изучаем в данный момент C++.
Решение
Вопрос «нужна ли программисту математика?» всплывает регулярно, достаточно загуглить его и увидеть кучу материалов. Причем каждый отвечает исходя из своего субъективного опыта, а потому ответы везде разные.
Другими словами, программисту математика нужна в той степени, в которой требует конкретная решаемая задача. Причем не вся математика (всю и невозможно знать), а только некоторые разделы.
Разработка игр. Тут все очевидно: без алгебры/геометрии ни пушку навести на врага, ни освещенность просчитать.
Если задача — разработка парсера, то добро пожаловать в теорию автоматов. Пример академической задачи — строчный калькулятор. На входе — строка с выражением, на выходе — результат его вычисления. Конечно, можно написать его и без знания автоматов, но либо придется переизобретать уже существующие математические абстракции, либо код будет неподдерживаемой лапшой, в которую крайне сложно будет добавить поддержку скобок и переменных.
В области анализа данных потребуются знания мат статистики и связанных вещей.
При работе с распределенными системами неплохо бы знать теорию массового обслуживания, чтобы хотя бы иметь представление о свойствах таких систем.
А вот если работа сводится к тому, чтобы пойти в базу, сделать выборку и разложить данные на веб-страничке с посещаемостью полтора человека в сутки — в этом случае задача особых познаний математики не потребует.
И здесь все просто и понятно. Но давай абстрагируемся от конкретных областей. Мы разрабатываем какой-то алгоритм. Зачем здесь математика?
Тут можно вспомнить, что мы работаем с различными алгоритмами и структурами данных. Они отличаются своими характеристиками (трудоемкость операций, затраты памяти), которые записываются в O-нотации: https://bigocheatsheet.com/. Нужно уметь выбирать наиболее оптимальные решения. Неплохо бы понимать, откуда берутся значения в круглых скобках и как анализировать собственные алгоритмы, см. асимптотический анализ.
Также регулярно работаем с такими структурами, как множества, графы, уже упомянутые автоматы. Что все это такое и что с ними можно делать рассматривается в дискретной математике.
Это было про алгоритмы. Абстрагируемся еще сильнее. Мы пишем какой-то код. Не важно, какой алгоритм он реализует. Он вообще может не делать ничего сложного. Возможно, в нем появятся логические выражения чуть сложнее, чем «if a < b». И здесь совсем не помешает знание булевой алгебры.
Еще пример. Тебя ведь не удивляет, что числа можно складывать и перемножать. А еще складывать можно строки. А перемножать вектора и матрицы, только реализуются эти операции совсем иначе. А еще есть комплексные числа со своими правилами. И, в общем-то, перемножать и складывать можно любые объекты, если определить для них, как это делать. Это одна из идей общей алгебры — мы можем работать с любыми объектами, если на их множестве определена какая-то алгебра и зафиксированы свойства операций. Ничего в программировании не напоминает? Интерфейсы, например. Можно ли писать код, не зная этого? Вполне. Не возьмусь говорить, что при этом потеряешь. Может быть, одну точку зрения на код. Насколько это критично — не знаю.
Нужна ли математика программисту?
Только рядовой пользователь может не знать математику и полагаться на компьютер. Программист обязан быть хорошим математиком, даже если в его распоряжении мощная техника для сложных расчетов. Оксана Селендеева, основатель Международной школы программирования для детей CODDY, рассказывает, какие разделы математики используются в IT и где можно потренироваться.
Лучше начинать заниматься еще со школы
Разделы математики
Разные задачи подразумевают разные подходы к решению и требуют знания различных разделов математики. Если для создания простого калькулятора достаточно будет владеть базовой логикой и арифметикой в школьным объеме, то при разработке игрового «движка» с реалистичной физикой не обойтись без отличного знания геометрии, дифференциальных уравнений, математического анализа и многого другого. Основательных познаний требует и разработка в самых востребованных областях современного программирования — Data Science и Machine Learning — анализ данных и обучение искусственного интеллекта.
Логика
Логика — «кит», на котором покоится вся информатика. Без понимания базовых логических принципов стать программистом невозможно. С помощью логики создают внутренний механизм принятия решений в программе, которые определяются действиями пользователя или результатами вычислений. Например, пользователь нажал клавишу «влево», персонаж игры передвинется влево. Если герой столкнулся с врагом или препятствием — запустится подпрограмма, которая запрограммирована на дальнейшее развитие событий. Все это зависит от логики, созданной программистом на этапе разработки.
Дискретная математика
Еще один «кит» информатики — дискретная математика. Она изучает дискретные, то есть не-непрерывные, математические структуры: графы и множества. В программировании этот раздел математики используется чаще других, потому что его методы справляются с большинством типичных задач.
Дискретная математика помогает решать задачи на комбинаторику, построение графов, поиск нужной информации среди множества вариантов и многие другие. Ее методы используются и при математическом моделировании — построении искусственной модели, имитирующей реальные физические процессы.
Сегодня все больше девочек интересуются программированием
Теория чисел
Широкое применение теория чисел нашла в криптографии — все современные системы шифрования основаны именно на ней. Программисту придется в совершенстве овладеть теорией чисел, чтобы разрабатывать программное обеспечение, связанное с компьютерной безопасностью, сохранением конфиденциальности и защитой информации.
Теория вероятностей
Знания теории вероятностей позволяют программисту найти верное решение, даже когда исходных данных недостаточно. Формальная логика в таких ситуациях пасует, потому что нет оснований для однозначного решения. Однако теория вероятностей позволяет найти решение, максимально приближенное к верному. Теория вероятностей часто используется в IT. Например, в Байесовской фильтрации спама, на базе которого работают спам-фильтры большинства email-серверов. Кроме того, в робототехнике, программировании игр, при создании автомобильных компьютеров и т.д.
Математический анализ
Глубокое знание математического анализа нужно не каждому программисту. Однако понимание его принципов помогает в решении сложных задач. Чаще всего «матан» требуется в математическом моделировании, когда на компьютере воссоздается физический объект или явление реального мира. Например, при проектировании мостов или сложных технических устройств, которые невозможно испытать в реальности — пилотируемый космический аппарат.
Мастер-класс CODDY в Московском дворце пионеров
Ресурсы для тренировок
Project Euler — сайт носит имя знаменитого математика Леонардо Эйлера, поэтому просто не будет. На нем размещены самые сложные задачи по математике. Для решения многих требуется знание основ программирования.
Timus Online Judge — сайт Уральского федерального университета. Это крупнейший архив с задачами разного уровня сложности и автоматической проверкой. Есть задания на динамическое программирование, теорию чисел и структуры данных, а также, по словам создателей, необычные и хитрые.
MAXimal — русскоязычный портал для освоения алгоритмов. К сожалению, сайт давно не обновляется, но все еще можно потренироваться и порешать упражнения. Также на сайте собрана огромная библиотека книг по программированию.
W3Resource — портал с обучающими материалами, упражнениями и квизами по веб-разработке, базам данных и языкам программирования: JavaScript, Java, PHP, Python, Ruby и другим.
MindCipher — сайт для тех, кто любит задачки для ума. На нем собраны занимательные головоломки и логические загадки.
Programming Praxis — это не сайт, а блог энтузиастов, которые формируют комьюнити поклонников сложных задач. Каждую неделю появляется новое задание, обсудить его решение можно в комментариях.
Codeforces — портал для регулярных марафонов по программированию. Можно принять участие в соревнованиях или просто потренироваться на заданиях прошедших мероприятий.
Математика для программиста — не просто «царица наук». Это тот стержень, который связывает знания и навыки. Ни один серьезный проект не обходится без применения математических методов, поэтому если хотите стать творцом в программировании — изучайте математику!
Основатель Международной школы программирования для детей CODDY
Нужна ли программисту математика?
Текст позаимствован из поста хабропользователя arielf . Очень советую прочесть статью полностью, речь идет о высшем образовании.
——–
У каждой специальности есть свой минимальный набор обязательных знаний. У информатики и программирования такой основой служат математические курсы; так что вопрос: «нужно ли программисту образование?», обычно превращается в «нужна ли программисту математика?» или «нужно ли программисту так много математики?» Учитывая, что программист в классическом смысле – это инженер, вопрос можно сформулировать и иначе: «нужно ли образование инженеру?» Споров на этот счёт обычно не возникает. Проблема разве что вот в чём: не все хотят быть учёными и инженерами. Если предел ваших мечтаний – успешная игра в App Store, а не проектирование искусственного интеллекта, криптографического алгоритма или программ трёхмерной анимации, вы можете смело минуя вуз приступить к её выполнению, но и в этом случае знания не испортят вам карьеру. В вузах не знают, кем вы себя видите через много лет и чем планируете заниматься – не говоря уже о том, что вы сами в семнадцать лет можете ещё этого не знать. Считается, что лучше заранее научить вас всем основам, чем упустить что-то важное. Кроме того, основные курсы, как правило, взаимозависимы и нельзя просто взять и изъять некоторые из них. И их главная цель – не научить вас всему на свете, что в принципе невозможно, а предоставить вам примерную карту современных научных и инженерных знаний, чтобы при столкновении с неизвестным, вы смогли принять верное решение, в каком направлении идти.
Вернёмся к математике. Практически все книги по алгоритмам требуют от читателя некоторой математической культуры. А алгоритмы и структуры данных – как сказал Никлаус Вирт – являются программами, и не умея работать с ними, нельзя называться программистом. Причём это не обязательно умение разрабатывать свои алгоритмы, намного чаще нужно изменять чужие, приспосабливая их к частным случаям, но также и умение доказывать их корректность и применимость в различных условиях, и умение анализировать их поведение в некоторых ситуациях. Математика активно применяется таких областях как криптография, графика, распознавание образов, работа с видео, звуком и изображениями, математическое моделирование реальных процессов. В таком, казалось бы, приземлённом системном программировании без серьёзных математических знаний невозможно написание компиляторов, планировщиков и файловых систем.
Математика является тем каркасом, на который нанизываются все прочие знания. Увы, многие начинают осваивать профессию с конца. Программист, изучивший языки программирования, инструменты разработки, различные технологии и паттерны, но не освоивший математические основы, напоминает художника, научившегося в совершенстве разбираться в красках и кистях, освоившего множество приёмов, но при этом не знающего композиции, перспективы, анатомии и прочих основ. У него может быть много гениальных мыслей, но выразить их он не сможет, и всё, на что ему остаётся рассчитывать – это работа ассистентом или раскрашивание чужих картин. Изредка незнание основ формирует новые стили, как, например, в случае с Ван Гогом (к его чести нужно сказать, что он осознавал свои проблемы и брал уроки живописи у профессионалов), но чаще становится препятствием в творчестве. И если в искусстве это ещё можно оправдать тем, что автор так видит, то в промышленности неправильный алгоритм генерации случайных чисел, приведший к тому, что миллионы долларов честных налогоплательщиков промахнулись мимо цели, не оправдан ничем.
При этом нельзя забывать, что для большинства программистов математика является скорее инструментом, чем наукой, и преподавать её нужно именно так, особенно первые курсы, всякий раз объясняя студентам, зачем им это нужно.
Источники:
https://www.cyberforum.ru/programming-theory/thread2163057.html
https://zen.yandex.ru/media/id/5a2cd210a815f1e7d2fcb89c/5c50151d96aa1b00ad65703e
https://pikabu.ru/story/nuzhna_li_programmistu_matematika_2529407