зачем нужна математика в программировании

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

Авторизуйтесь

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

зачем нужна математика в программировании

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

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

Как изучать математику

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

В освоении математики есть два уровня понимания. Первый уровень — идейный. Это осознание того, для чего нужны определенные объекты, какая задача решается и где это используется. Второй уровень понимания — детальный; это подробное изучение подробностей решения задачи. Иногда нужно разобраться в задаче на детальном уровня понимания, но в большинстве случаев — достаточно идейного.

17 ноября, Онлайн, Беcплатно

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

Дискретная математика

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

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

Логика

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

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

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

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

Ресурсы:

Комбинаторика

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

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

Ресурсы:

Теория вероятностей

Иногда на собеседовании интервьюер, дабы проверить насколько крут кандидат, задает такую задачу: «Вот у нас есть отрезок, который начинается с числа А и заканчивается числом Б. Мы кидаем на него две точки случайным образом. Какая будет средняя длина наибольшего отрезка?» или же «Пусть у нас есть треугольник, на вершине которого сидит муха. Пусть она перелетает с вершины на вершину за 3 секунды и отдыхает на каждой вершине по секунде, каждый раз случайно выбирая себе путь. Через какое время она в среднем вернется в начальную точку?».

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

Теория вероятности делится на две части: дискретную и непрерывную. Хотя в теории дискретная — это подкласс непрерывной, методы решения задач несколько различаются. Опять же лучше начинать с простого — дискретная теория вероятности часто сводится к комбинаторным задачам. И теоретическая часть у дискретной формулируется проще.

Непрерывная теория вероятности для полного понимания требует знания элементарных основ мат. анализа, в частности понятия интеграла, хотя многие задачи требуют лишь умения считать площади простых фигур. Именно непрерывная теория вероятности является фундаментом для математической статистики и машинного обучения. Поэтому, если хотите работать в этой области, стоит начать с изучения книги Ричарда Хэнсена Probability Theory and Statistics или Probability Theory with Simulations.

Ресурсы:

Теория графов

Слышали ли вы задачу о мостах Кенигсберга?

«Можно ли пройти по всем семи мостам города Кенигсберга, не проходя по каждому из них дважды?». Нам известно, что ответ на эту задачу — нет. Решить подобные задачи помогает теория графов.

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

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

Ресурсы:

Теория чисел и криптография

Задумывались ли вы, почему к простым числам такой большой интерес? Почему работает шифрование RSA? Чем отличается http от https и что такое сертификат безопасности?

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

Дискретная оптимизация

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

Бывает, что в таких задачах нельзя найти точное решение за приемлемое время — его можно получить только полным перебором. Такова, например, задача Коммивояжера, или задача линейного программирования. Иногда можно отказаться от точного решения, и использовать некоторые приближения. Обо всем этом можно узнать в курсе Discrete Optimization на Coursera.

Источники

Небезызвестная серия курсов Introduction to Discrete Mathematics for Computer Science на Coursera по дискретной математике. Она довольно обширна и дает общее представление о всех нужных областях дискретной математики — логике, комбинаторике, теории вероятностей, теории графов, теории чисел и криптографии. Последний курс затрагивает проблему дискретной оптимизации.

Кроме того, для тех, кому не очень нравится формат курсов, будет полезной книга Discrete Mathematics. An Open Introduction. Книга довольно большая и подробная, поэтому можно сделать упор на основных понятиях и определениях.

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

Что дальше?

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

Источник

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

Авторизуйтесь

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

зачем нужна математика в программировании

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

зачем нужна математика в программировании

главный архитектор Virtuozzo

Зависит от того, что называть математикой. Умение складывать числа тоже математика, и такое знание крайне желательно. А, например, без понимания того, что именно доказал Перельман, вполне можно программировать. Любые попытки провести грань, до которой необходимо знать математику, чтобы стать программистом, заведомо обречены на провал. Одно можно сказать наверняка — умение оперировать абстрактными понятиями (одно из основных для математика) несомненно помогает и программистам в их работе.

зачем нужна математика в программировании

руководитель команды С/С++ разработки почты в Mail.Ru Group

Как и в любом деле, все зависит от решаемой задачи.

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

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

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

В любом случае, программист, впрочем, как и обычный человек, должен знать и любить математику!

зачем нужна математика в программировании

менеджер по работе с образовательными учреждениями в компании Embarcadero

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

зачем нужна математика в программировании

программист с широким опытом работы, энтузиаст и евангелист языка Haskell

Чем больше математики программист умеет применить, тем лучше.

Важна не сама математика, а умение её применять. Количество знаний математики увеличивает вероятность её применения.

