какой вид программирования требует математики? - PullRequest
25 голосов
/ 22 октября 2010

Это не "математика требуется для программирования?"вопрос.

Я всегда думал, что для программирования понадобится страшное количество сложной математики (я получил только промежуточную алгебру в колледже, потому что мне это плохо).

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

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

РЕДАКТИРОВАТЬ: Ничего себе, много ответов.Один из которых заставил меня задуматься над другим подобным вопросом ... скажем, в таких программах, как фотошоп, какая математика (или общая работа) используется для создания чего-то крутящего, обрезающего, редактирующего и окрашивающего такие вещи, как изображения?

Ответы [ 18 ]

36 голосов
/ 22 октября 2010

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

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

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

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

и так далее.Различные из них требуют различных уровней и аспектов математики.

9 голосов
/ 22 октября 2010

Игры и симуляции - очевидные ответы. Математика не сложная, но она явно есть.

Например, скажем, вы хотите построить какую-то игру с астероидами. Вам нужно будет выяснить положение вашего космического корабля. Это вектор. Теперь вы хотите, чтобы корабль перемещался в определенном направлении в определенном направлении в каждом кадре. Вам нужно будет добавить некоторый вид delta-x к x и delta-y к y, чтобы ваше движение было другим вектором:. В игре с астероидами вы ускоряетесь в направлении, которое вы указали, поэтому всякий раз, когда вы нажимаете клавишу «тяга», вам нужно будет вычислить дельту dx и dy или вектор ускорения

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

Но это еще не все. Если вы будете действовать сейчас, я добавлю триг. Обычно вы рассматриваете движение и ускорение как угол и расстояние (r и theta,), но язык программирования обычно нуждается в этих значениях в формате dx, dy. Вот где вы будете использовать триггеры: dx = r * cos (тета) и dy = r * sin (тета)

Но, допустим, вы хотите иметь планету с гравитационным притяжением? Вам нужно будет приблизить гравитацию таким образом, который дает вам поведение орбиты (эллиптические орбиты, запуск изменяет высоту другой стороны орбиты и т. Д.). Это проще всего сделать, если вы понимаете закон всемирного тяготения Ньютона: f = ((sqrt (m1 * m2)) / d ^ 2) * G. Это говорит вам, сколько «планетарной» силы добавляет к вашему кораблю каждый кадр. Умножьте это значение на нормализованный вектор, указывающий с космического корабля на планету. и добавьте это как новый вектор движения.

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

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

Вычеркните это, и вы создали сумму Римана, основную идею Интеграции (и фактически исчисления)

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

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

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

Сотни строк грязного кода были заменены простой формулой.

7 голосов
/ 22 октября 2010

Вот несколько общих мест:

  • Графика
  • Криптография
  • Статистика
  • Сжатие
  • Оптимизация

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

6 голосов
/ 22 октября 2010

Любой вид численного анализа, например, в геофизике или разведке нефти.

Однажды я создал инструмент для следователей, который требовал много тригонометрии.

В коммерческом программировании не столько математика, сколько арифметика.

6 голосов
/ 22 октября 2010

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

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

Есть довольно известное эссе Эдсгера В. Дейкстры, в котором он пытается ответить на ваш точный вопрос.Он называется: О взаимодействии математики и программирования .

4 голосов
/ 22 октября 2010

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

В Crypto также используются различные формы математики.

4 голосов
/ 22 октября 2010

Робототехника требует хардкорных матриц, а ИИ требует всех видов математики.

2 голосов
/ 22 октября 2010

Цифровая обработка сигналов и AI / моделирование / агенты и др.

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

2 голосов
/ 22 октября 2010

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

2 голосов
/ 22 октября 2010

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

(!something) && (!otherThing)
!(something || otherThing)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...