Найти в Дзене
Айтишник поневоле

Нужна ли математика в программировании и какая именно?

Этот вопрос встает рано или поздно практически перед каждым человеком, который начинает изучать программирование. В интернете полно мнений: одни говорят, что без высшей математики программистом не стать, другие считают, что 90% программистов не знают как решаются простые интегралы. По этой причине многих охватывает сомнения в своих способностях и желании стать программистом. Вопрос актуален и не так однозначен, как кажется с первого взгляда. Ответ на самом деле банален: все зависит от направления, в котором вы хотите развиваться. Давайте разберемся. В первую очередь стоит определиться, в каких направлениях математика действительно нужна. И какие разделы математики используются в тех или иных сферах. В геймдевt по большей части важны абстрактные понятия математики, ну и самая малость физики. В нем пригодятся следующие разделы: Линейная алгебра (базовая и продвинутая) - рендеринг, анимация, камеры, работа со светом. Аналитическая и вычислительная геометрия - физика, столкновения, траект
Оглавление

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

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

Ответ на самом деле банален: все зависит от направления, в котором вы хотите развиваться. Давайте разберемся.

Где и какая математика действительно важна?

В первую очередь стоит определиться, в каких направлениях математика действительно нужна. И какие разделы математики используются в тех или иных сферах.

Разработка игр

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

Линейная алгебра (базовая и продвинутая) - рендеринг, анимация, камеры, работа со светом.

  • Векторы и матрицы (перемещение, вращение, масштабирование объектов)
  • Кватернионы
  • Проекции и преобразования
  • Операции над плоскостями и нормалями

Аналитическая и вычислительная геометрия - физика, столкновения, траектории.

  • Коллизии и пересечения (AABB, OBB, сферические коллизии)
  • Алгоритмы выпуклой оболочки (QuickHull, алгоритм Грэхема)
  • Расстояния между объектами

Тригонометрия - камера, повороты, спецэффекты.

  • Синусы, косинусы, тангенсы (вращение и наклон объектов)
  • Полярные координаты (орбиты, дуги, повороты)
  • Доплеровский эффект (реалистичный звук)

Физика и механика - игровые движки, симуляция физики, реализм.

  • Законы Ньютона
  • Импульс и сила
  • Гравитация
  • Жидкости и газ

Ну и немного теории вероятности для рандомизации событий и симуляции поведения.

-2

Искусственный интеллект и машинное обучение

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

Линейная алгебра (основа нейросетей и работы с данными)

  • Матрицы и векторы (представление данных, операции с признаками)
  • Матричное умножение (работа с весами в нейросетях)
  • Собственные значения и собственные векторы (PCA – метод главных компонент для уменьшения размерности)
  • Квадратичные формы (функции потерь, оптимизация)

Математический анализ (оптимизация моделей и градиенты)

  • Производные и градиенты
  • Частные производные и Якобианы (обучение многослойных нейросетей)
  • Интегралы (распределение вероятностей)
  • Функции активации (ReLU, сигмоида, tanh)

Теория вероятностей и статистика (основа предсказаний и вероятностных моделей)

  • Распределения вероятностей (Гауссово, Бернулли, Пуассона)
  • Байесовская статистика (наивный Байесовский классификатор)
  • Оценка параметров (метод максимального правдоподобия, MAP)
  • Корреляция и ковариация (взаимосвязь между переменными)

Оптимизация (улучшение моделей)

  • Градиентный спуск (SGD, Adam, RMSprop)
  • Методы линейного программирования (регуляризация моделей)
  • Функции потерь

Теория информации (обучение моделей и обработка сигналов)

  • Энтропия Шеннона (количество информации в данных)
  • Кросс-энтропия (метрика качества классификации)
  • Кодирование Хаффмана (сжатие данных)

Теория графов (работа с нейросетями и связями)

  • Обход графов (поиск кратчайшего пути – PageRank)
  • Свёрточные графовые нейросети
  • Алгоритмы кластеризации (k-means, DBSCAN)
-3

Криптография и безопасность

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

Структуры и алгоритмы данных

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

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

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

  • Логика
  • Теория множеств
  • Комбинаторика
  • Теория графов
  • Теория чисел

Алгебра

  • Линейная алгебра
  • Полиномиальная алгебра

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

  • Оценка сложности алгоритмов на основе вероятностей
  • Байесовские методы

Математический анализ

  • Оценка сложности алгоритмов через пределы и асимптотику (O-большое, Θ, Ω)
  • Производные и градиенты в оптимизационных алгоритмах

Геометрия

  • Вычислительная геометрия
  • Векторная математика
-4

В каких направлениях математика не нужна?

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

Вот эти направления:

  • Веб-разработка (Frontend & Backend)
  • Мобильная разработка
  • Разработка ПО
  • Тестирование
  • Администрирование серверов, DevOps
  • Системный администратор

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

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

-5

Вывод

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

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

А больше интересного в моем телеграм канале!