зачем нужна математика в программировании

руководитель направления ИТ-менеджмента и мониторинга в компании VIAcode

Это очень интересный вопрос! Для начала, существуют определенные задачи, требующие от разработчиков высочайших знаний в области мат-анализа, дифференциальных уравнений, численных методов и т. д., но спектр этих задач довольно узок, а распространённость крайне низкая. Правда, такие специалисты очень высоко ценятся и могут рассчитывать на прекрасные условия труда. Для 80% разработчиков знания высшей математики никогда не пригодятся, еще 10%, возможно, придется вспомнить базовые вещи из теории вероятностей и некоторых других разделов математики — эти знания будут востребованы для решения задач по обработке данных. В то же время, учитывая взрывной рост направления Big Data, я вижу хороший потенциал для роста требований именно к знаниям в области математики.

зачем нужна математика в программировании

преподаватель GeekBrains, специализируется на администрировании Linux

Если математика будет являться предметной областью, то знать её потребуется настолько хорошо, насколько это нужно для решения задачи. Однако, вопрос видимо поставлен для общего случая, и связан с бытующим мнением. Программисту хорошо было бы разобраться с логикой и абстрактной алгеброй, которые не преподаются ни в школе, ни в большинстве вузов. Также не помешают матстат и дискретка. Матан по большей части бесполезен, также как и, скажем, тригонометрия. Вобщем, полезна та часть математики, что «ум в порядок приводит», а знание любых формул наизусть только забивает голову.

зачем нужна математика в программировании

основатель и генеральный директор BeastGaming

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

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

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

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

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

зачем нужна математика в программировании

руководитель отдела системной интеграции ecommerce-студии Simtech Development

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

зачем нужна математика в программировании

руководитель отдела программных разработок и поддержки компании «ГЭНДАЛЬФ»

Не думаю, что именно необходимо. Есть программисты, имеющие лишь самые базовые знания математики. Но знание (не на уровне зубрёжки, а с глубоким пониманием) дискретной математики и основ статистики — очень существенный плюс к возможностям профессионального роста. Очень сильно пересекаются с математикой и «продвинутые» методы разработки алгоритмов.

Ну а в некоторых областях без глубоких знаний математики вообще никак. В Data Mining и Machine Learning необходимы статистика, теория вероятностей, линейная алгебра; в криптографии — общая и линейная алгебра; в 3D-моделировании — геометрия и механика; в биоинформатике — дискретная математика, статистика.

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

зачем нужна математика в программировании

руководитель отдела разработки ПО компании ОС3

Стать программистом в формальном понимании этого слова можно и без глубоких познаний в математике. Однако, если вы хотите заниматься действительно сложными и интересными проектами, то математика в том или ином виде вам точно понадобится. Например, у нас был проект «Кубосвод» — комплекс, позволяющий показывать сферические проекции в прямоугольных объемах. Это такой планетарий, для которого не нужен специальный купол, можно всё устроить в обычном учебном классе: рассмотреть звёздное небо или показать панорамный фильм. Потребуется только проектор, сферическое зеркало и программа, производящая рассчёты. И наши программисты с задачей справились.

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

зачем нужна математика в программировании

веб-разработчик в Evil Martians

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

Математика в общем — это скорее язык, чем направление науки. В отличии от естественных языков, математика — абсолютно точный и формальный язык. Поскольку язык влияет на мышление, то раньше изучения языка математики было обязательным. Так можно было научиться точно и формально мыслить.

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

зачем нужна математика в программировании

руководитель отдела организации обучения фирмы «1С»

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

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

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

А вот в прикладном программировании математика почти не нужна.

зачем нужна математика в программировании

помощник ректора Университета Иннополис по научной и инновационной деятельности

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

зачем нужна математика в программировании

ведущий Java-разработчик ГК «Центр Финансовых Технологий», партнёра международной олимпиады «IT-Планета»

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

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

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

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

Поэтому, даже если именно математика и не пригодится, то все сопутствующие ей дисциплины просто необходимы. Так что… учим мат часть!

Источник

Математика для программиста: советы, разделы, литература

Наверняка вы задумывались над вопросом: нужна ли математика программисту? И если нужна, то как «приручить» эту самую математику?

зачем нужна математика в программировании

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

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

«Незнание математики грозит кашей в голове.»

— А. Савватеев, доктор физико-математических наук, эксперт отдела теоретических и прикладных разработок компании Яндекс, научный руководитель Лаборатории социального анализа при Университете Дмитрия Пожарского.

Статья разделена на несколько частей:

Советы

Математика для программиста: основные разделы

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

Школьная программа:

Вузовская математика:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *