Существенная математика для преуспевания в качестве программиста?
Я просто задавался вопросом о математике в качестве программиста. Я использую математику справедливо, в основном векторную математику и иногда тригонометрию, когда я занимаюсь программированием игр.
Мой вопрос: считаете ли вы, что есть какая-то важная математика, которую вы, как программист, должны знать, чтобы быть успешным (и удивительным) программистом? В основном я обнаружил, что программирование - это просто логика, но могут быть времена, когда умная математика может (а не алгоритмы специально) использоваться для решения общих проблем.
Ответы
Ответ 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
Средний
Все, что связано с структурами данных, производительностью и оптимизацией, требует, чтобы математика получала действительно хорошие результаты. Другими словами, надежная математика поддерживает большинство основных программных библиотек.
В целом, хотя большинство из нас работают на более высоком уровне, когда нам просто нужно связать все эти предварительно построенные системы вместе, и для нас математика является необязательной, но не необходимой.
Ферги