Подтвердить что ты не робот

Существенная математика для преуспевания в качестве программиста?

Я просто задавался вопросом о математике в качестве программиста. Я использую математику справедливо, в основном векторную математику и иногда тригонометрию, когда я занимаюсь программированием игр.

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

4b9b3361

Ответ 1

Я думаю, что это может быть более тонким, чем просто очевидные "Essential Maths". Я сделал довольно много графического кодирования - 2D и 3D, в основном не-игровые, довольно сильно фрактальные - и получил отлично по математике, которую меня преподавали в колледже, и самовоспитанию всего остального. Я (как и большинство кодеров, я думаю, что я довольно хорош с математикой) - так что обычная линейная алгебра, логика, базовое исчисление и т.д. - и я никогда не чувствовал себя особенно ограниченным тем, что знал или мог учить себя.

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

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

Ответ 2

Я думаю, что в основном это зависит от домена проекта.

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

Программирование - это просто средство достижения определенного конца, и сколько математики вам нужно знать, точно так же, как вам нужно понимать отрасль здравоохранения, если это ваш домен проекта.

Исторически, Computer-Science является отраслью прикладной математики, и я думаю, что существует такая сильная связь между математикой и программированием. Я думаю, что математический ум хорош, как программист, но я не уверен, что математическое знание - это must во всех полях.

Ответ 3

Отметьте Math for Programmers действительно хорошую статью.

Ответ 4

Прочтите книгу R.M.Rromey "Как ее решить с помощью компьютеров". Это поможет вам в решении проблем.

Ответ 5

Игровое программирование в стороне, базовая алгебра достаточно, чтобы получить вас в чем угодно.

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

Ответ 6

Основное сложение, вычитание, умножение и деление - это первые вещи, которые приходят на ум.

Понимание модульной арифметики, безусловно, полезно вместе со всеми связанными тождествами, особенно при работе с выражениями или ситуациями, которые могут возникнуть или быстро растут за пределами возможностей основных целых типов. Хорошим примером этого является взятие модуля чего-то поднятого до смехотворно большой мощности (например, 2 ^ 345% 6789).

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

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

Ответ 7

У меня было много математики во время моего исследования:

  • Базовая алгебра
  • Линейная алгебра (матрицы)
  • Математика дискретности
  • Вероятностная математика
  • Криптография
  • Теория кодирования
  • Математическая логика

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

Ответ 8

  • Линейная алгебра - вам нужно это для физики, учета, бизнес-логики.
  • Логика - знание того, как ассоциативные и дистрибутивные правила apply to booleans помог мне отлаживать код sooo много раз.
  • Исчисление Tuple - SQL (язык для взаимодействия с базами данных) основанный на исчислении кортежа; даже если вы только понимаете основы, вы до сих пор опережая всех остальных в "реальном мире", что все их базы данных код будет выглядеть упрощенным

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

Ответ 9

Важный, но только упоминаемый выше: теория графов.

Ответ 10

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

Ответ 11

По моему опыту, основная математика такова:

0.- Floating point arithmetic
1.- Linear Algebra
2.- Vector (possibly Tensor) Analysis
3.- Linear Algebra
4.- Linear Algebra
5.- Linear Algebra

Это также может быть полезно, если вы знаете линейную алгебру.

Ответ 12

Я удивлен, что никто не упоминал абстрактную алгебру. Понятия списков, конкатенации строк, функции (!), Цепочка функций и т.д. Имеют здесь свои корни.

Ответ 13

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

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

Ответ 14

Это действительно зависит от того, что вы делаете.

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

Теперь, если вы начнете делать графику, особенно 3D-графику, вам понадобится немного математики. К счастью, в Интернете есть отличные уроки. Вы абсолютно НЕ ДОЛЖНЫ получить высшее образование, а всего лишь несколько часов здесь и там, читая учебные пособия и кодируя некоторые эксперименты, изучая векторную математику и все, что для 3D-графики.

Ответ 15

Средний

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

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

Ферги