Каковы основные математические концепции, которые должен знать хороший разработчик?

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

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

Итак, каковы основные математические концепции, которые должен знать хороший инженер-программист? И каковы возможные книги/сайты, которые вы мне порекомендуете?

Ответ 2

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

if (condition-1) {
    if (condition-2) {
        action-1
    } else {
        action-2
} else {
    action-2
}

можно переписать как

if (condition-1 and condition-2) {
    action-1
} else {
    action-2
}

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

Как упоминалось в "Балтимарке", математическая индукция очень полезна в рассуждениях о циклах и рекурсии.

Теория множеств является основой реляционных баз данных и SQL.

По аналогии, позвольте мне отметить, что плотники обычно используют различные техники большого пальца при построении таких вещей, как крыши и лестницы. Однако знание геометрии позволяет решать проблемы, для которых у вас нет "законсервированного" эмпирического правила. Это, как научиться читать через фонетику против восприятия зрения базового словаря. 90 +% времени там нет большой разницы. Но когда вы сталкиваетесь с незнакомой ситуацией, ОЧЕНЬ приятно иметь инструменты для выработки решения самостоятельно.

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

Ответ 3

Я бы пошел с полями, которые Ландон сказал:

Дискретная математика, линейная алгебра, Комбинаторика, вероятность и Статистика, теория графов

и добавьте математическую логику.

Это позволит вам захватить большинство областей CS. Если вы хотите перейти в специальные поля, вам нужно совершить погружение в некоторые области, особенно:

Computer graphics -> Linear Algebra
Gaming -> Linear Algebra, Physics
Computer Linguistics -> Statistics, Graph Theory
AI -> Statistics, Stochastics, Logic, Graph Theory

Ответ 4

В порядке важности:

  • Подсчет (необходим для циклов)
  • Сложение, вычитание, умножение, деление.
  • Алгебра (требуется только для понимания использования переменных).
  • Булева алгебра, логическая логика и двоичная.
  • Экспоненты и логарифмы (т.е. понимают нотацию O (n)).

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

  • Линейная алгебра и тригонометрия (трехмерная визуализация)
  • Дискретная математика и теория множеств (дизайн базы данных, дизайн алгоритма, дизайн компилятора).
  • Статистика (ну, для статистических и/или научных/экономических приложений, возможно, также полезно для разработки алгоритмов).
  • Физика (для моделирования).

Понимание функций также полезно (не помните, что такое математический термин для этой области), но если вы знаете, как программировать, вы, вероятно, уже это сделали.

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

Ответ 5

"Доказательство по индукции" является основной математической концепцией для программистов.

Ответ 6

нотация Big O в общем алгоритме анализа и в отношении стандартных коллекций (сортировка, вставка и удаление извлечения)

Ответ 7

Для дискретной математики здесь является удивительным набором из 20 лекций из Университета Арсджигита. Каждый из них составляет около часа и двадцать минут.

Ответ 8

Начните с того, что мы, люди СС, называем "дискретной математикой". Исчисление и линейная алгебра могут оказаться весьма полезными, потому что они получают вашу ногу в дверь во многие области приложений. Как только вы освоите эти три, перейдите к теории вероятностей. Эти 4 получат доступ к компетенции в 95% (я сделал это) домены приложений.

Ответ 10

Я думаю, это зависит от вашего внимания. Несколько лет назад я купил набор Art of Computer Programming Дональда Кнута. Посмотрев на книги, я понял почти все исчисления. Если вы заинтересованы в разработке своих собственных универсальных алгоритмов и доказательств для них, я рекомендую понять эти книги с тех пор, с чем вы столкнулись в этом мире. С другой стороны, если вы хотите или нужно использовать различные процедуры сортировки/поиска/дерева/etc..., тогда большая нотация O как минимум, логическая математика и общая алгебра будут в порядке. Если вы имеете дело с 3D, тогда геометрия и триггер также.

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

Ответ 11

Я бы сказал логическую логику. И, ИЛИ, XOR, NOT. Я нашел в качестве программиста, что мы используем это чаще, чем остальные математические понятия.

Ответ 12

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

Ответ 13

Вот простой, который меня озадачивает, когда я вижу разработчиков, которые этого не понимают:
- Порядок действий

Ответ 14

Глава 1 "Искусство компьютерного программирования" призвана обеспечить именно это.

Ответ 15

Была книга, которая была рекомендована... название было чем-то вроде Concrete Mathematics. Это было рекомендовано в нескольких вопросах.

Ответ 16

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

Ответ 17

Проверить книгу Основы компьютерной науки
Эта книга создана: Al Aho и Jeff Ullman, а вся книга доступна в Интернете.

Это то, что авторы в своем предисловии говорят о цели этой книги:

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

Ответ 19

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

Ответ 20

Дискретная математика
Линейная алгебра
Комбинаторика
Вероятность и статистика
Теория графа

Ответ 21

  • Булева алгебра
  • Теория набора
  • Дискретная математика

Ответ 22

Хорошо, это зависит от цели. Как сказал кто-то, линейная алгебра, комбинаторика, вероятность и статистика и теория графов важны, если вы решаете сложные проблемы. Асимптотический рост функций (бит-О-нотация) очень важен. Вам также потребуется освоить суммы и серии, если вам нужно будет работать над анализом некоторых более сложных алгоритмов (см. Приложение к Cormen & others Intro to Algorithms).

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

Ответ 23

  • Булева алгебра
  • Теория набора

Ответ 24

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

Ответ 25

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

Ответ 26

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

Ответ 27

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

Я освещаю основы в своем блоге "" Вычислить свой навык", где я обсуждаю, как работает Xbox Live TrueSkill и алгоритм Matchmaking.